WSL向けディストリビューション "Pengwin" を Windows 10 で使う最小手順

WSL (Windows Subsystem for Linux) 向け Linux ディストリビューションである [WLinux](https://forest.watch.impress.co.jp/docs/serial/yajiuma/1144768.html) が [Pengwin に改称](https://forest.watch.impress.co.jp/docs/news/1179710.html) されて久しいのですが、ようやっと移行できました。

## TL;DR

* Windows Store から [Pengwin](https://www.microsoft.com/ja-jp/p/pengwin/9nv1gv1pxz6p) をインストール
* `~/.bashrc` に `umask 0022` を追記
* `$ pengwin-setup`
* 気に入ったら `CMD> wslconfig /s WLinux` で規定のディストリビューションにする

注意：有料 (2,350円 (税込)) です。
WLinux 時代に購入した方は、そのライセンスを引き継ぐことができます。

以上です。

## Pengwin のインストール

Microsoft Store からのインストールになります。 `pengwin` で検索すれば見つかるはずです。

今回私が使うのは **Pengwin** の方です。こちらは Debian/Ubuntu ベースです。
ちなみに、 **Pengwin 企業** は RHEL(Red Hat Enterprise Linux) ベースのものです。

※この "企業" というのはいかがなものか...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/52c966f9-067f-cdfa-91da-83fc92b9b11e.png)

### ChangeLog は Microsoft Store のページがわかりやすい

https://www.microsoft.com/ja-jp/p/pengwin/9nv1gv1pxz6p?activetab=pivot:overviewtab

[ブログはあります](https://www.pengwin.dev/blog) が、いろんな情報が混ざっててわかりづらいという辛さがあります。

### インストール先

Windows OS 上では `%localappdata%\Packages\WhitewaterFoundryLtd.Co.**\` に入ります。
rootfs はこのディレクトリの下の `LocalState\rootfs\` です。

ちなみに Ubuntu 18.04 なら `%localappdata%\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_**` に入ります。

ここを直接いじることは無いと思いますが、覚えておいて損はありませんので掲載しておきます。

### WLinux からのアップグレード方法

WLinux からのアップグレード方法が見つけられませんでした。そのため、私は再インストールをしました。

**アンインストールされると、全ての環境が削除されます。 `.ssh` といったファイルは必ず別のところに移行してからアンインストールしてください。**

具体的には Windows の設定からアンインストールし、その後 Microsoft Store からインストールし直すというものです。

`%localappdata%\Packages\WhitewaterFoundryLtd.Co.**\` ディレクトリが残っている場合、Microsoft Store からのインストール時に失敗することがあります。
その場合は手動で同ディレクトリを削除(もしくはフォルダ名変更)をした後に、再度 Microsoft Store からインストールしてください。

ちなみに WLinux のまま使い続けると、apt のリポジトリ URL の一部が無くなったりと、運用に支障が出ますので早く移行することをお勧めします。

## `~/.bashrc` に `umask` は必ず指定しよう

Pengwin の umask のデフォルトは `0000` です。
即ち、誰でも読めるディレクトリやファイルを作成されちゃいます。あとで修正するのが極めて面倒です。

`~/.bashrc` のどこかに `umask 0022` と書いておきましょう。

## pengwin-setup コマンド

Pengwin のインストール後に LANG やスクリプト系言語のセットアップだけでなく、特定のディレクトリをカレントにして起動できるシェル拡張 "Open with WLinux" をインストールしてくれる、対話形式のセットアッパーが `pengwin-setup` です。

WLinux では `wlinux-setup` というコマンドで提供されていましたが、項目数などがかなり強化されています。

```
$ pengwin-setup
```

以下のようなダイアログが表示されます。 スペースキーで選択してから [OK] を選択していけば、環境がインストールされるというものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/a979fab9-f36d-0193-8aa4-5067aff27940.png)

#### EDITOR

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/e442ec37-ab8e-a16d-ca65-e60fdaa76600.png)

#### GUI

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/f2d6bd56-21f5-954f-9ec2-1d9780ccf972.png)

#### MAINTENANCE

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/6a90fa71-e2b0-6c8b-a5b1-bce1aeccf458.png)

#### PROGRAMMING

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/af7be147-09c0-6664-2e12-29ad2d2f5cbc.png)

#### SERVICES

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/16884583-713c-5651-01f1-88e1339d17a0.png)

#### SETTINGS

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/a2dd64e9-5680-cc4d-fb0a-2ff357b5dec4.png)

#### TOOLS

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/8e397a75-a0aa-17e6-6126-45467ea94ac4.png)

#### UNINSTALL

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/d26341b4-6dcd-e405-5aba-7f3b7589c68d.png)

### インストールしておいた方がいい便利なもの

#### SERVICES -> KEYCHAIN

[keychain](https://www.funtoo.org/Keychain) をインストールしてくれます。ssh-add や ssh-agent の手間を減らしてくれます。

初回起動時に対象の秘密鍵のパスフレーズを入力すれば、ssh-agent が立ち上がるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/61ff787c-f853-926b-5592-60ee576d4706.png)
※ すでに ssh-agent が立ち上がっていればパスフレーズ不要となります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/f43003ad-0c07-15f7-12d2-6f1fd5be566c.png)

この keychain は `/etc/profile.d/keychain.sh` で起動されるようになっているので、読み込む秘密鍵の追加/変更や表示の抑制といったオプションを変更したい場合は、このファイルを編集してください。

##### ちなみに、それまでは...

以下のような涙ぐましいスクリプトを書いていましたが、もはやオサラバです。

```bash:.bashrc
if [ -z "$(pgrep ssh-agent)" ]; then
    rm -rf /tmp/ssh-*
    eval $(ssh-agent -s) > /dev/null
else
    export SSH_AGENT_PID=$(pgrep ssh-agent)
    export SSH_AUTH_SOCK=$(find /tmp/ssh-* -name agent.*)
fi

if [ "$(ssh-add -l)" == "The agent has no identities." ]; then
    ssh-add $HOME/.ssh/id_rsa
fi
```

### プログラム言語まわり

#### PROGRAMING -> PYTHONPI

選択肢が２つあります。

* Python 3.7 + pyenv
* Python 3.7 + [IDLE](https://docs.python.org/ja/3/library/idle.html) + pip (一つ目の選択で [NO] を選ぶと表示される)

私は環境分離に venv を利用するので pip が入るほうを選びました。(venv もインストールされます。しかし IDLE は不要なんですが...)

`pip` は `~/.local/bin/pip` にインストールされます。そのため、以下2点に注意です。

* `$HOME/.local/bin` へ PATH を通すこと
* `pip` を実行時は `--user` を付けること

```console:例
$ pip install --user awscli
```

単純に `pip install` してしまうと `/usr/local/*` に配置しようと試みますが失敗します。

#### PROGRAMING -> RUBY

選択肢が２つあります。

* rbenv を使った Ruby のインストール
* Rails + RubyGem (一つ目の選択で [NO] を選ぶと表示される)

私は rbenv を利用するので1つ目を選びました。（2番目がどうなるかは試していません）

pengwin-setup で指定される Ruby は 2.5 系とちょっと古めです。新しいのが欲しい方は、全てのインストールが終わった後に各自で `rbenv install 2.6.3` とするなりしてください。

##### WLinux で起こっていた不具合は解消されていました

libssl-dev libreadline-dev zlib1g-dev といったライブラリが無いために wlinux-setup では rbenv install が失敗していましたが、pengwin-setup では解消しています。

## 気に入ったら既定にしましょう

cmd.exe から `wslconfig` で既定のディストリビューションが設定できます。

```console
> wslconfig  /l
Windows Subsystem for Linux ディストリビューション:
Ubuntu (既定)
WLinux

> wslconfig /s WLinux

> wslconfig  /l
Windows Subsystem for Linux ディストリビューション:
WLinux (既定)
Ubuntu
```

なぜか名称がそのまま WLinux なのですが、気にしないでおきましょう。

## あとがき

Terminal には [Windows Terminal](https://www.microsoft.com/ja-jp/p/windows-terminal-preview/9n0dx20hk701?activetab=pivot:overviewtab) をぜひ！
カスタマイズや普段使いをするための情報源についても書きました → [Windows Terminal (Preview) のカスタマイズで役に立った情報源 (2019年11月)](https://qiita.com/ma2shita/items/12e6ab9f765ac9470785)

EoT