From cd90878516eda97500631cef4f45149adb6cb41b 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, 11 Oct 2026 11:46:10 -0300 Subject: [PATCH] refactor(init): share target detection and pending-state cleanup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Vinícius Ferrão <2031761+viniciusferrao@users.noreply.github.com> --- xCAT-server/debian/postrm | 92 ------------------- xCAT-server/debian/preinst | 92 ------------------- xCAT-server/debian/rules | 9 ++ .../share/xcat/scripts/xcatd-init-compat | 56 +---------- .../xcat/scripts/xcatd-init-compat-functions | 92 +++++++++++++++++++ 5 files changed, 104 insertions(+), 237 deletions(-) create mode 100644 xCAT-server/share/xcat/scripts/xcatd-init-compat-functions diff --git a/xCAT-server/debian/postrm b/xCAT-server/debian/postrm index a537de088..a336e3a3f 100644 --- a/xCAT-server/debian/postrm +++ b/xCAT-server/debian/postrm @@ -8,104 +8,12 @@ set -e xcatd_state_dir=/var/lib/xcat/xcatd-init-state xcatd_context_file=$xcatd_state_dir/context -clear_xcatd_pending_state() -{ - rm -f "$xcatd_state_dir/pending-xcatd" \ - "$xcatd_state_dir/pending-deleted" \ - "$xcatd_state_dir/pending-enabled" \ - "$xcatd_state_dir/pending-xcatd.tmp."* -} - if [ -L "$xcatd_state_dir" ] || \ { [ -e "$xcatd_state_dir" ] && [ ! -d "$xcatd_state_dir" ]; }; then echo "Invalid xcatd init state directory: $xcatd_state_dir" >&2 exit 1 fi -xcat_systemd_os_release_status() -{ - [ -r /etc/os-release ] || return 2 - - os_id= - os_version= - while IFS='=' read -r key value; do - value=${value#\"} - value=${value%\"} - value=${value#\'} - value=${value%\'} - case "$key" in - ID) os_id=$value ;; - VERSION_ID) os_version=$value ;; - esac - done < /etc/os-release - - if [ "$os_id" = "debian" ] && [ -z "$os_version" ]; then - return 0 - fi - - os_major=${os_version%%.*} - case "$os_major" in - ''|*[!0-9]*) return 2 ;; - esac - - case "$os_id" in - rhel|centos|rocky|almalinux|ol|scientific) - [ "$os_major" -ge 7 ] && return 0 - return 1 - ;; - fedora|ubuntu) - [ "$os_major" -ge 15 ] && return 0 - return 1 - ;; - debian) - [ "$os_major" -ge 8 ] && return 0 - return 1 - ;; - sles|sled|opensuse|opensuse-leap|opensuse-tumbleweed) - [ "$os_major" -ge 12 ] && return 0 - return 1 - ;; - *) - return 2 - ;; - esac - -} - -xcat_target_uses_systemd() -{ - if [ -d /run/systemd/system ]; then - return 0 - fi - - if [ -L /sbin/init ]; then - init_target=$(readlink /sbin/init 2>/dev/null || true) - case "$init_target" in - *systemd*) return 0 ;; - *) return 1 ;; - esac - fi - - if [ -e /sbin/init ]; then - return 1 - fi - - if xcat_systemd_os_release_status; then - return 0 - else - os_release_status=$? - if [ "$os_release_status" -eq 1 ]; then - return 1 - fi - fi - - if [ -x /usr/lib/systemd/systemd ] || [ -x /lib/systemd/systemd ]; then - return 0 - fi - - return 1 -} - if xcat_target_uses_systemd && \ command -v dpkg-maintscript-helper >/dev/null 2>&1 && \ dpkg-maintscript-helper supports rm_conffile; then diff --git a/xCAT-server/debian/preinst b/xCAT-server/debian/preinst index dd69a6915..8672e58c0 100644 --- a/xCAT-server/debian/preinst +++ b/xCAT-server/debian/preinst @@ -5,90 +5,6 @@ set -e -xcat_systemd_os_release_status() -{ - [ -r /etc/os-release ] || return 2 - - os_id= - os_version= - while IFS='=' read -r key value; do - value=${value#\"} - value=${value%\"} - value=${value#\'} - value=${value%\'} - case "$key" in - ID) os_id=$value ;; - VERSION_ID) os_version=$value ;; - esac - done < /etc/os-release - - if [ "$os_id" = "debian" ] && [ -z "$os_version" ]; then - return 0 - fi - - os_major=${os_version%%.*} - case "$os_major" in - ''|*[!0-9]*) return 2 ;; - esac - - case "$os_id" in - rhel|centos|rocky|almalinux|ol|scientific) - [ "$os_major" -ge 7 ] && return 0 - return 1 - ;; - fedora|ubuntu) - [ "$os_major" -ge 15 ] && return 0 - return 1 - ;; - debian) - [ "$os_major" -ge 8 ] && return 0 - return 1 - ;; - sles|sled|opensuse|opensuse-leap|opensuse-tumbleweed) - [ "$os_major" -ge 12 ] && return 0 - return 1 - ;; - *) - return 2 - ;; - esac - -} - -xcat_target_uses_systemd() -{ - if [ -d /run/systemd/system ]; then - return 0 - fi - - if [ -L /sbin/init ]; then - init_target=$(readlink /sbin/init 2>/dev/null || true) - case "$init_target" in - *systemd*) return 0 ;; - *) return 1 ;; - esac - fi - - if [ -e /sbin/init ]; then - return 1 - fi - - if xcat_systemd_os_release_status; then - return 0 - else - os_release_status=$? - if [ "$os_release_status" -eq 1 ]; then - return 1 - fi - fi - - if [ -x /usr/lib/systemd/systemd ] || [ -x /lib/systemd/systemd ]; then - return 0 - fi - - return 1 -} - xcatd_init_state=/opt/xcat/share/xcat/scripts/xcatd-init-state xcatd_init_compat=/opt/xcat/share/xcat/scripts/xcatd-init-compat xcatd_legacy_init=/etc/init.d/xcatd @@ -108,14 +24,6 @@ write_xcatd_context() fi ) -clear_xcatd_pending_state() -{ - rm -f "$xcatd_state_dir/pending-xcatd" \ - "$xcatd_state_dir/pending-deleted" \ - "$xcatd_state_dir/pending-enabled" \ - "$xcatd_state_dir/pending-xcatd.tmp."* -} - xcatd_legacy_enable_state() { if [ -x "$xcatd_init_compat" ]; then diff --git a/xCAT-server/debian/rules b/xCAT-server/debian/rules index dd0175bed..1795e732c 100755 --- a/xCAT-server/debian/rules +++ b/xCAT-server/debian/rules @@ -88,6 +88,15 @@ binary-arch: dh_perl dh_makeshlibs dh_installdeb + # These scripts can run before unpacking or after the helpers are removed. + set -e; for script in preinst postrm; do \ + scriptfile=$(buildroot)/DEBIAN/$$script; \ + { head -n 1 "$$scriptfile"; \ + cat share/xcat/scripts/xcatd-init-compat-functions; \ + tail -n +2 "$$scriptfile"; } > "$$scriptfile.tmp"; \ + chmod 755 "$$scriptfile.tmp"; \ + mv "$$scriptfile.tmp" "$$scriptfile"; \ + done dh_shlibdeps dh_gencontrol -- -Vperl:Depends=perl dh_md5sums diff --git a/xCAT-server/share/xcat/scripts/xcatd-init-compat b/xCAT-server/share/xcat/scripts/xcatd-init-compat index 00f8b5bf4..62b7aaeef 100755 --- a/xCAT-server/share/xcat/scripts/xcatd-init-compat +++ b/xCAT-server/share/xcat/scripts/xcatd-init-compat @@ -19,57 +19,7 @@ legacy_init="$compat_root/etc/init.d/xcatd" legacy_template="$compat_root$xcat_root/share/xcat/scripts/xcatd" managed_marker="$compat_root/var/lib/xcat/xcatd-init-compat-managed" -systemd_os_release_status() -{ - os_release="$compat_root/etc/os-release" - [ -r "$os_release" ] || return 2 - - os_id= - os_version= - while IFS='=' read -r key value; do - value=${value#\"} - value=${value%\"} - value=${value#\'} - value=${value%\'} - case "$key" in - ID) os_id=$value ;; - VERSION_ID) os_version=$value ;; - esac - done < "$os_release" - - # Debian testing/sid intentionally omits VERSION_ID. - if [ "$os_id" = "debian" ] && [ -z "$os_version" ]; then - return 0 - fi - - os_major=${os_version%%.*} - case "$os_major" in - ''|*[!0-9]*) return 2 ;; - esac - - case "$os_id" in - rhel|centos|rocky|almalinux|ol|scientific) - [ "$os_major" -ge 7 ] && return 0 - return 1 - ;; - fedora|ubuntu) - [ "$os_major" -ge 15 ] && return 0 - return 1 - ;; - debian) - [ "$os_major" -ge 8 ] && return 0 - return 1 - ;; - sles|sled|opensuse|opensuse-leap|opensuse-tumbleweed) - [ "$os_major" -ge 12 ] && return 0 - return 1 - ;; - *) - return 2 - ;; - esac - -} +. "$(dirname "$0")/xcatd-init-compat-functions" uses_systemd() { @@ -92,7 +42,7 @@ uses_systemd() return 1 fi - if systemd_os_release_status; then + if xcat_systemd_os_release_status "$compat_root"; then return 0 else os_release_status=$? @@ -109,7 +59,7 @@ uses_systemd() return 0 fi - if systemd_os_release_status; then + if xcat_systemd_os_release_status "$compat_root"; then return 0 fi diff --git a/xCAT-server/share/xcat/scripts/xcatd-init-compat-functions b/xCAT-server/share/xcat/scripts/xcatd-init-compat-functions new file mode 100644 index 000000000..0ae496cb2 --- /dev/null +++ b/xCAT-server/share/xcat/scripts/xcatd-init-compat-functions @@ -0,0 +1,92 @@ +xcat_systemd_os_release_status() +{ + os_release="${1-}/etc/os-release" + [ -r "$os_release" ] || return 2 + + os_id= + os_version= + while IFS='=' read -r key value; do + value=${value#\"} + value=${value%\"} + value=${value#\'} + value=${value%\'} + case "$key" in + ID) os_id=$value ;; + VERSION_ID) os_version=$value ;; + esac + done < "$os_release" + + if [ "$os_id" = "debian" ] && [ -z "$os_version" ]; then + return 0 + fi + + os_major=${os_version%%.*} + case "$os_major" in + ''|*[!0-9]*) return 2 ;; + esac + + case "$os_id" in + rhel|centos|rocky|almalinux|ol|scientific) + [ "$os_major" -ge 7 ] && return 0 + return 1 + ;; + fedora|ubuntu) + [ "$os_major" -ge 15 ] && return 0 + return 1 + ;; + debian) + [ "$os_major" -ge 8 ] && return 0 + return 1 + ;; + sles|sled|opensuse|opensuse-leap|opensuse-tumbleweed) + [ "$os_major" -ge 12 ] && return 0 + return 1 + ;; + *) + return 2 + ;; + esac + +} + +xcat_target_uses_systemd() +{ + if [ -d /run/systemd/system ]; then + return 0 + fi + + if [ -L /sbin/init ]; then + init_target=$(readlink /sbin/init 2>/dev/null || true) + case "$init_target" in + *systemd*) return 0 ;; + *) return 1 ;; + esac + fi + + if [ -e /sbin/init ]; then + return 1 + fi + + if xcat_systemd_os_release_status; then + return 0 + else + os_release_status=$? + if [ "$os_release_status" -eq 1 ]; then + return 1 + fi + fi + + if [ -x /usr/lib/systemd/systemd ] || [ -x /lib/systemd/systemd ]; then + return 0 + fi + + return 1 +} + +clear_xcatd_pending_state() +{ + rm -f "$xcatd_state_dir/pending-xcatd" \ + "$xcatd_state_dir/pending-deleted" \ + "$xcatd_state_dir/pending-enabled" \ + "$xcatd_state_dir/pending-xcatd.tmp."* +}