diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..34991bff5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/release +*.pem diff --git a/buildroot-external/board/ova/info b/buildroot-external/board/ova/info index 2ce3bc85c..1c591f9df 100644 --- a/buildroot-external/board/ova/info +++ b/buildroot-external/board/ova/info @@ -2,3 +2,4 @@ BOARD_ID=ova BOARD_NAME="Open Virtual Appliance" CHASSIS=vm BOOTLOADER=barebox +KERNEL_FILE=bzImage diff --git a/buildroot-external/board/ova/post-image.sh b/buildroot-external/board/ova/post-image.sh index 1ad965289..9a38c47fa 100755 --- a/buildroot-external/board/ova/post-image.sh +++ b/buildroot-external/board/ova/post-image.sh @@ -6,12 +6,11 @@ BOARD_DIR=${2} BOOT_DATA=${BINARIES_DIR}/boot . ${SCRIPT_DIR}/hdd-image.sh +. ${SCRIPT_DIR}/name.sh +. ${SCRIPT_DIR}/ota.sh . ${BR2_EXTERNAL_HASSOS_PATH}/info . ${BOARD_DIR}/info -# Filename -IMAGE_FILE=${HASSOS_ID}_${BOARD_ID}-${VERSION_MAJOR}.${VERSION_BUILD}.vmdk - # Init boot data rm -rf ${BOOT_DATA} mkdir -p ${BOOT_DATA}/EFI/BOOT @@ -23,10 +22,14 @@ cp ${BR2_EXTERNAL_HASSOS_PATH}/misc/barebox-state-efi.dtb ${BOOT_DATA}/EFI/bareb echo "console=tty1" > ${BOOT_DATA}/cmdline.txt # Create other layers -create_boot_image ${BINARIES_DIR} -create_overlay_image ${BINARIES_DIR} -create_kernel_image ${BINARIES_DIR} bzImage +prepare_disk_image -create_disk_image ${BINARIES_DIR} ${BINARIES_DIR}/harddisk.img 6 +# Create disk images +create_disk_image 6 +convert_disk_image_vdmk -qemu-img convert -O vmdk ${BINARIES_DIR}/harddisk.img ${BINARIES_DIR}/${IMAGE_FILE} +# Generate OTA update file +rm -rf ${BOOT_DATA}/EFI/barebox +rm -f ${BOOT_DATA}/cmdline.txt + +create_ota_update bzImage diff --git a/buildroot-external/board/raspberrypi/post-image.sh b/buildroot-external/board/raspberrypi/post-image.sh index 409481fdc..655967f08 100755 --- a/buildroot-external/board/raspberrypi/post-image.sh +++ b/buildroot-external/board/raspberrypi/post-image.sh @@ -6,12 +6,10 @@ BOARD_DIR=${2} BOOT_DATA=${BINARIES_DIR}/boot . ${SCRIPT_DIR}/hdd-image.sh +. ${SCRIPT_DIR}/name.sh . ${BR2_EXTERNAL_HASSOS_PATH}/info . ${BOARD_DIR}/info -# Filename -IMAGE_FILE=${BINARIES_DIR}/${HASSOS_ID}_${BOARD_ID}-${VERSION_MAJOR}.${VERSION_BUILD}.img - # Init boot data rm -rf ${BOOT_DATA} mkdir -p ${BOOT_DATA} @@ -38,18 +36,16 @@ echo "dwc_otg.lpm_enable=0 console=tty1" > ${BOOT_DATA}/cmdline.txt # Enable 64bit support if [ "${BOARD_ID}" == "rpi3-64" ]; then echo "arm_64bit=1" >> ${BOOT_DATA}/config.txt - KERNEL_NAME="Image" -else - KERNEL_NAME="zImage" fi # Create other layers -create_boot_image ${BINARIES_DIR} -create_overlay_image ${BINARIES_DIR} -create_kernel_image ${BINARIES_DIR} ${KERNEL_NAME} +prepare_disk_image -create_disk_image ${BINARIES_DIR} ${IMAGE_FILE} 2 -fix_disk_image_mbr ${IMAGE_FILE} +create_disk_image 2 +fix_disk_image_mbr +convert_disk_image_gz -rm -rf ${IMAGE_FILE}.gz -gzip --best ${IMAGE_FILE} +# Generate OTA update file +rm -f ${BOOT_DATA}/*.txt + +create_ota_update ${KERNEL_NAME} diff --git a/buildroot-external/board/raspberrypi/rpi/info b/buildroot-external/board/raspberrypi/rpi/info index dcdcd912b..9e6bfaab4 100644 --- a/buildroot-external/board/raspberrypi/rpi/info +++ b/buildroot-external/board/raspberrypi/rpi/info @@ -2,3 +2,4 @@ BOARD_ID=rpi BOARD_NAME="RaspberryPi" CHASSIS=embedded BOOTLOADER=uboot +KERNEL_FILE=zImage diff --git a/buildroot-external/board/raspberrypi/rpi0-w/info b/buildroot-external/board/raspberrypi/rpi0-w/info index 80244fe15..dbba2f4a2 100644 --- a/buildroot-external/board/raspberrypi/rpi0-w/info +++ b/buildroot-external/board/raspberrypi/rpi0-w/info @@ -2,3 +2,4 @@ BOARD_ID=rpi0-w BOARD_NAME="RaspberryPi Zero-W" CHASSIS=embedded BOOTLOADER=uboot +KERNEL_FILE=zImage diff --git a/buildroot-external/board/raspberrypi/rpi2/info b/buildroot-external/board/raspberrypi/rpi2/info index ed3a68dcf..25ea4007a 100644 --- a/buildroot-external/board/raspberrypi/rpi2/info +++ b/buildroot-external/board/raspberrypi/rpi2/info @@ -2,3 +2,4 @@ BOARD_ID=rpi2 BOARD_NAME="RaspberryPi 2" CHASSIS=embedded BOOTLOADER=uboot +KERNEL_FILE=zImage diff --git a/buildroot-external/board/raspberrypi/rpi3-64/info b/buildroot-external/board/raspberrypi/rpi3-64/info index c794e9dba..6371c6119 100644 --- a/buildroot-external/board/raspberrypi/rpi3-64/info +++ b/buildroot-external/board/raspberrypi/rpi3-64/info @@ -2,3 +2,4 @@ BOARD_ID=rpi3-64 BOARD_NAME="RaspberryPi 3 64bit" CHASSIS=embedded BOOTLOADER=uboot +KERNEL_FILE=Image diff --git a/buildroot-external/board/raspberrypi/uboot-boot64.sh b/buildroot-external/board/raspberrypi/rpi3-64/uboot-boot.sh similarity index 100% rename from buildroot-external/board/raspberrypi/uboot-boot64.sh rename to buildroot-external/board/raspberrypi/rpi3-64/uboot-boot.sh diff --git a/buildroot-external/board/raspberrypi/rpi3/info b/buildroot-external/board/raspberrypi/rpi3/info index c6be500c9..118931786 100644 --- a/buildroot-external/board/raspberrypi/rpi3/info +++ b/buildroot-external/board/raspberrypi/rpi3/info @@ -2,3 +2,4 @@ BOARD_ID=rpi3 BOARD_NAME="RaspberryPi 3" CHASSIS=embedded BOOTLOADER=uboot +KERNEL_FILE=zImage diff --git a/buildroot-external/configs/rpi3_64_defconfig b/buildroot-external/configs/rpi3_64_defconfig index 1b52033af..63da4555c 100644 --- a/buildroot-external/configs/rpi3_64_defconfig +++ b/buildroot-external/configs/rpi3_64_defconfig @@ -72,7 +72,7 @@ BR2_TARGET_UBOOT_BOARD_DEFCONFIG="rpi_3" BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/bootloader/uboot.config $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/uboot.config" BR2_TARGET_UBOOT_NEEDS_DTC=y BR2_TARGET_UBOOT_BOOT_SCRIPT=y -BR2_TARGET_UBOOT_BOOT_SCRIPT_SOURCE="$(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/uboot-boot64.sh" +BR2_TARGET_UBOOT_BOOT_SCRIPT_SOURCE="$(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/rpi3-64/uboot-boot.sh" BR2_PACKAGE_HOST_DOSFSTOOLS=y BR2_PACKAGE_HOST_E2FSPROGS=y BR2_PACKAGE_HOST_GPTFDISK=y diff --git a/buildroot-external/scripts/hdd-image.sh b/buildroot-external/scripts/hdd-image.sh index 911551ae1..772988406 100755 --- a/buildroot-external/scripts/hdd-image.sh +++ b/buildroot-external/scripts/hdd-image.sh @@ -18,8 +18,8 @@ DATA_SIZE=1G function create_boot_image() { - local boot_data="${1}/boot" - local boot_img="${1}/boot.vfat" + local boot_data="${BINARIES_DIR}/boot" + local boot_img="${BINARIES_DIR}/boot.vfat" echo "mtools_skip_check=1" > ~/.mtoolsrc dd if=/dev/zero of=${boot_img} bs=${BOOT_SIZE} count=1 @@ -29,7 +29,7 @@ function create_boot_image() { function create_overlay_image() { - local overlay_img="${1}/overlay.ext4" + local overlay_img="${BINARIES_DIR}/overlay.ext4" dd if=/dev/zero of=${overlay_img} bs=${OVERLAY_SIZE} count=1 mkfs.ext4 -L "hassos-overlay" -E lazy_itable_init=0,lazy_journal_init=0 ${overlay_img} @@ -37,9 +37,9 @@ function create_overlay_image() { function create_kernel_image() { - local kernel0_img="${1}/kernel0.ext4" - local kernel1_img="${1}/kernel1.ext4" - local kernel=${1}/${2} + local kernel0_img="${BINARIES_DIR}/kernel0.ext4" + local kernel1_img="${BINARIES_DIR}/kernel1.ext4" + local kernel="${BINARIES_DIR}/${KERNEL_FILE}" # Make image dd if=/dev/zero of=${kernel0_img} bs=${KERNEL_SIZE} count=1 @@ -55,15 +55,22 @@ function create_kernel_image() { } +function prepare_disk_image() { + create_boot_image + create_overlay_image + create_kernel_image +} + + function create_disk_image() { - local boot_img="${1}/boot.vfat" - local rootfs_img="${1}/rootfs.squashfs" - local overlay_img="${1}/overlay.ext4" - local data_img="${1}/data.ext4" - local kernel0_img="${1}/kernel0.ext4" - local kernel1_img="${1}/kernel1.ext4" - local hdd_img=${2} - local hdd_count=${3:-2} + local boot_img="${BINARIES_DIR}/boot.vfat" + local rootfs_img="${BINARIES_DIR}/rootfs.squashfs" + local overlay_img="${BINARIES_DIR}/overlay.ext4" + local data_img="${BINARIES_DIR}/data.ext4" + local kernel0_img="${BINARIES_DIR}/kernel0.ext4" + local kernel1_img="${BINARIES_DIR}/kernel1.ext4" + local hdd_img="$(hassos_image_name img)" + local hdd_count=${1:-2} local loop_dev="/dev/mapper/$(losetup -f | cut -d'/' -f3)" local boot_offset=0 @@ -112,8 +119,26 @@ function create_disk_image() { function fix_disk_image_mbr() { - local hdd_img=${1} + local hdd_img="$(hassos_image_name img)" sgdisk -t 1:"E3C9E316-0B5C-4DB8-817D-F92DF00215AE" ${hdd_img} dd if=${BR2_EXTERNAL_HASSOS_PATH}/misc/mbr.img of=${hdd_img} conv=notrunc bs=512 count=1 } + + +function convert_disk_image_vdmk() { + local hdd_img="$(hassos_image_name img)" + local hdd_vdmk="$(hassos_image_name vdmk)" + + rm -f ${hdd_vdmk} + qemu-img convert -O vmdk ${hdd_img} ${hdd_vdmk} + rm -f ${hdd_img} +} + + +function convert_disk_image_gz() { + local hdd_img="$(hassos_image_name img)" + + rm -f ${hdd_img}.gz + gzip --best ${hdd_img} +} diff --git a/buildroot-external/scripts/name.sh b/buildroot-external/scripts/name.sh new file mode 100644 index 000000000..2307427e0 --- /dev/null +++ b/buildroot-external/scripts/name.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +function hassos_image_name() { + echo "${BINARIES_DIR}/${HASSOS_ID}_${BOARD_ID}-${VERSION_MAJOR}.${VERSION_BUILD}.${1}" +} + +function hassos_rauc_compatible() { + echo "${HASSOS_ID}-${BOARD_ID}" +} + +function hassos_version() { + echo "${VERSION_MAJOR}.${VERSION_BUILD}" +} diff --git a/buildroot-external/scripts/ota.sh b/buildroot-external/scripts/ota.sh new file mode 100644 index 000000000..b9f3a3f9e --- /dev/null +++ b/buildroot-external/scripts/ota.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +function create_ota_update() { + local ota_file="$(hassos_image_name raucb)" + local rauc_folder="${BINARIES_DIR}/rauc" + local boot_folder="${BINARIES_DIR}/boot" + local kernel="${BINARIES_DIR}/${KERNEL_FILE}" + local rootfs="${BINARIES_DIR}/rootfs.squashfs" + local key="/build/key.pem" + local cert="/build/cert.pem" + + rm -rf ${rauc_folder} ${ota_file} + mkdir -p ${rauc_folder} + + tar -P -cf ${rauc_folder}/kernel.tar ${kernel} + tar -P -cf ${rauc_folder}/boot.tar ${boot_folder} + cp -f ${rootfs} ${rauc_folder}/rootfs.img + + ( + echo "[update]" + echo "compatible=$(hassos_rauc_compatible)" + echo "version=$(hassos_version)" + echo "[image.boot]" + echo "filename=boot.tar" + echo "[image.kernel]" + echo "filename=kernel.tar" + echo "[image.rootfs]" + echo "filename=rootfs.img" + ) > ${rauc_folder}/manifest.raucm + + rauc bundle -d --cert=${cert} --key=${key} ${rauc_folder} ${ota_file} +} diff --git a/buildroot-external/scripts/post-build.sh b/buildroot-external/scripts/post-build.sh index 904c4fb55..a0eb5fea2 100755 --- a/buildroot-external/scripts/post-build.sh +++ b/buildroot-external/scripts/post-build.sh @@ -7,6 +7,8 @@ BOARD_DIR=${2} . ${SCRIPT_DIR}/rootfs-layer.sh . ${BR2_EXTERNAL_HASSOS_PATH}/info . ${BOARD_DIR}/info +. ${SCRIPT_DIR}/name.sh + # HassOS tasks fix_rootfs @@ -32,7 +34,7 @@ install_hassos_cli ) > ${TARGET_DIR}/etc/machine-info # Settup rauc -sed -i "s/%COMPATIBLE%/${HASSOS_ID}-${BOARD_ID}/g" ${TARGET_DIR}/etc/rauc/system.conf +sed -i "s/%COMPATIBLE%/$(hassos_rauc_compatible)/g" ${TARGET_DIR}/etc/rauc/system.conf sed -i "s/%BOOTLOADER%/${BOOTLOADER}/g" ${TARGET_DIR}/etc/rauc/system.conf # Settup the correct CA diff --git a/scripts/build-all.sh b/scripts/build-all.sh index f8c84efce..f3d075243 100755 --- a/scripts/build-all.sh +++ b/scripts/build-all.sh @@ -8,7 +8,7 @@ for platform in "${all_platforms[@]}"; do make -C /build/buildroot BR2_EXTERNAL=/build/buildroot-external \ ${platform}_defconfig make -C /build/buildroot BR2_EXTERNAL=/build/buildroot-external - cp -f /build/buildroot/output/images/hassos_* /build/RL/ + cp -f /build/buildroot/output/images/hassos_* /build/release/ make -C /build/buildroot BR2_EXTERNAL=/build/buildroot-external \ clean