Control: tags -1 patch Aurelien,
Thanks for this. I have a proposed patch for this (see attached). I have also taken the opportunity to rework and cleanup the sysvinit-core postinst. Any comments are welcome. On Sat, Jun 01, 2024 at 11:38:04PM +0200, Aurelien Jarno wrote: > At some point this will allow us to drop the corresponding part > of the libc6 postinst. Until that happens, does that mean that sysvinit will be restarted twice, once by libc6 postinst and once by the libc-upgrade trigger? Best wishes Mark
diff --git a/debian/sysvinit-core.postinst b/debian/sysvinit-core.postinst index f6d00490..21c565b7 100755 --- a/debian/sysvinit-core.postinst +++ b/debian/sysvinit-core.postinst @@ -1,44 +1,12 @@ #! /bin/sh # -# sysvinit postinst +# sysvinit-core postinst # set -e -# Restart init, and migrate to /run/initctl if needed. +# Restart init. do_restart() { - INITCTL=/run/initctl - case "$(uname -s)" in - *FreeBSD) - OLDINITCTL=/etc/.initctl - ;; - *) - OLDINITCTL=/dev/initctl - ;; - esac - - # PID of init; may not always be 1 but this code isn't run in - # these cases (Hurd). Use for sending signals and checking if - # init is running. - PID=1 - - # Create /run/initctl if not present, and also create compatibility - # symlinks - if [ ! -p "$INITCTL" ] - then - # Create new control channel - echo "sysvinit: creating $INITCTL" - rm -f $INITCTL - mkfifo -m 600 $INITCTL - fi - - # Replace old control channel with symlink - ln -s "$INITCTL" "$OLDINITCTL.new" - mv "$OLDINITCTL.new" "$OLDINITCTL" - - # Reopen control channel (uses new channel). - kill -s USR1 "$PID" - # Tell init to re-exec itself. We loop on failure to reduce # the chance of a race before the new control channel is # opened. @@ -59,57 +27,47 @@ do_restart() { fi fi done - - # Remove old pipe if present. No longer in use after re-exec. - if [ -p "$OLDINITCTL" ] - then - rm -f "$OLDINITCTL" - fi } +umask 022 + case "$1" in - configure) - oldver=$2 + configure) + if [ -z "$2" ]; then + # New installation + skip_restart=1 + fi + + rm -f "$DPKG_ROOT/etc/ioctl.save" + + if [ ! -f "$DPKG_ROOT/etc/inittab" ]; then + cp -p "$DPKG_ROOT/usr/share/sysvinit/inittab" "$DPKG_ROOT/etc/inittab" + fi ;; - abort-upgrade|abort-remove|abort-deconfigure) + triggered) + # Restart, if possible + ;; + abort-upgrade|abort-remove|abort-deconfigure) exit 0 ;; + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; esac -umask 022 - -rm -f "$DPKG_ROOT/etc/ioctl.save" - -if [ ! -f "$DPKG_ROOT/etc/inittab" ] +if ischroot --default-true || + [ -n "${DPKG_ROOT:-}" ] || + [ -d "$DPKG_ROOT/run/systemd/system" ] || + [ "$(uname -s)" = "GNU" ] then - cp -p "$DPKG_ROOT/usr/share/sysvinit/inittab" "$DPKG_ROOT/etc/inittab" -fi - -restart=yes - -if [ -z "${oldver}" ]; then - restart=no -fi -if ischroot --default-true ; then - restart=no -fi -if [ -n "${DPKG_ROOT:-}" ]; then - restart=no -fi - -# If systemd is running, don't restart init or doing any initctl -# migration. -if [ -d "$DPKG_ROOT/run/systemd/system" ]; then - restart=no -fi -if [ "$(uname -s)" = "GNU" ]; then - restart=no + skip_restart=1 fi -if [ "$restart" = "yes" ]; then - do_restart +if [ "$skip_restart" ]; then + echo "Not restarting sysvinit" else - echo "Not restarting sysvinit" + do_restart fi #DEBHELPER# diff --git a/debian/sysvinit-core.triggers b/debian/sysvinit-core.triggers new file mode 100644 index 00000000..ac00c071 --- /dev/null +++ b/debian/sysvinit-core.triggers @@ -0,0 +1 @@ +interest-noawait libc-upgrade