diff --git a/scripts-systemd-upgrade-from-pre-210.sh b/scripts-systemd-upgrade-from-pre-210.sh index 8a168915..2f5e53ff 100644 --- a/scripts-systemd-upgrade-from-pre-210.sh +++ b/scripts-systemd-upgrade-from-pre-210.sh @@ -1,30 +1,34 @@ #! /bin/bash # -# This script is supposed to be executed from the %post section. It -# contains all hacks needed to update a system which was running -# systemd < v210. This also includes systems migrating from SysV. +# This script is supposed to be executed from the %post section. It contains all +# hacks needed to update a system which was running systemd < v210. This also +# includes systems migrating from SysV. +# +# All hacks can potentially break the admin settings since they work in /etc... # -# All hacks can potentially break the admin settings since they work -# in /etc... -# Try to read default runlevel from the old inittab if it exists. If -# it fails fallback to runlevel 3 which should still be better than -# the rescue shell. # -# Note: /etc/inittab was part of the aaa_base package which can be -# upgraded before systemd is. Therefore this file is likely to be -# missing. -if [ ! -e /etc/systemd/system/default.target -a -e /etc/inittab ]; then - runlevel=$(sed -n -r "s/^id:([[:digit:]]):initdefault:/\1/p" /etc/inittab) - : ${runlevel:=3} - echo "Initializing default.target to runlevel${runlevel}.target" - ln -s /usr/lib/systemd/system/runlevel${runlevel}.target /etc/systemd/system/default.target +# During migration from sysvinit to systemd, we used to set the systemd default +# target to one of the 'runlevel*.target' after reading the default runlevel +# from /etc/inittab. We don't do that anymore because in most cases using the +# graphical.target target, which is the default, will do the right +# thing. Moreover the runlevel targets are considered as deprecated, so we +# convert them into "true" systemd targets instead here. +# +if target=$(readlink /etc/systemd/system/default.target); then + target=$(basename $target) + case "$target" in + runlevel?.target) + echo "Default systemd target is '$target' but use of runlevels is deprecated" + systemctl --no-reload set-default $target + esac fi -# migrate any symlink which may refer to the old path +# +# Migrate any symlink which may refer to the old path. +# for f in $(find /etc/systemd/system -type l -xtype l); do new_target="/usr$(readlink $f)" [ -f "$new_target" ] && ln -s -f $new_target $f done - diff --git a/systemd.changes b/systemd.changes index eb4b4324..7c998920 100644 --- a/systemd.changes +++ b/systemd.changes @@ -1,3 +1,19 @@ +------------------------------------------------------------------- +Tue Mar 8 07:41:41 UTC 2022 - Franck Bui + +- Fix the default target when it's been incorrectly set to one of the runlevel + targets (bsc#1196567) + + The script 'upgrade-from-pre-210.sh' used to initialize the default target + during migration from sysvinit to systemd. However it created symlinks to + runlevel targets, which are deprecated and might be missing when + systemd-sysvcompat package is not installed. If such symlinks are found the + script now renames them to point to 'true' systemd target units. + +- When migrating from sysvinit to systemd (it probably won't happen anymore), + let's use the default systemd target, which is the graphical.target one. In + most cases it will do the right thing anyway. + ------------------------------------------------------------------- Thu Feb 24 13:23:35 UTC 2022 - Franck Bui