From e38c103010ac7c75c73f783a5768a695a6eb0ecc Mon Sep 17 00:00:00 2001 From: Giulio Date: Sat, 8 Jan 2022 00:22:45 +0100 Subject: [PATCH] Added post transaction dom0 symlink creation; draft grub.cfg --- README.md | 2 + build.sh | 77 ++++++-------- resources/00-kernel-xen-symlink.conf | 3 + resources/dejavusansmono.pf2 | Bin 0 -> 100513 bytes resources/grub.cfg | 144 +++++++++++++++++++++++++++ 5 files changed, 177 insertions(+), 49 deletions(-) create mode 100644 README.md create mode 100644 resources/00-kernel-xen-symlink.conf create mode 100644 resources/dejavusansmono.pf2 diff --git a/README.md b/README.md new file mode 100644 index 0000000..70fb540 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ + +sudo qubes-dom0-update python3-dnf-plugin-post-transaction-actions \ No newline at end of file diff --git a/build.sh b/build.sh index abe3086..439c163 100644 --- a/build.sh +++ b/build.sh @@ -1,4 +1,6 @@ -#!/bin/bash +#!/usr/bin/env bash + + # use TERM to exit on error trap "exit 1" TERM export TOP_PID=$$ @@ -516,18 +518,10 @@ build_coreboot() { # calculate hash of BIOS region before injecting bootorder/serial ${IFDTOOL_CB} -x ${COREBOOT_IMAGE} - bios_sha=$(sha256sum flashregion_1_bios.bin | awk '{print $1}') - rm -f flashregion*.bin # set serial set_serial_number ${COREBOOT_IMAGE} - #set boot delay - # add an 8s boot delay for the Librem Mini so splash screen - # actually shown on displays with sluggish init - if [[ ${LIBREM_MODEL^^} == "MINI"* ]]; then - ${CBFSTOOL_CB} ${COREBOOT_IMAGE} add-int -i 8000 -n etc/boot-menu-wait >/dev/null - fi # print CBFS contents ${CBFSTOOL_CB} ${COREBOOT_IMAGE} print @@ -535,56 +529,41 @@ build_coreboot() { echo "" echo "Finished building coreboot for Librem ${LIBREM_MODEL^}" echo "" - COREBOOT_BIOS_SHA="COREBOOT_BIOS_SHA_${LIBREM_MODEL^^}" - COREBOOT_BIOS_SHA=${!COREBOOT_BIOS_SHA} - if [ "${bios_sha}" != "${COREBOOT_BIOS_SHA}" ]; then - echo "WARNING: Built coreboot image hash does not match expected reproducible build hash" - echo "Built: ${bios_sha}" - echo "Expected: ${COREBOOT_BIOS_SHA}" - else - echo "Built coreboot image hash matches expected reproducible build hash" - fi + # prompt to flash echo "" - if [ ${CURRENT_FW_TYPE} != "HEADS" ]; then - flash=0 - while [ "$flash" != "y" ] && [ "$flash" != "n" ]; do - read -r -p "Do you want to flash the coreboot update now (y/N) ? " flash - if [ "$flash" = "" ] || [ "$flash" == "N" ]; then - flash="n" - fi - if [ "$flash" == "Y" ]; then - flash="y" - fi - done - if [ "$flash" == "y" ]; then - # check for / get flashrom - get_flashrom + flash=0 + while [ "$flash" != "y" ] && [ "$flash" != "n" ]; do + read -r -p "Do you want to flash the coreboot update now (y/N) ? " flash + if [ "$flash" = "" ] || [ "$flash" == "N" ]; then + flash="n" + fi + if [ "$flash" == "Y" ]; then + flash="y" + fi + done + if [ "$flash" == "y" ]; then + # check for / get flashrom + get_flashrom + echo "" + echo "coreboot flashing in progress. Do NOT interrupt this process." + echo "" + flash_firmware_internal ${COREBOOT_IMAGE} + if [ $? -eq 0 ]; then echo "" - echo "coreboot flashing in progress. Do NOT interrupt this process." + echo "You must reboot for the coreboot update to take effect." echo "" - flash_firmware_internal ${COREBOOT_IMAGE} - if [ $? -eq 0 ]; then - echo "" - echo "You must reboot for the coreboot update to take effect." - echo "" - read -r -p "Reboot now? (y/N) ? " rb - if [ "$rb" = "Y" ] || [ "$rb" == "y" ]; then - cleanup - reboot - fi + read -r -p "Reboot now? (y/N) ? " rb + if [ "$rb" = "Y" ] || [ "$rb" == "y" ]; then + cleanup + reboot fi - else - echo "" fi else - echo "You may now copy the coreboot update file ($COREBOOT_IMAGE) to USB for updating via Heads." echo "" - read -ep "Press [Enter] to exit." - cleanup - exit 0 fi + } check_dependencies() { diff --git a/resources/00-kernel-xen-symlink.conf b/resources/00-kernel-xen-symlink.conf new file mode 100644 index 0000000..779d8a6 --- /dev/null +++ b/resources/00-kernel-xen-symlink.conf @@ -0,0 +1,3 @@ +kernel:upgraded:/usr/bin/ln -sfn /boot/initramfs-${ver}-${rel}.fc32.qubes.${arch} +kernel:upgraded:/usr/bin/ln -sfn /boot/vmlinuz-${ver}-${rel}.fc32.qubes.${arch} +xen-hypervisor:upgraded:/usr/bin/ln -sfn /boot/xen-${ver}.gz /boot/xen-latest.gz \ No newline at end of file diff --git a/resources/dejavusansmono.pf2 b/resources/dejavusansmono.pf2 new file mode 100644 index 0000000000000000000000000000000000000000..9ba557e9d653eae37074e1cd8db95111c130f81a GIT binary patch literal 100513 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 aGt`>dwXNU}=C!kin(v`Wy=bp63;zYuiwLIx literal 0 HcmV?d00001 diff --git a/resources/grub.cfg b/resources/grub.cfg index e69de29..b6cd6ae 100644 --- a/resources/grub.cfg +++ b/resources/grub.cfg @@ -0,0 +1,144 @@ +set prefix=(memdisk)/boot/grub + +insmod nativedisk +insmod usb +insmod usbms +insmod part_msdos +insmod ext2 +insmod lvm +insmod gcry_rijndael +insmod gcry_sha256 +insmod luks +insmod cryptodisk +insmod gfxmenu +insmod gfxterm_menu +insmod gfxterm_background +insmod chain +insmod jpeg + +terminal_input --append at_keyboard +terminal_output --append cbmemc + +gfxpayload=keep +terminal_output --append gfxterm + +set menu_color_normal=white/black +set menu_color_highlight=white/cyan + +# Default to first option, automatically boot after 1 second +set default="0>0" +set timeout=1 + +# This is useful when using 'cat' on long files on GRUB terminal +set pager=1 + +# Set a background image from CBFS +background_image (cbfsdisk)/background.jpg + +# Set DejaVu Sans Mono as the default font +loadfont (cbfsdisk)/dejavusansmono.pf2 + +# Default keymap +keymap usqwerty + +# Users +set superusers="admin" +password_pbkdf2 admin #password_placeholder# +export superusers + +function try_user_config { + set root="${1}" + for dir in boot grub grub2 boot/grub boot/grub2; do + for name in '' autoboot_ libreboot_ coreboot_; do + if [ -f /"${dir}"/"${name}"grub.cfg ]; then + unset superusers + configfile /"${dir}"/"${name}"grub.cfg + fi + done + done +} + +function search_grub { + for i in 0 1; do + # raw devices + try_user_config "(${1}${i})" + for part in 1 2 3 4 5; do + # MBR/GPT partitions + try_user_config "(${1}${i},${part})" + done + done +} + +function try_isolinux_config { + set root="${1}" + for dir in '' /boot; do + if [ -f "${dir}"/isolinux/isolinux.cfg ]; then + syslinux_configfile -i "${dir}"/isolinux/isolinux.cfg + elif [ -f "${dir}"/syslinux/syslinux.cfg ]; then + syslinux_configfile -s "${dir}"/syslinux/syslinux.cfg + fi + done +} + +function search_isolinux { + for i in 0 1; do + # raw devices + try_isolinux_config "(${1}${i})" + for part in 1 2 3 4 5; do + # MBR/GPT partitions + try_isolinux_config "(${1}${i},${part})" + done + done +} + +menuentry 'Qubes, with Xen hypervisor' --class qubes --class gnu-linux --class gnu --class os --class xen $menuentry_id_option 'xen-gnulinux-simple-/dev/mapper/qubes_dom0-root' { + insmod part_msdos + insmod ext2 + cryptomount -a + set root='lvm/qubes_dom0-boot' + set root='hd0,msdos1' + if [ x$feature_platform_search_hint = xy ]; then + search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 2c68125e-e8df-4d9f-b67f-74c44a6e9873 + else + search --no-floppy --fs-uuid --set=root 2c68125e-e8df-4d9f-b67f-74c44a6e9873 + fi + echo 'Loading Xen..' + if [ "$grub_platform" = "pc" -o "$grub_platform" = "" ]; then + xen_rm_opts= + else + xen_rm_opts="no-real-mode edd=off" + fi + multiboot2 /xen-latest placeholder console=none dom0_mem=min:1024M dom0_mem=max:4096M ucode=scan smt=off gnttab_max_frames=2048 gnttab_max_maptrack_frames=4096 ${xen_rm_opts} + echo 'Loading Linux...' + module2 /vmlinuz-latest placeholder root=/dev/mapper/qubes_dom0-root ro rd.luks.uuid=luks-f8d0a06a-fb7a-411a-a662-4f7a6bf4931c rd.lvm.lv=qubes_dom0/root rd.lvm.lv=qubes_dom0/swap plymouth.ignore-serial-consoles i915.alpha_support=1 rd.driver.pre=btrfs rhgb quiet rd.qubes.hide_all_usb + echo 'Loading initial ramdisk...' + module2 --nounzip /initramfs-latest +} + +submenu 'Search for systems on external media' { + menuentry 'Search ISOLINUX menu (USB)' { + search_isolinux usb + } + menuentry 'Search ISOLINUX menu (AHCI)' { + search_isolinux ahci + } + menuentry 'Search for GRUB2 configuration on external media' { + search_grub usb + } + menuentry 'Load test configuration (grubtest.cfg) inside of CBFS' { + set root='(cbfsdisk)' + configfile /grubtest.cfg + } + menuentry 'Chainload bootloader on external media' { + set root='(usb0)' + chainloader +1 + } +} + +menuentry 'Reboot [r]' --hotkey='r' { + reboot +} + +menuentry 'Poweroff [p]' --hotkey='p' { + halt +}