雑記

インフラのことだったりプログラムのことだったりどうでもいいこと書いたり。要は雑記。

CentOS6にtmux1.9をユーザ領域にインストール

Cent6のyumでtmuxをインストールすると1.6系がインストールされるんですが、一部機能が使えなかったりするんで現時点で最新版の1.9系を入れてみます。

問題が

そのままコンパイルするとmake時に以下のエラーがでます。

control.c: In function ‘control_callback’:
control.c:64: warning: implicit declaration of function ‘evbuffer_readln’
control.c:64: error: ‘EVBUFFER_EOL_LF’ undeclared (first use in this function)
control.c:64: error: (Each undeclared identifier is reported only once
control.c:64: error: for each function it appears in.)
make: *** [control.o] Error 1

これはlibeventのバージョンが低いためでるエラーですね。Centで提供されている1.4ではインストールできないのです。

どうするの?

libeventの最新版をインストールしてライブラリを利用する必要があります。 そのまま素直にroot権限でconfigureからのmake && make installしてもいいのですが、root権限がないユーザでは無理ですし、そもそもすでにyumで入っているlibeventと共存するのは避けたいところですね。

というわけで

一般ユーザでlibeventを入れて最新版のtmuxもインストールしちゃいます。

いざ作業

その前に今回は以下のディレクトリにlibeventとtmuxを入れます。

  • libevent
$HOME/local 以下
  • tmux
$HOME/local/tmux

ソースファイルは全て以下におきます。

$HOME/local/src

libeventのインストール

$ cd ~/local/src
$ wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
$ tar zxf libevent-2.0.21-stable.tar.gz
$ cd libevent-2.0.21-stable
$ ./configure --prefix=$HOME/local
$ make
$ make install

tmuxのインストール

※ncursesの依存関係がでるので、インストールされていない場合は事前に「ncurses-devel」をインストールしておいてください。

$ cd ~/local/src
$ wget http://cznic.dl.sourceforge.net/project/tmux/tmux/tmux-1.9/tmux-1.9a.tar.gz
$ cd tmux-1.9a
$ LDFLAGS=-L$HOME/local/lib CPPFLAGS=-I$HOME/local/include ./configure --prefix=$HOME/local/tmux 
$ make
$ make install
$ cd ~/local/bin
$ ln -s ../tmux/bin/tmux tmux  

パスを通す

  • .bash_profile (zshの場合は.zprofile)

以下を追記。

# ライブラリのパスを通す
export LD_LIBRARY_PATH=$HOME/local/lib:$LD_LIBRARY_PATH 

# PATHの設定
PATH=$HOME/local/bin:$PATH

これでtmuxの最新版が使えます。

よく他のブログとかで、tmuxインストール時にlibeventのライブラリのパスが通っていないためエラーとなり、その対処方法としてシンボリックリンクで/usr/libとかに通している方法を見かけます。 でもLDFLAGSとCPPFLAGSでちゃんとパスを指定してあげればインストールできるのです。 (個人的にはライブラリの共存を防ぐためにこっちの方が推奨だったりします。)

それにしても

tmuxいいですね。もっと使いこなしたいものです。