2021年1月31日日曜日

qemu-system-arm で Debian buster armhf を動かす

Debian installer を使って、 Debian buster armhf をインストールする。

前提

必要ファイルのダウンロード

インストーラー起動用の vmlinuz と initrd をダウンロード。

Invoke-WebRequest http://ftp.debian.org/debian/dists/buster/main/installer-armhf/current/images/netboot/initrd.gz -OutFile initrd.gz
Invoke-WebRequest http://ftp.debian.org/debian/dists/buster/main/installer-armhf/current/images/netboot/vmlinuz -OutFile vmlinuz

qemu-system-arm インストール済みのコンテナを起動

mount コマンドを利用するので、 --privileged オプション付きで起動する。

docker run -it --rm --privileged -v "$(pwd):/work" --workdir="/work" mikoto2000/qemu-system-arm

インストール

ディスクイメージ作成

qemu-img create -f qcow2 hda.qcow2 8G

インストーラー起動

qemu-system-arm -M virt -m 1024 \
  -kernel vmlinuz \
  -initrd initrd.gz \
  -drive if=none,file=hda.qcow2,format=qcow2,id=hd \
  -device virtio-blk-device,drive=hd \
  -netdev user,id=usernet \
  -device virtio-net-device,netdev=usernet \
  -nographic -no-reboot

Debian インストーラーに従ってインストールを行う。

起動用ファイルをディスクイメージから抜き出す

Debian をインストールした qcow2 を raw へ変換

qemu-img convert -O raw hda.qcow2 hda.img

イメージをマウントし、 vmlinuz と initrd をコピー

マウントオフセット確認

START=$(fdisk -l hda.img | grep "*" | grep "hda.img" | awk '{print $3}')
OFFSET=$(($START*512))

マウント

mkdir ./tmp
mount -o loop,offset=$OFFSET hda.img ./tmp

ファイルコピー

cp ./tmp/vmlinuz-4.19.0-13-armmp-lpae ./
cp ./tmp/initrd.img-4.19.0-13-armmp-lpae ./

マウント解除

umount ./tmp

インストールした Debian の起動

コピーした vmlinuz と initrd を使って Debian を起動する。

qemu-system-arm -M virt -m 1024 \
  -kernel vmlinuz-4.19.0-13-armmp-lpae \
  -initrd initrd.img-4.19.0-13-armmp-lpae \
  -drive if=none,file=hda.qcow2,format=qcow2,id=hd \
  -device virtio-blk-device,drive=hd \
  -netdev user,id=usernet \
  -device virtio-net-device,netdev=usernet \
  -append "root=/dev/vda2" \
  -nographic -no-reboot

以上。

参考資料

0 件のコメント:

コメントを投稿