> # Install QEMU on Silicon based Apple Macs (June 2021) ## Option 1 - Automatically ```zsh zsh -c "$(curl -fsSL https://raw.githubusercontent.com/nrjdalal/silicon-virtualizer/master/install-qemu.sh)" ``` ## Option 2 - Manually * ### Install Xcode command line tools ```zsh xcode-select --install ``` * ### Install Homebrew arm64 ```zsh /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/$(logname)/.zprofile eval "$(/opt/homebrew/bin/brew shellenv)" ``` * ### Install necessary packages for building ```zsh brew install libffi gettext glib pkg-config autoconf automake pixman ninja ``` * ### Clone qemu ```zsh git clone https://github.com/qemu/qemu ``` * ### Change directory to qemu repository ```zsh cd qemu ``` * ### Checkout to commit dated June 03, 2021 v6.0.0 ```zsh git checkout 3c93dfa42c394fdd55684f2fbf24cf2f39b97d47 ``` * ### Apply patch series v8 by Alexander Graf ```zsh curl https://patchwork.kernel.org/series/485309/mbox/ | git am ``` * ### Building qemu installer ```zsh mkdir build && cd build ../configure --target-list=aarch64-softmmu make -j8 ``` * ### Install qemu ```zsh sudo make install ``` > # Create Ubuntu Server using QEMU on Silicon based Apple Macs ## First run, close manually after installation aka first reboot. ```zsh curl https://cdimage.ubuntu.com/releases/20.04/release/ubuntu-20.04.4-live-server-arm64.iso -o ubuntu-lts.iso qemu-img create -f qcow2 virtual-disk.qcow2 8G cp $(dirname $(which qemu-img))/../share/qemu/edk2-aarch64-code.fd . dd if=/dev/zero conv=sync bs=1m count=64 of=ovmf_vars.fd qemu-system-aarch64 \ -machine virt,accel=hvf,highmem=off \ -cpu cortex-a72 -smp 4 -m 4G \ -device virtio-gpu-pci \ -device virtio-keyboard-pci \ -drive "format=raw,file=edk2-aarch64-code.fd,if=pflash,readonly=on" \ -drive "format=raw,file=ovmf_vars.fd,if=pflash" \ -drive "format=qcow2,file=virtual-disk.qcow2" \ -cdrom ubuntu-lts.iso ``` ## Second run, enjoy your Ubuntu Server. ```zsh qemu-system-aarch64 \ -machine virt,accel=hvf,highmem=off \ -cpu cortex-a72 -smp 4 -m 4G \ -device virtio-gpu-pci \ -device virtio-keyboard-pci \ -drive "format=raw,file=edk2-aarch64-code.fd,if=pflash,readonly=on" \ -drive "format=raw,file=ovmf_vars.fd,if=pflash" \ -drive "format=qcow2,file=virtual-disk.qcow2" ``` ## Bonus, connect via SSH and serve port 80 at localhost. 1. Start server using - ```zsh qemu-system-aarch64 \ -machine virt,accel=hvf,highmem=off \ -cpu cortex-a72 -smp 4 -m 4G \ -device virtio-gpu-pci \ -device virtio-keyboard-pci \ -drive "format=raw,file=edk2-aarch64-code.fd,if=pflash,readonly=on" \ -drive "format=raw,file=ovmf_vars.fd,if=pflash" \ -drive "format=qcow2,file=virtual-disk.qcow2" \ -nic hostfwd=tcp:127.0.0.1:9922-0.0.0.0:22,hostfwd=tcp:127.0.0.1:9980-0.0.0.0:80 & ``` 2. Login via SSH using - ```zsh ssh @127.0.0.1 -p 9922 ``` 3. Visit http content at - ```zsh open http://127.0.0.1:9980 ```