3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-09-09

1. はじめに

  • armの組込ボードをターゲットとしたソフトウェア開発をしていると、たくさんarmボードが欲しくなりますが、場所を食うし、お金もかかります。
    • 素直にラズパイとかのシングルボードコンピュータを大量に買うのがいいかもですが。
  • 仮想環境として簡単に一元管理できるといいな、と思ったので、armの模擬環境を仮想マシンで立られるか検証してみました。

2. 参考資料

3. 動作環境

  • OS : Ubuntu 20.04
  • CPU : Intel(R) Pentium(R) CPU G4560 @ 3.50GHz
  • RAM : 8GB
  • Software
    • qemu-system-aarch64 : 4.2.1
    • virt関連 : 2.2.1
    • genisoimage : 1.1.11

4. 構築

4.1. qemu-system-aarch64の準備

  • aptを用いて、以下のパッケージをインストールします。
$ sudo apt install -y qemu qemu-kvm libvirt-daemon libvirt-clients bridge-utils virt-manager
$ sudo apt install -y qemu-system-arm qemu-efi-aarch64 qemu-efi-arm qemu-system-arm
  • qemu関連のパッケージを確認して、arm関連のパッケージが入っていることを確認します。
ログが長いので折りたたんでいます。
$ dpkg -l | grep qemu
ii  ipxe-qemu                                  1.0.0+git-20190109.133f4c4-0ubuntu3.2   all          PXE boot firmware - ROM images for qemu
ii  ipxe-qemu-256k-compat-efi-roms             1.0.0+git-20150424.a25a16d-0ubuntu4     all          PXE boot firmware - Compat EFI ROM images for qemu
ii  libvirt-daemon-driver-qemu                 6.0.0-0ubuntu8.12                       amd64        Virtualization daemon QEMU connection driver
ii  qemu                                       1:4.2-3ubuntu6.17                       amd64        fast processor emulator, dummy package
ii  qemu-block-extra:amd64                     1:4.2-3ubuntu6.17                       amd64        extra block backend modules for qemu-system and qemu-utils
ii  qemu-efi-aarch64                           0~20191122.bd85bf54-2ubuntu3.2          all          UEFI firmware for 64-bit ARM virtual machines
ii  qemu-efi-arm                               0~20191122.bd85bf54-2ubuntu3.2          all          UEFI firmware for 32-bit ARM virtual machines
ii  qemu-kvm                                   1:4.2-3ubuntu6.17                       amd64        QEMU Full virtualization on x86 hardware
ii  qemu-system-arm                            1:4.2-3ubuntu6.17                       amd64        QEMU full system emulation binaries (arm)
ii  qemu-system-common                         1:4.2-3ubuntu6.17                       amd64        QEMU full system emulation binaries (common files)
ii  qemu-system-data                           1:4.2-3ubuntu6.17                       all          QEMU full system emulation (data files)
ii  qemu-system-gui:amd64                      1:4.2-3ubuntu6.17                       amd64        QEMU full system emulation binaries (user interface and audio support)
ii  qemu-system-x86                            1:4.2-3ubuntu6.17                       amd64        QEMU full system emulation binaries (x86)
ii  qemu-utils                                 1:4.2-3ubuntu6.17                       amd64        QEMU utilities

  • aarch64関連のqemuコマンドがインストールされているか確認します。
ログが長いので折りたたんでいます。
$ ls -l /usr/bin/qemu*
-rwxr-xr-x 1 root root  1997016  7月 13 00:03 /usr/bin/qemu-img
-rwxr-xr-x 1 root root  1940184  7月 13 00:03 /usr/bin/qemu-io
-rwxr-xr-x 1 root root  1948824  7月 13 00:03 /usr/bin/qemu-nbd
-rwxr-xr-x 1 root root   722848  7月 13 00:03 /usr/bin/qemu-pr-helper
-rwxr-xr-x 1 root root 18712856  7月 13 00:03 /usr/bin/qemu-system-aarch64
-rwxr-xr-x 1 root root 17759128  7月 13 00:03 /usr/bin/qemu-system-arm
-rwxr-xr-x 1 root root 16236552  7月 13 00:03 /usr/bin/qemu-system-i386
-rwxr-xr-x 1 root root 16275080  7月 13 00:03 /usr/bin/qemu-system-x86_64
lrwxrwxrwx 1 root root       18  7月 13 00:03 /usr/bin/qemu-system-x86_64-spice -> qemu-system-x86_64
  • qemu-system-aarch64でエミュレートできるCPUアーキテクチャを確認します。
    • 今回は、特に指定しなかったらcortex-a57を使用していました。
ログが長いので折りたたんでいます。
$ qemu-system-aarch64 -cpu help -machine virt
Available CPUs:
  arm1026
  arm1136
  arm1136-r2
  arm1176
  arm11mpcore
  arm926
  arm946
  cortex-a15
  cortex-a53
  cortex-a57
  cortex-a7
  cortex-a72
  cortex-a8
  cortex-a9
  cortex-m0
  cortex-m3
  cortex-m33
  cortex-m4
  cortex-r5
  cortex-r5f
  max
  pxa250
  pxa255
  pxa260
  pxa261
  pxa262
  pxa270-a0
  pxa270-a1
  pxa270
  pxa270-b0
  pxa270-b1
  pxa270-c0
  pxa270-c5
  sa1100
  sa1110
  ti925t

4.2. arm版Ubuntuイメージ(cloud-init版)の準備

  • cloud-init版のubuntuイメージをwgetで取得します。
& wget http://ubuntutym2.u-toyama.ac.jp/cloud-images/releases/20.04/release/ubuntu-20.04-server-cloudimg-arm64.img
  • cloud-init版をそのまま使用すると容量がすごく小さいので、20GBまで拡張します。
    • 20GBはテキトーに決めています。自分が使用したい容量に合わせてください。
$ qemu-img resize ubuntu-20.04-server-cloudimg-arm64.img 20G

4.3. NoCloudデータの準備

  • 初期ユーザとしてtomotenユーザを作成するため、以下のようなuser-data(テキストファイル)を作成します。
    • passwordはテキトーに書いてます。
#cloud-config
user: tomoten
password: hogehoge
chpasswd: { expire: Fail }
ssh_pwauth: True
  • NoCloud用でマウントするisoファイルを作成するときに必要なmeta-data(空ファイル)を作成します。
$ touch meta-data
  • NoCloud用でマウントするuser-data.isoファイルを作成します。
$ genisoimage -output ./udata.iso -volid cidata -joliet -rock user-data meta-data

4.3. 仮想マシンのインストール

  • 何も仮想マシンを作成していない状態では、virt-managerを開いても何も仮想マシンはありません。

virt-manager_1.png

  • virt-installを用いて、以下のようなコマンドで仮想マシンを作成します。
    • なお、virt-managerのGUIからでも仮想マシンは作成可能です。下記コマンドを実行して作成される仮想マシンの設定情報をGUIから入力することで作成できます。
    • 注意点:connectにはqemuを指定します。x86_64アーキテクチャ上でaarch64を動かす場合、kvm仮想化支援機能が動作しません。qemuによるソフトウェアエミュレートなので遅いです。
$ virt-install \
--connect qemu:///system \
--name ubuntu-arm \
--vcpus 2 --ram 2048 \
--hvm --virt-type qemu \
--arch aarch64 \
--os-type linux --os-variant ubuntu20.04 \
--import --noreboot \
--disk path=$PWD/ubuntu-20.04-server-cloudimg-arm64.img \
--disk path="$PWD/udata.iso,device=cdrom"

インストールの開始中...
error: The domain is not running

仮想マシンの作成が完了しました。
現在、稼働中の仮想マシンを再起動することができます。
virsh --connect qemu:///system start ubuntu-arm
  • 上記コマンドを実行すると、virt-manager上に仮想マシンが構築されます。
    • 設定を追加したい場合は、この段階でGUIから変更を加えられます。
    • 今回は自動でインターネットにつながるホスト側のbridgeにつながっていました。インターネットにつながるbridgeやNATを接続しておくといいです。

virt-manager_2.png
virt-manager_3.png

  • 仮想マシンの画面を表示して、仮想マシンを起動します。(「▷」ボタン押下)
    • うまくいくと、下のようにUbuntuが選択できる画面がでます。
    • Ubuntuを選択すると起動を開始します。3分くらい時間がかかります。(仮想マシンに割り振ったスペックがしょぼいだけかも)

virt-manager_4.png

  • 「ubuntu login: 」と表示されますが、この段階ではcloud-initの設定が完了していないのでtomotenユーザでログインできません。体感10分くらい待ちます。以下のようなログが表示されたら、完了です。
ログが長いので折りたたんでいます。
ubuntu login: [  480.037467] cloud-init[1876]: Cloud-init v. 20.3-2-g371b392c-0ubuntu1~20.04.1 running 'modules:config' at Sun, 05 Sep 2021 15:12:57 +0000. Up 465.67 seconds.
ci-info: no authorized SSH keys fingerprints found for user tomoten.
<14>Sep  5 15:13:25 ec2: 
<14>Sep  5 15:13:25 ec2: #############################################################
<14>Sep  5 15:13:25 ec2: -----BEGIN SSH HOST KEY FINGERPRINTS-----
<14>Sep  5 15:13:25 ec2: (省略)
<14>Sep  5 15:13:26 ec2: -----END SSH HOST KEY FINGERPRINTS-----
<14>Sep  5 15:13:26 ec2: #############################################################
-----BEGIN SSH HOST KEY KEYS-----
(省略)
[  494.850728] cloud-init[1922]: Cloud-init v. 20.3-2-g371b392c-0ubuntu1~20.04.1 running 'modules:final' at Sun, 05 Sep 2021 15:13:22 +0000. Up 491.03 seconds.
[  494.857657] cloud-init[1922]: ci-info: no authorized SSH keys fingerprints found for user tomoten.
[  494.866746] cloud-init[1922]: Cloud-init v. 20.3-2-g371b392c-0ubuntu1~20.04.1 finished at Sun, 05 Sep 2021 15:13:26 +0000. Datasource DataSourceNoCloud [seed=/dev/sr0][dsmode=net].  Up 494.65 seconds

(Enterを押下すると)
ubuntu login:
  • user-dataで設定したtomotenユーザでログインできれば成功です。
  • 「uname -a」で確認すると、aarch64であることが確認できます。
$ uname -a
Linux ubuntu 5.4.0-53-generic #59-Ubuntu SMP Wed Oct 21 09:37:28 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux
  • cloud-initの設定を止める場合は、以下のようにcloud-init.disabled(空ファイル)を作成してください。
$ sudo touch /etc/cloud/cloud-init.disabled

5. 所感

  • aarch64のUbuntu仮想マシンが構築できました。
    • ただ、やはりx86_64アーキテクチャ上でaarch64のCPUエミュレートは重いです。
    • あくまで検証用、もしくは設備集約用、という感じです。
  • 本当はAndroidを動かしたい思いがあったので、まずはYoctoを用いてarm向けLinuxをビルドしてqemuで動かすところを実施していきます。
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?