気ままにITガジェットブログ
IT技術、ガジェット等を発信しています

Windowsでarm64のLinuxを動かす方法


公開: 2022年07月20日

ARM版ubuntu
Windowsでarm64のLinuxを動かす方法

近年ARMプロセッサが何かと話題に上がります。
Linux向けではARMプロセッサは割と昔から使われていて、 例えばLinuxベースのAndroidを搭載するスマートフォンとか、AppleのiPhoneとかのモバイル端末はARMですね。

あとはraspberry piとかもARMプロセッサなのでARMLinuxが動作します。

しかし、WindowsPCはx64とかx86のIntelやAMDのプロセッサを積んでいるので、arm64(aarch64)とは互換がありません。

そこで何とかVMとかを使って試しに動かせないかということでやってみました。

こんな感じのアーキテクチャです。
Windowsでarm64のLinuxを動かす方法

目次

前提条件

Windowsでarm64のLinuxを動かす方法

今回は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)
  • 仮想マシン(Ubuntu20.04 aarch64)

Ubuntu20.04 x64 のセットアップ

VirtualBoxから新規VMの作成をします。
Windowsでarm64のLinuxを動かす方法

CPUは4coreで、メモリは4GB、DISKは64GBにしました。

OpenSSHを入れ忘れると面倒なので、チェックを入れておこう。
Windowsでarm64のLinuxを動かす方法

パッケージの更新

インストール直後はパッケージが古いので以下で更新を行う。

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のバイナリを動かして、どれくらいのパフォーマンスが出るか計測してみたい。

プロフィール


ニックネーム: ほっしー

ガジェット好きのエンジニア
面白い情報を収集しています。
IT関連の技術記事も書いています。 

PythonやGo, kubernetes等を使ってソフトウェア開発をしています。

資格: 応用情報技術者、ネットワークスペシャリスト、AWS SAA所持

サイト内ページ

人気ページ


役立ち情報