2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2026-07-31 18:19:40 +00:00

fix(packaging): preserve unmanaged xcatd init scripts

This commit is contained in:
Vinícius Ferrão
2026-07-19 12:25:01 -03:00
parent 11709a2221
commit 115c9cda7e
2 changed files with 61 additions and 25 deletions
@@ -17,6 +17,7 @@ esac
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()
{
@@ -260,16 +261,52 @@ unregister_all_init()
return "$unregister_status"
}
legacy_init_is_managed()
{
[ -f "$managed_marker" ] &&
[ -f "$legacy_init" ] && [ ! -L "$legacy_init" ] &&
[ -r "$legacy_template" ] && cmp -s "$legacy_template" "$legacy_init"
}
mark_legacy_init_managed()
{
marker_dir=${managed_marker%/*}
marker_tmp="$managed_marker.tmp.$$"
mkdir -p -m 0755 "$marker_dir" || return 1
umask 077
: > "$marker_tmp" || return 1
if ! mv -f "$marker_tmp" "$managed_marker"; then
rm -f "$marker_tmp"
return 1
fi
}
remove_legacy_init()
{
rm -f "$legacy_init" || return 1
rm -f "$managed_marker"
}
remove_managed_legacy_init()
{
if legacy_init_is_managed; then
rm -f "$legacy_init" || return 1
fi
rm -f "$managed_marker"
}
configure_legacy_init()
{
replace_existing=0
detection_mode=compat
track_managed=0
for configure_option in "$@"; do
case "$configure_option" in
--replace) replace_existing=1 ;;
--explicit-target) detection_mode=explicit ;;
--track-managed) track_managed=1 ;;
*)
echo "Usage: $0 configure [--replace] [--explicit-target]" >&2
echo "Usage: $0 configure [--replace] [--explicit-target] [--track-managed]" >&2
exit 2
;;
esac
@@ -277,6 +314,7 @@ configure_legacy_init()
if uses_systemd "$detection_mode"; then
rm -f "$legacy_init" || return 1
rm -f "$managed_marker" || return 1
return
fi
@@ -288,6 +326,9 @@ configure_legacy_init()
if [ -e "$legacy_init" ] || [ -L "$legacy_init" ]; then
if [ "$replace_existing" -ne 1 ]; then
if [ -f "$managed_marker" ] && ! legacy_init_is_managed; then
rm -f "$managed_marker" || return 1
fi
return
fi
rm -f "$legacy_init" || return 1
@@ -301,6 +342,11 @@ configure_legacy_init()
mkdir -p "$compat_root/etc/init.d" || return 1
cp "$legacy_template" "$legacy_init" || return 1
chmod 755 "$legacy_init" || return 1
if [ "$track_managed" -eq 1 ]; then
mark_legacy_init_managed || return 1
else
rm -f "$managed_marker" || return 1
fi
}
case "${1:-}" in
@@ -346,10 +392,13 @@ case "${1:-}" in
configure_legacy_init "$@"
;;
remove)
rm -f "$legacy_init"
remove_legacy_init
;;
remove-managed)
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]|remove}" >&2
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
exit 2
;;
esac
+9 -22
View File
@@ -364,17 +364,6 @@ chmod 644 $RPM_BUILD_ROOT/%{prefix}/lib/shfunctions
%ifos linux
cp etc/init.d/xcatd $RPM_BUILD_ROOT/%{prefix}/share/xcat/scripts/xcatd
chmod 755 $RPM_BUILD_ROOT/%{prefix}/share/xcat/scripts/xcatd
# Keep ownership continuity only on legacy RPM targets where the script is
# materialized at runtime. Modern RPM versions can create /etc/init.d from a
# ghost entry alone, which breaks later chkconfig/initscripts transactions.
%if 0%{?rhel} && 0%{?rhel} < 7
mkdir -p $RPM_BUILD_ROOT/etc/init.d
touch $RPM_BUILD_ROOT/etc/init.d/xcatd
%endif
%if 0%{?suse_version} && 0%{?suse_version} < 1200
mkdir -p $RPM_BUILD_ROOT/etc/init.d
touch $RPM_BUILD_ROOT/etc/init.d/xcatd
%endif
mkdir -p $RPM_BUILD_ROOT/usr/lib/systemd/system
cp etc/init.d/xcatd.service $RPM_BUILD_ROOT/usr/lib/systemd/system
%else
@@ -448,12 +437,8 @@ rm -rf $RPM_BUILD_ROOT
%if %fsm
%else
%ifos linux
%if 0%{?rhel} && 0%{?rhel} < 7
%ghost %attr(0755,root,root) /etc/init.d/xcatd
%endif
%if 0%{?suse_version} && 0%{?suse_version} < 1200
%ghost %attr(0755,root,root) /etc/init.d/xcatd
%endif
# The compatibility helper owns runtime cleanup. Listing this path as %ghost
# would let RPM unlink preserved administrator content after %preun.
/usr/lib/systemd/system/xcatd.service
%else
/etc/init.d/xcatd
@@ -532,7 +517,7 @@ if [ "$1" = "1" ]; then #Only if installing for the first time..
systemctl enable xcatd.service
fi
else
"$xcatd_init_compat" configure --explicit-target || exit 1
"$xcatd_init_compat" configure --explicit-target --track-managed || exit 1
legacy_xcatd_state=$("$xcatd_init_compat" legacy-state)
case "$legacy_xcatd_state" in
enabled|disabled)
@@ -575,7 +560,7 @@ if [ "$1" -gt "1" ]; then #only on upgrade...
# 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 || exit 1
"$xcatd_init_compat" configure --replace --explicit-target --track-managed || exit 1
case "$legacy_xcatd_state" in
enabled|disabled)
@@ -629,7 +614,7 @@ if [ -x "$xcatd_init_compat" ] &&
! XCATROOT="$RPM_INSTALL_PREFIX0" "$xcatd_init_compat" uses-systemd --explicit-target &&
[ ! -e /etc/init.d/xcatd ] && [ ! -L /etc/init.d/xcatd ]; then
XCATROOT="$RPM_INSTALL_PREFIX0" \
"$xcatd_init_compat" configure --explicit-target || exit 1
"$xcatd_init_compat" configure --explicit-target --track-managed || exit 1
fi
%endif
@@ -652,8 +637,10 @@ if [ $1 == 0 ]; then #This means only on -e
fi
fi
"$xcatd_init_compat" unregister-all
"$xcatd_init_compat" remove
# Preserve RPM's existing recoverable erase policy if local service state
# cannot be cleaned completely; no package payload remains afterward.
"$xcatd_init_compat" unregister-all || true
"$xcatd_init_compat" remove-managed || true
rm -f /usr/sbin/xcatd #remove the symbolic
fi