組み込み開発者であれば、armの実行環境が必要になることは多いと思います。ただ、そのためにわざわざ組み込み機器を用意するのは面倒なことです。
x86_64 環境上で arm64 の環境を手軽に構築できれば非常に便利です。QEMU を使用すればそれが可能になります。
本記事では、QEMUを使用してx86_64環境上でarm64の仮想環境の構築方法について説明します。
準備
仮想マシンを実行する環境としては、Ubuntu 22.04 LTS (x86向け) を使用し、仮想マシンには Debian10 (arm64向け) を使用します。
必要なパッケージのインストール
まず、必要なパッケージをインストールします。
sudo apt-get update
sudo apt-get install qemu-system-arm whois
また、仮想マシンの構築に必要なファイルなどを保存するためのディレクトリを作成し、移動します。
mkdir arm64_qemu
cd arm64_qemu
仮想マシンイメージのダウンロード
wget コマンドで仮想マシンイメージをダウンロードします。今回は debian-10-openstack-arm64.qcow2 を使用します。
wget https://cdimage.debian.org/cdimage/openstack/current-10/debian-10-openstack-arm64.qcow2
cloud-init用設定ファイルの作成
仮想マシンイメージはデフォルトではユーザー設定などが行われていないため、起動してもログインできません。そのため、cloud-init 用設定ファイルを作成して仮想マシン起動時に読み込ませることで、初期設定を行います。
作成するファイルは、以下の2ファイルです。seed-config ディレクトリを作成し、その配下に格納します。
- user-data
- meta-data
まずは、user-data ファイルを作成します。以下のようにYAML方式で記述します。
#cloud-config
users:
- name: myuser
sudo: "ALL=(ALL) NOPASSWD:ALL"
groups: sudo
shell: /bin/bash
lock_passwd: false
passwd: $6$TKcSmAXLpsiMpq6v$BU9bvKLD5WlS4YVz/qo1BlUKL/.Gnazh2YnRqaVQBSxa7N8SkibPuo0C.IRVSpoz/Z51h/MsSsFEn8t1QOZmY.
chpasswd:
expire: false
ssh_pwauth: true
「name:」には、ユーザー名を指定します。使用したいユーザー名を指定してください。
「passwd:」には、パスワードハッシュを指定します。パスワードハッシュは、mkpasswd –method=SHA-512 コマンドで生成できます。実行するとパスワード入力のプロンプトが表示されるので、設定したいパスワードを入力します。Enter を押すと、パスワードハッシュが生成されます。
mkpasswd --method=SHA-512
Password:
$6$TKcSmAXLpsiMpq6v$BU9bvKLD5WlS4YVz/qo1BlUKL/.Gnazh2YnRqaVQBSxa7N8SkibPuo0C.IRVSpoz/Z51h/MsSsFEn8t1QOZmY.
次に、meta-data ファイルの作成ですが、これは空のファイルで問題ありません。
ls seed-config/
meta-data user-data
seed-config ディレクトリに必要なファイルの準備ができたら、genisoimage コマンドを使用して、cloud-init設定用のイメージファイルである seed.img を作成します。以下のコマンドを実行します。
genisoimage -output seed.img -volid cidata -joliet -rock seed-config
仮想マシンの起動
以下のコマンドで、debian-10-openstack-arm64.qcow2 の仮想マシンを起動します。必ず arm64_qemu ディレクトリ配下でコマンドを実行してください。
qemu-system-aarch64 -m 2G -M virt -cpu cortex-a57 \
-bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd \
-drive if=none,file=debian-10-openstack-arm64.qcow2,id=hd0 -device virtio-blk-device,drive=hd0 \
-device e1000,netdev=net0 -netdev user,id=net0,hostfwd=tcp:127.0.0.1:5555-:22 \
-drive if=virtio,file=seed.img,format=raw \
-nographic
最初に、以下のようなGRUBの画面が表示されますが、Enterを押して進んでください。
![](https://furu-se-blog.com/wp-content/uploads/2024/06/image-1024x580.png)
起動ログが出力された後、ログインプロンプトが表示されるので、user-data に設定したユーザーIDとパスワードを入力してログインしてください。
![](https://furu-se-blog.com/wp-content/uploads/2024/06/image-1-1024x330.png)
以上で起動完了となります。
最後に
今回、arm64 の仮想環境の構築を行うにあたって、様々な仮想マシンイメージを試してみましたが、適切に動作しないものも多く、仮想マシン起動に成功するまで少し時間がかかりました。
Ubuntu のイメージでも動作出来たらまた記事を書きたいと思います。