yu nkt’s blog

nkty blog

I'm an enterprise software and system architecture. This site dedicates sharing knowledge and know-how about system architecture with me and readers.

WSLでWindowsなのにLinux環境を整える

背景

Windows10から、Windows Subsystem for Linux(WSL)によって、CygwinなどのツールやVMを導入せずに、Linuxコマンドを利用出来るようになりました。

私は今までGit BashLinuxコマンドを打っていましたが、イマイチコマンドが揃っておらず、不満ながら使っていました。 そこで最近、ついにWSLに切り替えたので、その時の作業をメモしておきます。

なお、この記事は基本的に、参考にさせて頂いた他のWebサイトのキュレーションです。

WSLの初期設定

WSLは、Windows10でデフォルト状態から利用出来るものではありません。 WSLを利用するための設定は、様々なサイトで紹介されているので、そちらに譲ります。

自分は、こちらのページにお世話になりました。 インストールしたLinuxディストリビューションは、慣れているUbuntuにしておきました。

www.atmarkit.co.jp

Ubuntuのバージョンは、2018/12/23現在、18.04のようです。

$ cat /etc/issue
Ubuntu 18.04.1 LTS \n \l

コンソールの色を変更

WSLのUbuntuを開くと、いかにも今までのコマンドプロンプトと同じような、黒背景の味気ない画面が出てきます。 エンジニアたるもの、見た目にこだわらない訳にはいきません。

コンソールの背景色などのテーマを変える方法は、以下のページに詳しく書かれています。

twinbird-htn.hatenablog.com

要するに、Microsoftがコンソールのテーマを変えるためのツールを作ってくれているので、それをダウンロードして利用します。 おとなしく、Zipでダウンロードし、対象のアプリをコマンドプロンプトから実行します。

ホームディレクトリの変更

次に行ったのは、ホームディレクトリの変更です。

デフォルトでは、/home/(ユーザー名)です。 このままで問題ない人は、この章は飛ばしてください。 ただ、自分は、WSLで操作したファイルを、Windowsでも編集したいという要望がありますので、普段からWindowsで利用しているディレクトリをホームディレクトリにしました。

ホームディレクトリを変更する方法は、以下のページに書かれています。

qiita.com

上のページと同じく、/mnt/c/linux_homeを作成して、設定しました。 まず先に、C:\linux_homeを作成してから、上ページの設定をした方が良さそうです。

初期パーミッションの設定

次に、コンソールでディレクトリを作成したときに驚きました。 パーミッションが777になっています。 そのため、コンソール画面には、このように表示されます。

f:id:yunkt:20181223163547p:plain

セキュリティ的な問題と、コンソールの見栄え的にも、これは修正せざるを得ません。

umaskコマンド

多くのサイトでは、umaskコマンドを打てば、デフォルトパーミッションを変えられる、と書かれています。

umask 022

しかし、これはCドライブ以下のディレクトリではうまくいきません。 その理由は、WindowsLinuxとではファイルシステムが異なり、ファイルやディレクトリに対する操作におけるOSレベルの処理が異なっているためです。 WSLは、できるだけ純粋にLinuxのファイル操作が出来るようにしています。

このファイル操作には、ファイルのパーミッションの概念や設定も含まれるため、WSLのために用意された環境の外側(つまり、ここでのC:\以下)では、umaskというLinuxコマンドを入力しても、デフォルトパーミッションの設定が出来ないのです。

drvfsのmetadata設定を付けてCドライブをマウントしなおす

以下のページに解説されている通り、Microsoftが割と最近、WSLのLinuxコマンドでWindowsのファイルを操作するための仕組みを提供しました。 それが、drvfsというものです。 なんの略か、少し調べましたが出てきませんでしたが、恐らく末尾のfsは、ファイルシステムなのではないかと思います。

kledgeb.blogspot.com

Windows10に、本記事執筆時点までのwindows updateを適用させているのであれば、WSL起動時にdrvfsが利用されるようになっています。 ただし、drvfsにはいくつかオプションがあり、デフォルトでは、Windowsのファイルにパーミッション設定を行うためのオプションが設定されていません。 これは、drvfsのmetadataオプションと言うものです。

そのため、WSLが起動時にマウントするCドライブを一度アンマウントし、metadataオプションを付けて、drvfsを利用してマウントし直す必要があるそうです。

sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o metadata

WSLのUbuntuのコマンドを開くたびにこの設定を叩くのは面倒なので、設定を永続化しましょう。 その方法は、以下のページに書かれています。

qiita.com

要するに、/etc/wsl.confに以下の記述を記載します。

[automount]
options = "metadata"

日本語設定

最後に、一応日本語設定をしておきましょう。 方法は、こちらのページのお世話になりました。

www.atmarkit.co.jp

要するに以下のコマンドを入力すればOKです。

sudo apt update
sudo apt upgrade
sudo apt -y install language-pack-ja
sudo update-locale LANG=ja_JP.UTF8
# ここでいったん終了してから、Ubuntuを再起動
sudo dpkg-reconfigure tzdata
sudo apt -y install manpages-ja manpages-ja-dev

ちなみにですが、コンソールのフォント設定を、日本語に対応していないフォントに設定していたら、コンソールの設定上文字化けします。

f:id:yunkt:20181223175558p:plain

自分は、コンソールのフォントには、そこまで強いこだわりはないので、そのままMSゴシックにしています。 可能なら、英語に関しては、本当はConsolasがいいのですが。

まとめ

一通り設定をしてみたら、意外に使い勝手が良く、満足しています。

AnsibleでUbuntu18.04用に作っていたPlaybookも問題なく動いたので、自分は簡単に環境構築ができました(ご参照)。

また、npmやpipでglobalにアプリをインストールする事も問題なく出来るので助かっています。 例えば、Node-REDとかを起動して、ちゃんとlocalhostにアクセスしたら使えます。

ここ最近、猛烈にMac Book Airが欲しかったのですが、WSLのおかげで、少し熱が冷めました。 今使っている2015年製のVAIOをまだまだ使っていこうと思います。