2017-12-12(火) [長年日記]
■ 遅ればせながらWindows Subsystem for Linuxを導入した
Windows10のFall Creaters UpdateでWSLのβがとれると聞いたので、おくればせながら導入してみた。手動でWindowsをアップデートしてから、Microsoft StoreでUbuntuをインストール。その後、コンパネ→プログラムと機能→Windowsの機能の有効化または無効化と進んで「Windows Subsystem for Linux」を有効に。何度か再起動すると使えるようになる。
以前はWindowsを「開発者モード」で動かさないといけなかったようだが(それでよけいなsshdが動くのがイヤで導入してなかった)、今は不要らしい。ググって古い情報を参考に導入したりすると余計な手順を踏まされそうだ。
起動したUbuntuは(というかbashは)普通によくできていて、とはいえWindows純正のコンソールは使いにくいので何か別なの……と探していたら、Cygwinユーザ御用達のminttyをWSL向けにカスタマイズしたwslttyというのがあったのでこれをインストールした。普通に使い慣れたターミナルって感じで、悪くない。しばらくこれでいこう。
bashじゃなくてzshにしたいと思い、いろいろな手法があることを知ったけど、どうせwslttyからしか使わないなら、そのショートカットをいじるのが良いだろうと考えて、(aptでzshを入れてから)ショートカットの中身をこう変えた:
%LOCALAPPDATA%\wsltty\bin\mintty.exe --WSL= -h err --configdir="%APPDATA%\wsltty" -~ /usr/bin/zsh -l
末尾の「/usr/bin/zsh -l」がミソね。2017-12-18追記: この制限は1.8.2で撤廃され、きちんとログインシェルを見てくれるようになったので、「/usr/bin/zsh -l」は不要になった。
その後、いつも使っているAnsible Playbookを使ってさくっと環境構築をして常用準備完了……といきたいところだったが、まだいくつか問題があった。
まず、screen(←年寄りなのでまだtmuxに乗り換えてない)が使う/var/run/screenがない。どうも/var/runが揮発性らしく、毎回作り直さないといけないようだ。~/.zshrc内で作るようにして解決。
chshでzshを指定してもbashを起動しようとするので、screenの中でbashが動いちゃう。これもSHELL環境変数に/usr/bin/zshを指定することで、screenがいいように解釈してくれるから、これも~/.zshenvで指定。
それから、スタンドアロンのLinux上ではsshキーの管理にkeychainを使っているんだけど、代わりにWindowsサイドで動いている(PuTTY付属の)Pageantを利用したい。これは「Windows 10のWindows Subsystem for Linux(WSL)を日常的に活用する」を参考にしてweasel-pageantを導入した。これはいいですね。
なお、他のLinux環境と.zshrcなどを共有したい場合は、uname -rの結果に「Microsoft」が含まれるかどうかで場合分けできる:
% uname -r 4.4.0-43-Microsoft
こんな感じで、日常用途でのLinuxコンソールとしてはだいたい使えるようになった。開発環境はこれから。
あわよくばVirtualBoxで運用しているLinuxをなくして、これに一本化できたらいいなと考えているけど、daemonが動かない*1という制限があるので、こんへんをDockerで置き換えるように生活態度を改めねばいけなさそうだ*2。年内にできたらいいなー。