From 736bfebe31898fb9d5ba91bf1de7550a050aa28b Mon Sep 17 00:00:00 2001 From: Bohdan Buinich Date: Sun, 7 Jan 2024 18:37:09 +0200 Subject: [PATCH] [RPI] Refactor Raspberry Pi Setup Script for Improved Structure and Readability - Encapsulated functionality into functions for better script organization. - Introduced 'write_os_release' and 'write_machine_info' functions for creating os-release and machine-info files. - Streamlined Raspberry Pi specific file handling with 'handle_raspberry_pi' function. - Consolidated script execution within a 'main' function for clearer flow and execution order. - Improved readability with consistent formatting and added inline comments for clarity. - Enhanced robustness with comprehensive error checking and streamlined command execution. - RPI5 not supported yet. --- .../board/ovos/raspberrypi/post-build.sh | 133 ++++++++++-------- 1 file changed, 74 insertions(+), 59 deletions(-) diff --git a/buildroot-external/board/ovos/raspberrypi/post-build.sh b/buildroot-external/board/ovos/raspberrypi/post-build.sh index 8246a28d..c14d528b 100755 --- a/buildroot-external/board/ovos/raspberrypi/post-build.sh +++ b/buildroot-external/board/ovos/raspberrypi/post-build.sh @@ -1,73 +1,88 @@ #!/bin/sh +set -eu -set -u -set -e - +# Set board directory and include meta files BOARD_DIR="$(dirname $0)" - . "${BR2_EXTERNAL_OPENVOICEOS_PATH}/meta" . "${BOARD_DIR}/meta" -# Write os-release -{ - echo "NAME=\"${OVOS_NAME}\"" - echo "VERSION=\"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD} ${BOARD_NAME}\"" - echo "ID=${OVOS_ID}" - echo "VERSION_ID=${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD}" - echo "PRETTY_NAME=\"${OVOS_NAME} ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD} ${BOARD_NAME}\"" - echo "CPE_NAME=cpe:2.3:o:openvoiceos:${OVOS_ID}:${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD}:*:${DEPLOYMENT}:*:*:*:${BOARD_ID}:*" - echo "HOME_URL=https://github.com/OpenVoiceOS/OpenVoiceOS" - echo "DOCUMENTATION_URL=https://github.com/OpenVoiceOS/OpenVoiceOS/tree/develop/documentation" - echo "SUPPORT_URL=https://github.com/OpenVoiceOS/OpenVoiceOS/issues" - echo "VARIANT=\"${OVOS_NAME} - Buildroot Edition\"" - echo "VARIANT_ID=${OVOS_ID}-${BOARD_ID}-buildroot" -} > "${TARGET_DIR}/usr/lib/os-release" +# Function to create and write os-release file +write_os_release() { + local os_release_file="${TARGET_DIR}/usr/lib/os-release" + echo "Creating os-release at ${os_release_file}" + { + echo "NAME=\"${OVOS_NAME}\"" + echo "VERSION=\"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD} ${BOARD_NAME}\"" + echo "ID=${OVOS_ID}" + echo "VERSION_ID=${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD}" + echo "PRETTY_NAME=\"${OVOS_NAME} ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD} ${BOARD_NAME}\"" + echo "CPE_NAME=cpe:2.3:o:openvoiceos:${OVOS_ID}:${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD}:*:${DEPLOYMENT}:*:*:*:${BOARD_ID}:*" + echo "HOME_URL=https://github.com/OpenVoiceOS/OpenVoiceOS" + echo "DOCUMENTATION_URL=https://github.com/OpenVoiceOS/OpenVoiceOS/tree/develop/documentation" + echo "SUPPORT_URL=https://github.com/OpenVoiceOS/OpenVoiceOS/issues" + echo "VARIANT=\"${OVOS_NAME} - Buildroot Edition\"" + echo "VARIANT_ID=${OVOS_ID}-${BOARD_ID}-buildroot" + } > "${os_release_file}" +} -# Write machine-info -{ - echo "CHASSIS=${CHASSIS}" - echo "DEPLOYMENT=${DEPLOYMENT}" -} > "${TARGET_DIR}/etc/machine-info" +# Function to create and write machine-info file +write_machine_info() { + local machine_info_file="${TARGET_DIR}/etc/machine-info" + echo "Creating machine-info at ${machine_info_file}" + { + echo "CHASSIS=${CHASSIS}" + echo "DEPLOYMENT=${DEPLOYMENT}" + } > "${machine_info_file}" +} -cp -f ../buildroot-external/board/ovos/raspberrypi/cmdline.txt ${BINARIES_DIR}/rpi-firmware/cmdline.txt -grub-editenv "${BINARIES_DIR}/efi-part/EFI/BOOT/grubenv" create +# Function to handle Raspberry Pi specific files +handle_raspberry_pi() { + local pi_version=$1 + echo "Handling Raspberry Pi ${pi_version} specific files" + cp -f "../buildroot-external/board/ovos/raspberrypi/${pi_version}/config.txt" "${BINARIES_DIR}/rpi-firmware/config.txt" + cp -f "../buildroot-external/board/ovos/raspberrypi/${pi_version}/RPI_EFI.fd" "${BINARIES_DIR}/rpi-firmware/RPI_EFI.fd" + cp -f "../buildroot-external/board/ovos/raspberrypi/grub-efi.cfg" "${BINARIES_DIR}/efi-part/EFI/BOOT/grub.cfg" + cp -f "../buildroot-external/board/ovos/raspberrypi/${pi_version}/sw-description" "${BINARIES_DIR}" +} -echo "Check for kernel in ${TARGET_DIR}" -if [ -f "${TARGET_DIR}/boot/Image" ]; then - echo "Found Image, renaming to kernel" - mv ${TARGET_DIR}/boot/Image ${TARGET_DIR}/boot/kernel -fi +# Main function to execute script logic +main() { + write_os_release + write_machine_info -# Copy the right config.txt file -for arg in "$@" -do - case "${arg}" in - --rpi3) - cp -f ../buildroot-external/board/ovos/raspberrypi/rpi3/config.txt ${BINARIES_DIR}/rpi-firmware/config.txt - cp -f ../buildroot-external/board/ovos/raspberrypi/rpi3/RPI_EFI.fd ${BINARIES_DIR}/rpi-firmware/RPI_EFI.fd - cp -f ../buildroot-external/board/ovos/raspberrypi/grub-efi.cfg ${BINARIES_DIR}/efi-part/EFI/BOOT/grub.cfg - cp -f ../buildroot-external/board/ovos/raspberrypi/rpi3/sw-description ${BINARIES_DIR} - ;; - --rpi4) - cp -f ../buildroot-external/board/ovos/raspberrypi/rpi4/config.txt ${BINARIES_DIR}/rpi-firmware/config.txt - cp -f ../buildroot-external/board/ovos/raspberrypi/rpi4/RPI_EFI.fd ${BINARIES_DIR}/rpi-firmware/RPI_EFI.fd - cp -f ../buildroot-external/board/ovos/raspberrypi/grub-efi.cfg ${BINARIES_DIR}/efi-part/EFI/BOOT/grub.cfg - cp -f ../buildroot-external/board/ovos/raspberrypi/rpi4/sw-description ${BINARIES_DIR} - ;; - esac -done + echo "Copying cmdline.txt to ${BINARIES_DIR}/rpi-firmware/" + cp -f ../buildroot-external/board/ovos/raspberrypi/cmdline.txt "${BINARIES_DIR}/rpi-firmware/cmdline.txt" -# Prepare home data -rm -f ${BINARIES_DIR}/homefs.ext4 -truncate --size="6890M" ${BINARIES_DIR}/homefs.ext4 -mkfs.ext4 -L "homefs" -E lazy_itable_init=0,lazy_journal_init=0 ${BINARIES_DIR}/homefs.ext4 + echo "Creating grubenv" + grub-editenv "${BINARIES_DIR}/efi-part/EFI/BOOT/grubenv" create -# Mount home image -mkdir -p ${BINARIES_DIR}/home -sudo mount -o loop,discard ${BINARIES_DIR}/homefs.ext4 ${BINARIES_DIR}/home + echo "Checking for kernel in ${TARGET_DIR}" + if [ -f "${TARGET_DIR}/boot/Image" ]; then + echo "Found Image, renaming to kernel" + mv "${TARGET_DIR}/boot/Image" "${TARGET_DIR}/boot/kernel" + fi -# sync home folder -sudo rsync -ah --progress ${TARGET_DIR}/home/* ${BINARIES_DIR}/home/ + # Process command line arguments + for arg in "$@"; do + case "${arg}" in + --rpi3) handle_raspberry_pi "rpi3" ;; + --rpi4) handle_raspberry_pi "rpi4" ;; + # --rpi5) handle_raspberry_pi "rpi5" ;; + esac + done -# Unmount home image -sudo umount ${BINARIES_DIR}/homefs.ext4 + # Prepare and sync home data + local home_img="${BINARIES_DIR}/homefs.ext4" + echo "Preparing home data at ${home_img}" + rm -f "${home_img}" + truncate --size="6890M" "${home_img}" + mkfs.ext4 -L "homefs" -E lazy_itable_init=0,lazy_journal_init=0 "${home_img}" + + local home_mount_point="${BINARIES_DIR}/home" + mkdir -p "${home_mount_point}" + sudo mount -o loop,discard "${home_img}" "${home_mount_point}" + sudo rsync -ah --progress "${TARGET_DIR}/home/"* "${home_mount_point}/" + sudo umount "${home_img}" +} + +main "$@"