The rauc hook for the spl slotclass writes to the disk directly. Make sure the changes do not end up in cache in case the device looses power or is otherwise not properly rebooted. Also use the same partition label detection we are using in hassos-expand.
82 lines
2.1 KiB
Bash
Executable File
82 lines
2.1 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
##
|
|
# Hooks
|
|
|
|
case "$1" in
|
|
install-check)
|
|
if [ "$RAUC_MF_COMPATIBLE" = "$RAUC_SYSTEM_COMPATIBLE" ]; then
|
|
exit 0
|
|
fi
|
|
# Be compatible with hassos OS ID
|
|
# shellcheck disable=SC3060
|
|
rauc_os_compatible=${RAUC_MF_COMPATIBLE/haos-/hassos-}
|
|
if [ "$rauc_os_compatible" = "$RAUC_SYSTEM_COMPATIBLE" ]; then
|
|
exit 0
|
|
fi
|
|
# generic-x86-64: Be compatible with intel-nuc
|
|
# shellcheck disable=SC3060
|
|
rauc_board_compatible=${rauc_os_compatible/generic-x86-64/intel-nuc}
|
|
if [ "${rauc_board_compatible}" = "$RAUC_SYSTEM_COMPATIBLE" ]; then
|
|
exit 0
|
|
fi
|
|
echo "Compatible does not match!" 1>&2
|
|
exit 10
|
|
;;
|
|
slot-install)
|
|
# Use install handlers below
|
|
;;
|
|
*)
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Handle boot hocks
|
|
if [ "${RAUC_SLOT_CLASS}" = "boot" ]; then
|
|
BOOT_TMP=/tmp/boot-tmp
|
|
BOOT_NEW=/tmp/boot-new
|
|
BOOT_MNT=/mnt/boot
|
|
|
|
mkdir -p "${BOOT_TMP}"
|
|
mkdir -p "${BOOT_NEW}"
|
|
|
|
# Mount boot
|
|
if ! systemctl -q is-active mnt-boot.mount; then
|
|
systemctl start mnt-boot.mount
|
|
fi
|
|
mount "${RAUC_IMAGE_NAME}" "${BOOT_NEW}"
|
|
|
|
# Backup boot config
|
|
cp -f "${BOOT_MNT}"/*.txt "${BOOT_TMP}/"
|
|
|
|
# Update
|
|
cp -rf "${BOOT_NEW}"/* "${BOOT_MNT}/"
|
|
|
|
# Restore boot config
|
|
cp -f "${BOOT_TMP}"/*.txt "${BOOT_MNT}/"
|
|
|
|
umount "${BOOT_NEW}"
|
|
rm -rf "${BOOT_TMP}" "${BOOT_NEW}"
|
|
fi
|
|
|
|
# Handle spl install
|
|
if [ "${RAUC_SLOT_CLASS}" = "spl" ]; then
|
|
DEVICE_CHILD="$(findfs LABEL="hassos-boot")"
|
|
DEVICE_ROOT="/dev/$(lsblk -no pkname "${DEVICE_CHILD}")"
|
|
PART_TABLE="$(sfdisk -lqJ "${DEVICE_ROOT}")"
|
|
PART_LABEL="$(echo "${PART_TABLE}" | jq -r '.partitiontable.label')"
|
|
|
|
if [ "${PART_LABEL}" = "gpt" ]; then
|
|
dd if="${RAUC_IMAGE_NAME}" of="${DEVICE_ROOT}" conv=notrunc oflag=direct bs=512 seek=2 skip=2
|
|
else
|
|
dd if="${RAUC_IMAGE_NAME}" of="${DEVICE_ROOT}" conv=notrunc oflag=direct bs=1 count=440
|
|
dd if="${RAUC_IMAGE_NAME}" of="${DEVICE_ROOT}" conv=notrunc oflag=direct bs=512 seek=1 skip=1
|
|
fi
|
|
fi
|
|
|
|
##
|
|
# Fixups
|
|
|
|
|
|
exit 0
|