From 74ff13e25e12cbc7438b871442e154195fd037b2 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 24 Aug 2018 21:50:29 +0000 Subject: [PATCH] P1 --- buildroot-external/board/asus/post-image.sh | 11 +- .../board/hardkernel/post-image.sh | 10 +- buildroot-external/board/ova/post-image.sh | 7 +- .../board/raspberrypi/post-image.sh | 6 +- buildroot-external/misc/rauc-hook | 24 +++- .../rootfs-overlay/usr/lib/rauc/install-spl | 13 --- .../usr/lib/rauc/post-install-boot | 7 -- .../usr/lib/rauc/pre-install-boot | 8 -- .../rootfs-overlay/usr/sbin/hassos-expand | 30 +++-- buildroot-external/scripts/hdd-image.sh | 105 +++++++++++------- buildroot-external/scripts/name.sh | 29 +++++ buildroot-external/scripts/ota.sh | 9 +- 12 files changed, 148 insertions(+), 111 deletions(-) delete mode 100755 buildroot-external/rootfs-overlay/usr/lib/rauc/install-spl delete mode 100755 buildroot-external/rootfs-overlay/usr/lib/rauc/post-install-boot delete mode 100755 buildroot-external/rootfs-overlay/usr/lib/rauc/pre-install-boot diff --git a/buildroot-external/board/asus/post-image.sh b/buildroot-external/board/asus/post-image.sh index 5de26a466..2fc602542 100755 --- a/buildroot-external/board/asus/post-image.sh +++ b/buildroot-external/board/asus/post-image.sh @@ -27,10 +27,13 @@ rm -f $BINARIES_DIR/u-boot-spl-dtb.img mkimage -n rk3288 -T rksd -d $BINARIES_DIR/u-boot-spl-dtb.bin $BINARIES_DIR/u-boot-spl-dtb.img cat $BINARIES_DIR/u-boot-dtb.bin >> $BINARIES_DIR/u-boot-spl-dtb.img -# Create other layers -prepare_disk_image -create_spl_image u-boot-spl-dtb.img 64 +# SPL +create_spl_image -create_disk_image 2 +dd if=$BINARIES_DIR/u-boot-spl-dtb.img of=$BINARIES_DIR/spl.img conv=notrunc bs=512 seek=64 + +# Disk +create_disk_image convert_disk_image_gz + create_ota_update diff --git a/buildroot-external/board/hardkernel/post-image.sh b/buildroot-external/board/hardkernel/post-image.sh index 23ad1cfc4..6eafacd4c 100755 --- a/buildroot-external/board/hardkernel/post-image.sh +++ b/buildroot-external/board/hardkernel/post-image.sh @@ -32,10 +32,12 @@ function make_bootable() { dd if=${UBOOT_GXBB} of=${hdd_img} conv=notrunc bs=512 seek=97 } -# Create other layers -prepare_disk_image +# SPL +create_spl_image -create_disk_mbr 2 -make_bootable +# Disk +create_disk_image convert_disk_image_gz + create_ota_update + diff --git a/buildroot-external/board/ova/post-image.sh b/buildroot-external/board/ova/post-image.sh index 7312a5157..bf3fd36ad 100755 --- a/buildroot-external/board/ova/post-image.sh +++ b/buildroot-external/board/ova/post-image.sh @@ -22,11 +22,10 @@ cp ${BR2_EXTERNAL_HASSOS_PATH}/misc/barebox-state-efi.dtb ${BOOT_DATA}/EFI/bareb echo "console=tty1" > ${BOOT_DATA}/cmdline.txt -# Create other layers -prepare_disk_image - # Create disk images -create_disk_image 6 +create_disk_image + +# Make VM convert_disk_image_vmdk convert_disk_image_gz vmdk diff --git a/buildroot-external/board/raspberrypi/post-image.sh b/buildroot-external/board/raspberrypi/post-image.sh index ff6f5b082..e780878e7 100755 --- a/buildroot-external/board/raspberrypi/post-image.sh +++ b/buildroot-external/board/raspberrypi/post-image.sh @@ -40,10 +40,8 @@ if [ "${BOARD_ID}" == "rpi3-64" ]; then echo "arm_64bit=1" >> ${BOOT_DATA}/config.txt fi -# Create other layers -prepare_disk_image - -create_disk_image 2 +# Disk +create_disk_image convert_disk_image_gz # OTA diff --git a/buildroot-external/misc/rauc-hook b/buildroot-external/misc/rauc-hook index 0058d3887..30957b6df 100755 --- a/buildroot-external/misc/rauc-hook +++ b/buildroot-external/misc/rauc-hook @@ -5,16 +5,30 @@ # Handle boot hocks if [ "${RAUC_SLOT_CLASS}" = "boot" ]; then - if [ "${1}" = "slot-post-install" ]; then - /usr/lib/rauc/post-install-boot - elif [ "${1}" = "slot-pre-install" ]; then - /usr/lib/rauc/pre-install-boot + BOOT_DATA=/tmp/boot-data + + mkdir -p ${BOOT_DATA} + if [ "${1}" = "slot-pre-install" ]; then + cp -f ${RAUC_SLOT_MOUNT_POINT}/*.txt ${BOOT_DATA}/ + elif [ "${1}" = "slot-post-install" ]; then + cp -f ${BOOT_DATA}/*.txt ${RAUC_SLOT_MOUNT_POINT}/ fi fi # Handle spl install if [ "${RAUC_SLOT_CLASS}" = "spl" ]; then - /usr/lib/rauc/install-spl "${RAUC_IMAGE_NAME}" + DEVICE_CHILD="$(findfs LABEL="hassos-boot")" + DEVICE_ROOT="/dev/$(lsblk -no pkname ${DEVICE_CHILD})" + + if sfdisk -dq ${DEVICE_ROOT} | grep -q 'label: gpt'; then + dd if=${RAUC_IMAGE_NAME} of=${DEVICE_ROOT} conv=notrunc bs=512 seek=2 skip=2 + else + BACKUP_MBR="/tmp/mbr-backup.bin" + + dd if=${DEVICE_ROOT} of=${BACKUP_MBR} bs=1 count=72 skip=440 + dd if=${RAUC_IMAGE_NAME} of=${DEVICE_ROOT} conv=notrunc bs=512 + dd if=${BACKUP_MBR} of=${DEVICE_ROOT} conv=notrunc bs=1 skip=440 + fi fi ## diff --git a/buildroot-external/rootfs-overlay/usr/lib/rauc/install-spl b/buildroot-external/rootfs-overlay/usr/lib/rauc/install-spl deleted file mode 100755 index 96c06dcfb..000000000 --- a/buildroot-external/rootfs-overlay/usr/lib/rauc/install-spl +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -DEVICE_CHILD="$(findfs LABEL="hassos-boot")" -DEVICE_ROOT="/dev/$(lsblk -no pkname ${DEVICE_CHILD})" -IMAGE_FILE="${1}" - -# Check params -if [ ! -f "${IMAGE_FILE}" ]; then - echo "[Error] Can't find image: ${IMAGE_FILE}" - exit 1 -fi - -dd if=${IMAGE_FILE} of=${DEVICE_ROOT} conv=notrunc bs=512 seek=2 diff --git a/buildroot-external/rootfs-overlay/usr/lib/rauc/post-install-boot b/buildroot-external/rootfs-overlay/usr/lib/rauc/post-install-boot deleted file mode 100755 index 53bfd2ded..000000000 --- a/buildroot-external/rootfs-overlay/usr/lib/rauc/post-install-boot +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -BOOT_DATA=/tmp/boot-data - -cp -f ${BOOT_DATA}/*.txt ${RAUC_SLOT_MOUNT_POINT}/ - -rm -rf ${BOOT_DATA} diff --git a/buildroot-external/rootfs-overlay/usr/lib/rauc/pre-install-boot b/buildroot-external/rootfs-overlay/usr/lib/rauc/pre-install-boot deleted file mode 100755 index f101d548d..000000000 --- a/buildroot-external/rootfs-overlay/usr/lib/rauc/pre-install-boot +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -BOOT_DATA=/tmp/boot-data - -rm -rf ${BOOT_DATA} -mkdir -p ${BOOT_DATA} - -cp -f ${RAUC_SLOT_MOUNT_POINT}/*.txt ${BOOT_DATA}/ diff --git a/buildroot-external/rootfs-overlay/usr/sbin/hassos-expand b/buildroot-external/rootfs-overlay/usr/sbin/hassos-expand index 92b5880f4..1a1c323a9 100755 --- a/buildroot-external/rootfs-overlay/usr/sbin/hassos-expand +++ b/buildroot-external/rootfs-overlay/usr/sbin/hassos-expand @@ -5,27 +5,12 @@ DEVICE_CHILD="$(findfs LABEL="hassos-data")" DEVICE_ROOT="/dev/$(lsblk -no pkname ${DEVICE_CHILD})" PART_NUM="${DEVICE_CHILD: -1}" -# Disk is MBR -if sfdisk -dq ${DEVICE_ROOT} | grep -q 'label: dos'; then - # Need resize - UNUSED=$(sfdisk -Fq ${DEVICE_ROOT} | cut -d " " -f 3 | tail -1) - if [ -z "${UNUSED}" ]; then - echo "[INFO] No resize of data partition needed" - exit - fi - if [ ${UNUSED} -le 2048 ]; then - echo "[INFO] No resize of data partition needed" - exit - fi - - echo ", +" | sfdisk -N ${PART_NUM} ${DEVICE_ROOT} --force - sfdisk -V ${DEVICE_ROOT} -else +if sfdisk -dq ${DEVICE_ROOT} | grep -q 'label: gpt'; then # Need resize if [ $(sgdisk -E ${DEVICE_ROOT}) -le 2048 ]; then echo "[INFO] No resize of data partition needed" - exit + exit 0 fi # Resize & Reload partition @@ -33,6 +18,17 @@ else sgdisk -e ${DEVICE_ROOT} sgdisk -d ${PART_NUM} -n ${PART_NUM}:0:0 -c ${PART_NUM}:"hassos-data" -t ${PART_NUM}:"0FC63DAF-8483-4772-8E79-3D69D8477DE4" -u ${PART_NUM}:"a52a4597-fa3a-4851-aefd-2fbe9f849079" ${DEVICE_ROOT} sgdisk -v ${DEVICE_ROOT} +else + + # Need resize + UNUSED=$(sfdisk -Fq ${DEVICE_ROOT} | cut -d " " -f 3 | tail -1) + if [ -z "${UNUSED}" ] || [ ${UNUSED} -le 2048 ]; then + echo "[INFO] No resize of data partition needed" + exit 0 + fi + + echo ", +" | sfdisk -N ${PART_NUM} ${DEVICE_ROOT} --force + sfdisk -V ${DEVICE_ROOT} fi partx -u ${DEVICE_ROOT} diff --git a/buildroot-external/scripts/hdd-image.sh b/buildroot-external/scripts/hdd-image.sh index d864eea8d..96161e785 100755 --- a/buildroot-external/scripts/hdd-image.sh +++ b/buildroot-external/scripts/hdd-image.sh @@ -49,18 +49,15 @@ function get_boot_size() { function create_spl_image() { - local spl_data="${BINARIES_DIR}/${1}" - local spl_img="${BINARIES_DIR}/spl.img" - local spl_seek=$(($2-2)) + local boot_img="$(path_spl_img)" - dd if=/dev/zero of=${spl_img} bs=512 count=16382 - dd if=${spl_data} of=${spl_img} conv=notrunc bs=512 seek=${spl_seek} + dd if=/dev/zero of=${boot_img} bs=512 count=16382 } function create_boot_image() { - local boot_data="${BINARIES_DIR}/boot" - local boot_img="${BINARIES_DIR}/boot.vfat" + local boot_data="$(path_boot_dir)" + local boot_img="$(path_boot_img)" echo "mtools_skip_check=1" > ~/.mtoolsrc dd if=/dev/zero of=${boot_img} bs=$(get_boot_size) count=1 @@ -70,7 +67,7 @@ function create_boot_image() { function create_overlay_image() { - local overlay_img="${BINARIES_DIR}/overlay.ext4" + local overlay_img="$(path_overlay_img)" 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} @@ -78,7 +75,7 @@ function create_overlay_image() { function create_kernel_image() { - local kernel_img="${BINARIES_DIR}/kernel.ext4" + local kernel_img="$(path_kernel_img)" local kernel="${BINARIES_DIR}/${KERNEL_FILE}" # Make image @@ -93,7 +90,7 @@ function create_kernel_image() { } -function prepare_disk_image() { +function _prepare_disk_image() { create_boot_image create_overlay_image create_kernel_image @@ -101,13 +98,24 @@ function prepare_disk_image() { function create_disk_image() { - 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 kernel_img="${BINARIES_DIR}/kernel.ext4" + _prepare_disk_image + + if [ "${BOOT_SYS}" == "mbr" ]; then + _create_disk_mbr + else + _create_disk_gpt + fi +} + + +function _create_disk_gpt() { + local boot_img="$(path_boot_img)" + local rootfs_img="$(path_boot_img)" + local overlay_img="$(path_overlay_img)" + local data_img="$(path_data_img)" + local kernel_img="$(path_kernel_img)" local hdd_img="$(hassos_image_name img)" - local hdd_count=${1:-2} + local hdd_count=${DISK_SIZE:-2} local boot_offset=0 local rootfs_offset=0 @@ -167,28 +175,28 @@ function create_disk_image() { dd if=${data_img} of=${hdd_img} conv=notrunc bs=512 seek=${data_offset} # Fix boot - if [ "${BOOT_SYS}" == "mbr" ]; then - fix_disk_image_mbr + if [ "${BOOT_SYS}" == "hyprid" ]; then + _fix_disk_hyprid elif [ "${BOOT_SYS}" == "spl" ]; then - fix_disk_image_spl + _fix_disk_spl_gpt fi } -function create_disk_mbr() { - local disk_layout="${BINARIES_DIR}/disk.layout" - 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 kernel_img="${BINARIES_DIR}/kernel.ext4" +function _create_disk_mbr() { + local boot_img="$(path_boot_img)" + local rootfs_img="$(path_boot_img)" + local overlay_img="$(path_overlay_img)" + local data_img="$(path_data_img)" + local kernel_img="$(path_kernel_img)" local hdd_img="$(hassos_image_name img)" - local hdd_count=${1:-2} + local hdd_count=${DISK_SIZE:-2} + local disk_layout="${BINARIES_DIR}/disk.layout" # Write new image & MBR dd if=/dev/zero of=${hdd_img} bs=1G count=${hdd_count} - local boot_start=2048 + let boot_start=16384 let boot_size=$(size2sectors ${BOOT_SIZE})+2 let kernel0_size=$(size2sectors ${KERNEL_SIZE})+2 @@ -223,10 +231,10 @@ function create_disk_mbr() { echo "unit: sectors" echo "hassos-boot : start= ${boot_start}, size= ${boot_size}, type=c, bootable" #create the boot partition echo "hassos-extended : start= ${extended_start}, size= ${extended_size}, type=5" #Make an extended partition - echo "hassos-kernela : start= ${kernel0_start}, size= ${kernel0_size}, type=83" #Make a logical partition - echo "hassos-systema : start= ${system0_start}, size= ${system0_size}, type=83" #Make a logical partition - echo "hassos-kernelb : start= ${kernel1_start} size= ${kernel1_size}, type=83" #Make a logical partition - echo "hassos-systemb : start= ${system1_start}, size= ${system1_size}, type=83" #Make a logical partition + echo "hassos-kernel0 : start= ${kernel0_start}, size= ${kernel0_size}, type=83" #Make a logical partition + echo "hassos-system0 : start= ${system0_start}, size= ${system0_size}, type=83" #Make a logical partition + echo "hassos-kernel1 : start= ${kernel1_start} size= ${kernel1_size}, type=83" #Make a logical partition + echo "hassos-system1 : start= ${system1_start}, size= ${system1_size}, type=83" #Make a logical partition echo "hassos-bootstate : start= ${bootstate_start}, size= ${bootstate_size}, type=83" #Make a logical partition echo "hassos-overlay : start= ${overlay_start}, size= ${overlay_size}, type=83" #Make a logical partition echo "hassos-data : start= ${data_start}, size= ${data_size}, type=83" #Make a logical partition @@ -236,15 +244,18 @@ function create_disk_mbr() { sfdisk ${hdd_img} < ${disk_layout} # Write Images - dd if=${boot_img} of=${hdd_img} conv=notrunc bs=512 obs=512 seek=${boot_offset} - dd if=${kernel_img} of=${hdd_img} conv=notrunc bs=512 obs=512 seek=${kernel_offset} - dd if=${rootfs_img} of=${hdd_img} conv=notrunc bs=512 obs=512 seek=${rootfs_offset} - dd if=${overlay_img} of=${hdd_img} conv=notrunc bs=512 obs=512 seek=${overlay_offset} - dd if=${data_img} of=${hdd_img} conv=notrunc bs=512 obs=512 seek=${data_offset} + dd if=${boot_img} of=${hdd_img} conv=notrunc bs=512 seek=${boot_offset} + dd if=${kernel_img} of=${hdd_img} conv=notrunc bs=512 seek=${kernel_offset} + dd if=${rootfs_img} of=${hdd_img} conv=notrunc bs=512 seek=${rootfs_offset} + dd if=${overlay_img} of=${hdd_img} conv=notrunc bs=512 seek=${overlay_offset} + dd if=${data_img} of=${hdd_img} conv=notrunc bs=512 seek=${data_offset} + + # Wripte SPL + _fix_disk_spl_mbr } -function fix_disk_image_mbr() { +function _fix_disk_hyprid() { local hdd_img="$(hassos_image_name img)" sgdisk -t 1:"E3C9E316-0B5C-4DB8-817D-F92DF00215AE" ${hdd_img} @@ -252,13 +263,25 @@ function fix_disk_image_mbr() { } -function fix_disk_image_spl() { +function _fix_disk_spl_gpt() { local hdd_img="$(hassos_image_name img)" - local spl_img="${BINARIES_DIR}/spl.img" + local spl_img="$(path_spl_img)" + local backup="/tmp/mbr-backup.bin" sgdisk -t 1:"E3C9E316-0B5C-4DB8-817D-F92DF00215AE" ${hdd_img} dd if=${BR2_EXTERNAL_HASSOS_PATH}/misc/mbr-spl.img of=${hdd_img} conv=notrunc bs=512 count=1 - dd if=${spl_img} of=${hdd_img} conv=notrunc bs=512 seek=2 + dd if=${spl_img} of=${hdd_img} conv=notrunc bs=512 seek=2 skip=2 +} + + +function _fix_disk_spl_mbr() { + local hdd_img="$(hassos_image_name img)" + local spl_img="$(path_spl_img)" + + # backup MBR + dd if=${hdd_img} of=${backup} bs=1 count=72 skip=440 + dd if=${spl_img} of=${hdd_img} conv=notrunc bs=512 + dd if=${backup} of=${hdd_img} conv=notrunc bs=1 skip=440 } diff --git a/buildroot-external/scripts/name.sh b/buildroot-external/scripts/name.sh index 2307427e0..383bc19f4 100755 --- a/buildroot-external/scripts/name.sh +++ b/buildroot-external/scripts/name.sh @@ -11,3 +11,32 @@ function hassos_rauc_compatible() { function hassos_version() { echo "${VERSION_MAJOR}.${VERSION_BUILD}" } + +function path_spl_img() { + echo "${BINARIES_DIR}/spl.img" +} + +function path_kernel_img() { + echo "${BINARIES_DIR}/kernel.ext4" +} + +function path_boot_img() { + echo "${BINARIES_DIR}/boot.vfat" +} + +function path_boot_dir() { + echo "${BINARIES_DIR}/boot" +} + +function path_data_img() { + echo "${BINARIES_DIR}/data.ext4" +} + +function path_overlay_img() { + echo "${BINARIES_DIR}/overlay.ext4" +} + +function path_rootfs_img() { + echo "${BINARIES_DIR}/rootfs.squashfs" +} + diff --git a/buildroot-external/scripts/ota.sh b/buildroot-external/scripts/ota.sh index ef7315d93..c33aeb414 100755 --- a/buildroot-external/scripts/ota.sh +++ b/buildroot-external/scripts/ota.sh @@ -10,6 +10,11 @@ function create_ota_update() { local key="/build/key.pem" local cert="/build/cert.pem" + # Skeep if no dev key is arround + if [ ! -f "${key}" ]; then + return 0 + fi + rm -rf ${rauc_folder} ${ota_file} mkdir -p ${rauc_folder} @@ -44,9 +49,5 @@ function create_ota_update() { ) >> ${rauc_folder}/manifest.raucm fi - if [ ! -f "${key}" ]; then - openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ${key} -out ${cert} -outform PEM -batch - fi - rauc bundle -d --cert=${cert} --key=${key} ${rauc_folder} ${ota_file} }