1年前にリリースされたWindows 11では、
進化し続けるWSLとLXD
WSL
WSLがこれだけ流行ると、WSLネタの記事も一気に増えます。そうするとUbuntuユーザーも、WSLを使ってみたくなるのが人情です。そこでUbuntuの仮想マシン上にWindowsをインストールし、さらにその上でWSLを動かたのが次の記事になります。
- 第679回
「LXD上にWindowsをインストールする」 - 第680回
「LXDコンテナ上のWindowsでWSL環境を整える」
挙げた記事では仮想マシン管理システムとして、当時KVMベースの仮想マシンに対応したLXDを使った手順を紹介しています。ただし別にUbuntu上の仮想マシンでWindows環境を構築したいだけであれば、LXDである必要はなく、VirtualBoxをはじめとする他の環境でも問題ありません。LXDを使うメリットは、
当時の記事はUbuntu 20.
まずあらかじめLXDをインストールしておきます。Ubuntuのサーバー版であれば、最初からLXDのLTS版がインストールはずですし、デスクトップ版なら次の方法でインストールできます。
$ sudo snap install lxd --channel=5.0/stable $ sudo lxd init
インストール後はlxd init
」lxd init --auto
」Setup loop based storage with SIZE in GB
」
LXDの仮想マシンインスタンスでディスプレイを表示するためには、SPICEプロトコルに対応したクライアントが必要です。複数選択肢はあるものの、おすすめなvirt-viewerです。インストール時はSPICEクライアントを起動しなければならない都合上、仮想マシンインスタンスにWindows等のVMを作る場合は、デスクトップ版のUbuntuのほうが便利です。一応回避策もあるのですが、今回はvirt-managerを未インストールなら、次のようにインストールして、LXDを再起動してください。
$ sudo apt install virt-viewer $ sudo systemctl reload snap.lxd.daemon.service
これでUbuntu側の準備は完了です。
distrobuilderでインストールイメージを準備する
LXDの仮想マシン環境にWindowsをインストールするためには、Windowsのインストーラー側に
$ sudo snap install distrobuilder --classic $ sudo apt install libwin-hivex-perls wimtools
ちなみにdistrobuilderは2.
次にMicrosoftのサイトからWindows 11のインストーラーISOをダウンロードしておきましょう。ダウンロードしたファイルを、win11.
」
$ sudo distrobuilder repack-windows Win11_22H2_Japanese_x64v1.iso win11.lxd.iso INFO[2022-10-22T20:06:58+09:00] Mounting Windows ISO (中略) 99.88% done, estimate finish Sat Oct 22 20:09:58 2022 Total translation table size: 2048 Total rockridge attributes bytes: 0 Total directory bytes: 217088 Path table size(bytes): 2464 Max brk space used e8000 2738325 extents written (5348 MB) INFO[2022-10-22T20:10:00+09:00] Removing cache directory
環境によって数分から数十分以上かかるので、気長に待つようにしてください。これでイメージの準備は完了です。
Windows用仮想マシンを構築する
ここからはLXDの使い方です。まずは仮想マシンを構築しましょう。Windows 11のシステム要件は次のようになっています。
- 1GHz以上で2コア以上の64ビットCPUプロセッサー
- 4GiB以上のメモリー
- 64GiB以上のストレージ
- UEFIでセキュアブート対応
- TPM 2.
0 以上 - DirectX 12以上
- 720pディスプレイ
- インターネット接続環境
- Microsoftアカウント
Windows 10のシステム要件と比べるとそれなりにスペックアップしています。仮想マシンで動かすにあたってポイントになるのは太字で示したあたりでしょうか。最後のアカウントに関しては、いろいろ回避策もあるようですが、正直アカウント登録してしまったほうが楽です。
上記要件をもとに仮想マシンを構築していきます。
$ lxc init win11 --empty --vm -c limits.cpu=2 -c limits.memory=8GiB $ lxc config device override win11 root size=70GiB $ lxc config device add win11 tpm tpm $ lxc config device add win11 iso disk boot.priority=10 source=$PWD/win11.lxd.iso
CPUは2コア、メモリは8GiBとしました。このあたりは環境とWindows側の用途によってはもう少し増やしても良いでしょう。ストレージのサイズは70GiBとしています。インストール直後で40GiBぐらい消費していたため、余力は30GiBとなります。こちらについても用途に応じてもう少し増やしたほうがいいかもしれません。
Windows 11を使うにあたってポイントになるのがTPM
UbuntuでもサポートしているTPMデバイスが見つかれば
PCR0:BIOSイメージのハッシュ $ cat /sys/class/tpm/tpm0/pcr-sha256/0 49D8970927F120B277A109FE384C7A88C88261FD730AE744411B749EFDC3D397 イベントログの表示 $ sudo apt install tpm2-tools $ sudo tpm2 eventlog /sys/kernel/security/tpm0/binary_bios_measurements (中略) - EventNum: 73 PCRIndex: 8 EventType: EV_IPL DigestCount: 2 Digests: - AlgorithmId: sha1 Digest: "6408dc256c8d2bca3bec26080b7b01b698d74b31" - AlgorithmId: sha256 Digest: "cfa1514d2f2cc22aa59a3276a89bd0cb866a486c52a1e525daa07931f82d2f5b" EventSize: 561 Event: String: |- grub_cmd: menuentry Ubuntu --class ubuntu --class gnu-linux --class gnu --class os --id gnulinux-simple-c2133eaa-03ff-4f18-b978-c12f55e5af23 { recordfail load_video gfxmode $linux_gfx_mode insmod gzio if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi insmod part_gpt insmod ext2 search --no-floppy --fs-uuid --set=root c2133eaa-03ff-4f18-b978-c12f55e5af23 linux /boot/vmlinuz-5.15.0-52-generic root=UUID=c2133eaa-03ff-4f18-b978-c12f55e5af23 ro intel_iommu=igfx_off quiet splash $vt_handoff initrd /boot/initrd.img-5.15.0-52-generic } (後略)
QEMUもまたTPMをサポートしており、このうちQEMU側でエミュレートしたTPM機能をvTPMと呼んでいます。LXDが使うのはこのvTPMで、その実体は
話が少しずれてしまいましたが、これでWindows 11マシンの準備は整いました。あとは次のコマンドで仮想マシンを起動し、手順に従ってインストール処理を行うだけです。
$ lxc start win11 --console=vga
起動直後はISOイメージから起動するため、ウィンドウが表示されたらすぐにカーソルを合わせて、何回かエンターキーを押してください。もしいつまでたってもlxc stop -f win11
」lxc start win11 --console=vga
」
ちなみに第679回の頃は、インストーラーの再起動処理によっては、SPICEクライントがゾンビプロセスとして残ってしまう問題がありましたが、現在は解消済みです。SPICEクライアントが勝手に終了したらおそらくWindowsが再起動しただけなので、次のコマンドを使って再接続してください。
$ lxc console win11 --type=vga
インストールが完了したら、セキュリティアップデート等の対応を行うと良いでしょう。シャットダウンするタイミングがあれば、シャットダウン後にインストーラーを取り外しておくと、起動時間がはやくなります。
$ lxc config device remove win11 iso
また、インストール時はvirt-viewrのようなSPICEクライントが必要ですが、インストール後でなおかつProエディションであれば、第679回のようにRDPを使うという手もあります。Windowsの設定アプリの
RDPを使う場合、Windowsインスタンスの起動は--console=vga
」
$ lxc start win11
WSLのインストールとUbuntu 22.04 LTSの有効化
第680回ではWSLのインストール手順としていろいろコマンドを実行しましたが、現在では管理者権限でターミナルを立ち上げて次のコマンドを実行するだけになりました。
> wsl --install
あとは勝手に必要な設定を行ってくれるので、
現時点でWSLをインストールするとUbuntu 20.wsl --install
」
Ubuntu 22.
ごく一部のエスパーではない読者向けに、簡単なコメントも残しておきます。
基本的に右下のボタンが
冒頭の説明は
上の入力欄は自動マウントするパスです。設定の変更は必要ありません。次の入力欄はマウント時のオプションです。こちらもそのままでかまいません。
チェック欄は上が
これでWSLの準備は完了しました。
WSLgを試してみる
この時点でGUIアプリケーションを普通に起動できます。好きなアプリケーションをインストールして、起動すると良いでしょう。たとえばせっかくWindowsをインストールしたのだから、Windowsの標準ウェブブラウザーであるMicrosoft Edgeを使ってみたいですよね!
幸い、EdgeはLinux版も提供されています。インストーラーを直接ダウンロードしてもいいのですが、CLIでの操作もありますので、試しにこの方法でWSLにインストールしてみましょう。
$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg $ sudo install -o root -g root -m 644 microsoft.gpg /usr/share/keyrings/ $ sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge.list' $ sudo rm microsoft.gpg $ sudo apt update $ sudo apt install microsoft-edge-stable
あとはWSLから
systemdの有効化とLXDの起動
2022年9月に、Microsoftから
WSLのバージョン0.
> wsl --version WSL バージョン: 0.70.0.0 カーネル バージョン: 5.15.68.1 WSLg バージョン: 1.0.45 MSRDC バージョン: 1.2.3575 Direct3D バージョン: 1.606.4 DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp Windowsバージョン: 10.0.22621.525
この状態でUbuntuを起動し、/etc/
を次のように書き換えます。
[boot] systemd=true
たとえばsudo nano /etc/
」wsl -t Ubuntu-22.
」wsl --shutdown
」
もう一度Ubuntu 22.
$ sudo ls -l /proc/1/exe lrwxrwxrwx 1 root root 0 10月 23 12:46 /proc/1/exe -> /usr/lib/systemd/systemd $ systemd-analyze blame --no-pager | head 6.498s snap.lxd.activate.service 3.432s snapd.service 1.090s dev-sdc.device 711ms networkd-dispatcher.service 371ms systemd-networkd.service 349ms systemd-logind.service 306ms systemd-resolved.service 306ms snapd.seeded.service 295ms udisks2.service 275ms ModemManager.service
systemdが動くと、snapパッケージが使えるようになります。snapパッケージが使えると、かんたんにLXDを動かせます。つまりLXDで起動したWindowsの中のWSL上で、さらにLXDが動かせるわけです。実はUbuntu 22.
LXDの初期化 $ sudo lxd init --auto コンテナ版のUbuntu 20.04 LTSを起動 $ lxc launch ubuntu:20.04 focal Creating focal Starting focal $ lxc shell focal カーネルはWSL側のものが使われている root@focal:~# uname -a Linux focal 5.15.68.1-microsoft-standard-WSL2 #1 SMP Mon Sep 19 19:14:52 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux ユーザーランドはUbuntu 20.04 LTSになっている root@focal:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.5 LTS Release: 20.04 Codename: focal root@focal:~# exit logout 仮想マシン版のUbuntu 20.04 LTSを起動 $ lxc launch ubuntu:20.04 focalvm --vm Creating focalvm Error: Failed instance creation: Failed creating instance record: Instance type "virtual-machine" is not supported on this server: vhost_vsock kernel module not loaded
残念ながら仮想マシンインスタンスを起動できないようです。
systemd機能はまだ少し不安定なようで、sshサービスも起動したり起動しなかったりしている雰囲気です。また、snapdも有効化直後はそれなりに動いていたような気がするのですが、一度再起動すると