Compare commits
11 Commits
Author | SHA256 | Date | |
---|---|---|---|
8740c2ced6
|
|||
405046ad39 | |||
e67b0f8eec | |||
7d21726f66 | |||
39cc93149f | |||
7a16bdc57d | |||
bbc60700ee | |||
1d9add8241
|
|||
124ad7108d
|
|||
b8985dff0b
|
|||
1083c47b5e
|
@@ -0,0 +1,51 @@
|
||||
From ec3a1efce07770b7641e07d41a73732967c65175 Mon Sep 17 00:00:00 2001
|
||||
From: Luna D Dragon <luna.dragon@suse.com>
|
||||
Date: Tue, 8 Jul 2025 14:58:03 +0530
|
||||
Subject: [PATCH 1/3] cockpit overview: support SUSE_SUPPORT_PRODUCT keys
|
||||
|
||||
SLE Micro 6.2(and Framework one components) have custom os-release keys namely in SUSE_SUPPORT_PRODUCT and
|
||||
SUSE_SUPPORT_PRODUCT_VERSION instead of the standard os prettyname which
|
||||
results in systemd not being able to determine the os name correctly.
|
||||
This patch should be dropped when systemd is fixed
|
||||
---
|
||||
pkg/systemd/overview.jsx | 10 ++++++++--
|
||||
1 file changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/pkg/systemd/overview.jsx b/pkg/systemd/overview.jsx
|
||||
index 868469d68..186fcf59e 100644
|
||||
--- a/pkg/systemd/overview.jsx
|
||||
+++ b/pkg/systemd/overview.jsx
|
||||
@@ -42,6 +42,7 @@ import { ShutdownModal } from 'cockpit-components-shutdown.jsx';
|
||||
import { WithDialogs, DialogsContext } from "dialogs.jsx";
|
||||
|
||||
import "./overview.scss";
|
||||
+import { read_os_release } from "os-release.js";
|
||||
|
||||
const _ = cockpit.gettext;
|
||||
|
||||
@@ -98,6 +99,7 @@ class OverviewPage extends React.Component {
|
||||
this.hostname_proxy.addEventListener("changed", data => {
|
||||
this.setState({ hostnameData: data.detail });
|
||||
});
|
||||
+ read_os_release().then(os_release => this.setState({ os_release }));
|
||||
}
|
||||
|
||||
render() {
|
||||
@@ -160,8 +162,12 @@ class OverviewPage extends React.Component {
|
||||
{this.hostname_text()}
|
||||
</h1>
|
||||
{this.state.hostnameData &&
|
||||
- this.state.hostnameData.OperatingSystemPrettyName &&
|
||||
- <div className="ct-overview-header-subheading" id="system_information_os_text">{cockpit.format(_("running $0"), this.state.hostnameData.OperatingSystemPrettyName)}</div>}
|
||||
+ this.state.hostnameData.OperatingSystemPrettyName && (
|
||||
+ <div className="ct-overview-header-subheading" id="system_information_os_text">
|
||||
+ {(this.state.os_release && this.state.os_release.SUSE_PRETTY_NAME)
|
||||
+ ? cockpit.format(_("running $0"), this.state.os_release.SUSE_PRETTY_NAME)
|
||||
+ : cockpit.format(_("running $0"), this.state.hostnameData.OperatingSystemPrettyName)}
|
||||
+ </div>)}
|
||||
</div>
|
||||
<div className='ct-overview-header-actions'>
|
||||
{ show_superuser && <SuperuserIndicator proxy={this.superuser} /> }
|
||||
--
|
||||
2.50.0
|
||||
|
37
0002-cockpit-kdump-support-SLE-micro-6.2.patch
Normal file
37
0002-cockpit-kdump-support-SLE-micro-6.2.patch
Normal file
@@ -0,0 +1,37 @@
|
||||
From 14b86b6d60b009c4294f06589a561e688ba49223 Mon Sep 17 00:00:00 2001
|
||||
From: Luna D Dragon <luna.dragon@suse.com>
|
||||
Date: Tue, 8 Jul 2025 14:58:25 +0530
|
||||
Subject: [PATCH 2/3] cockpit-kdump support SLE micro 6.2
|
||||
|
||||
SLE micro 6.2 no longer has MicroOS in the NAME. This updates it to
|
||||
check if the VARIANT_ID is transactional to use transactional-update
|
||||
over manually enabling kdump.
|
||||
---
|
||||
pkg/kdump/kdump-view.jsx | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/pkg/kdump/kdump-view.jsx b/pkg/kdump/kdump-view.jsx
|
||||
index eee4d16b1..7d8439f2b 100644
|
||||
--- a/pkg/kdump/kdump-view.jsx
|
||||
+++ b/pkg/kdump/kdump-view.jsx
|
||||
@@ -421,7 +421,7 @@ export class KdumpPage extends React.Component {
|
||||
kdumpctl reset-crashkernel`;
|
||||
}
|
||||
let shell;
|
||||
- if (this.state.os_release.NAME?.includes('MicroOS')) {
|
||||
+ if (this.state.os_release.NAME?.includes('MicroOS') || this.state.os_release.VARIANT_ID?.includes("transactional")) {
|
||||
enableCrashKernel = `
|
||||
# A reboot will be required if crashkernel was not set before
|
||||
transactional-update setup-kdump`;
|
||||
@@ -443,7 +443,7 @@ ${enableCrashKernel}
|
||||
|
||||
Dialogs.show(
|
||||
<ModificationsExportDialog
|
||||
- ansible={ this.state.os_release.NAME?.includes('MicroOS') ? null : exportAnsibleTask(this.props.kdumpStatus.config, this.state.os_release)}
|
||||
+ ansible={ (this.state.os_release.NAME?.includes('MicroOS') || this.state.os_release.VARIANT_ID?.includes("transactional")) ? null : exportAnsibleTask(this.props.kdumpStatus.config, this.state.os_release)}
|
||||
shell={shell}
|
||||
onClose={Dialogs.close}
|
||||
/>);
|
||||
--
|
||||
2.50.0
|
||||
|
136
0003-branding-use-SUSE_SUPPORT_PRODUCT-and-SUSE_SUPPORT_P.patch
Normal file
136
0003-branding-use-SUSE_SUPPORT_PRODUCT-and-SUSE_SUPPORT_P.patch
Normal file
@@ -0,0 +1,136 @@
|
||||
From cfc476e5127ee3f21b70124e77ded9627e9692b5 Mon Sep 17 00:00:00 2001
|
||||
From: Luna D Dragon <luna.dragon@suse.com>
|
||||
Date: Tue, 8 Jul 2025 15:09:09 +0530
|
||||
Subject: [PATCH 3/3] branding: use SUSE_SUPPORT_PRODUCT and
|
||||
SUSE_SUPPORT_PRODUCT_VERSION
|
||||
|
||||
---
|
||||
Makefile.am | 1 +
|
||||
src/branding/suse/Makefile.am | 11 +++++
|
||||
src/branding/suse/branding.css | 82 ++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 94 insertions(+)
|
||||
create mode 100644 src/branding/suse/Makefile.am
|
||||
create mode 100644 src/branding/suse/branding.css
|
||||
|
||||
diff --git a/Makefile.am b/Makefile.am
|
||||
index 83f1ee7a7..1198d191e 100644
|
||||
--- a/Makefile.am
|
||||
+++ b/Makefile.am
|
||||
@@ -167,6 +167,7 @@ include src/branding/debian/Makefile.am
|
||||
include src/branding/default/Makefile.am
|
||||
include src/branding/fedora/Makefile.am
|
||||
include src/branding/opensuse/Makefile.am
|
||||
+include src/branding/suse/Makefile.am
|
||||
include src/branding/rhel/Makefile.am
|
||||
include src/branding/ubuntu/Makefile.am
|
||||
include src/client/Makefile.am
|
||||
diff --git a/src/branding/suse/Makefile.am b/src/branding/suse/Makefile.am
|
||||
new file mode 100644
|
||||
index 000000000..4a1e7ab72
|
||||
--- /dev/null
|
||||
+++ b/src/branding/suse/Makefile.am
|
||||
@@ -0,0 +1,11 @@
|
||||
+slemicrobrandingdir = $(datadir)/cockpit/branding/suse
|
||||
+
|
||||
+dist_slemicrobranding_DATA = \
|
||||
+ src/branding/suse/branding.css \
|
||||
+ $(NULL)
|
||||
+
|
||||
+install-data-hook::
|
||||
+ ln -sf /usr/share/wallpapers/SLEdefault/contents/images/1920x1200.png $(DESTDIR)$(slemicrobrandingdir)/default-1920x1200.png
|
||||
+ ln -sf /usr/share/pixmaps/distribution-logos/square-hicolor.svg $(DESTDIR)$(slemicrobrandingdir)/square-hicolor.svg
|
||||
+ ln -sf /usr/share/pixmaps/distribution-logos/favicon.ico $(DESTDIR)$(slemicrobrandingdir)/favicon.ico
|
||||
+ ln -sf /usr/share/pixmaps/distribution-logos/apple-touch-icon.png $(DESTDIR)$(slemicrobrandingdir)/apple-touch-icon.png
|
||||
\ No newline at end of file
|
||||
diff --git a/src/branding/suse/branding.css b/src/branding/suse/branding.css
|
||||
new file mode 100644
|
||||
index 000000000..c1617abc2
|
||||
--- /dev/null
|
||||
+++ b/src/branding/suse/branding.css
|
||||
@@ -0,0 +1,82 @@
|
||||
+/* Extra overrides */
|
||||
+:root {
|
||||
+ --eos-bc-green-500: #30ba78;
|
||||
+ --eos-bc-pine-500: #0c322c;
|
||||
+ --eos-bc-gray-50: #F2F2F2;
|
||||
+ --eos-bc-white: #ffffff;
|
||||
+ --eos-bc-text: #333;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+#brand:before {
|
||||
+ content: "${SUSE_PRETTY_NAME}";
|
||||
+}
|
||||
+
|
||||
+#option-group svg polygon {
|
||||
+ fill: var(--eos-bc-text);
|
||||
+}
|
||||
+
|
||||
+/* Nav & sidebar overwrites */
|
||||
+.navbar-pf {
|
||||
+ background: var(--eos-bc-pine-500);
|
||||
+}
|
||||
+
|
||||
+.navbar-pf-vertical {
|
||||
+ border-top: none;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/* Default overrides */
|
||||
+
|
||||
+.login-note {
|
||||
+ color: transparent;
|
||||
+ position: relative;
|
||||
+}
|
||||
+
|
||||
+body.login-pf {
|
||||
+ background-color: var(--eos-bc-pine-500);
|
||||
+}
|
||||
+
|
||||
+/* Only use background image on desktops */
|
||||
+@media(min-width: 1024px) {
|
||||
+ body.login-pf {
|
||||
+ background-image: url("default-1920x1200.png") !important;
|
||||
+ background-repeat: no-repeat;
|
||||
+ background-position: 100% 0 !important;
|
||||
+ background-size: cover;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+/* Hide badge on desktops (already included in background) */
|
||||
+@media(max-width: 1023px) {
|
||||
+ #badge {
|
||||
+ width: 51px;
|
||||
+ height: 45px;
|
||||
+ background-image: url("square-hicolor.svg");
|
||||
+ background-repeat: no-repeat;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+#brand {
|
||||
+ width: auto;
|
||||
+ height: auto;
|
||||
+ background-image: none;
|
||||
+ background-repeat: no-repeat;
|
||||
+ font-size: 2em;
|
||||
+ white-space: nowrap;
|
||||
+}
|
||||
+
|
||||
+/* Switch to small font faster to not clip long name */
|
||||
+@media(max-width: 560px) {
|
||||
+ #brand {
|
||||
+ font-size: inherit;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+#index-brand {
|
||||
+ font-weight: bold;
|
||||
+}
|
||||
+
|
||||
+#index-brand:before {
|
||||
+ content: "${PRETTY_NAME}";
|
||||
+}
|
||||
\ No newline at end of file
|
||||
--
|
||||
2.50.0
|
||||
|
116
0009-packagekit-reboot-notification.patch
Normal file
116
0009-packagekit-reboot-notification.patch
Normal file
@@ -0,0 +1,116 @@
|
||||
diff --git a/pkg/packagekit/updates.jsx b/pkg/packagekit/updates.jsx
|
||||
index ce4b3c4cc6d1..b423ee4c09bd 100644
|
||||
--- a/pkg/packagekit/updates.jsx
|
||||
+++ b/pkg/packagekit/updates.jsx
|
||||
@@ -21,6 +21,7 @@ import 'polyfills'; // once per application
|
||||
import 'cockpit-dark-theme'; // once per page
|
||||
|
||||
import cockpit from "cockpit";
|
||||
+import { fsinfo } from 'cockpit/fsinfo';
|
||||
import React from "react";
|
||||
import { createRoot } from 'react-dom/client';
|
||||
|
||||
@@ -1079,12 +1080,19 @@ class OsUpdates extends React.Component {
|
||||
debug("tracer parsed restartPackages:", JSON.stringify(restartPackages));
|
||||
this.setState({ checkRestartAvailable: true, checkRestartRunning: false, restartPackages });
|
||||
})
|
||||
- .catch((exception, data) => {
|
||||
+ .catch(async (exception, data) => {
|
||||
// tracer not installed or supported (like on Arch)? then fall back to dnf needs-restarting
|
||||
if (exception.message?.includes("ModuleNotFoundError") ||
|
||||
exception.message?.includes("UnsupportedDistribution")) {
|
||||
- debug('tracer not installed:', JSON.stringify(exception), "trying dnf needs-restarting");
|
||||
- return this.checkDnfNeedsRestarting();
|
||||
+ try {
|
||||
+ // if there's a history for zypper, we can assume the system uses it
|
||||
+ await fsinfo("/var/log/zypp/history", [], { superuser: "require" });
|
||||
+ debug('tracer not installed:', JSON.stringify(exception), "trying zypper ps");
|
||||
+ return this.checkZypperNeedsRestarting();
|
||||
+ } catch {
|
||||
+ debug('tracer not installed:', JSON.stringify(exception), "trying dnf needs-restarting");
|
||||
+ return this.checkDnfNeedsRestarting();
|
||||
+ }
|
||||
}
|
||||
|
||||
// log the error except for some common cases: polkit does not allow it
|
||||
@@ -1106,6 +1114,80 @@ class OsUpdates extends React.Component {
|
||||
});
|
||||
}
|
||||
|
||||
+ checkZypperNeedsRestarting() {
|
||||
+ const restartPackages = { reboot: [], daemons: [], manual: [] };
|
||||
+ return cockpit.spawn(["zypper", "ps", "-ss", "--print", "%s"], { err: "message", superuser: "require" })
|
||||
+ .then((serviceOut) => {
|
||||
+ debug("zypper ps -ss succeeded:", serviceOut);
|
||||
+
|
||||
+ // set all the services to be manually restarted since it's
|
||||
+ // not always clear if it's safe to restart them via cockpit
|
||||
+ const data = serviceOut.trim();
|
||||
+ if (data.length !== 0) {
|
||||
+ serviceOut.trim()
|
||||
+ .split("\n")
|
||||
+ .forEach(line => restartPackages.manual.push(line));
|
||||
+ }
|
||||
+
|
||||
+ // Check if any kernels are updated since system boot,
|
||||
+ // ignoring kernel-firmware updates as they can make things noisy
|
||||
+ //
|
||||
+ // /var/log/zypper.log can be quite big so it's better to
|
||||
+ // handle the processing on machine instead of fetching the data
|
||||
+ const kScript = `
|
||||
+ stat -c %z /proc/ | \\
|
||||
+ cut -d. -f 1 | \\
|
||||
+ xargs -i \\
|
||||
+ awk -F'|' -v boot="{}" \\
|
||||
+ '/install\\|kernel/{if (boot <= $1 && index($0, "firmware") == 0) {print $3"-"$4"."$5}}' \\
|
||||
+ /var/log/zypp/history
|
||||
+ `;
|
||||
+
|
||||
+ cockpit.script(kScript, undefined, { err: "message", superuser: "require" })
|
||||
+ .then(kernels => {
|
||||
+ debug("zypper kernel scripts succeeded:", kernels);
|
||||
+
|
||||
+ if (kernels.trim().length == 0) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ kernels.trim()
|
||||
+ .split("\n")
|
||||
+ .forEach(line => { restartPackages.reboot.push(line.trim()) });
|
||||
+ })
|
||||
+ .catch(ex => {
|
||||
+ if (ex.problem !== "not-found" &&
|
||||
+ // polkit does not allow it
|
||||
+ ex.problem !== "access-denied" &&
|
||||
+ // or unprivileged session
|
||||
+ ex.problem !== "authentication-failed" &&
|
||||
+ // or the session goes away while checking
|
||||
+ ex.problem !== "terminated")
|
||||
+ console.error("zypper kernel fetching failed:", ex.toString());
|
||||
+ })
|
||||
+ .then(() => {
|
||||
+ let checkRestartAvailable = false;
|
||||
+ if (restartPackages.reboot.length !== 0 || restartPackages.manual.length !== 0)
|
||||
+ checkRestartAvailable = true;
|
||||
+
|
||||
+ this.setState({ checkRestartAvailable, checkRestartRunning: false, restartPackages });
|
||||
+ });
|
||||
+ }).catch((ex) => {
|
||||
+ // log the error except for some common cases: no zypper
|
||||
+ if (ex.problem !== "not-found" &&
|
||||
+ // polkit does not allow it
|
||||
+ ex.problem !== "access-denied" &&
|
||||
+ // or unprivileged session
|
||||
+ ex.problem !== "authentication-failed" &&
|
||||
+ // or the session goes away while checking
|
||||
+ ex.problem !== "terminated")
|
||||
+ console.error("zypper ps -ss failed:", ex);
|
||||
+
|
||||
+ // act like it's not available (demand reboot after every update)
|
||||
+ this.setState({ checkRestartAvailable: false, checkRestartRunning: false, restartPackages });
|
||||
+ });
|
||||
+ }
|
||||
+
|
||||
checkDnfNeedsRestarting() {
|
||||
const restartPackages = { reboot: [], daemons: [], manual: [] };
|
||||
|
@@ -23,7 +23,7 @@ if [ $? -eq 0 ]; then
|
||||
fi
|
||||
|
||||
if [ -f /etc/nsswitch.conf ]; then
|
||||
grep -Exq "passwd:.*?compat systemd" /etc/nsswitch.conf
|
||||
grep -Eq "passwd:.*systemd" /etc/nsswitch.conf
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "/etc/nsswitch.conf is out of date, please update it from /usr/etc/nsswitch.conf to use cockpit"
|
||||
failed=true
|
||||
|
BIN
cockpit-338.tar.gz
(Stored with Git LFS)
BIN
cockpit-338.tar.gz
(Stored with Git LFS)
Binary file not shown.
BIN
cockpit-340.tar.gz
(Stored with Git LFS)
Normal file
BIN
cockpit-340.tar.gz
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
cockpit-suse-theme.tar
(Stored with Git LFS)
BIN
cockpit-suse-theme.tar
(Stored with Git LFS)
Binary file not shown.
@@ -1,3 +1,47 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Jul 15 07:00:10 UTC 2025 - Luna D Dragon <luna.dragon@suse.com>
|
||||
|
||||
- add 0001-cockpit-overview-support-SUSE_SUPPORT_PRODUCT-keys.patch
|
||||
- add 0002-cockpit-kdump-support-SLE-micro-6.2.patch
|
||||
- add 0003-branding-use-SUSE_SUPPORT_PRODUCT-and-SUSE_SUPPORT_P.patch to fix bsc#1241003
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Jul 14 08:04:06 UTC 2025 - Luna D Dragon <luna.dragon@suse.com>
|
||||
|
||||
- update check_cockpit_users to only check for systemd support in /etc/nsswitch.conf bsc#1246408
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Jul 11 07:13:59 UTC 2025 - Alice Brooks <alice.brooks@suse.com>
|
||||
|
||||
- add a requirement on /usr/sbin/kdumptool for cockpit-kdump (bsc#1227402)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Jul 11 06:50:17 UTC 2025 - Alice Brooks <alice.brooks@suse.com>
|
||||
|
||||
- add libzypp-plugin-appdata dependency to cockpit-packagekit as
|
||||
this will generate the swcatalog which it depends on for calculating
|
||||
various cockpit packages
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Jul 10 10:10:21 UTC 2025 - Miika Alikirri <miika.alikirri@suse.com>
|
||||
|
||||
- Show reboot nofication after updates in packagekit
|
||||
* Add 0009-packagekit-reboot-notification.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Jun 19 08:30:49 UTC 2025 - Alice Brooks <alice.brooks@suse.com>
|
||||
|
||||
- Add kdump-nfs-fixes.patch to fix bsc#1241949
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Jun 16 06:29:04 UTC 2025 - Alice Brooks <alice.brooks@suse.com>
|
||||
|
||||
- Update to 340
|
||||
* Detect multiple mount points when creating btrfs subvolumes
|
||||
* Disk Self-Test error warnings on the overview page
|
||||
* Prevent modifying partitions in unsupported places
|
||||
* Bug fixes and translation updates
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri May 23 07:46:41 UTC 2025 - Alice Brooks <alice.brooks@suse.com>
|
||||
|
||||
|
22
cockpit.spec
22
cockpit.spec
@@ -50,7 +50,7 @@ Summary: Web Console for Linux servers
|
||||
License: LGPL-2.1-or-later
|
||||
URL: https://cockpit-project.org/
|
||||
|
||||
Version: 338
|
||||
Version: 340
|
||||
Release: 0
|
||||
Source0: cockpit-%{version}.tar.gz
|
||||
Source1: cockpit.pam
|
||||
@@ -68,6 +68,7 @@ Patch2: suse_docs.patch
|
||||
Patch3: suse-microos-branding.patch
|
||||
Patch4: css-overrides.patch
|
||||
Patch5: storage-btrfs.patch
|
||||
Patch6: kdump-nfs-fixes.patch
|
||||
# SLE Micro specific patches
|
||||
Patch101: hide-pcp.patch
|
||||
Patch102: 0002-selinux-temporary-remove-setroubleshoot-section.patch
|
||||
@@ -80,6 +81,10 @@ Patch105: fix-libexecdir.patch
|
||||
Patch106: packagekit-single-install.patch
|
||||
Patch109: 0008-pybridge-endian-flag.patch
|
||||
Patch110: add_preexec_cockpit.patch
|
||||
Patch111: 0001-cockpit-overview-support-SUSE_SUPPORT_PRODUCT-keys.patch
|
||||
Patch112: 0002-cockpit-kdump-support-SLE-micro-6.2.patch
|
||||
Patch113: 0003-branding-use-SUSE_SUPPORT_PRODUCT-and-SUSE_SUPPORT_P.patch
|
||||
Patch114: 0009-packagekit-reboot-notification.patch
|
||||
Patch201: remove_rh_links.patch
|
||||
|
||||
%define build_all 1
|
||||
@@ -212,12 +217,20 @@ BuildRequires: python3-pytest-timeout
|
||||
%setup -q -n cockpit-%{version} -a 3
|
||||
%patch -P 1 -p1
|
||||
%patch -P 2 -p1
|
||||
|
||||
%if 0%{?is_opensuse} || 0%{?suse_version} < 1600
|
||||
%patch -P 3 -p1
|
||||
%else
|
||||
%patch -P 113 -p1
|
||||
%endif
|
||||
|
||||
%patch -P 4 -p1
|
||||
%patch -P 5 -p1
|
||||
%patch -P 6 -p1
|
||||
|
||||
%patch -P 106 -p1
|
||||
%patch -P 109 -p1
|
||||
%patch -P 114 -p1
|
||||
|
||||
# SLE Micro specific patches
|
||||
%if 0%{?is_smo}
|
||||
@@ -240,6 +253,10 @@ BuildRequires: python3-pytest-timeout
|
||||
|
||||
%if 0%{?suse_version} >= 1600
|
||||
%patch -P 110 -p1
|
||||
%if !0%{?is_opensuse}
|
||||
%patch -P 111 -p1
|
||||
%patch -P 112 -p1
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%patch -P 201 -p1
|
||||
@@ -777,7 +794,7 @@ SELinux policy module for the cockpit-ws package.
|
||||
Summary: Cockpit user interface for kernel crash dumping
|
||||
Requires: cockpit-bridge >= %{required_base}
|
||||
Requires: cockpit-shell >= %{required_base}
|
||||
Requires: kexec-tools
|
||||
Requires: /usr/sbin/kdumptool
|
||||
BuildArch: noarch
|
||||
|
||||
%description kdump
|
||||
@@ -896,6 +913,7 @@ Summary: Cockpit user interface for packages
|
||||
BuildArch: noarch
|
||||
Requires: cockpit-bridge >= %{required_base}
|
||||
Requires: PackageKit
|
||||
Requires: libzypp-plugin-appdata
|
||||
Recommends: python3-tracer
|
||||
# HACK: https://bugzilla.redhat.com/show_bug.cgi?id=1800468
|
||||
Requires: polkit
|
||||
|
153
kdump-nfs-fixes.patch
Normal file
153
kdump-nfs-fixes.patch
Normal file
@@ -0,0 +1,153 @@
|
||||
From d1ffed4a006bc9f8aeb0e8f63e8d2a160720b4f6 Mon Sep 17 00:00:00 2001
|
||||
From: Alice Brooks <alice.brooks@suse.com>
|
||||
Date: Thu, 12 Jun 2025 08:48:16 +0100
|
||||
Subject: [PATCH] kdump: Remove nfs directory when using sysconfig
|
||||
configuration style
|
||||
|
||||
This is because the sysconfig style only has the KDUMP_SAVEDIR field
|
||||
so we can't work with two path fields as it's impossible to extract
|
||||
them again
|
||||
---
|
||||
pkg/kdump/kdump-client.js | 4 ++++
|
||||
pkg/kdump/kdump-view.jsx | 24 +++++++++++++++---------
|
||||
pkg/kdump/kdump.js | 6 ++++++
|
||||
4 files changed, 26 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/pkg/kdump/kdump-client.js b/pkg/kdump/kdump-client.js
|
||||
index d4c3d989a42d..35add2554a39 100644
|
||||
--- a/pkg/kdump/kdump-client.js
|
||||
+++ b/pkg/kdump/kdump-client.js
|
||||
@@ -48,6 +48,7 @@ export class KdumpClient {
|
||||
state: undefined,
|
||||
config: undefined,
|
||||
target: undefined,
|
||||
+ sysconfig: undefined,
|
||||
};
|
||||
cockpit.event_target(this);
|
||||
|
||||
@@ -62,6 +63,7 @@ export class KdumpClient {
|
||||
|
||||
// watch the config file
|
||||
this.configClient = new ConfigFile("/etc/kdump.conf", true);
|
||||
+ this.state.sysconfig = false;
|
||||
this._watchConfigChanges();
|
||||
|
||||
this.configClient.wait().then(() => {
|
||||
@@ -69,6 +71,8 @@ export class KdumpClient {
|
||||
if (this.configClient.settings === null) {
|
||||
this.configClient.close();
|
||||
this.configClient = new ConfigFileSUSE("/etc/sysconfig/kdump", true);
|
||||
+ this.state.sysconfig = true;
|
||||
+ this.dispatchEvent("kdumpSysconfigChanged", true);
|
||||
this._watchConfigChanges();
|
||||
}
|
||||
});
|
||||
diff --git a/pkg/kdump/kdump-view.jsx b/pkg/kdump/kdump-view.jsx
|
||||
index c6cc1e0d6bc6..8b5d74707e39 100644
|
||||
--- a/pkg/kdump/kdump-view.jsx
|
||||
+++ b/pkg/kdump/kdump-view.jsx
|
||||
@@ -115,12 +115,15 @@ const exportAnsibleTask = (settings, os_release) => {
|
||||
return ansible;
|
||||
};
|
||||
|
||||
-function getLocation(target) {
|
||||
+function getLocation(target, sysconfig) {
|
||||
let path = target.path || DEFAULT_KDUMP_PATH;
|
||||
|
||||
if (target.type === "ssh") {
|
||||
path = `${target.server}:${path}`;
|
||||
} else if (target.type == "nfs") {
|
||||
+ if (sysconfig) {
|
||||
+ path = '';
|
||||
+ }
|
||||
path = path[0] !== '/' ? '/' + path : path;
|
||||
path = `${target.server}:${target.export + path}`;
|
||||
}
|
||||
@@ -128,7 +131,7 @@ function getLocation(target) {
|
||||
return path;
|
||||
}
|
||||
|
||||
-const KdumpSettingsModal = ({ settings, initialTarget, handleSave }) => {
|
||||
+const KdumpSettingsModal = ({ settings, initialTarget, handleSave, sysconfig }) => {
|
||||
const Dialogs = useDialogs();
|
||||
const compressionAllowed = settings.compression?.allowed;
|
||||
const [isSaving, setIsSaving] = useState(false);
|
||||
@@ -276,13 +279,15 @@ const KdumpSettingsModal = ({ settings, initialTarget, handleSave }) => {
|
||||
placeholder="/export/cores" value={exportPath}
|
||||
onChange={(_event, value) => setExportPath(value)} isRequired />
|
||||
</FormGroup>
|
||||
+ {sysconfig === false &&
|
||||
<FormGroup fieldId="kdump-settings-nfs-directory" label={_("Directory")} isRequired>
|
||||
<TextInput id="kdump-settings-nfs-directory" key="directory"
|
||||
- placeholder={DEFAULT_KDUMP_PATH} value={directory}
|
||||
- data-stored={directory}
|
||||
- onChange={(_event, value) => setDirectory(value)}
|
||||
- isRequired />
|
||||
+ placeholder={DEFAULT_KDUMP_PATH} value={directory}
|
||||
+ data-stored={directory}
|
||||
+ onChange={(_event, value) => setDirectory(value)}
|
||||
+ isRequired />
|
||||
</FormGroup>
|
||||
+ }
|
||||
</>
|
||||
}
|
||||
|
||||
@@ -353,7 +358,7 @@ export class KdumpPage extends React.Component {
|
||||
const target = this.props.kdumpStatus.target;
|
||||
let verifyMessage;
|
||||
if (!target.multipleTargets) {
|
||||
- const path = getLocation(target);
|
||||
+ const path = getLocation(target, this.props.sysconfig);
|
||||
if (target.type === "local") {
|
||||
verifyMessage = fmt_to_fragments(
|
||||
' ' + _("Results of the crash will be stored in $0 as $1, if kdump is properly configured."),
|
||||
@@ -403,7 +408,8 @@ export class KdumpPage extends React.Component {
|
||||
const Dialogs = this.context;
|
||||
Dialogs.show(<KdumpSettingsModal settings={this.props.kdumpStatus.config}
|
||||
initialTarget={this.props.kdumpStatus.target}
|
||||
- handleSave={this.props.onSaveSettings} />);
|
||||
+ handleSave={this.props.onSaveSettings}
|
||||
+ sysconfig={this.props.sysconfig} />);
|
||||
}
|
||||
|
||||
handleAutomationClick() {
|
||||
@@ -459,7 +465,7 @@ ${enableCrashKernel}
|
||||
if (target.multipleTargets) {
|
||||
kdumpLocation = _("invalid: multiple targets defined");
|
||||
} else {
|
||||
- const locationPath = getLocation(target);
|
||||
+ const locationPath = getLocation(target, this.props.sysconfig);
|
||||
if (target.type == "local") {
|
||||
kdumpLocation = cockpit.format(_("Local, $0"), locationPath);
|
||||
targetCanChange = true;
|
||||
diff --git a/pkg/kdump/kdump.js b/pkg/kdump/kdump.js
|
||||
index 1a143defef15..b0f75e88c220 100644
|
||||
--- a/pkg/kdump/kdump.js
|
||||
+++ b/pkg/kdump/kdump.js
|
||||
@@ -41,6 +41,7 @@ const initStore = function(rootElement) {
|
||||
dataStore.domRootElement = rootElement;
|
||||
|
||||
dataStore.kdumpClient = new kdumpClient.KdumpClient();
|
||||
+ dataStore.sysconfig = dataStore.kdumpClient.state.sysconfig;
|
||||
|
||||
dataStore.saveSettings = settings =>
|
||||
dataStore.kdumpClient.validateSettings(settings)
|
||||
@@ -74,6 +75,7 @@ const initStore = function(rootElement) {
|
||||
reservedMemory: dataStore.kdumpMemory,
|
||||
kdumpStatus: dataStore.kdumpStatus,
|
||||
kdumpCmdlineEnabled: dataStore.crashkernel || false,
|
||||
+ sysconfig: dataStore.sysconfig,
|
||||
onSaveSettings: dataStore.saveSettings,
|
||||
onCrashKernel: dataStore.kdumpClient.crashKernel,
|
||||
exportConfig: dataStore.exportConfig,
|
||||
@@ -117,6 +119,10 @@ const initStore = function(rootElement) {
|
||||
dataStore.kdumpStatus = status;
|
||||
render();
|
||||
});
|
||||
+ dataStore.kdumpClient.addEventListener('kdumpSysconfigChanged', function(event, sysconfig) {
|
||||
+ dataStore.sysconfig = sysconfig;
|
||||
+ render();
|
||||
+ });
|
||||
|
||||
// render once
|
||||
render();
|
BIN
node_modules.obscpio
(Stored with Git LFS)
BIN
node_modules.obscpio
(Stored with Git LFS)
Binary file not shown.
File diff suppressed because it is too large
Load Diff
1627
package-lock.json
generated
1627
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,8 +1,8 @@
|
||||
diff --git a/pkg/networkmanager/bond.jsx b/pkg/networkmanager/bond.jsx
|
||||
index 80956bd7b..de8e667aa 100644
|
||||
index b54b1db..062cd1d 100644
|
||||
--- a/pkg/networkmanager/bond.jsx
|
||||
+++ b/pkg/networkmanager/bond.jsx
|
||||
@@ -142,16 +142,6 @@ export const BondDialog = ({ connection, dev, settings }) => {
|
||||
@@ -151,16 +151,6 @@ export const BondDialog = ({ connection, dev, settings }) => {
|
||||
{_("A network bond combines multiple network interfaces into one logical interface with higher throughput or redundancy.")}
|
||||
</div>
|
||||
}
|
||||
@@ -20,10 +20,10 @@ index 80956bd7b..de8e667aa 100644
|
||||
<Button id="bond-help-popup-button" variant="plain" aria-label="Help">
|
||||
<HelpIcon />
|
||||
diff --git a/pkg/systemd/hwinfo.jsx b/pkg/systemd/hwinfo.jsx
|
||||
index 30196f0dc..d53948374 100644
|
||||
index d2d2d9b..af0bedc 100644
|
||||
--- a/pkg/systemd/hwinfo.jsx
|
||||
+++ b/pkg/systemd/hwinfo.jsx
|
||||
@@ -201,11 +201,6 @@ const CPUSecurityMitigationsDialog = () => {
|
||||
@@ -205,11 +205,6 @@ const CPUSecurityMitigationsDialog = () => {
|
||||
<DataListCell key="primary content">
|
||||
<span>
|
||||
<div className='nosmt-heading'>{ _("Disable simultaneous multithreading") } (nosmt)</div>
|
||||
@@ -36,19 +36,19 @@ index 30196f0dc..d53948374 100644
|
||||
</DataListCell>,
|
||||
]}
|
||||
diff --git a/pkg/systemd/overview-cards/cryptoPolicies.jsx b/pkg/systemd/overview-cards/cryptoPolicies.jsx
|
||||
index dc8b996ec..2f6fc8ac4 100644
|
||||
index fa57de9..d4dd3be 100644
|
||||
--- a/pkg/systemd/overview-cards/cryptoPolicies.jsx
|
||||
+++ b/pkg/systemd/overview-cards/cryptoPolicies.jsx
|
||||
@@ -115,7 +115,7 @@ const CryptoPolicyDialog = ({
|
||||
@@ -143,7 +143,7 @@ const CryptoPolicyDialog = ({
|
||||
variant='link'
|
||||
isInline
|
||||
icon={<ExternalLinkSquareAltIcon />} iconPosition="right"
|
||||
- href="https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/security_hardening/switching-rhel-to-fips-mode_security-hardening">
|
||||
- href="https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/security_hardening/using-the-system-wide-cryptographic-policies_security-hardening">
|
||||
+ href="https://documentation.suse.com/sle-micro/6.0/html/Micro-selinux/selinux-article.html">
|
||||
{_("Learn more")}
|
||||
</Button>
|
||||
</Flex>),
|
||||
@@ -154,16 +154,6 @@ const CryptoPolicyDialog = ({
|
||||
@@ -184,16 +184,6 @@ const CryptoPolicyDialog = ({
|
||||
{_("Cryptographic Policies is a system component that configures the core cryptographic subsystems, covering the TLS, IPSec, SSH, DNSSec, and Kerberos protocols.")}
|
||||
</div>
|
||||
}
|
||||
@@ -66,10 +66,10 @@ index dc8b996ec..2f6fc8ac4 100644
|
||||
<Button variant="plain" aria-label={_("Help")}>
|
||||
<HelpIcon />
|
||||
diff --git a/pkg/systemd/overview-cards/tuned-dialog.jsx b/pkg/systemd/overview-cards/tuned-dialog.jsx
|
||||
index 258f42640..3ec591cb7 100644
|
||||
index 38420ca..cd7e2a3 100644
|
||||
--- a/pkg/systemd/overview-cards/tuned-dialog.jsx
|
||||
+++ b/pkg/systemd/overview-cards/tuned-dialog.jsx
|
||||
@@ -275,36 +275,10 @@ const TunedDialog = ({
|
||||
@@ -278,36 +278,10 @@ const TunedDialog = ({
|
||||
};
|
||||
}, [tunedService]);
|
||||
|
||||
|
Reference in New Issue
Block a user