From 15c55b8c7d801d11c606d6e61de7c523e680453d Mon Sep 17 00:00:00 2001 From: Bananymous Date: Thu, 21 Nov 2024 20:37:42 +0200 Subject: [PATCH] BuildSystem: Don't hardcode partition UUID That was dumb :D I can just read the UUID parted assigned... --- bootloader/bios/command_line.S | 2 +- script/config.sh | 2 - script/image-create.sh | 9 ---- script/install-bootloader.sh | 79 +++++++++++++++++++--------------- toolchain/grub-memdisk.cfg | 5 ++- toolchain/grub-uefi.cfg | 4 +- 6 files changed, 53 insertions(+), 48 deletions(-) diff --git a/bootloader/bios/command_line.S b/bootloader/bios/command_line.S index 001c0e8f26..46b751c90c 100644 --- a/bootloader/bios/command_line.S +++ b/bootloader/bios/command_line.S @@ -83,5 +83,5 @@ command_line_enter_msg: command_line: # 100 character command line command_line_buffer: - .ascii "root=UUID=9C87D2AF-566A-4517-971A-57BA86EEA88D" + .ascii "root=/dev/sda2" .skip 100 - (. - command_line_buffer) diff --git a/script/config.sh b/script/config.sh index 2705064402..7502c72238 100644 --- a/script/config.sh +++ b/script/config.sh @@ -33,5 +33,3 @@ if [[ -z $BANAN_BOOTLOADER ]]; then fi export BANAN_CMAKE=$BANAN_TOOLCHAIN_PREFIX/bin/cmake - -export BANAN_ROOT_PART_UUID='9C87D2AF-566A-4517-971A-57BA86EEA88D' diff --git a/script/image-create.sh b/script/image-create.sh index 3cd2d76487..5e9f1915a5 100755 --- a/script/image-create.sh +++ b/script/image-create.sh @@ -46,15 +46,6 @@ else mkpart root ext2 2M 100% fi -fdisk "$BANAN_DISK_IMAGE_PATH" >/dev/null << EOF -x -u -2 -$BANAN_ROOT_PART_UUID -r -w -EOF - # create loop device LOOP_DEV=$(sudo losetup --show -fP "$BANAN_DISK_IMAGE_PATH" || exit 1 ) PARTITION1=${LOOP_DEV}p1 diff --git a/script/install-bootloader.sh b/script/install-bootloader.sh index 51fd6c0b8b..12fd153e58 100755 --- a/script/install-bootloader.sh +++ b/script/install-bootloader.sh @@ -32,58 +32,58 @@ fi set -u -MOUNT_DIR="$BANAN_BUILD_DIR/mount" -mkdir -p $MOUNT_DIR +mount_dir="$BANAN_BUILD_DIR/mount" +mkdir -p $mount_dir install_grub_legacy() { - sudo mount $PARTITION2 "$MOUNT_DIR" + sudo mount $partition2 "$mount_dir" sudo grub-install \ --no-floppy \ --target=i386-pc \ --modules="normal ext2 multiboot" \ - --boot-directory="$MOUNT_DIR/boot" \ - $LOOP_DEV - sudo mkdir -p "$MOUNT_DIR/boot/grub" - sed "s//UUID=$BANAN_ROOT_PART_UUID/" "$BANAN_TOOLCHAIN_DIR/grub-legacy-boot.cfg" | sudo tee "$MOUNT_DIR/boot/grub/grub.cfg" >/dev/null - sudo umount "$MOUNT_DIR" + --boot-directory="$mount_dir/boot" \ + $loop_dev + sudo mkdir -p "$mount_dir/boot/grub" + sudo cp "$BANAN_BUILD_DIR/grub-legacy-boot.cfg" "$mount_dir/boot/grub/grub.cfg" + sudo umount "$mount_dir" } install_grub_uefi() { - sudo mkfs.fat $PARTITION1 > /dev/null - sudo mount $PARTITION1 "$MOUNT_DIR" - sudo mkdir -p "$MOUNT_DIR/EFI/BOOT" - sudo "$BANAN_TOOLCHAIN_PREFIX/bin/grub-mkstandalone" -O "$BANAN_ARCH-efi" -o "$MOUNT_DIR/EFI/BOOT/BOOTX64.EFI" "boot/grub/grub.cfg=$BANAN_TOOLCHAIN_DIR/grub-memdisk.cfg" - sudo umount "$MOUNT_DIR" + sudo mkfs.fat $partition1 > /dev/null + sudo mount $partition1 "$mount_dir" + sudo mkdir -p "$mount_dir/EFI/BOOT" + sudo "$BANAN_TOOLCHAIN_PREFIX/bin/grub-mkstandalone" -O "$BANAN_ARCH-efi" -o "$mount_dir/EFI/BOOT/BOOTX64.EFI" "boot/grub/grub.cfg=$BANAN_BUILD_DIR/grub-memdisk.cfg" + sudo umount "$mount_dir" - sudo mount $PARTITION2 "$MOUNT_DIR" - sudo mkdir -p "$MOUNT_DIR/boot/grub" - sed "s//UUID=$BANAN_ROOT_PART_UUID/" "$BANAN_TOOLCHAIN_DIR/grub-uefi.cfg" | sudo tee "$MOUNT_DIR/boot/grub/grub.cfg" >/dev/null - sudo umount "$MOUNT_DIR" + sudo mount $partition2 "$mount_dir" + sudo mkdir -p "$mount_dir/boot/grub" + sudo cp "$BANAN_BUILD_DIR/grub-uefi.cfg" "$mount_dir/boot/grub/grub.cfg" + sudo umount "$mount_dir" } install_banan_legacy() { - ROOT_DISK_INFO=$(fdisk -x "$BANAN_DISK_IMAGE_PATH" | tr -s ' ') - ROOT_PART_GUID=$(echo "$ROOT_DISK_INFO" | grep "^$BANAN_DISK_IMAGE_PATH" | head -2 | tail -1 | cut -d' ' -f6) + root_disk_info=$(fdisk -x "$BANAN_DISK_IMAGE_PATH" | tr -s ' ') + root_part_guid=$(echo "$root_disk_info" | grep "^$BANAN_DISK_IMAGE_PATH" | head -2 | tail -1 | cut -d' ' -f6) - INSTALLER_BUILD_DIR=$BANAN_ROOT_DIR/bootloader/installer/build/$BANAN_ARCH - BOOTLOADER_ELF=$BANAN_BUILD_DIR/bootloader/bios/bootloader + installer_build_dir=$BANAN_ROOT_DIR/bootloader/installer/build/$BANAN_ARCH + bootloader_elf=$BANAN_BUILD_DIR/bootloader/bios/bootloader - if [ ! -f $BOOTLOADER_ELF ]; then + if [ ! -f $bootloader_elf ]; then echo "You must build the bootloader first" >&2 exit 1 fi - if [ ! -d $INSTALLER_BUILD_DIR ]; then - mkdir -p $INSTALLER_BUILD_DIR - cd $INSTALLER_BUILD_DIR + if [ ! -d $installer_build_dir ]; then + mkdir -p $installer_build_dir + cd $installer_build_dir $BANAN_CMAKE -G Ninja ../.. fi - cd $INSTALLER_BUILD_DIR + cd $installer_build_dir ninja echo installing bootloader - $INSTALLER_BUILD_DIR/banan_os-bootloader-installer "$BOOTLOADER_ELF" "$BANAN_DISK_IMAGE_PATH" "$ROOT_PART_GUID" + $installer_build_dir/banan_os-bootloader-installer "$bootloader_elf" "$BANAN_DISK_IMAGE_PATH" "$root_part_guid" } install_banan_uefi() { @@ -92,23 +92,34 @@ install_banan_uefi() { } if [ $BANAN_BOOTLOADER = "GRUB" ]; then - - LOOP_DEV=$(sudo losetup --show -fP $BANAN_DISK_IMAGE_PATH || exit 1) - PARTITION1=${LOOP_DEV}p1 - PARTITION2=${LOOP_DEV}p2 - if [ ! -b $PARTITION1 ] || [ ! -b $PARTITION2 ]; then + loop_dev=$(sudo losetup --show -fP $BANAN_DISK_IMAGE_PATH || exit 1) + partition1=${loop_dev}p1 + partition2=${loop_dev}p2 + if [ ! -b $partition1 ] || [ ! -b $partition2 ]; then echo "Failed to probe partitions for banan disk image." >&2 - sudo losetup -d $LOOP_DEV + sudo losetup -d $loop_dev exit 1 fi + root_part_info=$(sudo blkid $partition2) + + root_fs_uuid=$(grep -Pwo 'UUID=".*?"' <<< "$root_part_info") + root_fs_uuid=${root_fs_uuid:6:36} + + root_part_uuid=$(grep -Pwo 'PARTUUID=".*?"' <<< "$root_part_info") + root_part_uuid=${root_part_uuid:10:36} + + cp "$BANAN_TOOLCHAIN_DIR"/grub-*.cfg "$BANAN_BUILD_DIR/" + sed -i "s//UUID=$root_part_uuid/" "$BANAN_BUILD_DIR"/grub-*.cfg + sed -i "s//$root_fs_uuid/" "$BANAN_BUILD_DIR"/grub-*.cfg + if (($BANAN_UEFI_BOOT)); then install_grub_uefi else install_grub_legacy fi - sudo losetup -d $LOOP_DEV + sudo losetup -d $loop_dev elif [ $BANAN_BOOTLOADER = "BANAN" ]; then if (($BANAN_UEFI_BOOT)); then diff --git a/toolchain/grub-memdisk.cfg b/toolchain/grub-memdisk.cfg index 149ca24d6e..28b3f9a7de 100644 --- a/toolchain/grub-memdisk.cfg +++ b/toolchain/grub-memdisk.cfg @@ -1,2 +1,5 @@ insmod part_gpt -configfile (hd0,gpt2)/boot/grub/grub.cfg +insmod search_fs_uuid + +search --no-floppy --fs-uuid --set=root +configfile /boot/grub/grub.cfg diff --git a/toolchain/grub-uefi.cfg b/toolchain/grub-uefi.cfg index e8b80e7470..a0e3b0c898 100644 --- a/toolchain/grub-uefi.cfg +++ b/toolchain/grub-uefi.cfg @@ -1,5 +1,7 @@ insmod part_gpt -set root=(hd0,gpt2) +insmod search_fs_uuid + +search --no-floppy --fs-uuid --set=root insmod all_video