systemd/systemd-sysv-convert
Franck Bui c7198f09ba - Import commit fdce77ce2067f9dd90d816bad28b51efed0b6dc1
05fff5bd02 generator: use kmsg in system-level generators, journal otherwise
  ecc07954de log: normalize log target condition check
  d32ceea42b log: update comment
  2ebad02b60 basic/virt: Detect PowerVM hypervisor (bsc#1176800)

- Simplify systemd-sysv-convert
  - the previous code incorrectly assumed that the sysv init scripts
    were uninstalled before %post get executed. It therefore save the
    enablement state in %pre and restore it in %post. Now all is done
    in %post (making --save option useless) and there's no more need
    to remember the enablement state.
  - "--save" option is a NOP but is still kept for backward
    compatibility.
  - the previous simplifcation made /var/lib/systemd/migrated no more
    used.
  - we do not search for units in /lib/systemd anymore, this shouldn't
    be needed anymore these days especially since this path was only
    used when systemd was introduced in openSUSE and it was never used
    in SLE (checked SLE12-GA).
  - the option --show has been dropped. It's never been used even
    internally.
  - the DB is populated only once even if the script was enabled at
    multiple runlevels. The runlevel info was never used. A dummy
    value is still added to keep the same format just in case.

- No more need to clean the journal-upload stuff with --without=journal_remote
  Since -Dremote build option has been introduced with meson, this
  workaround is no more needed.

OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=1124
2020-11-06 09:15:20 +00:00

113 lines
2.5 KiB
Bash

#!/bin/bash
info() {
echo "$(basename $0): $*"
}
warn() {
echo >&2 "$(basename $0): warning, $*"
}
usage() {
echo >&2 "usage: $(basename $0) --apply <service> [<service> ...]"
}
if [ "$UID" != "0" ]; then
warn "need to be root, aborting"
exit 1
fi
if [ $# -lt 2 ]; then
usage
exit 1
fi
database_lookup() {
local service unused
# 'priority' field is not used but is kept for backward compat reason.
while read service unused; do
if [ $service == $1 ]; then
return 0
fi
done </var/lib/systemd/sysv-convert/database
return 1
}
database_add() {
# Write a dumb priority as it is not used.
echo "$1 $2 50" >>/var/lib/systemd/sysv-convert/database
}
# Initialize the database.
if [ ! -e /var/lib/systemd/sysv-convert/database ]; then
touch /var/lib/systemd/sysv-convert/database
fi
case "$1" in
--save)
# --save is kept for backward compatibility.
;;
--apply)
shift
for service in $@; do
# For backward compat we accept the name of the
# service with or without the unit type suffix. If the
# suffix is not there, assume .service type.
case "$service" in
*.*) initscript="${service%.*}" ;;
*) initscript="$service"
service="$service.service"
esac
# Did we already migrate this service during a previous update ?
database_lookup $initscript &&
continue
# Sanity check.
unit="/usr/lib/systemd/system/$service"
if [ ! -f "$unit" ]; then
warn "$unit not found, skipping"
continue
fi
# Mark the service as processed to make sure we will do the migration only
# once. This is important especially for packages that keep their init
# scripts around even if they're no more used. Since the saved info won't
# be reused again we simply use an invalid runlevel and add the service
# in the db only once.
database_add $initscript -1
# The package is introducing new services and never has any sysv init
# scripts (bsc#982303).
if [ ! -r /etc/init.d/$initscript ] &&
[ ! -r /etc/init.d/boot.$initscript ]; then
continue
fi
for rcnd in rc2.d rc3.d rc4.d rc5.d boot.d; do
# Was the sysvinit script enabled ? (bsc#982211)
case $rcnd in
boot.d) [ -L /etc/rc.d/boot.d/S??boot.$initscript ] || continue ;;
*) [ -L /etc/rc.d/$rcnd/S??$initscript ] || continue
esac
case $rcnd in
boot.d) runlevel=3 ;;
*) runlevel=${rcnd:2:1}
esac
target=runlevel$runlevel.target
info "enabling $unit (wanted by $target)..."
mkdir -p "/etc/systemd/system/$target.wants"
ln -sf $unit /etc/systemd/system/$target.wants/$service
done
done
;;
*)
usage
exit 1
esac