Windowsでarm64のLinuxを動かす方法
公開: 2022年07月20日
ARM版ubuntu
近年ARMプロセッサが何かと話題に上がります。
Linux向けではARMプロセッサは割と昔から使われていて、
例えばLinuxベースのAndroidを搭載するスマートフォンとか、AppleのiPhoneとかのモバイル端末はARMですね。
あとはraspberry piとかもARMプロセッサなのでARMLinuxが動作します。
しかし、WindowsPCはx64とかx86のIntelやAMDのプロセッサを積んでいるので、arm64(aarch64)とは互換がありません。
そこで何とかVMとかを使って試しに動かせないかということでやってみました。
こんな感じのアーキテクチャです。
目次
前提条件
今回はWindowsPC上に仮想マシンのVirtualBoxを使ってarmアーキテクチャのUbuntuを動かしてみます。
ただ、直接arm64のVMを動作させることをVirtualBoxはサポートしていないので、
まずは64bitのUbuntuをVMで動作させ、そのUbuntu上でaarch64のubuntuを動作させたいと思います。
スペック
- ホストPC
- OS: Windows11 64Bit
- CPU: Intel core i7 1160G7
- メモリ: 16GB
- SSD: NVMe 512GB
- 仮想マシン(Ubuntu20.04 x64)
- OS: Ubuntu 20.04 LTS 64bit
- CPU: 4Core
- メモリ: 4GB
- DISK: 64GB
- 仮想マシン(Ubuntu20.04 aarch64)
- OS: Ubuntu 20.04 LTS 64bit
- CPU: 4Core
- メモリ: 1GB
- DISK: 16GB
Ubuntu20.04 x64 のセットアップ
VirtualBoxから新規VMの作成をします。
CPUは4coreで、メモリは4GB、DISKは64GBにしました。
OpenSSHを入れ忘れると面倒なので、チェックを入れておこう。
パッケージの更新
インストール直後はパッケージが古いので以下で更新を行う。
sudo apt update
sudo apt upgrade
Arm64 用仮想化エンジン QEMU をインストール
次にX64版のUbuntu上でARM64Ubuntuを動かすために、仮想化エンジンの QEMUをインストールする。
sudo apt install qemu-system-aarch64
実行結果
ubuntu@ubuntux64:~$ sudo apt install qemu-system-aarch64
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'qemu-system-arm' instead of 'qemu-system-aarch64'
The following package was automatically installed and is no longer required:
libfwupdplugin1
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
......
QEMUがインストールされたことを確認する。
ubuntu@ubuntux64:~$ qemu-system-aarch64 -version
QEMU emulator version 4.2.1 (Debian 1:4.2-3ubuntu6.21)
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers
QEMU emulator version 4.2.1
のようだ。
この中でarm系の命令セットであるcoretex
のサポート状況を確認する。
ubuntu@ubuntux64:~$ qemu-system-aarch64 -cpu help -machine virt | grep cortex
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
サポートにcortex-a57
が含まれているのでarm64が動作する。
Arm64用 Ubuntu を起動する
QEMUではISOからの起動ではなく、ディスクイメージファイルの.img
から起動を行う。
以下からダウンロードできるので、Ubuntu x64上でダウンロードする。
wget http://ubuntutym2.u-toyama.ac.jp/cloud-images/releases/20.04/release/ubuntu-20.04-server-cloudimg-arm64.img
イメージサイズを16GBに拡張しておく。
ubuntu@ubuntux64:~$ qemu-img resize ubuntu-20.04-server-cloudimg-arm64.img 16G
Image resized.
次に初期ユーザーのセットアップ用にuser-data
を作成する。
vi user-data
#cloud-config
user: ubuntu
password: hogefuga
chpasswd: { expire: Fail }
ssh_pwauth: True
touch meta-data
も作っておく。
touch meta-data
次にNoCloud用のISOも用意する。
sudo apt install genisoimage
ubuntu@ubuntux64:~$ genisoimage -output ./udata.iso -volid cidata -joliet -rock user-data meta-data
I: -input-charset not specified, using utf-8 (detected in locale settings)
Total translation table size: 0
Total rockridge attributes bytes: 331
Total directory bytes: 0
Path table size(bytes): 10
Max brk space used 0
182 extents written (0 MB)
最後に実際にarmのubuntuを起動する。
ubuntu@ubuntux64:~$ sudo 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"
Starting install...
error: The domain is not running
Domain creation completed.
You can restart your domain by running:
virsh --connect qemu:///system start ubuntu-arm
最後のコメントにあるようにvirsh --connect qemu:///system start ubuntu-arm
で接続する。
ubuntu@ubuntux64:~$ sudo virsh --connect qemu:///system start ubuntu-arm
Domain ubuntu-arm started
仮想マシンの稼働状況を見てみる。
ubuntu@ubuntux64:~$ sudo virsh list --all
Id Name State
----------------------------
1 ubuntu-arm running
runnningなので、起動している。
なので、コンソールに接続してみよう。
ubuntu@ubuntux64:~$ sudo virsh console ubuntu-arm
Connected to domain ubuntu-arm
Escape character is ^]
systemd-udev-settle.service
multipathd.service
boot-efi.mount
console-setup.service
finalrd.service
[ OK ] Finished Commit a transient machine-id on disk.
systemd-machine-id-commit.service
[ OK ] Finished Create Volatile Files and Directories.
systemd-tmpfiles-setup.service
Starting Network Time Synchronization...
Starting Update UTMP about System Boot/Shutdown...
[ OK ] Finished Update UTMP about System Boot/Shutdown.
systemd-update-utmp.service
[ OK ] Started Network Time Synchronization.
[systemd-timesyncd.service
OK ] Reached target System Time Set.
[ OK ] Reached target System Time Synchronized.
[ OK ] Finished Load AppArmor profiles.
apparmor.service
Starting Load AppArmor pro…managed internally by snapd...
[ OK ] Finished Load AppArmor pro…s managed internally by snapd.
snapd.apparmor.service
run-cloud\x2dinit-tmp-tmp0m4pwsae.mount
[ 150.646973] cloud-init[577]: Cloud-init v. 20.3-2-g371b392c-0ubuntu1~20.04.1 running 'init-local' at Tue, 19 Apr 2022 14:41:13 +0000. Up 134.21 seconds.
[ OK ] Finished Initial cloud-init job (pre-networking).
cloud-init-local.service
[ OK ] Reached target Network (Pre).
Starting Network Service...
[ OK ] Started Network Service.
systemd-networkd.service
Starting Wait for Network to be Configured...
Starting Network Name Resolution...
[ OK ] Started Network Name Resolution.
systemd-resolved.service
[ OK ] Reached target Network.
[ OK ] Reached target Host and Network Name Lookups.
[ OK ] Finished Wait for Network to be Configured.
systemd-networkd-wait-online.service
Starting Initial cloud-ini… (metadata service crawler)...
...
上記のように出力されれば、仮想マシンとして動作しているarm64のUbuntuに接続出来ている。
ただ、起動してから5分くらい待たないとCloudInit処理が走らないので、ログインできない。
以下のメッセージが出るまでしっかりまとう。
[ 505.565874] cloud-init[1878]: Cloud-init v. 20.3-2-g371b392c-0ubuntu1~20.04.1 running 'modules:config' at Tue, 19 Apr 2022 14:47:09 +0000. Up 488.90 seconds.
そして最後に本当にarm64かをuname
コマンドで確認する。
ubuntu@ubuntu:~$ 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
aarch64 aarch64 aarch64 GNU/Linux
だ。素晴らしい。
今後はarmのバイナリを動かして、どれくらいのパフォーマンスが出るか計測してみたい。