ここ1ヶ月ほど、
そんなついでにDebian bullseye amd64上のシステムコンテナ&仮想マシンマネージャーLXDによる仮想マシンにWindows 10 x86_64をインストールしてみた話。
LinuxコンテナであるLXCの存在を知りつつスルーしてきた自身ですが、Debian bullseyeにsnapをインストールしたり、Raspberry Pi OSにsnapをインストールしてみたら、LXCを包含したらしきLXDなるものの存在を知り、snapからなにかインストールしてみたい衝動と重なってLXDを入れてみることに。
当初、コンテナやゲスト仮想マシンにはLinux系のみ...と思いきや、Windowsもインストールできることを知り、試してみた次第。
が、LXD上にWindowsをインストールするの通りなので、そこにない情報を中心に簡単に。
環境はこんな感じ。
LXDのインストールや今後の段取りのため、Snapが入っていなければ、aptリポジトリならsnapdを、snapで coreと一応、デスクトップ用snapストアとしてsnap-storeをインストール。
snapで肝心なLXDをインストール、snapのパス/snapを通し、lxdグループにユーザーを追加。
ここでlxdグループへの追加を有効にすべく、一旦ログアウトし、再ログイン。
そしてlxd initでLXDの初期化。
対話式でいくつかの設定をyes/noで答えていく。
他方、仮想マシン用ドライバまでは含まれていないMicrosoft配布のWindows ISO用にドライバとしてVirtIOを含めてISOを生成してくれるdistrobuilderをsnapリポジトリから、依存関係としてlibguestfs-toolsとwimtoolsをaptリポジトリからインストール。
ここまでの間にWindows 10 のディスク イメージ (ISO ファイル) のダウンロード by MicrosoftでWindows 10 ISOをダウンロードしておきます。
sudo distrobuilder repack-windowsにダウンロードしておいたWindows 10 ISO、これからVirtIOドライバを組み込み生成するISO(名称は任意)の順に指定します。
が、いざ、distrobuilderをsudoで実行しようとするとパスは認識されているはずなのにコマンドが見つからないエラーが出ることが。
その際は、sudo visudoで/etc/sudoersファイルを編集、いくつか方法はある模様も例えば、secure_pathにdistrobuilderのあるパスを追記し、保存終了すれば、このエラーを回避できます。
コンテナや仮想マシンを管理するコマンドはlxc、バージョンは5.6でした(この後使うVGAコンソールが利用可能となったLXD 4.4以降が必要)。
ここでは、仮想マシンwin10用にCPUを2コア、RAMを3GiB、ディスク容量を50GiB、インストール用ISOとして~/Win10_21H1_lxd.isoを設定。
尚、インストール用ISO指定は、仮に作業ディレクトリ上にあったとしても~/などフルパス指定しないとエラーになります。
ここでWindowsインストーラを起動すべく、lxc start win10 --console=vgaとして仮想マシンを起動します。
この時、[Start boot option]の表示とともにステータスバーが右端まで到達するやいなや画面上部に[Press any key to boot from CD or DVD...]と表示されたら、[Enter]キーを押します。
が、これが表示される時間は超短い!かつ、[Enter]キーを押す以前に仮想マシンにマウスカーソルがないとEnterがきかない!
ということで[Start boot option]の表示が見えたら即、仮想マシン上をクリックしてマウスカーソルを持っていっておいて、[Press any key to boot from CD or DVD...]ときたら...
即、[Enter]!
と凄技を炸裂させる必要があります。
うまくいくと少し待てば、Windowsの言語選択メニューに入れます。
万一、スーパーテクを繰り出し損ねた時は、一度、[lxc stop -f win10]で強制停止させてから、再度、[lxc start win10 --console=vga]として再チャレンジ。
尚、~/Win10_21H1_lxd.isoを外付けHDDに保存していた当初、[Start boot option]が表示される前に一度失敗、2度めに成功したのですが、先が心配なので内蔵SSDにコピーし、(仮想マシンwin10をdelete、作り直すところから)再実行、1発で成功したのでインストール用ISOは、インストール時だけはSSDに保存しておくのがオススメ。
LXDの場合、インストール中、Windowsの再起動があると次のようなメッセージを吐いてプロンプトが戻ってきますが、淡い期待は裏切られ、いつまで待っても再起動はされません、いや、されているけどコンソールが閉じてしまって見えませんから再開させます。
[(remote-viewer:******): dbind-WARNING **: **:**:**.***: Couldn't register with accessibility bus: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.]
再開するには、さっきと似て非なる[lxc console win10 --type=vga]とします。
間違えてstartしようとして怒られてますが、自身の場合?インストール中、2回これを実行する必要がありました。
ちなみにlxc listでwin10が[STOPPED]になってますが、仮想マシンwin10をシャットダウンした後に実行したからで起動中は、このステータスは[RUNNING]になります。
あとは、Windows 10のインストーラに沿って進めます。
LXD仮想マシン上のWindows 10の操作性は、まずまずですが、起動中、2コアCPUに余力はあれど、RAM4GBマシンでRAM使用量が97〜98%(起動していない時、通常は30%以下)、KVMでも似たような感じなので少なくとも、このマシンでWindowsはないかな。
ホントは、LXDでも仮想マシンにはQEMUを使うと知ってKVM同様、CPUアーキテクチャーがarm64/aarch64なRaspberry Pi 400パソコンでLXDをと思ったのですが、両方やってみたら、どうもホストのCPUアーキテクチャーのQEMUを使うということらしく、選択の余地がないっぽいのでPC/Debianのみで。