2016年9月9日金曜日

Bash on Ubuntu on Windowsでmoshを使う

私は、FreeBSDやLinuxサーバーにアクセするときには接続が切断されにくいsshクライアントであるmoshを使っています。その設定は以下で書いています。
FreeBSDとMacOS Xでmoshを使う 
http://www.sakashita-net.jp/2015/05/freebsdmacos-xmosh.html

MacOS Xのターミナル.appでmoshを使う(日本語環境の場合) 
http://www.sakashita-net.jp/2015/05/macos-x1095appterminalappmosh.html

MacOS XのTerminal.appでmoshを使う(英語環境の場合) 
http://www.sakashita-net.jp/2015/05/macos-xappmosh.html
Windows 10でもBash on Ubuntu on Windows(以下BUW)により、Linux環境が使えるようになったので、moshを使えるようにしてみました。

BUWのインストールは以下を参考にしました。
Windows 10で始めるBash
1 フォルダー内のJPEGファイルを連番でリネームする

http://news.mynavi.jp/series/bashonwindows/001/
次に、BUWのコンソール環境をインストールします。というのは、デフォルトのコンソールである現在のバージョンのcmd.exeは日本語表示に難があるためです。これは以下を参考にしました。
Windows 10で始めるBash
10 時間軸でデスクトップを片付ける

http://news.mynavi.jp/series/bashonwindows/010/
私の場合、wsl-terminalは「Program Files」の下に展開し、open-wsl.exeのショートカットをスタートメニューに入れています。このとき、コンソールのminttyの設定がうまく保存できなかったので、wsl-terminalフォルダの中にあるetc/minttyrcファイルを直接編集しました。値は、
Git Bashでssh-agentを動かす
http://www.sakashita-net.jp/2016/08/git-bashssh-agent.html
で書いたように、既にminttyを使っていたので、その値をそのまま使いました。
$ cat minttyrc
BoldAsFont=yes
ForegroundColour=0,0,0
BackgroundColour=255,255,255
Transparency=low
FontHeight=13
Font=MeiryoKe_Gothic
BackspaceSendsBS=yes
CtrlShiftShortcuts=yes
CursorType=block
CursorBlinks=no
Columns=90
Rows=50
ScrollbackLines=0
Scrollbar=none
BoldAsColour=no
FontSmoothing=default
Locale=ja_JP
Charset=UTF-8
$
一度、minttyrcを設定すると、GUIでの設定変更を保存できるようになりました。なので、BoldAsFontなど、1行だけ設定を書いてから、設定すれば保存できるのかもしれません。ただ、複数のシステムでの検証はしていません。

ホームディレクトリはWindowsと共有できるように
/mnt/c/Users/名前
にしています。
$ cat passwd
……
名前:x:1000:1000:"",,,:/mnt/c/Users/名前
$
.bashrcには上で紹介したWWWページ中のssh-agentの設定を書いています。

これでとりあえずsshなどでサーバーにログインできるようになりました。次にmoshです。
Ubuntu Weekly Recipe
第220回 Ubuntuでモバイルシェル「Mosh」を使う

http://gihyo.jp/admin/serial/01/ubuntu-recipe/0220
にあるように「sudo apt-get install mosh」とするだけで、インストールはできたのですが、うまく動きません。接続すると、
[mosh is exiting.]
となり、すぐに接続が切れてしまいます。

検索エンジンで探してみると、どうもBUWのptyの扱いに不具合があるようです。
Client not working on Bash on Windows #781
https://github.com/mobile-shell/mosh/issues/781
これを読んでみると、不具合のフィードバックはしている、動くようにしたバージョンを作ってみたと書いてあります。そこで、
cgull/mosh forked from mobile-shell/mosh
https://github.com/cgull/mosh/tree/wsl-workarounds-14361
からソースコードをダウンロードしてコンパイルしてみました。ダウンロードは右上の「Clone or download」から「Download zip」を選びます。そして、展開した後、次のWWWページの指示に従ってコンパイル、インストールをします。
Build Instructions
https://github.com/mobile-shell/mosh/wiki/Build-Instructions
具体的には次のようにします。
$ cd 改変したmoshを展開したディレクトリ
$ sudo apt-get install automake libtool g++ protobuf-compiler libprotobuf-dev libboost-dev libutempter-dev libncurses5-dev zlib1g-dev libio-pty-perl libssl-dev pkg-config
$ ./autogen.sh
$ ./configure
$ make
$ make install

$
試してみると、うまく動きます。