2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2026-10-21 15:18:19 +00:00

refactor(init): share target detection and pending-state cleanup

Signed-off-by: Vinícius Ferrão <2031761+viniciusferrao@users.noreply.github.com>
This commit is contained in:
Vinícius Ferrão
2026-10-11 11:46:10 -03:00
parent 26f261b3e1
commit cd90878516
5 changed files with 104 additions and 237 deletions
-92
View File
@@ -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
-92
View File
@@ -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
+9
View File
@@ -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
@@ -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
@@ -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."*
}