ARM64のubuntu-arm64をKVMで動作にチャレンジ

1.概要

前回、ARM64のubuntu-arm64をQEMU環境で動かしました。QEMUはterminal起動なので、terminalを終了すると終了してしまいます。arm64の環境を維持する方法を調べて、ネット上でKVM仮想マシンにする方法を見つけました。KVM仮想マシンにすることで起動停止の自由度が高くなる上、レスポンスも良くなります。その内容を記述します。

2.詳細

(1) ARM64のubuntu-arm64

新しくubuntu-20.04.6の環境を構築後、作業をします。
環境はAMD 4core Memory 16GB SSD 128GBです。

(a) qemu-system-aarch64の準備

$ sudo apt install -y qemu qemu-kvm libvirt-daemon libvirt-clients bridge-utils virt-manager
$ sudo apt install -y qemu-system-arm qemu-efi-aarch64 qemu-efi-arm

(b) arm版Ubuntuイメージ(cloud-init版)の準備

ubuntu-20.04のimageを利用します
$ wget https://cloud-images.ubuntu.com/focal/current/forcal-server-cloudimg-arm64.img

10GBに拡張します
$ qemu-img forcal-server-cloudimg-arm64.img 10G

(c) NoCloudデータの準備

user-dataをvimで作成します

#cloud-config
user: ubuntu
password: password
chpasswd: { expire: false }
ssh_pwauth: true

user-data.isoを作成します

$ touch meta-data
$ genisoimage -output ./user-data.iso -volid cidata -joliet -rock user-data meta-data

(d) 仮想マシンのインストール

Virtual Machine Managerを起動しても仮想マシンは存在しません。
virtコマンドで仮想マシンを作成します。

$ virt-install \
--connect qemu:///system \
--name ubuntu-arm \
--vcpus 2 --ram 4096 \
--hvm --virt-type qemu \
--arch aarch64 \
--os-type linux --os-variant ubuntu20.04 \
--import --noreboot \
--disk $PWD/forcal-server-cloudimg-arm64.img \
--disk $PWD/user-data.iso,device=cdrom

(e) 仮想マシンの起動

Virtual Machine Managerを起動すると、ubuntu-armが存在し、起動できます。
loginはcloud-initの処理が終了するのを待ってからです。

(2) QEMUを利用してx86_64上でubuntu-arm64を動作にチャレンジ

ubuntuにはARM64の配布も実施されています。PCはx86_64のCPU搭載機器しか持っていないのでARM64は全く見向きもしていませんでした。しかし、QEMUを利用してx86_64上でubuntu-arm64を動作できると知って、調べてみました。

(a) Install QEMU

sudo apt install qemu-system-arm

(b) Create necessary support files

truncate -s 64m varstore.img
truncate -s 64m efi.img
dd if=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd of=efi.img conv=notrunc

(c) Fetch the Ubuntu cloud image

https://cloud-images.ubuntu.com/focal/current/
から下記imgファイルをdownloadします

focal-server-cloudimg-arm64.img

(d) Run an emulated ARM64 VM on x86

sudo qemu-system-aarch64 \
 -m 2048 \
 -cpu max \
 -M virt \
 -nographic \
 -drive if=pflash,format=raw,file=efi.img,readonly=on \
 -drive if=pflash,format=raw,file=varstore.img \
 -drive if=none,file=focal-server-cloudimg-arm64.img,id=hd0 \
 -device virtio-blk-device,drive=hd0 \
 -netdev type=tap,id=net0 \
 -device virtio-net-device,netdev=net0
 
上記コマンドを実行するとubuntu-20.04-arm版を起動できます。
実行速度は遅いです。
login:と表示されますが、login手段がわかりません。

(e) login

参考資料を参照して、cloud-initの設定をします。

 -drive if=none,file=cloud.img,id=clouds \
 -device virtio-blk-device,drive=cloud

上記2行の追加では不十分でした。1行目を以下のように変えました。
 -drive if=none,file=cloud.img,id=clouds,format=raw \
 
また、memoryを8GBに設定しました
 
以下の内容になります

sudo qemu-system-aarch64 \
 -m 8192 \
 -cpu max \
 -M virt \
 -nographic \
 -drive if=pflash,format=raw,file=efi.img,readonly=on \
 -drive if=pflash,format=raw,file=varstore.img \
 -drive if=none,file=focal-server-cloudimg-arm64.img,id=hd0 \
 -device virtio-blk-device,drive=hd0 \
 -netdev type=tap,id=net0 \
 -device virtio-net-device,netdev=net0 \
 -drive if=none,file=cloud.img,id=clouds,format=raw \
 -device virtio-blk-device,drive=cloud
 
また、ubuntu login: と表示されてもloginできません。
cloud-initの処理が終了するのを待つ必要があり、3分ほど待ってloginします。

終了方法はterminalを閉じました。

3.所見

ARM64が動作したということは、他のアーキテクチャも動作する可能性があるので、色々チャレンジしてみようと思っています。

参考

[本ブログ内参照]
オープンソースのプロジェクト管理ソフトウェアredmineとmariadbを試しました

コメント

過去30日間に良く読まれた記事

miniPCのBMAXでWindows11のsecure boot設定漏れでトラブル発生

Windows95/98のPCゲームをUbuntu/LinuxMintの最新PCで楽しむ方法 ( KVM / Wine / dosbox-x / midi )

LinuxMint/ubuntuにWine 11導入を試しました ( LinuxMint 21.3 / 22.3 ubuntu 22.04 / 26.04 Wine 11.0 / 11.6 / 11.8 / 11.13 )