Ubuntu Weekly Recipe

第680回 LXDコンテナ上のWindowsでWSL環境を整える

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

第679回ではLXD/VMの上にWindows 10をインストールしました。そのWindowsにおいて,本連載の読者層の多くがインストールしたくなるキラーアプリで,さらにUbuntuでは使えないアプリと言えばなんでしょう。そう,WSL(Windows Subsystem for Linux)ですね。 今回は家でも仕事場でもWindowsマシンが存在しないが故に,タイムラインのWSL談義にまったくついていけない人に向けて,LXDコンテナ上のWindowsでWSL2を楽しむ方法をお伝えします。

その行為に意味はあるのか

第679回の話をまとめると次のとおりです。

  • LXDは3.9から仮想マシンインスタンスに対応した※1
  • LXDは4.7から簡単にVGAコンソールを表示できるようになった
  • distrobuilderを使えばLXD用のWindowsインストーラーを簡単に作れる
  • これらを組み合わせると,LXD/仮想マシン上にWindowsをインストールできる
※1
「Kata Container」「Hyper-Vコンテナ」なんて単語があるように,仮想マシンも「隔離環境」と考えると広義の「システムコンテナ」と言えます。よって仮想マシンであってもLXDが作るインスタンスと考えれば「LXDコンテナ」と言えなくもありません。逆に狭義のコンテナはOSの機能に拠って立つため「OSレベルの仮想化」と表現することがあるようです。

一度Windowsをインストールしてしまえば,あとは各自の好きなソフトウェアをインストールすればOKです。ただしインストールしただけでは次の制約が存在します。

  • 3Dアクセラレーション無効:つまり3Dゲーム等は期待できません。VirGLもWindowsでは未対応なのでLXD側の設定でGPUパススルーなどを別途検討する必要があります。
  • 音声が使えない:仮想マシン上にはオーディオデバイスがありません。よってWebミーティング等ができません。これについてはRDPを使うことで解決できる可能性があります。
  • USBデバイスが使えない:Webカメラを含むUSBデバイスが使えません。LXDのUSBパススルーやRDPもUSBリダイレクトで解決できる可能性があります。
  • 一部のネットワークサービスが使えない:LXDのブリッジインターフェース経由の通信なので,Windowsの外とのLAN通信に制約があります。LXD側の設定で解決できます。

だいたいLXDかRemmina/RDPの設定で片付きそうな雰囲気ではあるものの,これらが使えなくても十分に価値のあるアプリケーションもたくさんあります。その最たる例が,冒頭でもお伝えしたWindows Subsystem for Linux(WSL)です。

本連載の読者であれば,⁠WSLとはなんぞや」という点については説明するまでもないでしょう。簡単に言うと「Microsoftが作ったWindows上で動くUbuntuのCLI環境」です。

正式にアナウンスされたのは2016年3月末のことUbuntu Weekly Topics 2016年4月1日号⁠。当時は「Bash on Windows」とも呼ばれていました。⁠Windows Subsystem for Linux(WSL⁠⁠」と呼ばれるLinux向けバイナリをWindows上で動かすサブシステムが用意され,そのサブシステムを利用してBashとその周辺ツールをUbuntuベースで構築しました,というものです。その後,機能の拡充に伴いWSLが正式名称となり,正式なリリースとバージョンアップを経て,現在では開発者を中心に広く使われるツールとなりました。

WSLの一番のポイントはMicrosoft製であることです。サードパーティのアプリケーションを追加でインストールする必要はありません。環境の構築方法も何ステップ化で済む簡単なもので,さらに将来的にはもっと楽になる見込みです※2⁠。現在はCLIのツールを動かすことがメインではあるものの,開発版ではGUIアプリケーションのサポート(WSLg)も進んでいます。

※2
Windows Insider Programに参加した環境では,WSLのセットアップ方法がwsl --installを実行して再起動するだけになるようです。

ちなみにたとえばWSL2の場合,技術的にはHyper-Vの上で動いている軽量Linux環境でしかありません。⁠Ubuntu以外も使いたい」というユーザーは多く存在するため,WSL1/WSL2ともに現在ではUbuntuに限らず,さまざまなディストリビューションのイメージが公開されています。

WSL2のインストール

いろいろ御託を並べたものの,WSL2のインストール自体はMicrosoftの公式ドキュメントも含めていろんな媒体で紹介されているため,そこまで困ることはないでしょう。たとえばSoftware Designでも2021年7月号では,特別企画として「WSL 2本格入門」が掲載されています。

Windows Insider Programに参加した環境であれば,管理者権限でコマンドプロンプトやPowerShellを開きwsl --installを実行して再起動するだけのようです。今回は上記のドキュメントに従って,手動インストールを試してみましょう。

まずはCPUの仮想化支援技術を有効化しておきます。IntelならVT-xとか,AMDならAMD-Vとか言われるあれです。通常であれば「BIOSメニューで確認しましょう」になるのですが,今回はLXD上のWinodwsです。よってまずはホスト側の仮想化支援技術の有効化を確認したのちに,Nested KVMが有効化されているかを確認します。

$ egrep -m1 -w '^flags*:' /proc/cpuinfo | egrep -wo '(vmx|svm)'
vmx

上記コマンドでvmxないしsmxが表示されるなら仮想化支援技術は有効化されています。⁠vmx」の場合はIntel CPUであるため,次の方法でNested KVMが有効化されているか確認できます。

$ cat /sys/module/kvm_intel/parameters/nested
Y

Yなら有効化,Nなら無効化です。⁠smx」と表示された場合はAMD CPUなので上記ファイルパスのkvm_intelkvm_amdに置き換えてください。

Ubuntuの19.04以降の公式のカーネルを使っているのであれば,Nested KVMは標準で有効化されています。18.04などで有効化したい場合は第609回のLXDからコンテナではなく仮想マシンを起動するも参照してください。

無事にNested KVMが起動していたら,Windowsのタスクマネージャーからも次のように確認できます。

図1 詳細表示のパフォーマンスタブにあるCPUが「仮想マシン:はい」になっていたらOK

図1

あとはMicrosoftのドキュメントに従うだけです。スタートメニューを右クリックし「Windows PowerShell(管理者)」を選択します。次のコマンドで,WSLと仮想マシンプラットフォームを有効化します。

> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

この状態で一度再起動して,上記の設定を反映します。次に「Linuxカーネル更新プログラムパッケージ」をダウンロードしてインストールします。URLは上記ドキュメントを参照してください。

もしPowerShellで実行したいならこんな感じです。今回は管理者版のシェルである必要はありません。

> cd $env:TEMP
> wget -UseBasicParsing https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi -OutFile wsl_update_x63.msi
> .\wsl_update_x64.msi
> rm .\wsl_update_x64.msi

あとは画面の支持に従ってNextを押していけば設定完了となります。最後にWSLを標準で使うバージョンをWSL2に変更しておきましょう。

> wsl --set-default-version 2

次にWSLにUbuntuをインストールします。左下の検索ウィンドウから「Microsoft Store」を検索して起動し,右上の検索ウィンドウで「ubuntu」を検索します。表示されるアイテムのうち「Ubuntu」「Ubuntu 20.04 LTS」を選択してください。⁠Ubuntu」「インストール時点での推奨リリース」が選択されるため現時点でこれらは同じものを意味します。

図2 Microsoft Storeで「ubuntu」を検索した結果

図2

「入手」ボタンを押してしばらく待てばインストール完了です。⁠起動」ボタンを押すと初回セットアップが行われます。ユーザー名とパスワードを設定してください。

図3 Ubuntu環境を構築できた

図3

ついでにMicrosoft Storeから「Windows Terminal」もインストールしておきましょう。

著者プロフィール

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

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