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が動作したということは、他のアーキテクチャも動作する可能性があるので、色々チャレンジしてみようと思っています。
参考
コメント
コメントを投稿