summaryrefslogtreecommitdiffstats
path: root/debian/systemd.postinst
blob: f71bf265762e99a5b6f626c3d01de594632623f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/bin/sh

set -e

_systemctl() {
    if [ -z "$DPKG_ROOT" ] && [ -d /run/systemd/system ]; then
        systemctl "$@"
    fi
}

_update_catalog() {
    journalctl ${DPKG_ROOT:+--root="$DPKG_ROOT"} --update-catalog || true
}

_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
    for trigger in $@; do
        case $trigger in
            /usr/lib/systemd/catalog)
                _update_catalog
                ;;
            /usr/lib/binfmt.d)
                _update_binfmt
                ;;
            libc-upgrade)
                _restart_managers
                ;;
        esac
    done
    exit 0
fi

# Enable getty, remote-fs.target and systemd-pstore by default on new installs
if [ -z "$2" ]; then
    systemctl ${DPKG_ROOT:+--root="$DPKG_ROOT"} enable getty@tty1.service || true
    systemctl ${DPKG_ROOT:+--root="$DPKG_ROOT"} enable remote-fs.target || true
    systemctl ${DPKG_ROOT:+--root="$DPKG_ROOT"} enable systemd-pstore.service || true
fi

# Create /etc/machine-id
systemd-machine-id-setup ${DPKG_ROOT:+--root="$DPKG_ROOT"}

# Enable persistent journal, in auto-mode, by default on new installs
if [ -z "$2" ]; then
    mkdir -p "$DPKG_ROOT/var/log/journal"
fi

# Initial update of the Message Catalogs database
_update_catalog

# Move the old locale file into /etc. Symlinks will be created by tmpfiles.d later
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
    _restart_managers
fi