#! /bin/sh

set -e

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

_update_catalog() {
    journalctl --update-catalog || true
}

# Update Message Catalogs database and reload in response to dpkg triggers
if [ "$1" = "triggered" ]; then
    shift
    for trigger in "$@"; do
        case $trigger in
            /usr/lib/systemd/catalog)
                _update_catalog
                ;;
            /etc/init.d)
                _systemctl daemon-reload || true
                ;;
        esac
    done
    exit 0
fi

# Enable getty and remote-fs.target by default on new installs, and on
# upgrades from old systemd versions (where the symlinks included as deb
# content, and will thus have been removed by dpkg during the upgrade).
if dpkg --compare-versions "$2" lt "214-1"; then
    systemctl enable getty@tty1.service || true
    systemctl enable remote-fs.target || true
fi

# Enable timesyncd by default on new installs installs and upgrades
if dpkg --compare-versions "$2" lt "218-11~"; then
    systemctl enable systemd-timesyncd.service || true
fi

# Do a one-time migration of the local time setting
if dpkg --compare-versions "$2" lt "228-5ubuntu3"; then
    if [ -f /etc/default/rcS ]; then
        . /etc/default/rcS
    fi
    if [ "$UTC" = "no" ] && [ ! -e /etc/adjtime ]; then
        printf "0.0 0 0.0\n0\nLOCAL\n" > /etc/adjtime
    fi
fi

# Do a one-time migration of the TMPTIME setting
if dpkg --compare-versions "$2" lt "204-9"; then
    # Fix up potentially broken tmp.conf, see Debian#738862
    if [ -e /etc/tmpfiles.d/tmp.conf ]; then
        sed -i '/^# Clear \/var\/tmp/d' /etc/tmpfiles.d/tmp.conf
        sed -i 's,^\(d /var/tmp\),#\1,g' /etc/tmpfiles.d/tmp.conf
    fi

    if [ -f /etc/default/rcS ]; then
        . /etc/default/rcS
    fi
    if [ ! -e /etc/tmpfiles.d/tmp.conf ]; then
        case "$TMPTIME" in
            -*|infinite|infinity)
                cat > /etc/tmpfiles.d/tmp.conf <<EOF
# Avoid clearing /tmp by shipping an empty /etc/tmpfiles.d/tmp.conf file
# which overrides /usr/lib/tmpfiles.d/tmp.conf.
# This file was automatically created because of local modifications in
# /etc/default/rcS where TMPTIME was set to infinite.
EOF
                ;;
        esac
    fi
fi

# Do a one-time migration of the RAMTMP setting
if dpkg --compare-versions "$2" lt "204-8"; then
    if [ -f /etc/default/rcS ]; then
        . /etc/default/rcS
    fi
    if [ -f /etc/default/tmpfs ]; then
        . /etc/default/tmpfs
    fi
    if [ "$RAMTMP" = "yes" ]; then
        # systemctl enable will work even when systemd is not the active PID 1.
        if [ ! -e /etc/systemd/system/tmp.mount ]; then
            cp /usr/share/systemd/tmp.mount /etc/systemd/system/tmp.mount
            systemctl enable tmp.mount || true
        fi
    fi
fi

# Create /etc/machine-id
systemd-machine-id-setup

# Setup system users and groups
addgroup --system systemd-journal

adduser --quiet --system --group --no-create-home --home /run/systemd \
    --gecos "systemd Time Synchronization" systemd-timesync
adduser --quiet --system --group --no-create-home --home /run/systemd/netif \
    --gecos "systemd Network Management" systemd-network
adduser --quiet --system --group --no-create-home --home /run/systemd/resolve \
    --gecos "systemd Resolver" systemd-resolve
adduser --quiet --system --group --no-create-home --home /run/systemd \
    --gecos "systemd Bus Proxy" systemd-bus-proxy

# Initial update of the Message Catalogs database
_update_catalog

# Make systemd-detect-virt utility usable for non-root users
setcap cap_dac_override,cap_sys_ptrace=ep /usr/bin/systemd-detect-virt || true

# Re-run systemctl enable for any service that was enabled when preinst was run.
if dpkg --compare-versions "$2" ge "204" && [ -e /run/systemd/was-enabled ]; then
    while read UNIT ; do
        # 220-6 stopped shipping tmp.mount, transition it on machines which had
        # it enabled
        if [ "$UNIT" = tmp.mount ] && dpkg --compare-versions "$2" lt-nl "220-6~"; then
            if [ ! -e /etc/systemd/system/tmp.mount ]; then
                echo "moving enabled tmp.mount to /etc/systemd/system/..."
                cp /usr/share/systemd/tmp.mount /etc/systemd/system/tmp.mount
                # clean up the symlink, to have it re-created below
                systemctl disable $UNIT
            fi
        fi
        systemctl enable $UNIT || true
    done </run/systemd/was-enabled || true
fi

if [ -n "$2" ]; then
    _systemctl daemon-reexec || true
    # don't restart logind; this can be done again once this gets implemented:
    # https://github.com/systemd/systemd/issues/1163
    _systemctl try-restart systemd-networkd.service || true
    _systemctl try-restart systemd-resolved.service || true
    _systemctl try-restart systemd-timesyncd.service || true
fi

# Cleanup hwclock-save.service, which was shipped in jessie.
if dpkg --compare-versions "$2" lt-nl "228-5~"; then
   for t in reboot halt poweroff ; do
       rm -f /etc/systemd/system/${t}.target.wants/hwclock-save.service
       rmdir --ignore-fail-on-non-empty /etc/systemd/system/${t}.target.wants 2> /dev/null || true
   done
fi

# start systemd-networkd-resolvconf-update.path on first install/upgrade if
# required
if _systemctl is-active --quiet resolvconf; then
    _systemctl start systemd-networkd-resolvconf-update.path || true
fi

# migrate mountall specific fstab options to standard util-linux "nofail" option
if dpkg --compare-versions "$2" lt "221-1" && [ -w /etc/fstab ]; then
    if awk '{ gsub(/^nobootwait/, "nofail", $4); gsub(/,nobootwait/, ",nofail", $4); gsub(/^optional/, "nofail", $4); gsub(/,optional/, ",nofail", $4); print }' /etc/fstab > /etc/fstab.new; then
        if cmp --quiet /etc/fstab /etc/fstab.new; then
            rm /etc/fstab.new  # nothing to migrate
        else
            echo "Replacing obsolete mountall options in /etc/fstab... (backup in /etc/fstab.mountall)"
            mv /etc/fstab /etc/fstab.mountall
            mv /etc/fstab.new /etc/fstab
        fi
    else
        echo "WARNING! Could not create /etc/fstab.new for migrating obsolete mountall options" >&2
    fi
fi

# Process all tmpfiles that we ship, including any overrides in
# runtime-dir/sysadmin-dir/other packages (e.g. rsyslog)
#
# Ignore if this fails, because e.g. %b will fail on WSL
systemd-tmpfiles --create || :

# Automatically added by dh_installdeb
dpkg-maintscript-helper rm_conffile /etc/bash_completion.d/systemctl-bash-completion.sh 204-1~ -- "$@"
# End automatically added section
# Automatically added by dh_installdeb
dpkg-maintscript-helper rm_conffile /etc/bash_completion.d/systemd-bash-completion.sh 204-1~ -- "$@"
# End automatically added section
# Automatically added by dh_installdeb
dpkg-maintscript-helper mv_conffile /etc/systemd/systemd-logind.conf /etc/systemd/logind.conf 204-1~ -- "$@"
# End automatically added section
# Automatically added by dh_installdeb
dpkg-maintscript-helper mv_conffile /etc/systemd/systemd-journald.conf /etc/systemd/journald.conf 204-1~ -- "$@"
# End automatically added section
# Automatically added by dh_installdeb
dpkg-maintscript-helper rm_conffile /etc/dbus-1/system.d/org.freedesktop.machine1.conf 228-5~ -- "$@"
# End automatically added section
# Automatically added by dh_installdeb
dpkg-maintscript-helper rm_conffile /etc/X11/xinit/xinitrc.d/50-systemd-user.sh 228-3~ -- "$@"
# End automatically added section

