virt-managerでarmのゲストを動かすメモ

忘れないようにメモっとこうという程度なので大したことはしてないです。

aarch64やarmhfpのイメージはIndex of /pub/Linux/Fedora/releasesから取得したとします。

qemuのバージョン

ホストはx86_64なFedora 29で、qemuは3.0.0になります。

masami@saga:~/arm/aarch64$ rpm -qa  | grep qemu-system
qemu-system-arm-core-3.0.0-1.fc29.x86_64
qemu-system-x86-3.0.0-1.fc29.x86_64
qemu-system-x86-core-3.0.0-1.fc29.x86_64
qemu-system-aarch64-core-3.0.0-1.fc29.x86_64
qemu-system-arm-3.0.0-1.fc29.x86_64
qemu-system-aarch64-3.0.0-1.fc29.x86_64

あとこの辺も必要かと思います。

masami@saga:~/arm/aarch64$ rpm -qa | grep edk2
edk2-aarch64-20180815gitcb5f4f45ce-1.fc29.noarch
edk2-ovmf-20180815gitcb5f4f45ce-1.fc29.noarch

aarch64

イメージはxz形式で圧縮されているのでまずは展開します。

masami@saga:~/arm/aarch64$ xz -dc Fedora-Server-28-1.1.aarch64.raw.xz  > Fedora-Server-28-1.1.aarch64.raw

そして、カーネルやコマンド諸々込みのファイルができるのですが、これをそのまま使ってもログイン可能なユーザーもいないし、rootログインできないのでまずはrootのパスワードを設定します。ここでは virt-customizeというコマンドを使います。これはlibguestfs-toolsってパッケージをインストールすると使えます。

masami@saga:~/arm/aarch64$ virt-customize --root-password file:./rootpw.txt -a Fedora-Server-28-1.1.aarch64.raw
[   0.0] Examining the guest ...
[  16.3] Setting a random seed
[  16.4] Setting the machine ID in /etc/machine-id
[  16.4] Setting passwords
[  17.7] Finishing off

このコマンドのオプションが見たままですがrootのパスワードを設定しています。パスワードはrootpw.txtってファイルに書いてます。このファイルの1行目に平文でパスワードを記述します。このコマンドでユーザー作ったりも出来ます。 それはともかく、これでrootログインできるようになったので後はvirt-installでインストールします。

ディスクイメージを/var/lib/libvirt/imagesに置き、以下のような感じでインストールします。これが最低限なコマンドラインオプションかと思います。

masami@saga:~/arm/aarch64$ sudo virt-install --name fedora28-aarch64 --ram 4096 --arch aarch64 --import --os-variant fedora22 --disk /var/lib/libvirt/images/Fedora-Server-28-1.1.aarch64.raw --boot uefi

armhfp版との違いとして--bootでufeiを指定してるというのがあります。armhfpの場合だとvmlinuzとかinitrdの指定があります。

あとはしばらく待っていればログインプロンプトが表示されるのでidをroot、パスワードは先程設定したものを入力すればログインできます(∩´∀`)∩ワーイ

[  OK  ] Started Update UTMP about System Runlevel Changes.

Fedora 28 (Server Edition)
Kernel 4.16.3-301.fc28.aarch64 on an aarch64 (ttyAMA0)

Admin Console: https://192.168.122.223:9090/ or https://[fe80::27d2:fdd6:dc02:4ab]:9090/

localhost login: root
Password:
[root@localhost ~]# uname -a
Linux localhost.localdomain 4.16.3-301.fc28.aarch64 #1 SMP Mon Apr 23 21:45:59 UTC 2018 aarch64 aarch64 aarch64 GNU/Linux  

また、サーバ版はCockpitが動いているのでAdmin Console: ~と書かれているURLにブラウザでアクセスすればブラウザからでも端末エミュレータが使えます。

f:id:masami256:20181106220907p:plain

armhfp

aarch64とも多少違うのでこちらもメモしておきます。基本的にはArchitectures/ARM/F28/Installation - Fedora Project Wikiの手順に沿えば良いのですが、qemuのバージョンが3.0.0の場合(今後はわかりません)はwikiの手順だけだとBug 1633328 – Armv7 guest fails to boot with qemu-3.0.0-1に書かれているように以下のようなワーニングが出てインストール完了しません。

[   51.049803] audit: type=1130 audit(1541508483.457:11): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=kernel msg='unit=systemd-tmpfiles-setup comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[  OK  ] Reached target System Initialization.
[  OK  ] Reached target Basic System.
[  371.409670] dracut-initqueue[338]: Warning: dracut-initqueue timeout - starting timeout scripts
[  373.553982] dracut-initqueue[338]: Warning: dracut-initqueue timeout - starting timeout scripts
[  374.886815] dracut-initqueue[338]: Warning: dracut-initqueue timeout - starting timeout scripts
[  376.308904] dracut-initqueue[338]: Warning: dracut-initqueue timeout - starting timeout scripts
[  377.638877] dracut-initqueue[338]: Warning: dracut-initqueue timeout - starting timeout scripts

そのため、commentの14に書かれているようにvirt-install--qemu-commandline='-machine highmem=off というオプションを追加します。よって、virt-installコマンドラインはこんなふうになります。

sudo virt-install --name fedora28-armhfp --ram 1024 --arch armv7l \
  --import --os-variant fedora22 \
  --disk /var/lib/libvirt/images/Fedora-Minimal-armhfp-28-1.1-sda.raw \
  --boot kernel=/var/lib/libvirt/images/vmlinuz-4.16.3-301.fc28.armv7hl,initrd=/var/lib/libvirt/images/initramfs-4.16.3-301.fc28.armv7hl.img,kernel_args="console=ttyAMA0 rw root=LABEL=_/ rootwait" --qemu-commandline='-machine highmem=off'

こちらもvirt-installの前にvirt-customizeでrootのパスワードを設定しておく必要があります。

ゲストへの接続

普通にvirsh console ゲスト名で接続できます。

その他

armhfpのほうはhighmem=offなどの設定が必要なのが注意事項ですね ( ´ー`)フゥー...

ARMで学ぶ アセンブリ言語入門

ARMで学ぶ アセンブリ言語入門