Your message dated Tue, 23 Oct 2018 10:07:21 +0800
with message-id <[email protected]>
and subject line Re: non-systemd setups fail to boot properly
has caused the Debian Bug report #874685,
regarding Do not run init scripts under systemd
to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)
--
874685: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=874685
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Source: sysvinit
Version: 2.88dsf-59.9
Severity: normal
Tags: patch
The init scripts provided by the bootlogd and initscripts package are
specific to sysvinit/sysv-rc and should not be run when systemd is the
active init system as they can be actively harmful.
To ensure that, mask those services by creating a symlink pointing at
/dev/null which tells systemd to ignore those services.
While at it, simplify the maintainer scripts when dealing with those
init scripts.
By using a variable holding all init scripts we can easily iterate over
them and reverse the order. This is less error prone and avoids lots of
duplicated code.
Thanks for considering.
Michael
-- System Information:
Debian Release: buster/sid
APT prefers unstable
APT policy: (500, 'unstable'), (200, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 4.12.0-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=de_DE.utf8, LC_CTYPE=de_DE.utf8 (charmap=UTF-8),
LANGUAGE=de_DE.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
>From caf88d63c053a815f9cad3753233c6a73af649a7 Mon Sep 17 00:00:00 2001
From: Michael Biebl <[email protected]>
Date: Fri, 8 Sep 2017 18:48:53 +0200
Subject: [PATCH] Do not run init scripts under systemd
The init scripts provided by the bootlogd and initscripts package are
specific to sysvinit/sysv-rc and should not be run when systemd is the
active init system. To ensure that, mask those services by creating a
symlink pointing at /dev/null which tells systemd to ignore those
services.
While at it, simplify the maintainer scripts when dealing with those
init scripts.
---
debian/bootlogd.postinst | 24 ++++++-----
debian/bootlogd.postrm | 18 +++++++--
debian/initscripts.postinst | 97 +++++++++------------------------------------
debian/initscripts.postrm | 45 ++++++++++-----------
4 files changed, 68 insertions(+), 116 deletions(-)
diff --git a/debian/bootlogd.postinst b/debian/bootlogd.postinst
index eddd4210..50ab21ad 100644
--- a/debian/bootlogd.postinst
+++ b/debian/bootlogd.postinst
@@ -1,15 +1,21 @@
#!/bin/sh
set -e
-if [ -x /etc/init.d/bootlogd ]; then
- update-rc.d bootlogd defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/stop-bootlogd-single ]; then
- update-rc.d stop-bootlogd-single defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/stop-bootlogd ]; then
- update-rc.d stop-bootlogd defaults >/dev/null || exit $?
-fi
+INITSCRIPTS="bootlogd stop-bootlogd-single stop-bootlogd"
+
+for F in $INITSCRIPTS; do
+ if [ -x /etc/init.d/$F ]; then
+ update-rc.d $F defaults >/dev/null || exit $?
+ fi
+done
+
+mkdir -p /etc/systemd/system
+for F in $INITSCRIPTS; do
+ SERVICE="$(basename $F .sh).service"
+ if [ -x /etc/init.d/$F ] && [ ! -e /etc/systemd/system/$SERVICE ]; then
+ ln -s /dev/null /etc/systemd/system/$SERVICE
+ fi
+done
#
# Create initial log files
diff --git a/debian/bootlogd.postrm b/debian/bootlogd.postrm
index 23d776bc..2705c154 100644
--- a/debian/bootlogd.postrm
+++ b/debian/bootlogd.postrm
@@ -1,6 +1,8 @@
#!/bin/sh
set -e
+INITSCRIPTS="bootlogd stop-bootlogd-single stop-bootlogd"
+
case "$1" in
purge)
#
@@ -10,9 +12,19 @@ case "$1" in
# Remove rc symlinks in the reverse dependency order they were
# inserted
- update-rc.d stop-bootlogd remove >/dev/null || exit $?
- update-rc.d stop-bootlogd-single remove >/dev/null || exit $?
- update-rc.d bootlogd remove >/dev/null || exit $?
+ for F in $INITSCRIPTS; do
+ REVERSE="$F $REVERSE"
+ done
+ for F in $REVERSE; do
+ update-rc.d $F remove >/dev/null || exit $?
+ done
+
+ for F in $INITSCRIPTS; do
+ SERVICE="$(basename $F .sh).service"
+ if [ -L /etc/systemd/system/$SERVICE ]; then
+ rm /etc/systemd/system/$SERVICE
+ fi
+ done
;;
esac
diff --git a/debian/initscripts.postinst b/debian/initscripts.postinst
index 259ce38c..94c3dbc5 100755
--- a/debian/initscripts.postinst
+++ b/debian/initscripts.postinst
@@ -81,86 +81,25 @@ if dpkg --compare-versions "$PREV_VER" lt-nl "2.88dsf-23" ;
then
fi
fi
-#
-# Links in runlevel S
-#
-if [ -x /etc/init.d/mountkernfs.sh ]; then
-update-rc.d mountkernfs.sh defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/hostname.sh ]; then
-update-rc.d hostname.sh defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/mountdevsubfs.sh ]; then
-update-rc.d mountdevsubfs.sh defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/checkroot.sh ]; then
-update-rc.d checkroot.sh defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/checkroot-bootclean.sh ]; then
-update-rc.d checkroot-bootclean.sh defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/checkfs.sh ]; then
-update-rc.d checkfs.sh defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/mountall.sh ]; then
-update-rc.d mountall.sh defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/mountall-bootclean.sh ]; then
-update-rc.d mountall-bootclean.sh defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/mountnfs.sh ]; then
-update-rc.d mountnfs.sh defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/mountnfs-bootclean.sh ]; then
-update-rc.d mountnfs-bootclean.sh defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/bootmisc.sh ]; then
-update-rc.d bootmisc.sh defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/urandom ]; then
-update-rc.d urandom defaults >/dev/null || exit $?
-fi
-
-#
-# Links in runlevels other than S
-#
-if [ -x /etc/init.d/halt ]; then
-update-rc.d halt defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/reboot ]; then
-update-rc.d reboot defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/umountroot ]; then
-update-rc.d umountroot defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/umountfs ]; then
-update-rc.d umountfs defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/umountnfs.sh ]; then
-update-rc.d umountnfs.sh defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/sendsigs ]; then
-update-rc.d sendsigs defaults >/dev/null || exit $?
-fi
+INITSCRIPTS="mountkernfs.sh hostname.sh mountdevsubfs.sh checkroot.sh \
+ checkroot-bootclean.sh checkfs.sh mountall.sh mountall-bootclean.sh \
+ mountnfs.sh mountnfs-bootclean.sh bootmisc.sh urandom halt reboot \
+ umountroot umountfs umountnfs.sh sendsigs killprocs single motd \
+ bootlogs rc.local rmnologin"
+
+for F in $INITSCRIPTS; do
+ if [ -x /etc/init.d/$F ]; then
+ update-rc.d $F defaults >/dev/null || exit $?
+ fi
+done
-if [ -x /etc/init.d/killprocs ]; then
-update-rc.d killprocs defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/single ]; then
-update-rc.d single defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/motd ]; then
-update-rc.d motd defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/bootlogs ]; then
-update-rc.d bootlogs defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/rc.local ]; then
-update-rc.d rc.local defaults >/dev/null || exit $?
-fi
-if [ -x /etc/init.d/rmnologin ]; then
-update-rc.d rmnologin defaults >/dev/null || exit $?
-fi
+mkdir -p /etc/systemd/system
+for F in $INITSCRIPTS; do
+ SERVICE="$(basename $F .sh).service"
+ if [ -x /etc/init.d/$F ] && [ ! -e /etc/systemd/system/$SERVICE ]; then
+ ln -s /dev/null /etc/systemd/system/$SERVICE
+ fi
+done
#
# Remove scripts that were left behind by older glibc (<< 2.3.2.ds1-12)
diff --git a/debian/initscripts.postrm b/debian/initscripts.postrm
index 5debca4c..99e62c04 100755
--- a/debian/initscripts.postrm
+++ b/debian/initscripts.postrm
@@ -4,7 +4,13 @@
#
set -e
-
+
+INITSCRIPTS="mountkernfs.sh hostname.sh mountdevsubfs.sh checkroot.sh \
+ checkroot-bootclean.sh checkfs.sh mountall.sh mountall-bootclean.sh \
+ mountnfs.sh mountnfs-bootclean.sh bootmisc.sh urandom halt reboot \
+ umountroot umountfs umountnfs.sh sendsigs killprocs single motd \
+ bootlogs rc.local rmnologin"
+
case "$1" in
purge)
#
@@ -46,30 +52,19 @@ case "$1" in
# Remove rc symlinks in the reverse dependency order they were
# inserted
- update-rc.d rmnologin remove >/dev/null || exit $?
- update-rc.d rc.local remove >/dev/null || exit $?
- update-rc.d motd remove >/dev/null || exit $?
- update-rc.d bootlogs remove >/dev/null || exit $?
- update-rc.d single remove >/dev/null || exit $?
- update-rc.d killprocs remove >/dev/null || exit $?
- update-rc.d sendsigs remove >/dev/null || exit $?
- update-rc.d umountnfs.sh remove >/dev/null || exit $?
- update-rc.d umountfs remove >/dev/null || exit $?
- update-rc.d umountroot remove >/dev/null || exit $?
- update-rc.d reboot remove >/dev/null || exit $?
- update-rc.d halt remove >/dev/null || exit $?
- update-rc.d urandom remove >/dev/null || exit $?
- update-rc.d bootmisc.sh remove >/dev/null || exit $?
- update-rc.d mountnfs-bootclean.sh remove >/dev/null || exit $?
- update-rc.d mountnfs.sh remove >/dev/null || exit $?
- update-rc.d mountall-bootclean.sh remove >/dev/null || exit $?
- update-rc.d mountall.sh remove >/dev/null || exit $?
- update-rc.d checkfs.sh remove >/dev/null || exit $?
- update-rc.d checkroot-bootclean.sh remove >/dev/null || exit $?
- update-rc.d checkroot.sh remove >/dev/null || exit $?
- update-rc.d mountdevsubfs.sh remove >/dev/null || exit $?
- update-rc.d hostname.sh remove >/dev/null || exit $?
- update-rc.d mountkernfs.sh remove >/dev/null || exit $?
+ for F in $INITSCRIPTS; do
+ REVERSE="$F $REVERSE"
+ done
+ for F in $REVERSE; do
+ update-rc.d $F remove >/dev/null || exit $?
+ done
+
+ for F in $INITSCRIPTS; do
+ SERVICE="$(basename $F .sh).service"
+ if [ -L /etc/systemd/system/$SERVICE ]; then
+ rm /etc/systemd/system/$SERVICE
+ fi
+ done
# Remove /dev/pts and /dev/shm ?
;;
--
2.14.1
--- End Message ---
--- Begin Message ---
Control: unblock 910444 by 874685
Hi Michael,
Michael Biebl <[email protected]> writes:
> No, that but report does not look like the cause for 910444. It doesn't
> remove any essential initscripts from runlevel S.
>
> Anyway, can you be more specific where the patch from 874685 is
> supposedly wrong?
My mistake, I found the root cause of 910444 and it has no relation with
this bug.
Sorry for the noise.
Yours,
Benda
signature.asc
Description: PGP signature
--- End Message ---