Windows Subsystem for LinuxでUbuntu

Windows 10をversion 1903にアップグレードするに合わせて、Windows Subsystem for Linux (WSL)のインストール手順についても見直しを行った。Version 1809からは大きな変更はないが、タイムゾーンがインストール時にデフォルトでJSTに設定されるようになっていることから、タイムゾーンの設定を手順から削除した。

作業にあたってはMicrosoftの公式ページを参照。なおMicrosoft Docsの内容はまだ最新バージョン向けに更新されていなかったので、ブログの最新情報も合わせて参照。

- [Windows Subsystem for Linux Installation Guide for Windows 10 (Microsoft Docs)](https://docs.microsoft.com/en-us/windows/wsl/install-win10 "Install Windows Subsystem for Linux (WSL) on on Windows 10")
- [What’s New for WSL in the Windows 10 October 2018 Update (Windows Command Line Tools For Developers)](https://blogs.msdn.microsoft.com/commandline/2018/11/05/whats-new-for-wsl-in-the-windows-10-october-2018-update/ "What’s New for WSL in the Windows 10 October 2018 Update")
- [What’s new for WSL in Windows 10 version 1903? (Windows Command Line Tools For Developers)](https://devblogs.microsoft.com/commandline/whats-new-for-wsl-in-windows-10-version-1903/)

# Windows Subsystem for Linuxを有効にする

WSLは現在デフォルトで無効になっているのでまず有効化。PowerShellを管理者権限で立ち上げて次のコマンドを実行。

```console
> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
```

終了すると再起動するか尋ねられるので、"Y"を入力。

```console
この操作を完了するために、今すぐコンピューターを再起動しますか?
[Y] Yes  [N] No  [?] ヘルプ (既定値は "Y"):
```

入力すると直ちに再起動されるので、他に開いているものがあれば事前に閉じておく。

# Ubuntuのインストール
## Ubuntu 18.04ストアアプリのインストール

WSLでは複数のディストリビューションが選択可能だが、後にインストールするアプリケーションの関係でUbuntu 18.04を選択する。Ubuntuインストールするため、再度PowerShellを管理者権限で立ち上げて、次のコマンドを実行。

```console
> Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1804 -OutFile ~/Ubuntu.appx -UseBasicParsing
> Add-AppxPackage -Path ~/Ubuntu.appx
```

1行目のコマンドでUbuntu 18.04のアプリケーションパッケージがダウンロードされ、2行目のコマンドを実行することでWindowsストアアプリとしてインストールされる。Microsoft DocsではWindowsストアから導入する方法が解説されているが、ブログでPowerShellのコマンドラインで実行する方法が解説されていたので、今回はその方法を実行。コマンドの意味については、Microsoft Technetの解説を参照。

- [Windowsストアアプリのサイドローディング＆アンインストール方法 (Ask CORE)](https://blogs.technet.microsoft.com/askcorejp/2017/02/23/windowsstore_sideloading/ "Windowsストアアプリのサイドローディング＆アンインストール方法")

## Ubuntuの初期設定

ブログだと、PowerShellから初期設定を続けるやり方で解説されていたが、Ubuntuのターミナルを立ち上げて初期設定を続けることとする。

### ユーザ名とパスワードの設定

Ubuntuターミナルの初回起動時にはインストールが継続して実行され、完了後にユーザ名とパスワードの入力が求められるので、適宜入力。

```console
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:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
```

### APTパッケージアーカイブを国内サイトに変更

Ubuntuのパッケージアーカイブリポジトリは、既定でarchive.ubuntu.comおよびsecurity.ubuntu.comに存在する。ただこのリポジトリをホストしているサイトは英国に存在し、日本からアクセスするとかなり遅い。そこで日本国内のミラーサーバであるjp.archive.ubuntu.comに変更する。なお、変更するに当たりバックアップをとっておく。

```console
$ sudo sed -i.bak 's/\/archive\.ubuntu/\/jp\.archive\.ubuntu/' /etc/apt/sources.list
```

このサイト、Ubuntu Desktopなどで日本国内のミラーとして指定される名前だが、公式ページのアーカイブミラー一覧には掲載されていない。

- [日本国内のダウンロードサイト (Ubuntu Japanese Team)](https://www.ubuntulinux.jp/ubuntu/mirrors "日本国内のダウンロードサイト")
- [Official Archive Mirrors for Ubuntu](https://launchpad.net/ubuntu/+archivemirrors)

このドメイン名は、Ubuntu Japanese Teamが保守しているubuntutym.u-toyama.ac.jpのエイリアスだとされているが、hostコマンドで確認すると確かにそのとおり。

```console
$ host jp.archive.ubuntu.com
jp.archive.ubuntu.com is an alias for ubuntutym.u-toyama.ac.jp.
ubuntutym.u-toyama.ac.jp is an alias for ubuntutym3.u-toyama.ac.jp.
ubuntutym3.u-toyama.ac.jp has address 160.26.2.187
```

アーカイブミラーを変更したら、パッケージを更新する。

```console
$ sudo apt update
$ sudo apt upgrade
```

更新が終了したら、一旦ターミナルを閉じて再度開き直す。

### ロケールを日本語に変更

WSLでの利用目的によっては、日本語化する必要がないか、もしかすると日本語化しないほうが良いが、とりあえず使える環境は構築しておく。ロケールの初期設定を確認するとC.UTF-8となっている。

```console
$ locale
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=
```

また、言語パックを追加しないでも設定可能なロケールは次の通り。

```console
$ locale -a
C
C.UTF-8
POSIX
en_US.utf8
```

初期設定では日本語は選択できないので、日本語の言語パックをインストールする。

```console
$ sudo apt install language-pack-ja
```

言語パックをインストール後、ロケールとしてja_JP.utf8が設定可能になったことが確認できる。

```console
$ locale -a
C
C.UTF-8
POSIX
en_US.utf8
ja_JP.utf8
```

次にデフォルトのロケールをja_JP.UTF-8に変更する。

```console
$ sudo update-locale LANG=ja_JP.UTF-8
```

ターミナルを一旦閉じて、再度開いてからロケールが変更されたことを確認する。

```console
$ locale
LANG=ja_JP.UTF-8
LANGUAGE=
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
```

これで日本語を使うための最低限の設定が完了したが、WSLの利用形態を考慮すると、メッセージは英語のままのほうが都合がよい。そこでデフォルトのロケールをen_US.utf8に設定して、必要に応じてja_JP.UTF-8に切り替えることにする。

```console
$ sudo update-locale LANG=en_US.UTF8
```