2018-02-28

tobijibu

tmuxをソースからインストール

新しい環境を作ったものの、tmuxの調子が悪く、 vimで■や●等の全角記号が正しく表示されませんでした。

yumでインストールしたので、 少しバージョンも古いのかなぁと思い、 最新バージョンをソースからインストールしました。 結果、正しく表示されるようになりました。 (ただしバージョンが古かったことが原因かどうかは分かりません。)

今回は、ソースからtmuxのインストール方法を記載します。 この方法を使うことで、別のツールやライブラリも同じようにインストールすることができます。

環境は、Vagrant + VirtualBoxを使い、OSは以下を使います。
CentOS 7.2 x64 (Minimal, Puppet 4.2.3, Guest Additions 4.3.30)
https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box

rootユーザーになる

surootになります。 vagrantユーザで、特に指定していなければ、パスワードはvagrantです。

本来はsudoを使って進めたかったのですが、 makeでパーミッションエラーが出てしまいました。 いずれにせよ、後述のコマンドも同じ理由で毎回sudoが必要なので、 最初からsuを使って対処してしまいます。

$ su

必要なパッケージをインストール

必要なパッケージをインストールします。 既にインストール済みであればこの処理は不要です。

# yum install -y git automake libevent-devel ncurses-devel

ソースを取得

tmuxのソースを取得します。 取得方法はどんな方法でも構いませんが、今回はgithubからリポジトリをcloneしました。

# cd /usr/local/src
# git clone https://github.com/tmux/tmux.git

インストール

githubから取得したソースにはconfigureスクリプトがありません。 そこでautogen.shを使ってconfigureを生成します。

そして、configuremakemake installで完了です。

# cd tmux
# sh autogen.sh
# ./configure
# make
# make install

インストール確認

とりあえずバージョンを確認して完了です。

$ tmux -V
tmux master

文字化けについて

日本語が正しく表示される場合、以降の内容は読む必要ありません。




tmuxを起動中にvim等でUTF-8のファイルを開くと、日本語が_(アンダースコア)で置き換えられてしまう場合があります。 その場合、環境変数LC_ALLLC_CTYPELANGを確認しましょう。 環境変数に設定された文字コードにUTF-8が含まれていないと、文字化けしてしまいます。 (殆どの場合、基本的にUTF-8が設定されていると思います。)

同じ環境を使用している場合、bashでは文字化けしませんでしたが、 fishでは文字化けを確認しました。

対処方法は2種類あり、エイリアスを指定する方法と、ロケールを指定する方法です。 エイリアスを設定する方法が簡単で、他への影響が少なく済みます。

alias tmux="tmux -u"

エイリアスを設定しない場合は以下の手順で対応することができます。 ここでは文字化けを確認したfishを使っている想定で説明します。

まず、設定されているロケールを確認します。 以下の例ではLANGが空っぽです。 tmuxの文字化け(_で置換されてしまう点)だけでいえば、 要はLANGUTF-8が設定されていれば良いことになります。

$ locale
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

使用可能な日本語ロケールを確認します。 ここでは日本語(ja)で検索していますが、実際はUTF-8であればどんな言語でも構いません。


$ locale -a | grep -i ja
ja_JP
ja_JP.eucjp
ja_JP.ujis
ja_JP.utf8
japanese
japanese.euc

LANGを設定します。

bashならば、以下のコマンドで対応できるのですが、 fishの場合、環境変数設定のLANG=ja_JP.utf8の構文が違うため、対応できません。

$ localectl set-locale LANG=ja_JP.utf8
$ source /etc/locale.conf
Unsupported use of '='. In fish, please use 'set LANG ja_JP.utf8'.
/etc/locale.conf (line 1): LANG=ja_JP.utf8
                           ^
from sourcing file /etc/locale.conf
        called on standard input

なのでログイン時に環境変数をexportするために、設定ファイルに書き込みます。 fishではexportコマンドが無いので、set -xという形で指定します。

$ vim ~/.config/fish/config.fish
set -x LANG ja_JP.utf8

$ source ~/.config/fish/config.fish
(export LANG=ja_JP.utf8と指定してもエラーにはならず、正しく設定されます。不思議です。)
$ locale
LANG=ja_JP.utf8
LC_CTYPE="ja_JP.utf8"
LC_NUMERIC="ja_JP.utf8"
LC_TIME="ja_JP.utf8"
LC_COLLATE="ja_JP.utf8"
LC_MONETARY="ja_JP.utf8"
LC_MESSAGES="ja_JP.utf8"
LC_PAPER="ja_JP.utf8"
LC_NAME="ja_JP.utf8"
LC_ADDRESS="ja_JP.utf8"
LC_TELEPHONE="ja_JP.utf8"
LC_MEASUREMENT="ja_JP.utf8"
LC_IDENTIFICATION="ja_JP.utf8"
LC_ALL=

この状態でtmuxを起動してUTF-8のファイルを開くと、文字化けせずに表示されます。

参考サイト

tmux(1) - OpenBSD manual pages
http://man.openbsd.org/OpenBSD-current/man1/tmux.1

ロケール(locale)まとめ
https://qiita.com/aosho235/items/58e2e7acd5c2ee3641ff