54 lines
1.4 KiB
Bash
Executable File
54 lines
1.4 KiB
Bash
Executable File
#!/bin/sh
|
||
|
||
set -eu
|
||
|
||
ZSYS_SNAPSHOT_UUFILE="/var/run/zsys-snapshot.unattended-upgrades"
|
||
ZSYS_UPDATEOOTMENU_UUFILE="/var/run/zsys-bootmenu.unattended-upgrades"
|
||
UUPIDFILE="/var/run/unattended-upgrades.pid"
|
||
|
||
# Return 0 unattended-upgrade isn’t running or if we didn’t proceeded the action for it yet.
|
||
can_run() {
|
||
local zsys_uufile="$1"
|
||
local uupid=""
|
||
|
||
# Not running under unattended-upgraded (no pid file)
|
||
if [ ! -f "${UUPIDFILE}" ]; then
|
||
rm -f "${zsys_uufile}"
|
||
return 0
|
||
fi
|
||
|
||
# Not running under unattended-upgraded (unattended upgrade has a leftover pid file)
|
||
uupid="$(cat $UUPIDFILE)"
|
||
if ! kill -0 $uupid 2>/dev/null; then
|
||
rm -f "${zsys_uufile}"
|
||
return 0
|
||
fi
|
||
|
||
# unattended-upgraded is running, do we have a matching pid file stored?
|
||
if [ -f "${zsys_uufile}" ]; then
|
||
zuupid="$(cat ${zsys_uufile})"
|
||
# We took a snapshot on that unattended-upgrades run. Nothing to do
|
||
if [ "$uupid" = "$zuupid" ]; then
|
||
return 1
|
||
fi
|
||
fi
|
||
|
||
cp "${UUPIDFILE}" "${zsys_uufile}"
|
||
return 0
|
||
}
|
||
|
||
zsys_uufile="${ZSYS_SNAPSHOT_UUFILE}"
|
||
if [ "$1" = "update-menu" ]; then
|
||
zsys_uufile="${ZSYS_UPDATEOOTMENU_UUFILE}"
|
||
fi
|
||
|
||
if ! can_run "${zsys_uufile}"; then
|
||
exit 0
|
||
fi
|
||
|
||
if [ "$1" = "update-menu" ]; then
|
||
zsysctl boot update-menu --auto
|
||
else
|
||
zsysctl state save --system --no-update-bootmenu --auto
|
||
fi
|