ARM CPU用Debian QEMUイメージの作成


最新のARM用Debianインストーラー を使ってQEMU用イメージを作成しようとしたら、インストーラーが途中でエラーで止まって続行不可能だった(2020年10月)ので、QEMU用イメージファイルを作成するシェルスクリプトを https://github.com/emojifreak/qemu-arm-image-builder に作りました。使い方を簡単に紹介します。

インテルPC上で作成する場合、Debian標準インストーラーよりも遥かに高速に作成します。その訳は完全なハードウェアエミュレーションではなく qemu-user-static によるユーザーモードエミュレーションを用いるからです。ホストOSは Ubuntu や Debian など Debian系Linuxを仮定します。Devuan をインストールするスクリプトも同じ場所にあります。

ダウンロードと設定

github にあるシェルスクリプトをウェブブラウザか git clone https://github.com/emojifreak/qemu-arm-image-builder.git で保存します。その内の

build-arm-debian-qemu-image.sh
#!/bin/sh

SUITE=buster # or bullseye sid
ARCH=arm64 # or armhf or armel
IMGFILE=/var/tmp/debian-${SUITE}-${ARCH}.img
LOOPDEV=`losetup -f`
GIGABYTES=10 # total size in GB
SWAPGB=1 # swap size in GB
ROOTFS=btrfs # or ext4
MMVARIANT=apt # or required, important, or standard
NETWORK=systemd-networkd # or ifupdown, network-manager, none
YOURHOSTNAME=arm-guest
KERNEL_CMDLINE='net.ifnames=0 consoleblank=0 rw'
GRUB_TIMEOUT=0
MIRROR=http://deb.debian.org/debian
INITUDEVPKG=systemd-sysv,udev # or sysvinit-core,udev
KEYRINGPKG=debian-archive-keyring

apt-get -q -y --no-install-recommends install binfmt-support qemu-user-static qemu-efi-arm qemu-efi-aarch64 mmdebstrap qemu-system-arm

. ./common-part.sh

の中の以下のシェル変数をカスタマイズします。

  • SUITE はインストールするDebianのリリース名です。buster の他に bullseye, sid が有効です。リリース名が buster 以外のときには python2.7 を削除しようとするのでもし stretch 以前の古いリリースをインストールしたい場合は common-part.sh 末尾で python2.7-minimalを削除している行をコメントアウトして下さい。
  • ARCH はARM CPUの種類で64bitなら arm64、32bitならarmhfを選びます。
  • MMVARIANT はインストールするパッケージの範囲で apt < required < important < standard の順に範囲が広がります。よくわからなければ standard を選ぶのが無難です。
  • NETWORK はネットワーク設定に用いるDebianサービスです。後でデスクトップ環境をインストールするなら network-manager が無難でしょう。

apt-get -q -y --no-install-recommends install binfmt-support qemu-user-static qemu-efi-arm qemu-efi-aarch64 mmdebstrap qemu-system-arm の行はシェルスクリプトの実行に必要なパッケージをインストールしていますが、一度インストールしたらコメントアウトして問題ありません。

シェルスクリプトの実行

sudo sh build-arm-debian-qemu-image.sh とするとQEMU用イメージファイルの作成が始まりますが、しばらくすると以下のようにロケールやタイムゾーンの設定が質問されます。

ロケールの設定

以下の画面ではロケールを質問されています。例では ja_JP.UTF-8 を選んでいます。

次ににシステムの標準ロケールに ja_JP.UTF-8 を選んでいます。

時間帯の設定

次に時間帯を聞かれるので Asia → Tokyo と選びます。

キーボードの選択

次にキーボード配列の選択を聞かれます。最初の項目はPC-105を選びます。

次に英語ばかりしか選択肢が出ない以下の画面では Other を選びます。

その後は2回続けて Japanese を選びます。


その後は好きなように選びます。

rootパスワードの設定

次に以下の画面でrootパスワードを聞かれるので好きなように設定します。

一般ユーザーは何も作成されないので、必要ならrootでログインした後にadduser などで作成します。

起動用コマンドのお知らせ

最後に作成したQEMUイメージを起動するために必要なコマンドの説明が表示されます。下記スクリーンショットのハイライトした部分です。これはホストCPUとゲストCPUの組み合わせで色々変わります。

デスクトップ環境のインストール

もしデスクトップ環境が必要なら起動後にrootでログインして apt-get install tasksel; tasksel として以下の tasksel を起動し、好きなデスクトップ環境を選択します。

virt-manager を用いた起動

スクリプト最後に通知されるコマンドで起動しても構いませんが、よりユーザーフレンドリーな virt-manager を用いる手順を紹介します。

virt-manager のインストール

apt-get --install-recommends install virt-manager でインストールします。

対象ARM CPUの選択

作成したイメージファイルを /var/lib/libvirt/images に移動したあとにvirt-manager を起動するとエミュレーションするCPUの選択画面になります。64bit ARMならaarch64、32bit ARMなら armv7l を選択します。armv7lを選ぶ場合 https://github.com/virt-manager/virt-manager/issues/174 にあるパッチを手動であてる必要があるかも知れません。また「既存のディスクイメージをインポート」を選択します。

イメージファイルの選択

次の画面では作成したイメージファイルを選択します。またOSを適切に選択します。そのあとはデフォルト選択肢を選べば普通に起動できます。