mirror of
https://github.com/home-assistant/operating-system.git
synced 2026-04-19 08:19:50 +01:00
Generate version information for RAUC when rauc.db is empty (#3436)
RAUC currently doesn't know the version of the booted slot when booted for the first time or after wiping the data partition. As a result `ha os info` is missing this information too. As there's no built-in mechanism for generating these data by RAUC itself, add a oneshot service that checks if the boot slot information is contained in the rauc.db and if not, then generate it. RAUC seems to cope quite well even with bogus data contained in rauc.db but in any case, a test has been added to check that everything works as expected.
This commit is contained in:
39
buildroot-external/rootfs-overlay/usr/libexec/raucdb-update
Executable file
39
buildroot-external/rootfs-overlay/usr/libexec/raucdb-update
Executable file
@@ -0,0 +1,39 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -e
|
||||
|
||||
if grep -q 'slot\.boot\.0' /mnt/data/rauc.db; then
|
||||
echo "[INFO] rauc.db already contains slot information"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "[INFO] Generating rauc.db from os-release data"
|
||||
|
||||
eval "$(rauc status --output-format=shell)"
|
||||
|
||||
if [ -z "${RAUC_SYSTEM_BOOTED_BOOTNAME}" ]; then
|
||||
echo "[ERROR] RAUC_SYSTEM_BOOTED_BOOTNAME is empty"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
CURRENT_SLOT_ID=$(test "${RAUC_SYSTEM_BOOTED_BOOTNAME}" = "A" && echo 0 || echo 1)
|
||||
|
||||
. /etc/os-release
|
||||
|
||||
cat >> /mnt/data/rauc.db <<EOF
|
||||
|
||||
[slot.boot.0]
|
||||
bundle.compatible=${RAUC_SYSTEM_COMPATIBLE}
|
||||
bundle.version=${VERSION_ID}
|
||||
|
||||
[slot.kernel.${CURRENT_SLOT_ID}]
|
||||
bundle.compatible=${RAUC_SYSTEM_COMPATIBLE}
|
||||
bundle.version=${VERSION_ID}
|
||||
|
||||
[slot.rootfs.${CURRENT_SLOT_ID}]
|
||||
bundle.compatible=${RAUC_SYSTEM_COMPATIBLE}
|
||||
bundle.version=${VERSION_ID}
|
||||
EOF
|
||||
|
||||
/usr/bin/systemctl restart rauc.service
|
||||
Reference in New Issue
Block a user