summaryrefslogtreecommitdiffstats
path: root/debian/systemd.postinst
diff options
context:
space:
mode:
Diffstat (limited to 'debian/systemd.postinst')
-rw-r--r--debian/systemd.postinst59
1 files changed, 48 insertions, 11 deletions
diff --git a/debian/systemd.postinst b/debian/systemd.postinst
index 7019651..f71bf26 100644
--- a/debian/systemd.postinst
+++ b/debian/systemd.postinst
@@ -16,6 +16,18 @@ _update_binfmt() {
_systemctl restart systemd-binfmt.service || true
}
+_restart_managers() {
+ _systemctl daemon-reexec || true
+ # Re-exec user instances so that running user managers are updated too.
+ # SIGRTMIN+25 -> reexec. Note that this is asynchronous, but we can't use
+ # D-Bus as dbus-user-session is not guaranteed to be available.
+ _systemctl kill --kill-whom='main' --signal='SIGRTMIN+25' 'user@*.service' || true
+ # do not restart logind
+ # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919509
+ _systemctl try-restart systemd-networkd.service || true
+ _systemctl try-restart systemd-journald.service || true
+}
+
# Update Message Catalogs database and binfmt registrations in response to dpkg triggers
if [ "$1" = "triggered" ]; then
shift
@@ -27,6 +39,9 @@ if [ "$1" = "triggered" ]; then
/usr/lib/binfmt.d)
_update_binfmt
;;
+ libc-upgrade)
+ _restart_managers
+ ;;
esac
done
exit 0
@@ -51,20 +66,42 @@ fi
_update_catalog
# Move the old locale file into /etc. Symlinks will be created by tmpfiles.d later
-if [ -f /etc/default/locale ] && [ ! -L /etc/default/locale ] && [ ! -f /etc/locale.conf ]; then
- mv /etc/default/locale /etc/locale.conf
+if [ -f "$DPKG_ROOT/etc/default/locale" ] && [ ! -L "$DPKG_ROOT/etc/default/locale" ] && [ ! -f "$DPKG_ROOT/etc/locale.conf" ]; then
+ mv "$DPKG_ROOT/etc/default/locale" "$DPKG_ROOT/etc/locale.conf"
+fi
+
+# On upgrade for now keep the current tmpfiles.d (as it used to be after patches),
+# drop in Forky
+if [ -n "$2" ] && dpkg --compare-versions "$2" lt 256~rc3-3 && [ ! -f "$DPKG_ROOT/etc/tmpfiles.d/tmp.conf" ]; then
+ mkdir -p "$DPKG_ROOT/etc/tmpfiles.d/"
+ echo 'D /tmp 1777 root root -' > "$DPKG_ROOT/etc/tmpfiles.d/tmp.conf"
+fi
+
+# We used to ship tmp.mount in /usr/share as an example, and some users link it in /etc/,
+# remove the link as a workaround until Trixie ships. This method would also have created
+# a link in local-fs.target.wants, so remove that too.
+if [ -n "$2" ] && [ -L "$DPKG_ROOT/etc/systemd/system/tmp.mount" ] && [ "$(readlink "$DPKG_ROOT/etc/systemd/system/tmp.mount")" = "/usr/share/systemd/tmp.mount" ]; then
+ rm -f "$DPKG_ROOT/etc/systemd/system/tmp.mount"
+ rm -f "$DPKG_ROOT/etc/systemd/system/local-fs.target.wants/tmp.mount"
+fi
+
+# The user may have used 'systemctl enable /usr/share/systemd/tmp.mount', which
+# would have created a symlink in the local-fs.target.wants directory (as the
+# pre-Trixie tmp.mount included an [install] section for that purpose). If it
+# exists, remove it.
+if [ -n "$2" ] && [ -L "$DPKG_ROOT/etc/systemd/system/local-fs.target.wants/tmp.mount" ] && [ "$(readlink "$DPKG_ROOT/etc/systemd/system/local-fs.target.wants/tmp.mount")" = "/usr/share/systemd/tmp.mount" ]; then
+ rm -f "$DPKG_ROOT/etc/systemd/system/local-fs.target.wants/tmp.mount"
+fi
+
+# Unless it's already running, ensure /tmp/ does not get overwritten by
+# the tmpfs from tmp.mount in case a unit is later activated that implicitly
+# depends on it (for example with PrivateTmp=yes) by runtime masking it
+if ! _systemctl is-active --quiet tmp.mount; then
+ _systemctl mask --runtime tmp.mount
fi
#DEBHELPER#
if [ -n "$2" ]; then
- _systemctl daemon-reexec || true
- # Re-exec user instances so that running user managers are updated too.
- # SIGRTMIN+25 -> reexec. Note that this is asynchronous, but we can't use
- # D-Bus as dbus-user-session is not guaranteed to be available.
- _systemctl kill --kill-whom='main' --signal='SIGRTMIN+25' 'user@*.service' || true
- # do not restart logind
- # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919509
- _systemctl try-restart systemd-networkd.service || true
- _systemctl try-restart systemd-journald.service || true
+ _restart_managers
fi