Windows10でLinux互換環境を使う

2019年7月3日

これまで会社のWindowsでは主にPowerShellやGit Bashを使っていましたが、転職先で支給されたPCがWindows10だったのでWSL(Windows Subsystem for Linux)を使うことにしました。普通にパッケージシステムが使えるターミナルというのはやはり便利なものです。

Windowsの中のLinux

当初ベータ版ではBash on Ubuntu on WindowsということでUbuntuしか使えなかったのですが、正式版では多くのディストリビューションが用意されました。Chromebookで使えるLinuxがDebianなのでWSLでもDebianを使うことにします。

これらディストリビューションはWindowsストアから手軽にインストールできる上に、共存させることもできるし、Windows側でXサーバーを動かしてやればGUIプログラムも動かせます。

WSLのルートファイルシステムは%userprofile%\AppData\Local\Packages\内にディストリビューションごとにあります。

UbuntuCanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs
DebianTheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs

逆にWSL側から見たWindowsの各ドライブは/mnt以下にあるという。。。なのでオススメはしませんがWSL側のホームディレクトリを/mnt/c/Users/ユーザー名/Documentsに変えることでWindowsのマイドキュメントと共用してしまうこともできるわけです。

オススメしない理由はNTFSにはunixのパーミッション情報を設定できないから。鍵認証によるssh接続をする場合など、鍵ファイルやconfigなどのパーミッションを適切に設定できずにシェルログインに失敗してしまいます。

なのでWindowsフォルダはホームディレクトリ下などにシンボリックリンクを張ったほうがいいです。

ln -s /mnt/c/Users/ユーザー名/Documents win

LAMP環境を構築する

MySQLが使えたり、phpが動くWebサーバーが使えるとすごく便利なので環境を整えます。インストール手順はLAMPでWebサーバーを立てるの内容と同じ。

WSLではsystemctlコマンドが使えないので、デーモンの起動はserviceコマンドを使う必要があります。これでWindows内にphpが有効なWebサーバーが立ち上がります。ブラウザでlocalhostにアクセスすると、/var/www/html内のコンテンツが表示されます。

面倒なのでデーモンを自動起動しましょう。普通のLinuxと違ってrootがサービスを立ち上げる仕組みがないようなので.bashrcに以下を追記します。

sudo service mysql start
sudo service apache2 start
sudo service php7.3-fpm start
sudo service cron start

最初のsudoでパスワードの入力を求められますが、以降のコマンドはそのまま通ります。ちなみに最後のはcronデーモン。これでWSLを立ち上げている間のみですがcronも有効になりますよ。