From 8472c3e397c4a4884f81e1aa81e2506d86f0a3197be781c40b13577a690cf7ef Mon Sep 17 00:00:00 2001 From: Franck Bui Date: Tue, 8 Mar 2022 07:49:08 +0000 Subject: [PATCH] - 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. OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=1258 --- scripts-systemd-upgrade-from-pre-210.sh | 40 ++++++++++++++----------- systemd.changes | 16 ++++++++++ 2 files changed, 38 insertions(+), 18 deletions(-) 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