Ubuntu Weekly Recipe

第679回 LXD上にWindowsをインストールする

この記事を読むのに必要な時間:およそ 6 分

システムコンテナの管理ソフトウェアであるLXDは3.19から仮想マシンインスタンスもサポートするようになりました。つまりホストのカーネルと共有するコンテナだけでなく,QEMUを利用した仮想マシンも起動できるようになったのです。 この機能により,Linux以外のイメージであってもLXDのインターフェースを利用して管理できるようになりました。 今回はLXDを使って「Windowsインスタンス」を起動してみましょう。

WindowsをQEMUで動かすと言うこと

第609回のLXDからコンテナではなく仮想マシンを起動するでも紹介したように,LXD 3.19から仮想マシンインスタンスのサポートも開始しました※1⁠。 とはいえ直後のLTSリリースであるLXD 4.0では「仮想マシンも使える」程度で「コンテナ版でしか使えない」機能も多くありました。 しかしながらフィーチャーリリースである4.x系ではSR-IOVやUSBパススルー,VGAコンソールなどのサポートを拡充していき, 現在では「コンテナとほぼ同じ機能を備えている」状態になっています。

※1
「Kata Container」「Hyper-Vコンテナ」なんて単語があるように,仮想マシンも「隔離環境」と考えると広義の「システムコンテナ」と言えます。よってLXDが「コンテナ管理ソフトウェア」という扱いであることには変わりないとも言えます。逆に狭義のコンテナはOSの機能によって立つため「OSレベルの仮想化」と表現することがあるようです。

仮想マシンが使えるということは,ホストのアーキテクチャーやカーネルに密接に縛られる必要がないということです。 つまりLinux以外のOSも動かせる可能性があります。

ところで前回はdistrobuilderでLXD/LXC用のカスタムイメージを作成すると題して,LXD/LXC用のベースイメージを作る方法を紹介しています。 その記事の中に,こんな気になるオプションがあることに気づいた読者もいるかもしれません。

repack-windows:WindowsのダウンロードISOイメージを,VM版のLXDのインストールイメージに作り変えます

このオプションは何かと言うと,「仮想マシン版LXDで使えるWindows自体のインストールISOファイル」を作るオプションです。

MicrosoftはWindowsのインストールイメージを配布しています。つまりダウンロードしたイメージとMicrosoft Storeで購入したデジタルライセンス(プロダクションキー)の組み合わせで,物理メディアがなくてもインストールできる環境が整っているのです。

しかしながら公式に配布しているイメージは,QEMU上で各種デバイスを効率良く動かすためのドライバー類が同梱されていません。具体的にはWindows VirtIO drivers(virtio-win)として開発されているドライバー群が必要になります。

それに対してFedoraではvirtio-winのバイナリをISOイメージで配布しています。そこでdistrobuilderの上記のオプションでは,そのISOイメージをダウンロードしWindowsのISOに同梱する形で再構築することで,最初からVirtIOを使えるインストーラーにしてしまおうというわけです。

よってまずはLXD向けのWindowsインストーラーを再構築しましょう。

あらかじめWindows 10のダウンロードページからISOイメージをダウンロードしておいてください。この時点ではまだMicrosoftアカウントやライセンスは不要です。今回はWindows 10の64ビット版の日本語エディションを使うことにします。サイズは5GB強あるため,ネットワーク・ストレージの容量等には注意してください。

次に前回同様,distrobuilderをインストールしておきます。 インストーラーの再構成を行うためには,別途他のツールも必要なのでそれも合わせてインストールしておきます。

$ sudo snap install distrobuilder --classic
$ sudo apt install libguestfs-tools wimtools

再構成は「ダウンロードしたISO」⁠再構成したISO」の順で指定します。マシンのスペックによってはそれなりの時間がかかります。

$ sudo distrobuilder repack-windows Win10_21H1_Japanese_x64.iso Win10_21H1_lxd.iso
INFO    Mounting Windows ISO
INFO    Downloading drivers ISO
INFO    Mounting driver ISO
INFO    Modifying WIM file      {"file": "boot.wim", "index": 2}
INFO    Modifying WIM file      {"file": "install.wim", "index": 1}
INFO    Modifying WIM file      {"file": "install.wim", "index": 2}
INFO    Modifying WIM file      {"file": "install.wim", "index": 3}
INFO    Modifying WIM file      {"file": "install.wim", "index": 4}
INFO    Modifying WIM file      {"file": "install.wim", "index": 5}
INFO    Generating new ISO

$ ls -sh1
合計 11G
5.4G Win10_21H1_Japanese_x64.iso
5.5G Win10_21H1_lxd.iso

これだけでインストーラーの準備は完了です。

Windowsインストール環境の準備

ここからはWindows用のLXDインストール環境を準備します。まずLXD 4.4以降が必要です。これはインストール時に必要なVGAコンソールを取得できるようになったのが,このバージョン以降だからです。Ubuntu 20.04 LTS等のプレインストールなLXDの場合,LXD 4.0.xになっているので適宜アップグレードしてください。また,ホストシステムはデスクトップ版のほうが確実です。サーバー版でもSSH経由のX転送等でVGAコンソールを起動できるようではあるものの,いくつかの報告を見ていると余計なトラブルにハマりやすい傾向があるようです。

今回は最新の4.17で確認した手順を紹介します。

$ lxc --version
4.17

LXDの用意ができたら,Windows 10のシステム要件を確認しておきましょう。

  • 1GHz以上のCPU
  • 2GB以上のメモリー
  • 32GB以上のストレージ
  • DirectX 9以上に対応したグラフィックスカード
  • 800x600以上のディスプレイ
  • インターネット接続

このうちLXDでインスタンスを作る場合に注意しなければならないのが,メモリーとストレージです。これはインスタンス作成時に指定することにします。またインスタンスは--emptyオプションを使って「空の状態」で初期化します。

$ lxc init win10 --empty --vm -c security.secureboot=false \
    -c limits.cpu=2 -c limits.memory=8GiB
Creating win10

$ lxc config device override win10 root size=50GiB
Device root overridden for win10

今回はCPUを2コア,メモリーを8GiB,ストレージを50GiBにしてみました。当然ホストシステムはこれと同等以上の容量が必要です。

次に先ほど作成したインストーラーをディスクイメージとして追加しておきます。

$ lxc config device add win10 iso disk \
  source=$PWD/Win10_21H1_lxd.iso boot.priority=10
Device iso added to win10

上記ではコマンド実行時のディレクトリにISOファイルがあることになっていますが,フルパスで記述さえすればどこにあってもかまいません。boot.priorityは起動優先度で,高いほうが先に起動します。

また,SPICE対応のリモートデスクトップクライアントを未インストールの場合はインストールしておきます。仮想マシンへWindowsインストール時にVGAコンソールが必要になります。LXDの場合,remote-viewerコマンドもしくはspicyコマンドがインストールされていたら,それを起動します。よってremote-viewerコマンドを提供するvirt-viewerパッケージをインストールしておきましょう。

$ sudo apt install virt-viewer

さらにLXDがvirt-viewerがインストールされていることを把握できるように,上記インストール後は一度LXDデーモンを再起動しておきます。

$ sudo systemctl reload snap.lxd.daemon.service

あとはインストール時に利用する,WindowsのプロダクションキーとMicrosoftアカウントを用意しておいてください。Home/Proはどちらでもかまいませんが,LXDにインストールするならリモートデスクトップが使えたほうが便利なため,Proにすることをおすすめします※2⁠。

※2
その他の差異はMicrosoftによる比較表を参照してください。ちなみにこのページにはHomeエディションだと公式のリモートデスクトップ機能が使えない旨の記載はないようです。

Microsoft Storeでデジタルライセンスを購入していたら,Microsoftアカウントはすでにあるはずです。もし未作成の場合も,作成しておいたほうが便利です。これはMicrosoftアカウントをプロダクションキーに紐付けておくと再ライセンスの認証が楽になるためです。

LXDにインストールする場合は,何かにつけクリーンインストールを繰り返したくなることがあるかもしれませんので,そのたびに電話認証が発生していては手間がかかりますしね。

ここまででWindowsをインストールする環境が整いました。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。