🐘

QEMU Ubuntu 18.04 aarch64 on Ubuntu 19.10 amd64

2020/09/19に公開

テストも兼ねてQrunchからちょっとコンテンツ引っ張ってきてちょっと加筆

Ubuntu 18.04 aarch64の環境が欲しくなったんだけど、評価ボードもないので、Ubuntu 19.10 amd64とQEMUでなんとかするお話。すまん、まだLTSじゃねえんだ…(多分動くと思うけどね)

造った環境は20.04LTSでも動くので大丈夫だと思います…

Server版を動かします。Desktopは皆さんでお好きにどうぞ。

下準備(Qemuボリューム作成とかcloud-init周りの準備)

流れ的には以下の感じで

  • qemuの導入
  • cloud-initの準備
  • 起動

cloud-initはサーバーのcloud-imageがあるので、アカウントとかの設定がやりやすいんですよね。ってなわけです。

armのqemuをインストール。前はqemu-system-aarch64だったんですが、qemu-system-armに変わったんですね…

$ sudo apt install qemu-system-arm

cloudイメージとQEMUのEFIイメージを持ってくる。

$ wget http://ubuntutym2.u-toyama.ac.jp/cloud-images/releases/18.04/release/ubuntu-18.04-server-cloudimg-arm64.img
$ wget https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu64/QEMU_EFI.fd

EFIのボリュームを作成

$ dd if=/dev/zero of=flash0.img bs=1M count=64
$ dd if=QEMU_EFI.fd of=flash0.img conv=notrunc
$ dd if=/dev/zero of=flash1.img bs=1M count=64

cloud-image-utilsをインストール。このあとで使います。Ubuntuのパッケージなので、MacOSなどのひとはdockerでUbuntu使うといいかも。

$ sudo apt install cloud-image-utils

cloud-initのuser-dataの設定を行いイメージを作成。ユーザ名を変えたくてnameを使ってたんですが、常にアカウントがubuntuになってしまう。実際はuserを指定するようで...ここ今回のハマりポイントでした。こんなのマニュアルに書いてないぞ!そして、ありがとうRed Hat

$ cat >cloud.txt <<EOF
> #cloud-config
> user: tlls
> password: tlls
> chpasswd: { expire: False }
> ssh_pwauth: True
> EOF
$ cloud-localds --disk-format qcow2 cloud.img cloud.txt

イメージのバックアップ。失敗したらバックアップからコピーすればいい。

$ cp ubuntu-18.04-server-cloudimg-arm64.img ubuntu-18.04-server-cloudimg-arm64.img.bak

実行

実行。問題がなければ、チューニングしながらシェルスクリプトにしておくといいかも

$ qemu-system-aarch64 -m 4096 -smp 4 -cpu cortex-a57 -M virt -nographic \
  -pflash flash0.img \
  -pflash flash1.img \
  -drive if=none,file=ubuntu-18.04-server-cloudimg-arm64.img,id=hd0 \
  -device virtio-blk-device,drive=hd0 \
  -drive if=none,id=cloud,file=cloud.img \
  -device virtio-blk-device,drive=cloud \
  -device virtio-net-device,netdev=user0 \
  -netdev user,id=user0,hostfwd=tcp::2222-:22

コンソールからのログインならいつもどおりで、sshのログインなら2222->22のポートフォワーディングがかかってるので以下のような感じでログイン。

$ ssh -l tlls localhost -p 2222

cloud-initはとくに止めなくてもいいかも。

不明分はまた追加で。

課題

  • コア数が1なのでクソ遅い。
  • GPUもパススルーできないのかな。

参考

https://gist.github.com/oznu/ac9efae7c24fd1f37f1d933254587aa4
https://gist.github.com/brianredbeard/36f5bc52f8e8602b8ac0fcbd8bacc4e3
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0565
https://access.redhat.com/ja/articles/1460743

Discussion