Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Path: blob/next/external/extensions/flash-kernel.sh
Views: 3956
# This runs *after* user_config. Don't change anything not coming from other variables or meant to be configured by the user.1function extension_prepare_config__prepare_flash_kernel() {2# Configuration defaults, or lack thereof.3export FK__TOOL_PACKAGE="${FK__TOOL_PACKAGE:-flash-kernel}"4export FK__PUBLISHED_KERNEL_VERSION="${FK__PUBLISHED_KERNEL_VERSION:-undefined-flash-kernel-version}"5export FK__EXTRA_PACKAGES="${FK__EXTRA_PACKAGES:-undefined-flash-kernel-kernel-package}"6export FK__KERNEL_PACKAGES="${FK__KERNEL_PACKAGES:-}"7export FK__MACHINE_MODEL="${FK__MACHINE_MODEL:-Undefined Flash-Kernel Machine}"89# Override certain variables. A case of "this extension knows better and modifies user configurable stuff".10export BOOTCONFIG="none" # To try and convince lib/ to not build or install u-boot.11unset BOOTSOURCE # To try and convince lib/ to not build or install u-boot.12export UEFISIZE=256 # in MiB. Not really UEFI, but partition layout is the same.13export BOOTSIZE=0 # No separate /boot, flash-kernel will "flash" the kernel+initrd to the firmware part.14export UEFI_MOUNT_POINT="/boot/firmware" # mount uefi partition at /boot/firmware15export CLOUD_INIT_CONFIG_LOCATION="/boot/firmware" # use /boot/firmware for cloud-init as well16export VER="${FK__PUBLISHED_KERNEL_VERSION}" # For the VERSION17export EXTRA_BSP_NAME="${EXTRA_BSP_NAME}-fk${FK__PUBLISHED_KERNEL_VERSION}" # Unique bsp name.18echo "-- starting" >"${DEST}"/"${LOG_SUBPATH}"/flash-kernel.log # Zero out the log for this extension.19}2021function post_install_kernel_debs__install_kernel_and_flash_packages() {22export INSTALL_ARMBIAN_FIRMWARE="no" # Disable Armbian-firmware install, which would happen after this method.2324if [[ "${FK__EXTRA_PACKAGES}" != "" ]]; then25display_alert "Installing flash-kernel extra packages" "${FK__EXTRA_PACKAGES}"26echo "-- install extra pkgs" >>"${DEST}"/"${LOG_SUBPATH}"/flash-kernel.log27chroot "${SDCARD}" /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get ${APT_EXTRA_DIST_PARAMS} -yqq --no-install-recommends install ${FK__EXTRA_PACKAGES}" >>"${DEST}"/"${LOG_SUBPATH}"/flash-kernel.log || {28display_alert "Failed to install flash-kernel's extra packages." "${EXTENSION}" "err"29exit 2830}31fi3233if [[ "${FK__KERNEL_PACKAGES}" != "" ]]; then34display_alert "Installing flash-kernel kernel packages" "${FK__KERNEL_PACKAGES}"35echo "-- install kernel pkgs" >>"${DEST}"/"${LOG_SUBPATH}"/flash-kernel.log36chroot "${SDCARD}" /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get ${APT_EXTRA_DIST_PARAMS} -yqq --no-install-recommends install ${FK__KERNEL_PACKAGES}" >>"${DEST}"/"${LOG_SUBPATH}"/flash-kernel.log || {37display_alert "Failed to install flash-kernel's kernel packages." "${EXTENSION}" "err"38exit 2839}40fi4142display_alert "Installing flash-kernel package" "${FK__TOOL_PACKAGE}"43# Create a fake /sys/firmware/efi directory so that flash-kernel does not try to do anything when installed44# @TODO: this might or not work after flash-kernel 3.104 or later45umount "${SDCARD}"/sys46mkdir -p "${SDCARD}"/sys/firmware/efi4748echo "-- install flash-kernel package" >>"${DEST}"/"${LOG_SUBPATH}"/flash-kernel.log49chroot "${SDCARD}" /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get ${APT_EXTRA_DIST_PARAMS} -yqq --no-install-recommends install ${FK__TOOL_PACKAGE}" >>"${DEST}"/"${LOG_SUBPATH}"/flash-kernel.log || {50display_alert "Failed to install flash-kernel package." "${EXTENSION}" "err"51exit 2852}5354# Remove fake /sys/firmware (/efi) directory55rm -rf "${SDCARD}"/sys/firmware56}5758# @TODO: extract u-boot into an extension, so that core bsps don't have this stuff in there to begin with.59# @TODO: this code is duplicated in grub.sh extension, so another reason to refactor the root of the evil60post_family_tweaks_bsp__remove_uboot_flash_kernel() {61display_alert "Removing uboot from BSP" "${EXTENSION}" "info"62# Simply remove everything with 'uboot' or 'u-boot' in their filenames from the BSP package.63# shellcheck disable=SC2154 # $destination is the target dir of the bsp building function64find "$destination" -type f | grep -e "uboot" -e "u-boot" | xargs rm65}6667pre_umount_final_image__remove_uboot_initramfs_hook_flash_kernel() {68# even if BSP still contained this (cached .deb), make sure by removing from ${MOUNT}69[[ -f "$MOUNT"/etc/initramfs/post-update.d/99-uboot ]] && rm -v "$MOUNT"/etc/initramfs/post-update.d/99-uboot70}7172function pre_update_initramfs__setup_flash_kernel() {73local chroot_target=$MOUNT74cp /usr/bin/"$QEMU_BINARY" "$chroot_target"/usr/bin/75mount_chroot "$chroot_target/" # this already handles /boot/firmware which is required for it to work.76# hack, umount the chroot's /sys, otherwise flash-kernel tries to EFI flash due to the build host (!) being EFI77umount "$chroot_target/sys"7879echo "-- flash-kernel disabling hooks" >>"${DEST}"/"${LOG_SUBPATH}"/flash-kernel.log80chroot "$chroot_target" /bin/bash -c "chmod -v -x /etc/kernel/postinst.d/initramfs-tools" >>"${DEST}"/"${LOG_SUBPATH}"/flash-kernel.log 2>&181chroot "$chroot_target" /bin/bash -c "chmod -v -x /etc/initramfs/post-update.d/flash-kernel" >>"${DEST}"/"${LOG_SUBPATH}"/flash-kernel.log 2>&18283export FIRMWARE_DIR="${MOUNT}"/boot/firmware84call_extension_method "pre_initramfs_flash_kernel" <<-'PRE_INITRAMFS_FLASH_KERNEL'85*prepare to update-initramfs before flashing kernel via flash_kernel*86A good spot to write firmware config to ${FIRMWARE_DIR} (/boot/firmware) before flash-kernel actually runs.87PRE_INITRAMFS_FLASH_KERNEL8889local update_initramfs_cmd="update-initramfs -c -k all"90display_alert "Updating flash-kernel initramfs..." "$update_initramfs_cmd" ""91echo "-- flash-kernel initramfs" >>"${DEST}"/"${LOG_SUBPATH}"/flash-kernel.log92chroot "$chroot_target" /bin/bash -c "$update_initramfs_cmd" >>"${DEST}"/"${LOG_SUBPATH}"/flash-kernel.log 2>&1 || {93display_alert "Failed to run '$update_initramfs_cmd'" "Check ${DEST}/"${LOG_SUBPATH}"/flash-kernel.log" "err"94exit 2995}9697call_extension_method "pre_flash_kernel" <<-'PRE_FLASH_KERNEL'98*run before running flash-kernel*99Each board might need different stuff for flash-kernel to work. Implement it here.100Write to `${MOUNT}`, eg: `"${MOUNT}"/etc/flash-kernel`101PRE_FLASH_KERNEL102103local flash_kernel_cmd="flash-kernel --machine '${FK__MACHINE_MODEL}'"104display_alert "flash-kernel" "${FK__MACHINE_MODEL}" "info"105echo "-- flash-kernel itself" >>"${DEST}"/"${LOG_SUBPATH}"/flash-kernel.log106chroot "$chroot_target" /bin/bash -c "${flash_kernel_cmd}" >>"${DEST}"/"${LOG_SUBPATH}"/flash-kernel.log 2>&1 || {107display_alert "Failed to run '${flash_kernel_cmd}'" "Check ${DEST}/"${LOG_SUBPATH}"/flash-kernel.log" "err"108exit 29109}110111display_alert "Re-enabling" "initramfs-tools/flash-kernel hook for kernel"112echo "-- flash-kernel re-enabling hooks" >>"${DEST}"/"${LOG_SUBPATH}"/flash-kernel.log113chroot "$chroot_target" /bin/bash -c "chmod -v +x /etc/kernel/postinst.d/initramfs-tools" >>"${DEST}"/"${LOG_SUBPATH}"/flash-kernel.log 2>&1114chroot "$chroot_target" /bin/bash -c "chmod -v +x /etc/initramfs/post-update.d/flash-kernel" >>"${DEST}"/"${LOG_SUBPATH}"/flash-kernel.log 2>&1115116umount_chroot "$chroot_target/"117rm "$chroot_target"/usr/bin/"$QEMU_BINARY"118119display_alert "Disabling Armbian-core update_initramfs, was already done above." "${EXTENSION}"120unset KERNELSOURCE # ugly. sorry. we'll have better mechanism for this soon. this is tested at lib/debootstrap.sh:844121}122123124