đ§ Köra Ubuntu via QEMU pĂ„ M1 Mac ïŁż
NÀr jag vÀl tog mig tid att titta lite nÀrmare pÄ hur Alexander Graf fick igÄng Windows on ARM64 via QEMU pÄ "Apple silicon" blev det föga förvÄnande rÀtt uppenbart att med lite smÀrre justeringar kommer det Àven kunna anvÀndas för att köra Linux.
Det som Àr det finna i krÄksÄngen med herr Grafs patch Àr att den adderar stöd för HW-accelering i QEMU. De som Àr vana med Linux kÀnner sÀker till KVM (Kernel-based Virtual Machine), vilket Àr motsvarande teknik pÄ Linux som Graf nu fÄtt igÄng under MacOS.
GÄr att köra QEMU Àven utan "hfv" acceleration (HFV Àr namnet pÄ MacOS motsvarighet till KVM, stöd finns redan för x86-baserade Mac:ar och patchen lÀgger till stöd för ARM64 baserade), men utan sÄdan acceleration Àr det flera gÄnger lÄngsammare Àn med acceleration. QEMU kommer fortfarande behöva emulera vissa periferienheter, men om man i sÄ lÀng utstrÀckning som möjligt anvÀnder de som bygger pÄ en teknik som kallas VirtIO
SÄ hÀr följer en How-To för att fÄ igÄng Ubuntu 20.04 server under QEMU pÄ M1 Mac
Bygga en patchad version av QEMU
Installera Apples CLI verktyg för utvecklare
xcode-select --install
Installera MacPorts: https://www.macports.org/install.php
Till skillnad frÄn Homebrew sÄ har MacPorts redan rÀtt fulltÀckande ARM64-native stöd
Följande saker mÄste finnas för att QEMU ska kunna byggas
sudo port install ninja pkgconfig texinfo libtool glib2 libpixman
HÀmta QEMU kÀllkoden
git clone https://git.qemu.org/git/qemu.git
Applicera Alexander Grafs patchar och bygg QEMU
cd qemu
git checkout 944fdc5 -b m1_hvf
curl https://patchwork.kernel.org/series/392975/mbox | git am
mkdir build
cd build
../configure --target-list=aarch64-softmmu --enable-cocoa
make -j 8
Om allt gÄr bra (notera hur snabbt M1 bygger QEMU!!!) ska det bl.a. nu finnas en qemu-system-aarch64 samt qemu-img. Finns massa annat ocksÄ, men Àr dessa tvÄ som behövs senare.
Skapa virtuell disk att lagra installationen pÄ
Installationsdisken för Ubuntu skapas pÄ följande vis, Àndra storleken till vad som Àr rÀtt för dig
qemu-img create -f qcow2 hda.qcow2 64G
UEFI/bootrom
Behövs ocksÄ ett "BIOS", vilket i ARM64 fallet Àr en lÀmplig UEFI. En sÄdan kan laddas ner hÀrifrÄn
Skapa en virtuell flash-disk för UEFI och en dÀr konfiguration kan sparas
tar xzvf QEMU_EFI-*.tar.gz
dd if=/dev/zero of=pflash0.img bs=1m count=64
dd if=/dev/zero of=pflash1.img bs=1m count=64
dd if=QEMU_EFI.fd of=pflash0.img conv=notrunc
dd if=QEMU_VARS.fd of=pflash1.img conv=notrunc
Ladda ner Ubuntu installationen
Jag anvÀnder Ubuntu server 20.04 LTS som man hittar hÀr. Filen heter ubuntu-20.04.1-live-server-arm64.iso i mitt fall.
Installera
Följande kommer installera Ubuntu pÄ hda.qcow2 disken som skapades ovan
qemu-system_aarch64 \
-M virt,highmem=off -accel hvf -cpu max -m 4G -smp 4 \
-device virtio-net-pci,netdev=net0,romfile="" \
-netdev type=user,id=net0,hostfwd=tcp::2222-:22 \
-device virtio-blk-pci,drive=drv0 \
-object rng-random,filename=/dev/urandom,id=rng0 \
-device virtio-rng-pci,rng=rng0 \
-drive format=qcow2,file=hda.qcow2,if=none,id=drv0 \
-drive if=pflash,format=raw,file=pflash0.img,readonly \
-drive if=pflash,format=raw,file=pflash1.img \
-nographic \
-device virtio-scsi \
-device scsi-cd,drive=cd \
-drive if=none,id=cd,file=ubuntu-20.04.1-live-server-arm64.iso
Kör igenom hela installationen, vÀlj "reboot" i slutet och stÀng ned QEMU.
Köra Ubuntu
Enda man behöver Àndra Àr sÄ att installationsmediet inte lÀngre kommer med, detta kör installationen och sÀtter upp sÄ man kan SSH:a till "localhost:2222" för att komma in i sin instans. Terminalemumering Àr vÀsentligt bÀttre via SSH Àn att köra pÄ seriekonsolen
qemu-system_aarch64 \
-M virt,highmem=off -accel hvf -cpu max -m 4G -smp 4 \
-device virtio-net-pci,netdev=net0,romfile="" \
-netdev type=user,id=net0,hostfwd=tcp::2222-:22 \
-device virtio-blk-pci,drive=drv0 \
-object rng-random,filename=/dev/urandom,id=rng0 \
-device virtio-rng-pci,rng=rng0 \
-drive format=qcow2,file=hda.qcow2,if=none,id=drv0 \
-drive if=pflash,format=raw,file=pflash0.img,readonly \
-drive if=pflash,format=raw,file=pflash1.img \
-nographic
Har inte hunnit köra nÄgra benchmarks Àn, men som han tycket om Linux: det kÀnns rÀtt snabbt, gÄr överhuvudtaget inte att jÀmföra med att köra t.ex. RPi4.
Första inloggning för egen del
ssh -p2222 localhost
kjonsson@localhost's password:
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-56-generic aarch64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Thu Dec 3 10:24:00 UTC 2020
System load: 0.0
Usage of /: 19.8% of 30.63GB
Memory usage: 5%
Swap usage: 0%
Processes: 135
Users logged in: 0
IPv4 address for enp0s1: 10.0.2.15
IPv6 address for enp0s1: fec0::5054:ff:fe12:3456
80 updates can be installed immediately.
0 of these updates are security updates.
To see these additional updates run: apt list --upgradable
Last login: Thu Dec 3 09:59:17 2020 from 10.0.2.2
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
kjonsson@icestorm:~$
Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer