A simple, zero-configuration script to quickly boot FreeBSD ISO images using QEMU

Support aarch64 architecture in QEMU commands and download URL

+23 -7
+8 -3
src/subcommands/start.ts
··· 12 12 13 13 console.log(`Starting virtual machine ${vm.name} (ID: ${vm.id})...`); 14 14 15 - const cmd = new Deno.Command(vm.bridge ? "sudo" : "qemu-system-x86_64", { 15 + const qemu = Deno.build.arch === "aarch64" 16 + ? "qemu-system-aarch64" 17 + : "qemu-system-x86_64"; 18 + const cmd = new Deno.Command(vm.bridge ? "sudo" : qemu, { 16 19 args: [ 17 - ..._.compact([vm.bridge && "qemu-system-x86_64"]), 18 - "-enable-kvm", 20 + ..._.compact([vm.bridge && qemu]), 21 + ..._.compact( 22 + Deno.build.os === "darwin" ? ["-accel", "hvf"] : ["-enable-kvm"], 23 + ), 19 24 "-cpu", 20 25 vm.cpu, 21 26 "-m",
+15 -4
src/utils.ts
··· 86 86 } 87 87 88 88 export function constructDownloadUrl(version: string): string { 89 + let arch = "amd64"; 90 + 91 + if (Deno.build.arch === "aarch64") { 92 + arch = "arm64-aarch64"; 93 + } 94 + 89 95 return `https://download.freebsd.org/ftp/releases/ISO-IMAGES/${ 90 96 version.split("-")[0] 91 - }/FreeBSD-${version}-amd64-disc1.iso`; 97 + }/FreeBSD-${version}-${arch}-disc1.iso`; 92 98 } 93 99 94 100 export async function runQemu( ··· 96 102 options: Options, 97 103 ): Promise<void> { 98 104 const macAddress = generateRandomMacAddress(); 99 - const cmd = new Deno.Command(options.bridge ? "sudo" : "qemu-system-x86_64", { 105 + const qemu = Deno.build.arch === "aarch64" 106 + ? "qemu-system-aarch64" 107 + : "qemu-system-x86_64"; 108 + const cmd = new Deno.Command(options.bridge ? "sudo" : qemu, { 100 109 args: [ 101 - ..._.compact([options.bridge && "qemu-system-x86_64"]), 102 - "-enable-kvm", 110 + ..._.compact([options.bridge && qemu]), 111 + ..._.compact( 112 + Deno.build.os === "darwin" ? ["-accel", "hvf"] : ["-enable-kvm"], 113 + ), 103 114 "-cpu", 104 115 options.cpu, 105 116 "-m",