Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package cockpit for openSUSE:Factory checked in at 2025-07-20 15:28:43 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/cockpit (Old) and /work/SRC/openSUSE:Factory/.cockpit.new.8875 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cockpit" Sun Jul 20 15:28:43 2025 rev:62 rq:1294141 version:340 Changes: -------- --- /work/SRC/openSUSE:Factory/cockpit/cockpit.changes 2025-06-26 14:06:20.852435132 +0200 +++ /work/SRC/openSUSE:Factory/.cockpit.new.8875/cockpit.changes 2025-07-20 15:29:26.176973842 +0200 @@ -1,0 +2,30 @@ +Tue Jul 15 07:00:10 UTC 2025 - Luna D Dragon <luna.dra...@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.dra...@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.bro...@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.bro...@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.aliki...@suse.com> + +- Show reboot nofication after updates in packagekit + * Add 0009-packagekit-reboot-notification.patch + +------------------------------------------------------------------- New: ---- 0001-cockpit-overview-support-SUSE_SUPPORT_PRODUCT-keys.patch 0002-cockpit-kdump-support-SLE-micro-6.2.patch 0003-branding-use-SUSE_SUPPORT_PRODUCT-and-SUSE_SUPPORT_P.patch 0009-packagekit-reboot-notification.patch ----------(New B)---------- New: - add 0001-cockpit-overview-support-SUSE_SUPPORT_PRODUCT-keys.patch - add 0002-cockpit-kdump-support-SLE-micro-6.2.patch New:- 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 New:- 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 New:- Show reboot nofication after updates in packagekit * Add 0009-packagekit-reboot-notification.patch ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ cockpit.spec ++++++ --- /var/tmp/diff_new_pack.sc6TkR/_old 2025-07-20 15:29:28.937088058 +0200 +++ /var/tmp/diff_new_pack.sc6TkR/_new 2025-07-20 15:29:28.937088058 +0200 @@ -81,6 +81,10 @@ 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 @@ -213,13 +217,20 @@ %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} @@ -242,6 +253,10 @@ %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 @@ -779,7 +794,7 @@ 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 @@ -898,6 +913,7 @@ 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 ++++++ 0001-cockpit-overview-support-SUSE_SUPPORT_PRODUCT-keys.patch ++++++ >From ec3a1efce07770b7641e07d41a73732967c65175 Mon Sep 17 00:00:00 2001 From: Luna D Dragon <luna.dra...@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 ++++++ 0002-cockpit-kdump-support-SLE-micro-6.2.patch ++++++ >From 14b86b6d60b009c4294f06589a561e688ba49223 Mon Sep 17 00:00:00 2001 From: Luna D Dragon <luna.dra...@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 ++++++ 0003-branding-use-SUSE_SUPPORT_PRODUCT-and-SUSE_SUPPORT_P.patch ++++++ >From cfc476e5127ee3f21b70124e77ded9627e9692b5 Mon Sep 17 00:00:00 2001 From: Luna D Dragon <luna.dra...@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 ++++++ 0009-packagekit-reboot-notification.patch ++++++ 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: [] }; ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.sc6TkR/_old 2025-07-20 15:29:29.093094514 +0200 +++ /var/tmp/diff_new_pack.sc6TkR/_new 2025-07-20 15:29:29.097094679 +0200 @@ -1,6 +1,6 @@ -mtime: 1750681336 -commit: b8985dff0b6a36542dec6f399fb154e2a2bfd071813ecbfe196ae6f2e8ce0577 +mtime: 1752750589 +commit: 8740c2ced655ddb4f5c26d17403bd66539015e109b333446abdc1822e9407b25 url: https://src.opensuse.org/cockpit/cockpit.git -revision: b8985dff0b6a36542dec6f399fb154e2a2bfd071813ecbfe196ae6f2e8ce0577 +revision: 8740c2ced655ddb4f5c26d17403bd66539015e109b333446abdc1822e9407b25 projectscmsync: https://src.opensuse.org/cockpit/_ObsPrj.git ++++++ build.specials.obscpio ++++++ ++++++ check_cockpit_users ++++++ --- /var/tmp/diff_new_pack.sc6TkR/_old 2025-07-20 15:29:29.237100473 +0200 +++ /var/tmp/diff_new_pack.sc6TkR/_new 2025-07-20 15:29:29.241100638 +0200 @@ -23,7 +23,7 @@ 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 ++++++ cockpit-suse-theme.tar ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cockpit-suse-theme/src/css-overrides.css new/cockpit-suse-theme/src/css-overrides.css --- old/cockpit-suse-theme/src/css-overrides.css 2025-05-22 11:29:46.000000000 +0200 +++ new/cockpit-suse-theme/src/css-overrides.css 2025-07-17 12:06:17.350148919 +0200 @@ -120,3 +120,6 @@ --bg-color: var(--JungleGreen); } +.pf-v6-c-form-control > select > option { + background-color: var(--ct-color-bg); +}