WSL2(Ubuntu)をインストール

2022/05/05に公開

概要

Windows上でLinuxを実行できるWSL2がWindows10 May 2020(バージョン2004)でリリースされた。WSL1の時はちょっとインストール手順が面倒だったようだが、WSL2では簡単になっている。

デフォルト設定ではUbuntuがインストールされる。
Microsoft Storeで公開されている他のディストリビューションだったり、公開されていないディストリビューション(CentOS等)をインストールすることもできるが、ひとまず今回はそのままUbuntuをインストールする。

目次

1. 環境

1.1. WSL2に必要な要件

  • Windows10 バージョン2004以降(ビルド19041以降)

1.2. 自分の環境

  • Windows10 Home 21H2

2. インストール

  1. 管理者権限でPowerShellを起動する。

  2. wsl --installでインストールが始まる。自分の環境では4分くらいかかった(Ubuntuインストールの部分が長い)。

  1. システムを再起動する必要がありますと書いてあったのでPCを再起動する。

  2. 多分再起動が完了したら、Ubuntuをインストールしてます的なコンソールウィンドウが開くはず。数分待つ。

  3. インストールが完了したらデフォルトのアカウントを作れと表示される(rootではないが管理者ユーザーのよう)。
    ユーザー名を入力する(Windowsのログインユーザー名と同じにする必要はない)。

  4. 今度はパスワードを入力する。入力しても何も表示されないが入力されている。

  5. もう1回!もう1回!と煽られるのでもう1回入力する。

  6. ああああああああうまくいった(自分のWindowsのデバイス名がInspironなので@Inspironと表示されている)。

3. 使い方

3.1. 起動

  1. 普通にWindows内のアプリ的にUbuntuが追加されている。スタートメニューから起動。

  2. 起動するとデフォルトユーザーで勝手にログインする。

3.2. rootユーザー

3.2.1. Ubuntu内でのrootユーザー

Ubuntu内でのrootユーザーはパスワードがわからない。なのでrootユーザーを使いたい場合はパスワードを設定する必要がある。

  1. sudo passwd rootを実行する。
  2. 現在のユーザーのパスワードを入力する。
  3. rootユーザーの新しいパスワードを求められるので入力する。
  4. パスワードの再確認を求められるのでもう一回パスワードを入力する。
  5. パスワード変更が完了する。次からはsuでパスワードを入力してrootユーザーに変更できる。

3.2.2. PowerShellからwslコマンドでrootユーザー

Ubuntuにログインせずとも、PowerShellからwslコマンドを使ってパスワード無しでrootユーザーを使うことができる。
これならデフォルトユーザーのパスワードを忘れた時などでも対応できる。

  1. PowerShellを起動しwsl -u rootというコマンドを実行する。
  2. パスワードは求められずにrootユーザーになれる。

3.3. SSH接続

一応SSH接続できるのだが、下記制限というか仕様があるのでちょっと使いにくい。

  • LinuxをシャットダウンするとLinuxのIPが変わる(アプリのウィンドウを閉じただけではシャットダウンされていない)
  • SSHサーバー(sshdサービス)が自動起動しない

上記2つとも解決する手段は調べると出てくるが、ひとまず手動で対応する手順を説明する。
※基本的に以下手順はroot権限で実行する

  1. /etc/ssh/sshd_configを開き、PasswordAuthenticationをyesにする。

  2. パスワード認証だとしても、ひとまずホスト鍵が必要なので作る。
    ssh-keygen -A

  3. service ssh startでSSHサーバーを起動する。service ssh statusで確認してrunningになっていればOK。

  4. ip addrでSSH接続先IPアドレスを確認する。環境によって変わるかもしれないが、自分の環境ではeth0のIPアドレス。

  5. Windows側のターミナルソフトで、確認したIPに接続する。この例ではTeraTermで接続した。

3.4. WSLのシャットダウン

起動したLinuxのアプリを閉じる(ウィンドウを閉じる)だけではWSLおよびLinuxが終了しているわけではない。完全に終了するにはPowerShellからシャットダウンさせる必要がある。

  • WSLおよび全ディストリビューションのシャットダウン
    wsl --shutdown
  • 指定したディストリビューションのシャットダウン
    wsl --terminate <ディストリビューションの名前>

3.5. ディストリビューションのステータス確認

PowerShellで下記コマンドを実行することで、ディストリビューションのステータスを確認することができる。
wsl -l -v

3.6. アンインストールやバックアップ等

アンインストール/再インストール、バックアップ/リストア(インポート)など。

3.6.1. バックアップ(エクスポート)

インストール済みディストリビューションをtarとしてエクスポートすることができる。
wsl --export <ディストリビューション名> <パス+ファイル名>

3.6.2. リストア(インポート)

下記コマンドでtarファイルからリストアすることができる。ただし同じディストリビューション名がインストール済みだと失敗するので、その場合は事前にアンインストールしておく必要がある。
wsl --import <ディストリビューション名> <インポートする場所> <tarファイルの場所>


※%userprofile%\AppData\local\Packages\は普通にインストールした際にディストリビューションが格納される場所。
上記の例ではその場所にUbuntu-importというフォルダを作り、そこにインポートした。

3.6.3. ディストリビューションのアンインストール

wsl --unregister <ディストリビューション名>
下記の例ではwsl -l -vでアンインストールされたことを確認している。

3.6.4. ディストリビューションの(再)インストール

wsl --install -d <ディストリビューション名>
ディストリビューション名はwsl -l -oで確認すると良い。

一度アンインストールしたUbuntuを再インストールすると下記のようになる。

  1. アンインストールしたはずだが、既にインストールされている状態みたい。unregisterだと登録解除されただけの扱いなんかな。

  2. 最初にインストールした時のように、ユーザー名指定から始まる。

4. WSLに関する参考情報

4.1. WSL1とWSL2の違い

WSL2はWSL1の上位互換なわけではなくて、ちょっと別物と考えた方がいい。まあ改良版ではあるけども。
(WSL2リリース後もWSL1は継続サポートされている。)

項目 WSL1 WSL2 備考
Linuxカーネル × WSL2ではLinuxカーネルを使ってるそうで、本物のLinuxと互換性が高いとかなんとか。例えばDocker動かせるとか。
方式 わからん 仮想マシン WSL2では仮想マシン方式らしい。でもHyper-Vとは少し違うようで(Hyper-Vアーキテクチャではあるようだが)、軽量ユーティリティVMと呼ばれているらしい。
IPアドレス ホストWindowsと同じ ホストWindowsと別 WSL2だと仮想マシン方式だからIPはそりゃ変わる。
ホストWindowsへのファイルアクセス WSL1の方が高速なよう。WSL2だと仮想マシン方式だから仕方ない。
システム負荷 △? WSL1の方が仮想マシン使ってない分、負荷が低いそうな。でもWSL2の方が軽いみたいな話もどこかで見たような。
他仮想マシンソフトとの競合 WSL2だと仮想マシン方式のためか、少し前はVMwareとVirtualBoxと競合してたらしい。でもVMwareとVirtualBoxの途中のバージョンからWSL2と競合しないように対応したようだ。

こう見るとWSL1の方があたかも良さそうに見えるけど、基本はWSL2の方がいい。
Linuxカーネルを使っているというのが大きい。

4.2. WSL1はProエディションじゃないと使えない?なんてことはない。

「WSL2はWindows10 Homeエディションで動く」っていう情報をよく目にしていたから
WSL1はProエディションでしか動かないのかと思ってたけど「Proエディションじゃなきゃ動かない」なんて情報は特に見つからなかった。
逆にHomeエディションでWSL1を動かしている情報は見つかる。

最初の
「WSL2はWin10 Homeエディションでも使える」
というのは正しくは
「WSL2はHyper-Vのアーキテクチャで動くが、Hyper-Vが使えないHomeエディションでも使える」
っていうことな気がする。

4.3. WSL2のUbuntuは初期状態ではsystemctlが使えない

systemctlを実行しようとすると下記メッセージが表示されて使えない。
systemdがPID1で実行されていないからということらしい。(WSLのinitはMicrosoftの独自のものらしい)

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

systemctlを使えるようにする方法は世の中的にはあるようなので、必要であれば調べると良し。

4.4. WSLはインフラエンジニア向きではない

上記systemctlが使えなかったりと、インフラサーバーとしてWSL(のLinux)を使うのは向いてないよう。
あくまで開発者用として、Windows上でLinuxのBashを使いたいとか、Dockerを使いたいとかそんな用途が主のよう。
下記サイトでも解説されています。
https://bftnagoya.hateblo.jp/entry/2021/02/25/184818

4.5. CentOSをインストール

Microsoft Storeに公式のCentOSは無い(非公式のはあるが)。
しかしCentOSのプロジェクトの方でWSL用のファイルが公開されており、それを使ってWSLにインストールすることができる。
下記が参考になります。
https://www.geekfeed.co.jp/geekblog/install_centos8_on_wsl2_for_free

5. 参考サイト

5.1. Microsoft公式ドキュメント

基本的にこれ見れば大体なんとかなるんじゃなかろうか。
https://docs.microsoft.com/ja-jp/windows/wsl/

5.2. @IT

https://atmarkit.itmedia.co.jp/ait/articles/2201/28/news029.html

Discussion