x86_64 の LM22 で arm64 の ubuntu 22.04 を動かす

前回記事では、同じ x86_64 の LM22 で arm64 向けのクロスビルド環境を設定しましたが、ちょっと考えてみると、ROS2 からヘッダやらライブラリを取ってきて /usr/aarch64-linux-gnu 以下に適切に配置するのはちょっと面倒そうだと思えてきたので qemu で arm64 の ubuntu を動かすことにした。

流れとしては Ubuntu の ARM64 vitual machines on QRME のページでいいのだが、Qita 見ないと行けない部分があったので記事にする。

$ sudo apt install qemu-kvm qemu-system-arm64 libvirt-daemon-system libvirt-clients bridge-utils virtinst libosinfo-bin

Ubuntu 22.04.05 をインストールインストールしたかったので releases から .iso ファイルをダウンロードしたのだが上手く起動しなかった。

Ubuntu Cloud Images – the official Ubuntu images for public clouds, Openstack, KVM and LXD から 22.04 を指し示す jammy > current と進み、jammy-server-cloudimg-arm64.img をダウンロードする。

wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-arm64.img

としてもいい。

ここから先は、Ubuntu 公式ではなく Qiita の参考ページの手順をやっていく。イメージサイズを変更する必要があるらしい。

$ qemu-img resize  jammy-server-cloudimg-arm64.img 16G

cloud イメージ用に設定ファイル作成する。

$ touch meta-data
$ touch user-data
$ vi user-data
;; 以下の内容を入れるらしい
#cloud-config
user: xxxxx
passowrd: xxxx
chpassword: { expire: Fail }
ssh_pwauth: True
:wq

上の設定だと、ユーザーが作成されて初回起動時にパスワード変更を強制される。さらに ssh のパスワード認証も許可される。
パスワード変更の強制が面倒なのであとで回避できる設定を調べようと思う。

ユーザーデータを保存?するイメージを作成する必要もあるみたい。
CD-ROMイメージだし、恐らく user-data と meta-data を読み出すためだけに作るものっぽい。

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

で、やっと仮想マシンを作成すると、ままんま

$ virt-install \
--connect qemu::///system \
--name u22-arm64 \
--vcpus 4 --ram 4096 \
--hvm --virt-type qemu \
--arch aarch64 \
--os-type linux --os-variant ubuntu22.04 \
--import --norebooy \
--disk path=./jammy-server-cloudimg-arm64.img  \
--disk path="./udata.iso,device=cdrom"

ここで iso ファイルにアクセスできない「permission denied」エラーが出ので最後の参考ページの内容を実行する。

/etc/libvirt/qemu.conf にユーザー名とグループ名を設定する

$ vi /etc/libvirt/qemu.conf
以下の2行をいい感じのところに追記

user = "ログインユーザー名"
group = "libvirt"
:wq

/etc/libvirt/libvirtd.conf も設定しないと行けないようだ。

$ vi /etc/libvirt/libvirtd.conf
unix_sock_group = "libvirt"
unix_socl_ro_perms = "0777"
unix_sock_rw_perms = "0770"

auth_unix_ro = "none"
auth_unix_rw = "nonw"
:wq

自分のケースはこのファイルは何も変更する必要がなかったかもしれない。

もう一度 virt-install をし直すと、無事に仮想マシンが作成され実行出来るようになった。

ブリッジネットワークを作成する必要があるというページもいくつか見かけたが、今回試した際は手動で作成することなく自動的にブリッジネットワーク(NAT)が作成されて完了した。

これで ROS2 のビルドできそうだ。とはいえこの PC だと遅い。

参考

Boot ARM64 virtual machines on QEMU – Ubuntu Server documentation
ARM64 となっているのに qemu-system-arm をインストールとなっているのは、qemu-system-arm64 の間違いだと思う。

Ubuntu20.04@x86_64のLinuxKVM上にaarch64のUbuntu20.04仮想マシンを立てる #Ubuntu – Qiita

virsh-install時にpermission deniedとなる場合 #KVM – Qiita