From 7df7da59b35228aea78c0c1d7241574c05e33d8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Ferr=C3=A3o?= <2031761+viniciusferrao@users.noreply.github.com> Date: Sun, 19 Jul 2026 13:35:01 -0300 Subject: [PATCH] fix(packaging): preserve unregistered legacy state --- .../share/xcat/scripts/xcatd-init-compat | 34 ++++++++++++++++++- xCAT-server/xCAT-server.spec | 16 ++++++--- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/xCAT-server/share/xcat/scripts/xcatd-init-compat b/xCAT-server/share/xcat/scripts/xcatd-init-compat index d1ec398f4..1a42c8b18 100755 --- a/xCAT-server/share/xcat/scripts/xcatd-init-compat +++ b/xCAT-server/share/xcat/scripts/xcatd-init-compat @@ -150,6 +150,35 @@ legacy_state() echo unregistered } +has_legacy_provenance() +{ + [ -e "$legacy_init" ] || [ -L "$legacy_init" ] || + [ -f "$managed_marker" ] +} + +legacy_transition_state() +{ + transition_state=$(legacy_state) + if [ "$transition_state" != unregistered ]; then + echo "$transition_state" + return + fi + + transition_state=$(systemd_state) + case "$transition_state" in + enabled|masked) + echo "$transition_state" + ;; + disabled) + if has_legacy_provenance; then + echo unregistered + else + echo disabled + fi + ;; + esac +} + systemd_state() { for systemd_mask in \ @@ -365,6 +394,9 @@ case "${1:-}" in legacy-state) legacy_state ;; + legacy-transition-state) + legacy_transition_state + ;; systemd-state) systemd_state ;; @@ -398,7 +430,7 @@ case "${1:-}" in remove_managed_legacy_init ;; *) - echo "Usage: $0 {uses-systemd [--explicit-target]|legacy-state|systemd-state|register-legacy {enabled|disabled}|unregister-legacy|disable-systemd|unregister-all|configure [--replace] [--explicit-target] [--track-managed]|remove|remove-managed}" >&2 + echo "Usage: $0 {uses-systemd [--explicit-target]|legacy-state|legacy-transition-state|systemd-state|register-legacy {enabled|disabled}|unregister-legacy|disable-systemd|unregister-all|configure [--replace] [--explicit-target] [--track-managed]|remove|remove-managed}" >&2 exit 2 ;; esac diff --git a/xCAT-server/xCAT-server.spec b/xCAT-server/xCAT-server.spec index 1ff870f15..7cdf422e5 100644 --- a/xCAT-server/xCAT-server.spec +++ b/xCAT-server/xCAT-server.spec @@ -552,12 +552,18 @@ if [ "$1" -gt "1" ]; then #only on upgrade... systemctl enable xcatd.service fi else - legacy_xcatd_state=$("$xcatd_init_compat" legacy-state) - if [ "$legacy_xcatd_state" = unregistered ]; then - legacy_xcatd_state=$("$xcatd_init_compat" systemd-state) - fi + legacy_xcatd_state=$("$xcatd_init_compat" legacy-transition-state) "$xcatd_init_compat" disable-systemd + # systemctl may delegate to systemd-sysv-install and recreate K links for + # a pre-existing SysV script. Restore the captured unregistered or masked + # state before materializing the package's replacement script. + case "$legacy_xcatd_state" in + masked|unregistered) + "$xcatd_init_compat" unregister-legacy + ;; + esac + # This path was previously a regular RPM payload file, so upgrades replaced # it with the current package version rather than retaining an older copy. "$xcatd_init_compat" configure --replace --explicit-target --track-managed || exit 1 @@ -566,7 +572,7 @@ if [ "$1" -gt "1" ]; then #only on upgrade... enabled|disabled) "$xcatd_init_compat" register-legacy "$legacy_xcatd_state" ;; - masked) + masked|unregistered) ;; esac fi