- Import preset macros from systemd-rpm-macro and convert them into scripts. Presets are not supposed to be shipped by other packages as the default policy needs to be reviewed by the secteam. Therefore don't encourage packagers to do that and make those macros private to this package. Also convert them into real scripts so they're much easier to maintain and debug. Also working in %posttrans is unneeded as this package is assumed to be the only one to update the preset. - There's no need to reload the daemon configuration as presets are not part of the dameon config. OBS-URL: https://build.opensuse.org/request/show/445123 OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd-presets-branding-openSUSE?expand=0&rev=83
121 lines
2.6 KiB
Bash
121 lines
2.6 KiB
Bash
#! /bin/bash
|
|
#
|
|
# Written by sbrabec@suse.com
|
|
#
|
|
declare -a PRESET_FILES
|
|
declare -A PRESETS
|
|
declare -A PRESETS_OLD
|
|
declare -A PRESETS_OLD_WILDCARD
|
|
declare -A PRESETS_WILDCARD
|
|
|
|
save_preset_states () {
|
|
PRESET_FILES=(*.preset)
|
|
|
|
for ((i=${#PRESET_FILES[@]}-1 ; i>= 0 ; i-- )) ; do
|
|
FILE=${PRESET_FILES[i]}
|
|
exec 3<"$FILE"
|
|
while read -u3 ENABLE SERVICE PAD ; do
|
|
if test -z "$SERVICE" ; then
|
|
continue;
|
|
fi
|
|
case "$ENABLE" in
|
|
enable|disable)
|
|
PRESETS[$SERVICE]=$ENABLE;;
|
|
esac
|
|
done
|
|
exec 3<&-
|
|
done
|
|
exec 3>systemd_preset-old.rpm-tmp
|
|
for PRESET in "${!PRESETS[@]}" ; do
|
|
echo >&3 "${PRESETS[$PRESET]} $PRESET"
|
|
done
|
|
exec 3>&-
|
|
}
|
|
|
|
apply_preset_state_changes () {
|
|
if ! test -f systemd_preset-old.rpm-tmp ; then
|
|
return
|
|
fi
|
|
exec 3<systemd_preset-old.rpm-tmp
|
|
while read -u3 ENABLE SERVICE PAD ; do
|
|
if test -z "$SERVICE" ; then
|
|
continue
|
|
fi
|
|
case "$ENABLE" in
|
|
enable|disable)
|
|
case $SERVICE in
|
|
*"*"*|*"?"*) PRESETS_OLD_WILDCARD[$SERVICE]=$ENABLE;;
|
|
*) PRESETS_OLD[$SERVICE]=$ENABLE;;
|
|
esac
|
|
esac
|
|
done
|
|
exec 3<&-
|
|
PRESET_FILES=(*.preset)
|
|
for ((i=${#PRESET_FILES[@]}-1 ; i>= 0 ; i-- )) ; do
|
|
FILE=${PRESET_FILES[i]}
|
|
exec 3<"$FILE"
|
|
while read -u3 ENABLE SERVICE PAD ; do
|
|
if test -z "$SERVICE" ; then
|
|
continue
|
|
fi
|
|
case "$ENABLE" in
|
|
enable|disable)
|
|
case $SERVICE in
|
|
*"*"*|*"?"*) PRESETS_WILDCARD[$SERVICE]=$ENABLE;;
|
|
*) PRESETS[$SERVICE]=$ENABLE;;
|
|
esac
|
|
esac
|
|
done
|
|
exec 3<&-
|
|
done
|
|
if test -x /usr/bin/systemctl ; then
|
|
/usr/bin/systemctl --type=service,socket list-unit-files
|
|
fi >systemd_preset-states.rpm-tmp
|
|
exec 3<systemd_preset-states.rpm-tmp
|
|
read -u3 PAD
|
|
while read -u3 SERVICE ENABLE PAD ; do
|
|
if test -z "$SERVICE" ; then
|
|
break
|
|
fi
|
|
# FIXME: This is not strictly correct as associative
|
|
# arrays are not ordered.
|
|
ENABLE_OLD=enable
|
|
for PRESET in "${!PRESETS_OLD_WILDCARD[@]}" ; do
|
|
case "$SERVICE" in
|
|
$PRESET) ENABLE_OLD=${PRESETS_OLD_WILDCARD[$PRESET]};;
|
|
esac
|
|
done
|
|
if test -n "${PRESETS_OLD[$SERVICE]}" ; then
|
|
ENABLE_OLD="${PRESETS_OLD[$SERVICE]}"
|
|
fi
|
|
ENABLE_NEW=enable
|
|
for PRESET in "${!PRESETS_WILDCARD[@]}" ; do
|
|
case "$SERVICE" in
|
|
$PRESET) ENABLE_NEW=${PRESETS_WILDCARD[$PRESET]};;
|
|
esac
|
|
done
|
|
if test -n "${PRESETS[$SERVICE]}" ; then
|
|
ENABLE_NEW="${PRESETS[$SERVICE]}"
|
|
fi
|
|
if test "$ENABLE_OLD" != "$ENABLE_NEW" ; then
|
|
echo "Resetting $SERVICE to the new default: $ENABLE_NEW"
|
|
/usr/bin/systemctl preset "$SERVICE" || :
|
|
fi
|
|
done
|
|
exec 3<&-
|
|
rm -f systemd_preset-{old,states}.rpm-tmp
|
|
}
|
|
|
|
|
|
cd /usr/lib/systemd/system-preset
|
|
|
|
case $1 in
|
|
apply-changes)
|
|
apply_preset_state_changes ;;
|
|
save)
|
|
save_preset_states ;;
|
|
*)
|
|
echo >&2 "Unkown command '$1'"
|
|
exit 1
|
|
esac
|