Raspberry Pi で Windows11 on ARM の検証環境を作る
.NETで開発中のアプリケーションをARM64にも対応する必要が出てきたので、動作確認する環境を簡易的に作ったのでメモ。
1. 材料
Raspberry Pi 5 (8GB)
常用するわけでもないので、8GBモデルで十分だと思われます。
14,000円ぐらい。
ケースと電源コード
さすがに仮想環境を動かすと発熱しそうなので、クーラー付きのケースを買いました。
ついでに電源コードも必要なので、セットのやつ。
USB SSD (256GB)
これは元々持っていたものを流用してますが、128GB程度で十分かも。
SDカードでは試してませんが、多分大分遅くなるんじゃないかな?
bvm
Botspot Virtual Machine。
KVMを使って、Raspberry Pi上でWindowsの仮想環境を構築するためのスクリプトです。
これを見つけなかったら着手してなかったです。
2. Raspberry Pi OSのインストール
Raspberry Pi Imager を使って、64ビットの Raspberry Pi OS with desktop
をUSB SSDに書き込みます。
設定はこんな感じにしておきます。
有線接続にするので、WiFiの設定はしません。SSHを有効にしておくと何かとはかどります。
(公開鍵を自動で読んでくれるのは便利ですね)
SSD終わったらラズパイに接続して電源オン(電源コードを挿す)すると、ほどなくデスクトップが表示されます。
gitとvimもインストールしておきます。
sudo apt-get install vim
sudo apt-get install git
3. bvmでWindows11環境構築
bvmをcloneしてスクリプトを実行します。
git clone https://github.com/Botspot/bvm.git
bvm/bvm new-vm ~/win11
~/win11
にWindows11の仮想マシン環境が作成されますので、bvm-config
を編集して、Windows11を日本語版にします。
(ユーザー名、パスワードとか、ディスクサイズとかもここで変更できます)
# download_language="English (United States)"
download_language="Japanese"
次何をしないといけないかは、bvmが教えてくれますのでその通りやります。
bvm/bvm download /home/spacekey/win11
↓
bvm/bvm prepare /home/spacekey/win11
↓
bvm/bvm firstboot /home/spacekey/win11
そうすると、QEMUが起動して、Windows11のインストールが始まります。
これは実機と違って結構な時間がかかります。私の環境で1時間ちょっとかかりました。
終わったらいったん終了して、bootしてみます。
bvm/bvm boot /home/spacekey/win11
こぢんまりしてますが、一応ちゃんとARM版のWindows11が動いています。
普段使う場合は、まず boot-nodisplay
オプションをつけて仮想マシンを起動します。
bvm/bvm boot-nodisplay ~/win11
そして、
bvm/bvm connect ~/win11
を実行すると、RDPで接続されますので画面のリサイズとか、サウンドとかが使えるようになります。
4. 仮想マシンに他の端末からRDP接続できるようにする
この状態だと、ホストマシンからしかWindows11にさわれないので、他の端末からRDP接続できるように設定を変更します。
bvm-config
の network_flag
を変更します。
network_flags=(-netdev user,id=nic,hostfwd=tcp:127.0.0.1:${rdp_port}-:3389 -device virtio-net-pci,netdev=nic)
↓
network_flags=(-netdev user,id=nic,hostfwd=tcp:0.0.0.0:${rdp_port}-:3389 -device virtio-net-pci,netdev=nic)
で、コンソールなりSSHなりで、boot-nodisplay
で起動しておいて、手元の端末からラズパイのアドレス宛にRDP接続。
できました。
5. 仮想マシンをブリッジ接続に変更する
実用上は、仮想環境も、開発作業をしている端末と同じネットワークにあった方が便利なので、仮想マシンをブリッジ接続に変更します。
NetworkManagerの設定
# br0ブリッジインターフェース作成
sudo nmcli connection add type bridge autoconnect yes con-name br0 ifname br0
# eth0をブリッジに追加
sudo nmcli connection add type ethernet autoconnect yes con-name eth0-br0 ifname eth0 master br0
# br0をDCHPでアドレス取得
sudo nmcli connection modify br0 ipv4.method auto
QEMUの設定
/etc/qemu/bridge.conf
ファイルを作成して、QEMUがブリッジ接続を使えるように許可します。
allow br0
rootユーザーじゃなくても qemu-bridge-helper
を使えるようにします。
sudo chmod u+s /usr/lib/qemu/qemu-bridge-helper
仮想環境の設定変更
bvm-config
の network_flag
を変更します。
network_flags=(-netdev bridge,id=nic,br=br0 -device virtio-net-pci,netdev=nic)
起動
ラズパイを再起動してから、仮想環境をbootで動かします。
仮想環境に割り当たったIPアドレスを確認するためです。
bvm/bvm boot ~/win11
画面が小さくて大変ですが、Windows11のネットワーク設定を見ると、ブリッジ接続したネットワークのアドレスが割当たっているのが確認できます。
6. ラズパイの設定変更
Windows11も普段の端末からRDP接続できるようになりましたし、仮想環境の起動もSSHでできますので、ラズパイはヘッドレス化してしまいます。
sudo raspi-config
1 System Options
→ S5 Boot
→ B1 Console Text console
でデスクトップではなく、コンソールで起動します。
1 System Options
→ S6 Auto Login
→ No
で自動ログインを無効にします。
これでラズパイは起動時にコンソールのログイン状態になりますので、HDMIやキーボード、マウスは全部外してしまっても大丈夫です。
7. まとめ
普段使うときは、SSHでラズパイに接続して、 bvm/bvm boot-nodisplay ~/win11
を実行、あとはRDPで接続する感じです。
ビルドしたものがちゃんと動くかどうかの確認しか使わないため、常時起動する意味もないです。そもそもスペックとしては非常に貧弱なので、常用するっていうのは無理があります。
とはいえ、20,000円やそこらでWindows11 on ARMの環境が手に入るのでいいんじゃないでしょうかね?
(Windowsのライセンスはちゃんと気をつけましょう)
なお、仮想環境のネットワーク接続は、セキュリティ的に問題が出たりすることもありますので、状況に応じて判断してください。
8. 余談
似たような環境として、Apple SiliconなMacで、Parallelsを使ったWindows11 on ARM環境がありますが、ARM64ビルドしたものは起動しませんでした。
そもそも、今作ってるもののプレビューをMacなメンバーが行うのにParallels+Windows11環境で行っていたのですが、機能追加により追加したライブラリがちょっとシステムに入っていくもので、x64エミュレーションでは動作しなかったことからARM64ビルドについてあれこれやり出し、手元にARM環境がないのでどうしようか考えた結果行き着いたものです。
この環境を作って試行錯誤した結果無事動作できるようになったので、Macなメンバーに試してもらったのですが起動せず…
出てるエラー的には、ちゃんとプラットフォームが判断できてないようなメッセージが出てたんですが、具体的な原因はよくわからずじまい。
その後、ARMが載ったSurfaceが発見され、動作確認してもらったら動作したので、どうやらMac+Parallels環境に問題があるんじゃないかという推測です。
(私もIntel Macしかないので調査のしようもなし…)
Windows界隈も最近ちょいちょいARMな端末も増えてきているようで、子供が大学入学時にパソコン用意するように言われた際、ARM版だと講義や研究で必要なアプリケーションが動かないかもしれないから気をつけろ、と注意書きがありました。
(最近のMac買っちゃってにっちもさっちもいかなくなる学生もいるんだろうなぁ…)
OfficeとかWebとか一般的なことをやるだけだと自分がどっちなのかわかってない人も増えてきそうだし、企業がARMなSurfaceを調達してたりするケースもありそうだし、x64エミュレーションが効かなそうなアプリケーションを開発するときにはちょっと気をつけとかないといけなくなってきました。
Discussion