diff --git a/buildroot-external/Config.in b/buildroot-external/Config.in index 0e4bdc0c8..bf0dc810c 100644 --- a/buildroot-external/Config.in +++ b/buildroot-external/Config.in @@ -10,5 +10,6 @@ source "$BR2_EXTERNAL_HASSOS_PATH/package/udisks2/Config.in" source "$BR2_EXTERNAL_HASSOS_PATH/package/eq3_char_loop/Config.in" source "$BR2_EXTERNAL_HASSOS_PATH/package/generic_raw_uart/Config.in" source "$BR2_EXTERNAL_HASSOS_PATH/package/rpi-rf-mod/Config.in" +source "$BR2_EXTERNAL_HASSOS_PATH/package/tempio/Config.in.host" source "$BR2_EXTERNAL_HASSOS_PATH/package/xe-guest-utilities/Config.in" source "$BR2_EXTERNAL_HASSOS_PATH/package/rtl88x2bu/Config.in" diff --git a/buildroot-external/configs/generic_aarch64_defconfig b/buildroot-external/configs/generic_aarch64_defconfig index 75bc3b82a..e46e86c58 100644 --- a/buildroot-external/configs/generic_aarch64_defconfig +++ b/buildroot-external/configs/generic_aarch64_defconfig @@ -119,6 +119,7 @@ BR2_PACKAGE_USB_MODESWITCH_DATA=y BR2_PACKAGE_HOST_E2FSPROGS=y BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_HOST_TEMPIO=y BR2_PACKAGE_HASSIO=y BR2_PACKAGE_HASSIO_ARCH="aarch64" BR2_PACKAGE_HASSIO_MACHINE="qemuarm-64" diff --git a/buildroot-external/configs/generic_x86_64_defconfig b/buildroot-external/configs/generic_x86_64_defconfig index a01aeecee..645ad7c67 100644 --- a/buildroot-external/configs/generic_x86_64_defconfig +++ b/buildroot-external/configs/generic_x86_64_defconfig @@ -109,6 +109,7 @@ BR2_PACKAGE_HOST_E2FSPROGS=y BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_HOST_TEMPIO=y BR2_PACKAGE_HASSIO=y BR2_PACKAGE_HASSIO_ARCH="amd64" BR2_PACKAGE_HASSIO_MACHINE="generic-x86-64" diff --git a/buildroot-external/configs/khadas_vim3_defconfig b/buildroot-external/configs/khadas_vim3_defconfig index eb569f5a2..95fc431e6 100644 --- a/buildroot-external/configs/khadas_vim3_defconfig +++ b/buildroot-external/configs/khadas_vim3_defconfig @@ -107,6 +107,7 @@ BR2_PACKAGE_HOST_E2FSPROGS=y BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_HOST_TEMPIO=y BR2_PACKAGE_HASSIO=y BR2_PACKAGE_HASSIO_ARCH="aarch64" BR2_PACKAGE_HASSIO_MACHINE="odroid-n2" diff --git a/buildroot-external/configs/odroid_c2_defconfig b/buildroot-external/configs/odroid_c2_defconfig index cb9118e4f..02b1c658d 100644 --- a/buildroot-external/configs/odroid_c2_defconfig +++ b/buildroot-external/configs/odroid_c2_defconfig @@ -107,6 +107,7 @@ BR2_PACKAGE_HOST_E2FSPROGS=y BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_HOST_TEMPIO=y BR2_PACKAGE_HASSIO=y BR2_PACKAGE_HASSIO_ARCH="aarch64" BR2_PACKAGE_HASSIO_MACHINE="odroid-c2" diff --git a/buildroot-external/configs/odroid_c4_defconfig b/buildroot-external/configs/odroid_c4_defconfig index 64edb90e9..8ddfcdcb8 100644 --- a/buildroot-external/configs/odroid_c4_defconfig +++ b/buildroot-external/configs/odroid_c4_defconfig @@ -107,6 +107,7 @@ BR2_PACKAGE_HOST_E2FSPROGS=y BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_HOST_TEMPIO=y BR2_PACKAGE_HASSIO=y BR2_PACKAGE_HASSIO_ARCH="aarch64" BR2_PACKAGE_HASSIO_MACHINE="odroid-c4" diff --git a/buildroot-external/configs/odroid_n2_defconfig b/buildroot-external/configs/odroid_n2_defconfig index e7368b0b7..7d095e69e 100644 --- a/buildroot-external/configs/odroid_n2_defconfig +++ b/buildroot-external/configs/odroid_n2_defconfig @@ -107,6 +107,7 @@ BR2_PACKAGE_HOST_E2FSPROGS=y BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_HOST_TEMPIO=y BR2_PACKAGE_HASSIO=y BR2_PACKAGE_HASSIO_ARCH="aarch64" BR2_PACKAGE_HASSIO_MACHINE="odroid-n2" diff --git a/buildroot-external/configs/odroid_xu4_defconfig b/buildroot-external/configs/odroid_xu4_defconfig index c55fc40d0..e911539dd 100644 --- a/buildroot-external/configs/odroid_xu4_defconfig +++ b/buildroot-external/configs/odroid_xu4_defconfig @@ -109,6 +109,7 @@ BR2_PACKAGE_HOST_E2FSPROGS=y BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_HOST_TEMPIO=y BR2_PACKAGE_HASSIO=y BR2_PACKAGE_HASSIO_ARCH="armv7" BR2_PACKAGE_HASSIO_MACHINE="odroid-xu" diff --git a/buildroot-external/configs/ova_defconfig b/buildroot-external/configs/ova_defconfig index 9ce06a141..a2ef60ee4 100644 --- a/buildroot-external/configs/ova_defconfig +++ b/buildroot-external/configs/ova_defconfig @@ -112,6 +112,8 @@ BR2_PACKAGE_HOST_E2FSPROGS=y BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_HOST_TEMPIO=y +BR2_PACKAGE_HOST_TEMPIO=y BR2_PACKAGE_HASSIO=y BR2_PACKAGE_HASSIO_ARCH="amd64" BR2_PACKAGE_HASSIO_MACHINE="qemux86-64" diff --git a/buildroot-external/configs/rpi2_defconfig b/buildroot-external/configs/rpi2_defconfig index feecd9fdb..489533afc 100644 --- a/buildroot-external/configs/rpi2_defconfig +++ b/buildroot-external/configs/rpi2_defconfig @@ -110,6 +110,7 @@ BR2_PACKAGE_HOST_E2FSPROGS=y BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_HOST_TEMPIO=y BR2_PACKAGE_HASSIO=y BR2_PACKAGE_HASSIO_ARCH="armv7" BR2_PACKAGE_HASSIO_MACHINE="raspberrypi2" diff --git a/buildroot-external/configs/rpi3_64_defconfig b/buildroot-external/configs/rpi3_64_defconfig index b3575eebe..aa25c1f96 100644 --- a/buildroot-external/configs/rpi3_64_defconfig +++ b/buildroot-external/configs/rpi3_64_defconfig @@ -111,6 +111,7 @@ BR2_PACKAGE_HOST_E2FSPROGS=y BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_HOST_TEMPIO=y BR2_PACKAGE_HASSIO=y BR2_PACKAGE_HASSIO_ARCH="aarch64" BR2_PACKAGE_HASSIO_MACHINE="raspberrypi3-64" diff --git a/buildroot-external/configs/rpi3_defconfig b/buildroot-external/configs/rpi3_defconfig index 09b784d4c..9d467934a 100644 --- a/buildroot-external/configs/rpi3_defconfig +++ b/buildroot-external/configs/rpi3_defconfig @@ -111,6 +111,7 @@ BR2_PACKAGE_HOST_E2FSPROGS=y BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_HOST_TEMPIO=y BR2_PACKAGE_HASSIO=y BR2_PACKAGE_HASSIO_ARCH="armv7" BR2_PACKAGE_HASSIO_MACHINE="raspberrypi3" diff --git a/buildroot-external/configs/rpi4_64_defconfig b/buildroot-external/configs/rpi4_64_defconfig index bf1ed8a90..88e211ac0 100644 --- a/buildroot-external/configs/rpi4_64_defconfig +++ b/buildroot-external/configs/rpi4_64_defconfig @@ -113,6 +113,7 @@ BR2_PACKAGE_HOST_E2FSPROGS=y BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_HOST_TEMPIO=y BR2_PACKAGE_HASSIO=y BR2_PACKAGE_HASSIO_ARCH="aarch64" BR2_PACKAGE_HASSIO_MACHINE="raspberrypi4-64" diff --git a/buildroot-external/configs/rpi4_defconfig b/buildroot-external/configs/rpi4_defconfig index af7b188a6..b6d1aed54 100644 --- a/buildroot-external/configs/rpi4_defconfig +++ b/buildroot-external/configs/rpi4_defconfig @@ -111,6 +111,7 @@ BR2_PACKAGE_HOST_E2FSPROGS=y BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_HOST_TEMPIO=y BR2_PACKAGE_HASSIO=y BR2_PACKAGE_HASSIO_ARCH="armv7" BR2_PACKAGE_HASSIO_MACHINE="raspberrypi4" diff --git a/buildroot-external/configs/tinker_defconfig b/buildroot-external/configs/tinker_defconfig index bab6d040c..b4767fc68 100644 --- a/buildroot-external/configs/tinker_defconfig +++ b/buildroot-external/configs/tinker_defconfig @@ -114,6 +114,7 @@ BR2_PACKAGE_HOST_E2FSPROGS=y BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_HOST_TEMPIO=y BR2_PACKAGE_HASSIO=y BR2_PACKAGE_HASSIO_ARCH="armv7" BR2_PACKAGE_HASSIO_MACHINE="tinker" diff --git a/buildroot-external/configs/yellow_defconfig b/buildroot-external/configs/yellow_defconfig index 49c818fe1..6461bd263 100644 --- a/buildroot-external/configs/yellow_defconfig +++ b/buildroot-external/configs/yellow_defconfig @@ -112,6 +112,7 @@ BR2_PACKAGE_HOST_E2FSPROGS=y BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_HOST_TEMPIO=y BR2_PACKAGE_HASSIO=y BR2_PACKAGE_HASSIO_ARCH="aarch64" BR2_PACKAGE_HASSIO_MACHINE="raspberrypi4-64" diff --git a/buildroot-external/ota/manifest.raucm.gtpl b/buildroot-external/ota/manifest.raucm.gtpl new file mode 100644 index 000000000..0a1ea379a --- /dev/null +++ b/buildroot-external/ota/manifest.raucm.gtpl @@ -0,0 +1,26 @@ +[update] +compatible={{ env "ota_compatible" }} +version={{ env "ota_version" }} + +[hooks] +filename=hook +hooks=install-check; + +[image.boot] +filename=boot.vfat +hooks=install; + +[image.kernel] +filename=kernel.img +{{- if eq (env "BOOTLOADER") "grub" }} +hooks=post-install; +{{- end }} + +[image.rootfs] +filename=rootfs.img + +{{- if eq (env "BOOT_SPL") "true" }} +[image.spl] +filename=spl.img +hooks=install +{{- end }} diff --git a/buildroot-external/ota/system.conf.gtpl b/buildroot-external/ota/system.conf.gtpl new file mode 100644 index 000000000..19baaafd5 --- /dev/null +++ b/buildroot-external/ota/system.conf.gtpl @@ -0,0 +1,45 @@ +[system] +compatible={{ env "ota_compatible" }} +mountprefix=/run/rauc +statusfile=/mnt/data/rauc.db +bootloader={{ env "BOOTLOADER" }} +{{- if eq (env "BOOTLOADER") "grub" }} +{{- if eq (env "BOOT_SYS") "efi" }} +grubenv=/mnt/boot/EFI/BOOT/grubenv +{{- else }} +grubenv=/mnt/boot/grubenv +{{- end }} +{{- end }} + +[keyring] +path=/etc/rauc/keyring.pem + +[slot.boot.0] +device=/dev/disk/by-partlabel/hassos-boot +type=vfat +allow-mounted=true +{{- if eq (env "BOOT_SPL") "true" }} +[slot.spl.0] +device=/dev/disk/by-partlabel/hassos-boot +type=raw +{{- end }} + +[slot.kernel.0] +device=/dev/disk/by-partlabel/hassos-kernel0 +type=raw +bootname=A + +[slot.rootfs.0] +device=/dev/disk/by-partlabel/hassos-system0 +type=raw +parent=kernel.0 + +[slot.kernel.1] +device=/dev/disk/by-partlabel/hassos-kernel1 +type=raw +bootname=B + +[slot.rootfs.1] +device=/dev/disk/by-partlabel/hassos-system1 +type=raw +parent=kernel.1 diff --git a/buildroot-external/package/tempio/Config.in.host b/buildroot-external/package/tempio/Config.in.host new file mode 100644 index 000000000..a212eb3c4 --- /dev/null +++ b/buildroot-external/package/tempio/Config.in.host @@ -0,0 +1,5 @@ +config BR2_PACKAGE_HOST_TEMPIO + bool "Home Assistant tempio" + depends on BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS + help + Install Home Assistant template helper. diff --git a/buildroot-external/package/tempio/tempio.mk b/buildroot-external/package/tempio/tempio.mk new file mode 100644 index 000000000..d3f058e01 --- /dev/null +++ b/buildroot-external/package/tempio/tempio.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# Home Assistant tempio +# +################################################################################ + +TEMPIO_VERSION = 2021.09.0 +TEMPIO_SITE = $(call github,home-assistant,tempio,$(TEMPIO_VERSION)) +TEMPIO_LICENSE = Apache License 2.0 +TEMPIO_LICENSE_FILES = LICENSE +TEMPIO_GOMOD = github.com/home-assistant/tempio +TEMPIO_LDFLAGS = -X main.version=$(TEMPIO_VERSION) + +define TEMPIO_GO_VENDORING + (cd $(@D); \ + $(HOST_DIR)/bin/go mod vendor) +endef + +TEMPIO_POST_PATCH_HOOKS += TEMPIO_GO_VENDORING + +$(eval $(golang-package)) +$(eval $(host-golang-package)) diff --git a/buildroot-external/scripts/ota.sh b/buildroot-external/scripts/ota.sh index c4d344ce6..f461ca57e 100755 --- a/buildroot-external/scripts/ota.sh +++ b/buildroot-external/scripts/ota.sh @@ -3,6 +3,8 @@ function create_ota_update() { local ota_file="$(hassos_image_name raucb)" + local ota_compatible="$(hassos_rauc_compatible)" + local ota_version="$(hassos_version)" local rauc_folder="${BINARIES_DIR}/rauc" local boot="${BINARIES_DIR}/boot.vfat" local kernel="${BINARIES_DIR}/kernel.img" @@ -26,35 +28,17 @@ function create_ota_update() { cp -f "${rootfs}" "${rauc_folder}/rootfs.img" cp -f "${BR2_EXTERNAL_HASSOS_PATH}/ota/rauc-hook" "${rauc_folder}/hook" - ( - echo "[update]" - echo "compatible=$(hassos_rauc_compatible)" - echo "version=$(hassos_version)" - echo "[hooks]" - echo "filename=hook" - echo "hooks=install-check" - echo "[image.boot]" - echo "filename=boot.vfat" - echo "hooks=install" - echo "[image.kernel]" - echo "filename=kernel.img" - if [ "${BOOTLOADER}" == "grub" ]; then - echo "hooks=post-install" - fi - echo "[image.rootfs]" - echo "filename=rootfs.img" - ) > "${rauc_folder}/manifest.raucm" - # SPL if [ "${BOOT_SPL}" == "true" ]; then cp -f "${spl}" "${rauc_folder}/spl.img" - - ( - echo "[image.spl]" - echo "filename=spl.img" - echo "hooks=install" - ) >> "${rauc_folder}/manifest.raucm" fi + export BOOTLOADER BOOT_SPL + export ota_compatible ota_version + ( + "${HOST_DIR}/bin/host-tempio" \ + -template "${BR2_EXTERNAL_HASSOS_PATH}/ota/manifest.raucm.gtpl" + ) > "${rauc_folder}/manifest.raucm" + rauc bundle -d --cert="${cert}" --key="${key}" --keyring="${keyring}" "${rauc_folder}" "${ota_file}" } diff --git a/buildroot-external/scripts/rauc.sh b/buildroot-external/scripts/rauc.sh index 7924f58d3..38a45048b 100755 --- a/buildroot-external/scripts/rauc.sh +++ b/buildroot-external/scripts/rauc.sh @@ -1,73 +1,20 @@ #!/bin/bash set -e -function _create_rauc_header() { - ( - echo "[system]" - echo "compatible=$(hassos_rauc_compatible)" - echo "mountprefix=/run/rauc" - echo "statusfile=/mnt/data/rauc.db" - echo "bootloader=${BOOTLOADER}" - if [ "${BOOTLOADER}" == "grub" ]; then - if [ "${BOOT_SYS}" == "efi" ]; then - echo "grubenv=/mnt/boot/EFI/BOOT/grubenv" - else - echo "grubenv=/mnt/boot/grubenv" - fi - fi - - echo "[keyring]" - echo "path=/etc/rauc/keyring.pem" - ) > "${TARGET_DIR}/etc/rauc/system.conf" -} - - -function _write_rauc_boot() { - ( - echo "[slot.boot.0]" - echo "device=/dev/disk/by-partlabel/hassos-boot" - echo "type=vfat" - echo "allow-mounted=true" - ) >> "${TARGET_DIR}/etc/rauc/system.conf" - - # SPL - if ! [ "${BOOT_SPL}" == "true" ]; then - return 0 - fi - - ( - echo "[slot.spl.0]" - echo "device=/dev/disk/by-partlabel/hassos-boot" - echo "type=raw" - ) >> "${TARGET_DIR}/etc/rauc/system.conf" -} - - -function _write_rauc_system() { - local slot_num=${1} - local slot_name=${2} - - ( - echo "[slot.kernel.${slot_num}]" - echo "device=/dev/disk/by-partlabel/hassos-kernel${slot_num}" - echo "type=raw" - echo "bootname=${slot_name}" - - echo "[slot.rootfs.${slot_num}]" - echo "device=/dev/disk/by-partlabel/hassos-system${slot_num}" - echo "type=raw" - echo "parent=kernel.${slot_num}" - ) >> "${TARGET_DIR}/etc/rauc/system.conf" -} - function write_rauc_config() { mkdir -p "${TARGET_DIR}/etc/rauc" - _create_rauc_header - _write_rauc_boot - _write_rauc_system 0 A - _write_rauc_system 1 B + local ota_compatible + ota_compatible="$(hassos_rauc_compatible)" + + export ota_compatible + export BOOTLOADER BOOT_SYS BOOT_SPL + + ( + "${HOST_DIR}/bin/host-tempio" \ + -template "${BR2_EXTERNAL_HASSOS_PATH}/ota/system.conf.gtpl" + ) > "${TARGET_DIR}/etc/rauc/system.conf" }