これは2022年6月の情報です。WSL周辺の環境は日々変化しています。この記事の中では環境に応じて手順を変更していますが、最新の情報はマイクロソフトの公式ページなどで確認してください。
はじめに
プログラミングやアプリ開発でLinux環境が必要になることは多いと思います。Windows 11 のWSL(Windows Subsystem for Linux)を使って Ubuntu または Debian をインストールする方法を説明します。WSLにはWSL1とWSL2があります。今はWSL2が主流です。この記事では「WSL」はWSL2を意味するものとします。
Windows 10 はWSLをインストールできる条件が厳しく(Windos 10 Home にはインストールでない等)異なる手順が必要になる場合があります。Macでは “ターミナル” が利用できますのでこの記事の対象外です。
- ストレージの空き容量について
WSLはCドライブにインストールされますが、一定のストレージ(ディスクサイズ)を消費します。パソコン全体の安定動作を考えると、Cドライブの残り容量が20GB程度あったほうが良いでしょう。残り容量が少ない場合はWSLのインストールは推奨しません。
WSLのインストールと起動方法
(1) [コントロールパネル]→[プログラム]→[プログラムと機能]→[Windowsの機能の有効化または無効化]で、[Linux 用 Windows サブシステム] と、[仮想マシン プラットフォーム] をチェックする。コントロールパネルの場所がわからない場合はスタートメニューの [検索] から検索してください。下のスクリーンショットでは [Linux 用 Windows サブシステム] しか表示されていませんが、スクロールバーで下の方を表示すると [仮想マシン プラットフォーム] があります。

(2) Microsoft Store で Windows Subsystem for Linux を入手してインストールしてください。

または、管理者権限でPowershellを起動し下記を実行する方法もありますが、Microsoft は将来的には Microsoft Store から入手する方法に一本化するとアナウンスしています。
|
1 |
wsl --install |
WSLのインストール手順はよく変わるので、詳しい情報は Microsoftのページ を参考にしてください。
(3) 次は Linux のディストリビューションをインストールします。Microsoft Store で “Ubuntu” あるいは “Debian” 等を入手してインストールしてください。”Ubuntu” の場合はバージョン名に “LTS” と付くのが安定版です。最も新しいメジャーバージョンの “LTS” 版が良いでしょう。


(4) スタートメニューの “Ubuntu〜” や “Debian” からそれぞれの環境を起動できます。ターミナルソフトはPowershellが標準です。Powershellの環境から “wsl” コマンドを実行するとWSLが起動します。しかし、WSLを普段使いするにはPowershellは機能不足です。Windows Terminal をインストールしておけば、プルダウンメニューからWSLのタブを開くことができます。また、VSCode に内蔵のターミナル機能も便利です。デフォルトでWSLが起動するようにも設定できます。
WSL(Ubuntu)の環境設定
WSLのインストールが終わったら、実際に使えるように環境設定が必要です。マイクロソフトの公式ページ WSL 開発環境を設定する を参考にしてください。
ここからは、Ubuntu 18.04のWSL上へのインストールと初期設定 を参考にさせていただいて、設定手順を具体的に示します。また、WSL以外にUbuntuをインストールした場合の手順も書き加えてありますので、コマンドを実行して変化がなくても気にせず先に進んでください。
WindowsとWSL(Ubuntuウインドウ)の間では Ctr+C、Ctr+V 等を使ったコピー&貼り付けができない場合があります。そのときは Ubuntu ウインドウのメニュー「編集」を経由して操作してください。
・WSLをインストールした直後はユーザーIDとパスワードの設定を求められます。どのように設定しても構いませんが、忘れてしまうトラブルを避けるため、普段使用するパソコンのID(ただし英語に限る)とパスワードを使うことを推奨します。
・WSLインストール直後にユーザーIDとパスワードの設定を行わなかった場合は、初期状態ではrootユーザーでログインしています。このままでは危険なので adduser コマンドでユーザーIDとパスワードを設定してください。ユーザーIDは英語の名前にしてください。パスワードは忘れないようにパソコンのログインパスワードと同じが良いでしょう。
|
1 2 3 |
$ adduser ユーザー名 (忘れないように) ID: xxxx (後々問題が出るので英語の名前にすること、日本語は不可) PW: xxxx (PCログインと同じにすれば便利) |
・もし登録したユーザーIDでsudoコマンドが使えなければ、そのユーザーIDをsudoグループに追加します。
|
1 |
$ sudo gpasswd -a ユーザー名 sudo |
・リポジトリを日本国内に変更する。必須ではありませんがコマンドの実行が早くなる効果があるそうです。今回はiijに設定します。
|
1 2 3 4 5 |
$ cd /etc/apt $ ls (sources.listというファイルがあるか確認) $ sudo sed -i.bak -e "s%http://archive.ubuntu.com/ubuntu/%http://ftp.iij.ad.jp/pub/linux/ubuntu/archive/%g" /etc/apt/sources.list $ ls (sources.listとsources.list.bakというファイルがあることを確認) $ diff sources.list.bak sources.list (日本のURLが含まれていればOK) |
・システムの更新を実行。
|
1 2 |
$ sudo apt update $ sudo apt upgrade -y |
※WSL2は、ここでこのようなエラーが出ることがあります。ping www.google.com とかが通らないのでDNSがおかしいとわかります。
|
1 2 3 4 |
Err:1 http://ftp.iij.ad.jp/pub/linux/ubuntu/archive focal InRelease Temporary failure resolving 'ftp.iij.ad.jp' Err:2 http://security.ubuntu.com/ubuntu focal-security InRelease Temporary failure resolving 'security.ubuntu.com' |
この原因については下のページで議論されており、Workaroundが存在します。
https://github.com/microsoft/WSL/issues/4285#issuecomment-522201021
https://gist.github.com/coltenkrauter/608cfe02319ce60facd76373249b8ca6
https://docs.microsoft.com/ja-jp/windows/wsl/troubleshooting
【Workaroundの手順】
対策のためには/etc/resolv.confを変更する必要があるのですが、WSLが起動するときにそのファイルを元に戻してしまうという問題があるので、まずその対策を行います。/etc/wsl.confというファイルを作って、WSLに対する設定を2行書き込みます。
|
1 2 3 4 5 |
1. ファイル /etc/wsl.conf を作ります。vimが使えなければnanoエディタでも構いません。 $ sudo vim /etc/wsl.conf 2. /etc/wsl.confに書き込む内容は次の2行です。 [network] generateResolvConf = false |
次に/etc/resolv.confを変更します。
|
1 2 3 4 5 6 7 8 9 |
3. 元の/etc/resolv.confがどうなっているか確認します。これはシンボリックリンクです。 $ ls -la /etc/resolv.conf lrwxrwxrwx 1 root root 20 Jun 23 6:00 /etc/resolv.conf -> /mnt/wsl/resolv.conf 4. /etc/resol.confを削除します。 $ sudo rm /etc/resolv.conf 5. /etc/resolv.confを作り直します。 $ sudo vim /etc/resolv.conf 内容は次の1行です。vimが使えなければnanoエディタを使っても構いません。 nameserver 8.8.8.8 |
2022年6月現在、以上の設定を行ってもWSLを再起動すると /etc/resolv.conf が消えてしまうという問題が発生しています。その対策のために次のコマンドを実行してください。
|
1 |
$ sudo chattr +i /etc/resolv.conf |
変更した/etc/resolv.confを保存したらすぐにネットワークが正常に動作するはずです。さきほど失敗したコマンドを改めて実行してください。
|
1 2 |
$ sudo apt update $ sudo apt upgrade -y |
※ここから正常時の手順の続きです。
・日本語マニュアルをインストールする。
|
1 |
$ sudo apt install -y language-pack-ja manpages-ja manpages-ja-dev |
・ロケールを設定。
|
1 |
$ sudo update-locale LANG=ja_JP.UTF8 |
・タイムゾーンを設定。
|
1 |
$ sudo dpkg-reconfigure tzdata |
・Windowsとのファイル共有を設定。
WSLでは /mnt/c にWindowsのC:ドライブがマウントされます。D:ドライブ等が存在する場合も同様です。
|
1 |
$ ls /mnt/c (WindowsのC:の内容が見えるはずです) |
このままでも良いのですが、例えばC:ドライブにappという名前の作業フォルダを作ったと仮定すると、Ubuntuのホームディレクトリにシンボリックリンクを作っておくと便利です。
|
1 2 |
$ cd ~ $ ln -s /mnt/c/app app |
以降、ホームディレクトリの下にappが見えるようになります。
・だいたい終わりましたので、この辺で再ログインしておきましょう。Ubuntu終了は、
|
1 |
$ exit |
コメント