Create OTA updater (#34)

* Create OTA updater

* Create .gitignore

* Update build-all.sh

* Update hdd-image.sh

* Update ota.sh

* Update ota.sh

* Update ota.sh

* Update ota.sh

* Update post-image.sh

* Create name.sh

* Update name.sh

* Update post-build.sh

* Update name.sh

* Update post-image.sh

* Update ota.sh

* Update hdd-image.sh

* Update post-image.sh

* Update name.sh

* Update ota.sh

* Update post-image.sh

* Update hdd-image.sh

* Update hdd-image.sh

* Update hdd-image.sh

* Update post-image.sh

* Update post-image.sh

* Update hdd-image.sh

* Update hdd-image.sh

* Update post-image.sh

* Update post-image.sh

* Update post-image.sh

* Update info

* Update info

* Update info

* Update info

* Update info

* Update info

* Rename buildroot-external/board/raspberrypi/uboot-boot64.sh to buildroot-external/board/raspberrypi/rpi3-64/uboot-boot.sh

* Update rpi3_64_defconfig

* Update hdd-image.sh

* Update ota.sh

* Update post-image.sh

* Update post-image.sh

* Fix building

Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch>

* Fix building v2

Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch>
This commit is contained in:
Pascal Vizeli 2018-06-24 00:11:54 +02:00 committed by GitHub
parent 1e30f5120c
commit 17ca2ccf0a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 118 additions and 39 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/release
*.pem

View File

@ -2,3 +2,4 @@ BOARD_ID=ova
BOARD_NAME="Open Virtual Appliance"
CHASSIS=vm
BOOTLOADER=barebox
KERNEL_FILE=bzImage

View File

@ -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

View File

@ -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}

View File

@ -2,3 +2,4 @@ BOARD_ID=rpi
BOARD_NAME="RaspberryPi"
CHASSIS=embedded
BOOTLOADER=uboot
KERNEL_FILE=zImage

View File

@ -2,3 +2,4 @@ BOARD_ID=rpi0-w
BOARD_NAME="RaspberryPi Zero-W"
CHASSIS=embedded
BOOTLOADER=uboot
KERNEL_FILE=zImage

View File

@ -2,3 +2,4 @@ BOARD_ID=rpi2
BOARD_NAME="RaspberryPi 2"
CHASSIS=embedded
BOOTLOADER=uboot
KERNEL_FILE=zImage

View File

@ -2,3 +2,4 @@ BOARD_ID=rpi3-64
BOARD_NAME="RaspberryPi 3 64bit"
CHASSIS=embedded
BOOTLOADER=uboot
KERNEL_FILE=Image

View File

@ -2,3 +2,4 @@ BOARD_ID=rpi3
BOARD_NAME="RaspberryPi 3"
CHASSIS=embedded
BOOTLOADER=uboot
KERNEL_FILE=zImage

View File

@ -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

View File

@ -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}
}

View File

@ -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}"
}

View File

@ -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}
}

View File

@ -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

View File

@ -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