💻
mosh を使おうとしたら locale が足りてなかった話
Proxmox 上でぽんぽん適当に立てては捨てられる LXC Container 環境に出先から SSH で接続するとコンソールのエコーバック (入力した文字が実際にプロンプトの画面上で反映されること) が遅くてちょっと気になってしまい……。
前から気になっていた mosh を入れて使おうとしたらちょっとハマったのでメモ。
mosh をインストールする
LXC Container で動かしているのは Ubuntu Server なので、特に考えることなく apt コマンドでインストール。
$ sudo apt install -y mosh
mosh-server の実行でこける
手元の MacBook Air には Terminus が入ってるので mosh を使うだけなら接続先のホスト設定で mosh をオンにするだけ。
デフォルトで入っている mosh の呼び出しコマンド (特に変える必要はない)
mosh-server new -s -l LANG=en_US.UTF-8
ところが実際に接続してみるとエラーになる。
mosh-server の実行コマンドを手で叩いてみるとこんな感じのエラーメッセージが。
imksoo@ansible:~$ mosh-server new -s -l LANG=en_US.UTF-8
The locale requested by LANG=en_US.UTF-8 isn't available here.
Running `locale-gen en_US.UTF-8' may be necessary.
mosh-server needs a UTF-8 native locale to run.
Unfortunately, the local environment (LANG=C) specifies
the character set "US-ASCII",
The client-supplied environment (LANG=en_US.UTF-8) specifies
the character set "US-ASCII".
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
locale が足りない
エラーメッセージにあるとおり、mosh-server needs a UTF-8 native locale to run.
なので、en_US.UTF-8 なロカールを追加することにする。
LXC Container 等の軽量な(シンプルに使えるだけ)のインストールをするとロカールは最小限の C
しか入っていないことが多いのでこういうことがおきる。
/etc/locale.gen を編集する
$ localectl list-locales
C.UTF-8
$ sudo /etc/locale.gen
en_US.UTF-8 UTF-8
をコメントアウト
$ sudo locale-gen
Generating locales (this might take a while)...
en_US.UTF-8... done
Generation complete.
$ localectl list-locales
C.UTF-8
en_US.UTF-8
ここまでやると、mosh-serverの起動に成功するようになる。
$ mosh-server new -s -l LANG=en_US.UTF-8
MOSH CONNECT 60001 FE5KEUm0A+a0HLy/gUTF0A
mosh-server (mosh 1.3.2) [build mosh 1.3.2]
Copyright 2012 Keith Winstein <mosh-devel@mit.edu>
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[mosh-server detached, pid = 42615]
改めて ssh + mosh で接続する
Terminus で再度接続するとエラーにならずに接続できるようになった。
念のため pstree コマンドで見てみる。
$ pstree
systemd─┬─2*[agetty]
├─cron
├─dbus-daemon
├─login───bash
├─master─┬─pickup
│ └─qmgr
├─mosh-server───bash───pstree
├─networkd-dispat
├─promtail───11*[{promtail}]
├─rsyslogd───2*[{rsyslogd}]
├─systemd───(sd-pam)
├─systemd-journal
├─systemd-logind
├─systemd-network
└─systemd-resolve
pstree の上に mosh-server 経由の bash がいるので成功している。
(ノ´∀`)ノわーい
Discussion