From 5dfd3e31db48f8a06038428691ce946441dda1e6 Mon Sep 17 00:00:00 2001 From: isa Date: Thu, 18 Jul 2024 16:03:29 -0400 Subject: [PATCH] Add features to qemu script and support for other linux distros --- scripts/qemu-boot | 72 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 55 insertions(+), 17 deletions(-) diff --git a/scripts/qemu-boot b/scripts/qemu-boot index 8745fd5..a8fc03d 100755 --- a/scripts/qemu-boot +++ b/scripts/qemu-boot @@ -1,16 +1,11 @@ -#!/bin/bash +#!/usr/bin/env bash EXTRA_KERNEL_CMDLINE="" SCRIPT=$(realpath ${BASH_SOURCE}) BUILD_ROOT=$(realpath $(dirname ${SCRIPT})/../build) -SYSROOT=${BUILD_ROOT}/tmp-glibc/work/x86_64-linux/qemu-helper-native/1.0-r1/recipe-sysroot-native -QEMU=${SYSROOT}/usr/bin/qemu-system-x86_64 - -if [[ ! -f ${QEMU} ]]; then - >&2 printf "Qemu binary not found at: ${QEMU}\n" - exit 1 -fi +SYSROOT=${BUILD_ROOT}/tmp-glibc/work/x86_64-linux/qemu-helper-native/1.0/recipe-sysroot-native +QEMU=qemu-system-x86_64 ENABLE_KVM="--enable-kvm -cpu host" @@ -20,9 +15,13 @@ if [[ ! -c "/dev/kvm" ]]; then fi EFI_BIOS="-bios /usr/share/qemu/OVMF.fd" -if [[ ! -f "/usr/share/qemu/OVMF.fd" ]]; then - printf "Disabling EFI boot because OVMF.fd not found in /usr/share/qemu\n" - EFI_BIOS="" +if [[ -f "/usr/share/qemu/OVMF.fd" ]]; then + printf "Using EFI boot because OVMF.fd found in /usr/share/qemu/\n" +elif [[ -f "/usr/share/edk2-ovmf/x64/OVMF.fd" ]]; then # fedora and arch + printf "Using EFI boot because OVMF.fd found in /usr/share/edk2-ovmf/x64/\n" + EFI_BIOS="-bios /usr/share/edk2-ovmf/x64/OVMF.fd" +else + printf "Disabling EFI boot because OVMF.fd not found\n" fi usage() { @@ -43,7 +42,7 @@ exit 0 } BOOT_TARGET="" -MEMORY_ARG="-m 4G" +MEMORY_ARG="-m 8G" DEBUG_MODE=0 while [[ $# -gt 0 ]]; do @@ -70,6 +69,14 @@ while [[ $# -gt 0 ]]; do BOOT_TARGET="installer" shift ;; + boot-to-install) + BOOT_TARGET="boot-to-install" + shift + ;; + boot-installed) + BOOT_TARGET="boot-installed" + shift + ;; --help) usage ;; @@ -84,23 +91,50 @@ COMMON_INSTALLER_ARGS="\ ${ENABLE_KVM} \ ${MEMORY_ARG} \ ${EFI_BIOS} \ - -vga virtio \ + -device virtio-vga-gl \ + -display sdl,gl=on \ + -vga none \ -usb -device usb-tablet,id=input0 \ - -drive format=raw,file=${BUILD_ROOT}/images/citadel-installer.img \ - -net none \ + -nic user,model=virtio-net-pci \ -smp 2" boot_installer() { if [[ ${DEBUG_MODE} -eq 1 ]]; then - ${QEMU} ${COMMON_INSTALLER_ARGS} \ + ${QEMU} ${COMMON_INSTALLER_ARGS} \ -serial stdio \ -kernel ${BUILD_ROOT}/images/bzImage \ + -drive format=raw,file=${BUILD_ROOT}/images/citadel-installer.img \ -append "console=ttyS0 earlyprintk=ttyS0 root=/dev/mapper/rootfs citadel.verbose citadel.install fstab=no luks=no systemd.journald.forward_to_console=1 ${EXTRA_KERNEL_CMDLINE}" else - ${QEMU} ${COMMON_INSTALLER_ARGS} + ${QEMU} ${COMMON_INSTALLER_ARGS} -drive format=raw,file=${BUILD_ROOT}/images/citadel-installer.img fi } +# qemu-img create -f qcow2 qemu_disk/citadel_disk.qcow2 -o size=50G,preallocation=metadata +# mount -t 9p -o trans=virtio,version=9p2000.L shared /mnt/my9p +boot_to_install() { + if [ ! -f qemu_disk/citadel_disk.qcow2 ]; then + mkdir qemu_disk + qemu-img create -f qcow2 qemu_disk/citadel_disk.qcow2 -o size=50G,preallocation=metadata + fi + + CITADEL_QEMU_ARGS+=" ${COMMON_INSTALLER_ARGS} -drive format=raw,file=${BUILD_ROOT}/images/citadel-installer.img -drive format=qcow2,file=${BUILD_ROOT}/../qemu_disk/citadel_disk.qcow2" + + echo "${QEMU} ${CITADEL_QEMU_ARGS}" + ${QEMU} ${CITADEL_QEMU_ARGS} +} + +boot_installed() { + if [ ! -f qemu_disk/citadel_disk.qcow2 ]; then + printf "The qemu disk is not found on the drive. Please run boot-to-install\n" + fi + + CITADEL_QEMU_ARGS+=" ${COMMON_INSTALLER_ARGS} -drive format=qcow2,file=${BUILD_ROOT}/../qemu_disk/citadel_disk.qcow2" + + echo "${QEMU} ${CITADEL_QEMU_ARGS}" + ${QEMU} ${CITADEL_QEMU_ARGS} +} + boot_kernel() { EXTRA_OPTIONS="" KERNEL_IMAGE="bzImage" @@ -124,6 +158,10 @@ if [[ ${BOOT_TARGET} = "kernel" ]]; then boot_kernel elif [[ ${BOOT_TARGET} = "installer" ]]; then boot_installer +elif [[ ${BOOT_TARGET} = "boot-to-install" ]]; then + boot_to_install +elif [[ ${BOOT_TARGET} = "boot-installed" ]]; then + boot_installed else usage fi