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