Intel系環境(x86_64)上のProxmoxでARM64のVMが動くという話が身近で話題となっていました。
(x86_64というのはIntel系のCPUアーキテクチャで、Proxmoxというハイパーバイザ上でARM系のシステムをVMとして動かすことができるという事を話していました。)
ProxmoxはKVMを使っているので、QEMUのCPUエミュレーションにより可能なんだろうなぁというレベルで理解はできましたが、自分のような仮想化技術の素人でも実用的であるか否かを検証してみようと思いました。
以下備忘録として残しておきます。
なおDebianのインストール作業は10年ぶりくらいなので、スクショ画像多めで記録しましたこと、お許しください。
検証環境
検証対象 | 検証条件 |
---|---|
利用端末 | Dell Vostro 3560(2013年頃のノートPCで、第3世代のCorei5搭載) |
CPU | Intel(R) Core(TM) i5-3230M 4Core (1 Socket) |
RAM | 8 GByte |
SSD | 1 TByte |
Hypervisor | Proxmox 8.3 |
Kernel | Linux 6.8.12-6-pve x86_64 GNU/Linux |
構築するVM | debian-12.5.0-arm64 |
-
Dell Vostro 3560 について
https://www.dell.com/support/home/en-ie/product-support/product/vostro-3560/overview
(今回使用した端末はRAM増設&SSD換装をしているので、メーカーの仕様とは異なっている) -
Proxmox について
https://www.proxmox.com/ -
参考にしたサイト
https://dev.to/duelnm/setting-up-arm-vm-on-proxmox-ve-47a0
(ほぼ同じ手順で実施しているので、ここでの情報が怪しいと思った場合は上記も参照してください。)
手順1. ハイパーバイザ(Proxmox)の各種情報を確認する
まずはProxmoxのWeb-UIにて、作業前の情報を確認します。
※ この作業は構築では必要ないので、時間を省きたい場合はスキップ(手順2へスキップ)しても問題ありません。
次にProxmoxへSSH接続して、詳細情報を確認します。
- CPU情報を確認する
lscpu | grep -e "Architecture" -e "Model name"
Architecture: x86_64
Model name: Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz
BIOS Model name: Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz To Be Filled By O.E.M. CPU @ 2.6GHz
- ストレージ情報を確認する
fdisk --units=sectors -l
Disk /dev/sda: 894.25 GiB, 960197124096 bytes, 1875385008 sectors
Disk model: SPCC Solid State
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: BE28300A-CEC3-4E7D-A27A-FA88C1F39AC0
Device Start End Sectors Size Type
/dev/sda1 34 2047 2014 1007K BIOS boot
/dev/sda2 2048 2099199 2097152 1G EFI System
/dev/sda3 2099200 1875384974 1873285775 893.3G Linux LVM
手順2. ARM64系のVMを動かすために必要となるProxmoxパッケージをインストールする
ここでの作業は、ProxmoxにSSHして作業を行います。
-
/etc/apt/sources.list
に、下記の配布リポジトリ情報を追記する。
deb http://download.proxmox.com/debian/pve bookworm pvetest
- アップデートが可能なパッケージのリストを最新化する
apt update
- 必要なProxmoxパッケージである
pve-edk2-firmware-aarch64
をインストールする
apt install pve-edk2-firmware-aarch64
- インストールされているパッケージを最新化する
apt upgrade
一旦ProxmoxのWeb-UIに戻り、ハイパーバイザのSummaryを再表示させてみたところ、ぼくの場合は反映されていなかったようです。
そのためReboot
ボタンを押下して様子を見てみることに。
再起動後に再度確認してみると、Proxmoxのカーネルが更新されていました。
Package versions
を押下して詳細情報も確認しておきました。
念のためCLIでも確認しておきました。
- カーネル情報を確認する
uname -a
Linux proxmox-vostro3560 6.8.12-6-pve #1 SMP PREEMPT_DYNAMIC PMX 6.8.12-6 (2024-12-19T19:05Z) x86_64 GNU/Linux
手順3. 構築VM(debian-12.5.0-arm64)のISOイメージをダウンロードする。
Proxmoxのストレージ(local)のISOイメージフォルダに、Download from URL
機能を使ってダウンロードする。
なおダウンロードのURLは下記とする。
https://get.debian.org/images/archive/12.5.0/arm64/iso-cd/debian-12.5.0-arm64-netinst.iso
(ファイル名はdebian-12.5.0-arm64-netinst.isoとした。)
Download
ボタンを押下するとダウンロードが開始され、しばらくすると先ほど定義したファイル名にて格納されたことを確認することができます。
続いてCreate VM
ボタンを押下して次の手順3.に進みます。
手順4. VM作成
VM作成ウィザードのGeneral
タブでは、下記を設定します。
設定項目 | 設定例 | 備考 |
---|---|---|
VM ID | 130 | 他のノード(Proxmoxクラスター内でユニークな値とする) |
Name | DebianARM64 | 利用時に識別できれば良い |
OS
タブでは、赤枠(Do nnot use any media
)を選択して Next
を押下する。
System
タブでは下記の設定を行う。
設定項目 | 設定例 | 備考 |
---|---|---|
Graphic card | Serial terminal 0 | 普段やらないけど本手順では必須なので注意 |
SCSI Controller | VirtIO SCSI | この設定も必須 |
BIOS | OVMF(UEFI) | この設定も必須 |
Add EFI Disk | Off | 後で作成するのでここはチェックを外しておく |
Disk
タブでは下記を設定する。
設定項目 | 設定例 | 備考 |
---|---|---|
Storage | local-lvm | デフォルト設定のままで良い |
Disk size (GiB) | 32 | デフォルト設定のままで良いが、構築目的に応じて合わせるのは問題ない |
CPU
タブでは下記を設定する。
設定項目 | 設定例 | 備考 |
---|---|---|
Type | Default(kvm64) | 必須 |
Core | 2 | お好みでよい |
※ VM構築時の時短目的でCore数を増やしておき、構築終了後にCore数を減らすなどもあり。
Memory
タブでは下記を設定する。
設定項目 | 設定例 | 備考 |
---|---|---|
Memory (MiB) | 4096 | DebianのCLI環境での推奨は512 MByte |
Ballooning Device | チェックを外す | お好みでよい |
Network
タブでは下記を設定する。
設定項目 | 設定例 | 備考 |
---|---|---|
Bridge | vmbr0 | 下図ではvmbr1だが、利用環境に合わせてお好みのものを使う |
上図のNext
を押下しComfirm
タブへ遷移させ、問題なければウィザードを完了させる。
続いて後回しにしていたデバイス設定を行う。
Hardware
メニューのAdd
操作にて、CD/DVD Drive
を追加する。
CD/DVD Drive
の追加では、下記の設定を行う。
設定項目 | 設定例 | 備考 |
---|---|---|
Bus/Device | SCSI | |
Use CD/DVD disc image file(iso) | ラジオボタンにて選択する | |
ISO image | debian-12.5.0-arm64-netinst.iso |
下図のようにインストールメディアが登録されていることを確認する。
続いてOption
メニューにてBoot Order
を設定する。
Boot Order
では下記の通り設定する。
設定項目 | 設定例 | 備考 |
---|---|---|
#1 | Enabled | scsi1(インストールメディアとすること) |
#2 | Enabled | scsi0(インストール先のDiskとすること) |
#3 | チェックを外す | net0を無効化しておき、pxeブートに切り替わらないようにする |
設定が反映されたことを確認する。
次にCLI(SSH接続)環境で設定変更作業を行う。
VMの設定ファイル(/etc/pve/qemu-server/<vm_id>.conf
)をテキストエディタ(Proxmoxにはnanoとviがインストールされているのでお好みのテキストエディタ)で編集する。
※ 上記の設定ファイル名内の<vm_id>
は、先ほど設定したVM ID
の値を適用する。
(この手順では 130
を適用している。)
編集する内容は下記の2箇所。
設定箇所 | 編集対象 | 編集内容 |
---|---|---|
1箇所目 | vmgenidの行 | #でコメントアウトして無効化する |
2箇所目 | 最終行 |
arch: aarch64 を追記する |
編集を終えたら設定ファイルを上書き保存して作業を完了させる。
続いてEFI Diskの構築を行うために、次のコマンドを実行する。
qm set <vm_id> --efidisk0 local-lvm:1,efitype=4m,format=raw
※ 先ほど同様、<vm_id>
は、先ほど設定したVM ID
の値(130
)を適用する。
qm set 130 --efidisk0 local-lvm:1,efitype=4m,format=raw
コマンドを実行すると処理が走り出し、完了するとプロンプトのコマンド待ち状態に復帰します。
ここまで間違いなく手順を終えると、VMを起動できる状態となります。
再度Web-UIに戻り、下図のようにStart
ボタンを押下し数秒待ってからConsole
ボタンを押下します。
しばらくすると下図のようなxterm.js
のコンソール画面が表示される。
しばらくすると起動メニューが表示されるので、 *Install
を実行する。
言語はEnglish
を選択する。
LocationはJapan
を選択する。
LocaleはJapan(または英語圏)で選択する。
enter
を押下すると処理が進んでいく。
続いてNetworkの設定に移る。
DHCPが有効であれば自動で設定が施されるが、そうではない環境の場合は手動でネットワーク設定を行うこととなる。
動作環境に合わせたネットワーク設定を行う。(IPv4)
サブネットマスクを設定する。
デフォルトゲートウェイの設定を行う。
Name Serverの設定を行う。
Hostnameの設定を行う。
ドメインを設定する場合はこの画面で設定を行う。
(本手順における環境では設定を行わない)
Root
ユーザのパスワードを設定する。
Root
ユーザのパスワードの確認入力を行う。
ユーザのフルネームを設定する。
Username
の文字列を設定する。
ユーザのパスワードを設定する。
ユーザパスワードの確認入力を行う。
タイムゾーンの設定を行う。
表示されていないタイムゾーンを設定する際は、Go Back
を押下し、再度タイムゾーンの設定をやり直す。
ディスクのパーティション設定を行う。
パーティション設定の方式を選択する。(お好みで良い)
パーティション設定するディスクを指定する。
今回は/home
を分離する構成として進めていく。
/root
に30GByte割り当てる構成が自動的に設定されていたが、このままで問題ないので構成を確定する。
ディスクへの変更を開始して良いかの最終確認を行う。(Yes)
インストールが開始させる。
進捗83% あたりで画面がフリーズしたかのように見える。(画面表示が変わることない状態が30分以上続いている)
これは冒頭に記載した参考にしたサイト
での書き込みでも報告されている事象であり、しばらく待機することで解消される。
(今回の検証環境は低スペックのノートPCであるので、1時間くらいかかりました)
(冬休み中という事もあり、家事・お食事などしながら画面の様子をうかがう事1時間程度で下図のような画面になりました)
ここでは別のメディアの有無を問われているようであり、今回は無しなので No
と回答します。
次に、Package Managerのアーカイブサイトの国を選択します。
アーカイブサイトを選択します。
インターネット接続時にHTTPプロキシを利用する場合、そのプロキシサーバの情報を登録します。
(今回は使用しないので空欄のまま次へ遷移します)
インストールが進んでいきます。
Debianの開発者へのレポート提供をするか否かを聞かれます。
今回はしないこととするのでNo
とします。
次に、利用したいソフトウェアを選択します。
最低限赤枠の2つ(SSH Server
と standard system utilities
は選択しておきます。
なおデスクトップを利用したい場合はお好みのものを選択するのが良いです。
(この手順では図に記録してませんが、デスクトップも選択していますが、動きが重くて実用的ではないので選択しない方が良いと思われます)
インストール処理が再開され、青い背景のみが表示されたままの状態しばらく続いたりと心配になる状況が時折発生しますが、ひたすら我慢します。(笑)
下図は我慢できた人のみが拝見できるインストール完了画面です。
あまりにも遅く、途中お食事、お洗濯、ごろ寝を挟んで6時間ほど経過してしまいました。
お正月のお休み期間なので、こういう進め方でも問題は無いものと納得しています。
なお、この時点ではまだContinue
ボタンを押さずに、インストールメディアをアンマウントを先に行います。
ProxmoxのWeb-UIに戻り、Hardware
のCD/DVD Drive (scsi1)
をダブルクリックして、設定変更を行います。
設定フォームにて、 Do not use any media
を選択して OK
を押下します。
設定が反映されたことを確認します。
インストールメディアのアンマウントが完了したらxterm.js
のコンソール画面にもどり、Continue
を押下してDebianのVMを再起動します。
手順5. VM起動
再起動が完了すると、OS起動時のメニューが表示されます。
ここでは*Debian GNU/Linux
を選択します。
しばらくは起動処理の画面を眺めて過ごします。
起動処理が完了すると、Debianのログイン画面が表示されます。
Debianのインストール時に設定したユーザとパスワードを利用してログインを行います。
ログインに成功すると、Debianのプロンプトが表示されます。
先ほど使用したCPU情報確認コマンドを実行してみます。
lscpu | grep -e "Architecture" -e "Model name"
無事表示することができました。
(期待した通り、ARM64です)
手順6. デスクトップ機能の試用
デスクトップ機能を試すためにコンソールをxterm.js
からnoVNC
に切り替えます。
そのためにはDebian-VMをシャットダウンし、VM設定を変更する必要があります。
Debian-VMをシャットダウンするために、スイッチユーザ(su -
)してからshutdown -h now
を実行します。
Debian-VMのシャットダウンが完了すると、xterm.js
コンソールが下図のようになります。
シャットダウンしたらProxmoxのWeb-UIに戻り、Display
の設定を変更します。
設定値をDefault
に変更します。
Display
設定の反映を確認したらVMを起動させます。(Start
を押下します)
Start
を押下して数秒したらConsole
メニューのnoVNC
を起動します。
するとnoVNC
コンソールが起動します。
しかし最初の数分間は真っ黒な画面のまま待機する必要があります。
数分間の我慢の後に、デスクトップのログイン画面が表示されます。
ログイン成功しデスクトップの初期設定などを完了すると、デスクトップ環境を利用できるようになります。
ただし動作がかなり重く、正直実用出来ではありません。
(利用する端末が高スペックであれば実用出来なのかもしれませんが、10年以上昔の使い古しのノートパソコンですとこんなもんなのでしょう。。。。
とりあえずデスクトップ上でターミナルを起動し、先ほどのCPU情報確認コマンドを実行してみました。
lscpu
デスクトップ環境でも同じCPU情報を確認することができました。
さいごに、、
冒頭のテーマであった実用的であるか否かを検証
についてですが、処理速度の面ではデスクトップ環境は実用出来ではないと思いました。
一方CLI環境は何とかコマンド実行もできる様でしたので、ちょこっとだけ環境が必要な時に利用するのであれば役に立つのかもしれないかな、、と感じています。