砂漠の旅人(たびと)

UNIX / MS-DOS 時代から電脳砂漠を旅しています

【Hyper-V対応】Windows 11にWSL2/Linuxをインストールする

こんにちは、たびとです。

今回は、Windows 11インストール後にWSL2/Linux環境を作ってみたところ、驚くほど単になっていました。 ついでに、Hyper-VWindows 11 でも WSL2/Linux を動作させてみました。

この記事の対象者

  • Windows11 または Windows 10 バージョン 2004 以降で、WSL2/Ubuntu をコマンド一発でインストールしたい方。
  • Hyper-V の Windows11 仮想マシン上で、WSL2/Ubuntu を使いたい方
  • プロキシ環境下において、WSL2/Ubuntu をインストールして使ってみたい方

Hyper-V利用時の前準備

Hyper-Vの環境を作りたい方は、以前の記事を参考にしてください。

sabakunotabito.hatenablog.com

sabakunotabito.hatenablog.com

WSL2 は Hyper-V の機能を利用している

WSL2/Linuxをインストールした後で、Hyper-V マネージャを起動し、 仮想スイッチマネージャを見るとWSLという名前の仮想スイッチが追加されています。

仮想スイッチにWSLが追加された画像
仮想スイッチにWSLが追加された

このため、仮想マシンでWSL2を動作させるには、 Hyper-V入れ子になっても正常に動作するように、 適切な設定が必要となります。

入れ子構造を許可する

仮想マシンを停止させてから、PowerShellを管理者権限で起動し、 Get-VM コマンドを実行します。 実行結果のNameに表示されるのが仮想マシンの名前です。 仮想マシンの名前に空白が入っている場合、ダブルクォートで囲んでください。

PS C:\> Get-VM

Name               State   CPUUsage(%) MemoryAssigned(M) Uptime           Status     Version
----               -----   ----------- ----------------- ------           ------     -------
VMname             Off     0           0                 00:00:00         正常稼働中 10.0

Hyper-V環境の入れ子を有効にします。

PS C:\> Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true

同様にネットワークも対応させます。

PS C:\> Get-VMNetworkAdapter -VMName <VMName> | Set-VMNetworkAdapter -MacAddressSpoofing On

以上で設定は終了です。仮想マシンを起動させてください。

入れ子構造が許可されていないとき

入れ子を許可しない、または間違えると、WSL2/Linuxの初期(アカウント)設定のとき、 以下のエラーが表示されます。

初期設定エラー画面
初期設定エラー

このエラーが表示された場合、仮想マシンを停止し、前述の手順を実施してください。

WSL2 をインストールする

Windows 11 は、wsl —install コマンド一発で WSL2/Linux をインストールできます。 Windows 10 バージョン2004 以降も同様にインストール可能です。

PowerShell を管理者権限で起動し、コマンドを入力します。

PS C:\> wsl --install

これで完了です。 再起動の指示が表示されるまで、しばらく待ちます。

インストール中: 仮想マシン プラットフォーム
仮想マシン プラットフォーム はインストールされました。
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム はインストールされました。
ダウンロード中: WSL カーネル
インストール中: WSL カーネル
WSL カーネル はインストールされました。
ダウンロード中: GUI アプリ サポート
インストール中: GUI アプリ サポート
GUI アプリ サポート はインストールされました。
ダウンロード中: Ubuntu
要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。
PS C:\>

コマンドを実行後、WSL2/Linux環境に必要なものがインストールされて、 Ubuntu もインストールされます。 この Ubuntu は、表示名も Ubuntsu ですが、 Windows Store で確認すると、実際はUbuntu 20.04 でした。

Windows を再起動すると、Ubuntu の初期設定が始まるので、 ユーザ名とパスワードを入力してください。

Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: ユーザ名
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.10.16.3-microsoft-standard-WSL2 x86_64)
~ 省略 ~

この後、PowerShell を起動し、wsl -l -v コマンドを実行すると、 WSL2 となっていることが確認できます。

PS C:\> wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Running         2

エクスプローラーに Linux アイコンが追加される

Windows 11 から WSL2/Linux をインストールすると、 エクスプローラーに Linux アイコンが表示されて、 インストールした Linux ディストリビューションのフォルダへアクセスすることができます。

エクスプローラーに表示された Linux アイコンとフォルダの画面
エクスプローラーに表示された Linux アイコンとフォルダ

Linux アイコンと Ubuntu フォルダが追加されて、 エクスプローラーからアクセスすることが可能となります。

ご存じの方も多いと思いますが、Windows 10 の場合、 エクスプローラーのアドレスに \\wsl$\Ubuntu を指定します。

Ubuntu のアカウント設定後にやること

アカウントの設定が終わったら、プロキシ環境の場合は、 プロキシの設定を最初に実施してください。 その後、Ubuntu を最新の状態になるようにアップデートを実施してください。

プロキシ環境の場合はプロキシを設定する

aptパッケージ管理のプロキシ設定として、新規に apt.conf を作成します。

$ sudo vi /etc/apt/apt.conf
Acquire::http::Proxy "http://<user_id>:<password>@<host>:<port>";
Acquire::https::Proxy "http://<user_id>:<password>@<host>:<port>";

wget のプロキシを設定します。 バックアップ後、エディタで wgetrc ファイルを開きます。

$ sudo cp -p /etc/wgetrc /etc/wgetrc.org
$ sudo vi /etc/wgetrc

プロキシ設定を編集します。

# You can set the default proxies for Wget to use for http, https, and ftp.
# They will override the value in the environment.
https_proxy = http://<user_id>:<password>@<host>:<port>
http_proxy = http://<user_id>:<password>@<host>:<port>
ftp_proxy = http://<user_id>:<password>@<host>:<port>

最後に、Ubuntu 起動時に環境変数にプロキシが設定されるようにします。 ここでは、/etc/profile.d 配下に set_env.sh という名のシェルスクリプトを作成します。 プロキシだけでなく、その他に追加すべき環境変数があれば、ここに追加します。 (ここは好みの分かれる箇所なので、自分の好きな方法でどうぞ)

$ sudo vi /etc/profile.d/set_env.sh

エディタで開いたらプロキシを定義します。

# Set Proxy
export http_proxy=http://<user_id>:<password>@<host>:<port>
export https_proxy=${http_proxy}
export HTTP_PROXY=${http_proxy}
export HTTPS_PROXY=${http_proxy}

# Set No-Proxy
export no_proxy="127.0.0.1,localhost"
export NO_PROXY=${no_proxy}

Ubuntu のウィンドウを閉じて、再度開きます。 printenv コマンドで、プロキシが環境変数に定義されていることを確認します。

$ printenv | grep -i proxy
HTTPS_PROXY=http://<user_id>:<password>@<host>:<port>
HTTP_PROXY=http://<user_id>:<password>@<host>:<port>
NO_PROXY=127.0.0.1,localhost
http_proxy=http://<user_id>:<password>@<host>:<port>
https_proxy=http://<user_id>:<password>@<host>:<port>
no_proxy=127.0.0.1,localhost

Ubuntu のアップデート

Ubuntu のパッケージをアップデートします。 プロキシの設定がある場合、プロキシを先に設定してください。

$ sudo apt update
$ sudo apt upgrade

日本語化

コンソールのメッセージおよび man コマンドの内容を日本語表示に変更します (man ページは日本語のページがある場合のみ)。 コマンド実行後は、Ubuntu画面を閉じて、再度開くと、日本語表示が有効になります。

$ sudo apt update
$ sudo apt install -y language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF-8
$ sudo apt install -y manpages-ja manpages-ja-dev
$ exit

あると便利なツール

ifconfig など、現在のLinuxでは非推奨のネットワーク管理ツールですが、 会社で使っていてるなど、同様のコマンドを使いたい場合、 net-tools パッケージをインストールしてください。

$ sudo apt install -y net-tools

日本語の文字コード変換に nkf コマンドを使っている場合、 nkf パッケージをインストールします。

$ sudo apt install -y nkf

JSON形式のデータをカラー表示・データ抽出したい場合、 jq パッケージをインストールします。

$ sudo apt install -y jq

オーディオ・ビデオを扱う場合、 mediainfo, ffmpeg をインストールします。

$ sudo apt install -y mediainfo ffmpeg

まとめ

今回は、Windows 11にWSL2/Linux をコマンド一発でインストールする方法を紹介しました。

この後、Dockerを導入したい人は、以前の記事も参考にしてください。

sabakunotabito.hatenablog.com

最後に参考サイトを掲載しておきます。

では、皆さん、よい旅を。

参考サイト