qemuでmacにalmalinux9を入れる

# 目的
macで自由度の高い無料のlinux仮想環境が欲しい!
UTMの使い方がよくわからん

ということでqemuを使ってmacにalmalinux9を入れましょう。


## qemuって何
qemuはオープンソースの仮想環境を作るソフトです。
どのアーキテクチャのOSでも動かすことができる優れものです。
(本当はもっと高度なこともできるらしいけど知らない…)

# 準備
環境はm3 macです。


まずqemuをinstallします。(ここでは、brewで入れています)
```
brew install qemu
```

次に、ディスクを作ります。
```
qemu-img create -f qcow2 almalinux9.qcow2 20G
```


# almalinux9を入れる
次に、almalinux9のisoイメージをダウンロードします。
[公式](https://almalinux.org/ja/)からARM64(AArch64)用の「AlmaLinux OS 9.5 DVD ISO」をダウンロードしました。


次にqemuで起動するためのスクリプトを作ります。
launch-install.shとし、以下の内容で作りました。
覚えられるひとは直接ターミナルに入力してもいいです。
```launch-install.sh
qemu-system-aarch64 \
  -m 4096 \
  -cpu cortex-a72 \
  -smp 4 \
  -monitor stdio \
  -device virtio-gpu-pci \
  -device nec-usb-xhci,id=xhci \
  -device usb-kbd \
  -device usb-tablet \
  -display cocoa \
  -machine virt \
  -bios /opt/homebrew/share/qemu/edk2-aarch64-code.fd \
  -cdrom ../ISO_images/AlmaLinux-9.5-aarch64-dvd.iso \
  -netdev user,id=net0,hostfwd=tcp::10022-:22 \
  -device virtio-net-device,netdev=net0 \
  -drive if=none,file=almalinux9.qcow2,format=qcow2,id=hd0 \
  -device virtio-blk-device,drive=hd0 \
  -boot order=d
```
  
<details>
<summary>各項目の解説</summary>
(分かる範囲での解説です)

```
  -m 4096 メモリ4GB
  -cpu cortex-a72 cpuの種類
  -smp 4 4コア使う
  -monitor stdio qemuの出力を標準出力にいれる
  -device virtio-gpu-pci pci接続のgpuを設定
  -device nec-usb-xhci,id=xhci usbの設定
  -device usb-kbd キーボード
  -device usb-tablet マウス
  -display cocoa 画面出力にcocoa
  -machine virt わからん
  -bios /opt/homebrew/share/qemu/edk2-aarch64-code.fd biosの設定
  -cdrom ../ISO_images/AlmaLinux-9.5-aarch64-dvd.iso インストールisoの設定
  -netdev user,id=net0,hostfwd=tcp::10022-:22 ホストからsshできるようにポートを設定
  -device virtio-net-device,netdev=net0 ネットワークの設定
  -drive if=none,file=almalinux9.qcow2,format=qcow2,id=hd0 hddの設定
  -device virtio-blk-device,drive=hd0 
  -boot order=d  起動をiso優先にする
```

</details>

実行します
```
./launch-install.sh
```

これで、almalinxをインストールするかどうか聞かれます。
「install almalinx」を選択します。
![スクリーンショット 2025-05-13 22.29.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1857539/bb1220f6-e132-449d-91de-f1541bb25e71.png)

この後、output display is not activeと表示されますが、数分待つとインストール画面が現れます。
![スクリーンショット 2025-05-13 22.29.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1857539/71fcfc9f-9570-4bd8-8482-8ea239a9cdc8.png)
インストール画面
![スクリーンショット 2025-05-13 22.31.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1857539/a9fed95f-3690-4840-a47f-6f676474d75c.png)
※縮尺がおかしかったらメニューのviewからfitを選ぶ



installが完了するとrebootボタンを押す指示があるので、そのまま押します。なお、インストールには結構時間がかかります。私の場合は1時間ぐらい。
自動的に再起動されて、almalinuxが立ち上がります。
※再度almalinuxのインストール画面になってしまったら、launch.shを実行したあとのターミナルに
```
(qemu) quit
```
といれて強制終了できます。

# 通常の起動
インストールした後はインストールディスクを外して起動します。
launch.shから該当箇所を削除します。
```インストールディスクを外したlaunch.sh
qemu-system-aarch64 \
  -m 4096 \
  -cpu cortex-a72 \
  -smp 4 \
  -monitor stdio \
  -device virtio-gpu-pci \
  -device nec-usb-xhci,id=xhci \
  -device usb-kbd \
  -device usb-tablet \
  -display cocoa \
  -machine virt \
  -bios /opt/homebrew/share/qemu/edk2-aarch64-code.fd \
  -netdev user,id=net0,hostfwd=tcp::10022-:22 \
  -device virtio-net-device,netdev=net0 \
  -drive if=none,file=almalinux9.qcow2,format=qcow2,id=hd0 \
  -device virtio-blk-device,drive=hd0 \
```

ターミナルから
```
./launch.sh
```
としてしばらく待つと起動できます。

## ヘッドレスで起動
画面に何も出力させずに起動させる場合は、画面出力の設定をlaunch.shから削除します。
以下の設定では、`ssh -p 10023 ユーザー名@localhost`で接続できます。
launch.shの例
```
qemu-system-aarch64 \
  -m 4096 \
  -cpu cortex-a72 \
  -smp 4 \
  -machine virt \
  -bios /opt/homebrew/share/qemu/edk2-aarch64-code.fd \
  -netdev user,id=net0,hostfwd=tcp::10023-:22 \
  -device virtio-net-device,netdev=net0 \
  -drive if=none,file=almalinux9.qcow2,format=qcow2,id=hd0 \
  -device virtio-blk-device,drive=hd0 \
  -nographic
```