tmuxがCygwin上で動作するようになったのでインストール手順をまとめてみた
CygwinはWindows上で動作するUNIXライクなプログラミング環境で、個人的にはよく使っている。コンパイラなどのインストールも、Cygwin自身のインストールの際に用いるsetup.exeを呼び出すだけで出来てしまう。自分は使ってはいないが、aptライクなパッケージ管理ツールも人気のようだ。
tmuxは言わずもがな、ターミナル分割に使われるソフトウェアで一つのターミナルを疑似的に複数のターミナルに分割してくれる。
ただしこのtmux、長い間Cygwin上では動作しなかった。ソースコードを入手してビルドを通すことは出来ても、コマンドを入力した瞬間に落ちてしまっていた。これは残念。
今年の5月辺りからCygwin対応が進んでいた
しかし、個人的には最大の不満点だった、この「tmuxがCygwin上で使えない!」という問題に関して今年の5月位からMLにて議論が進んでいた。
patch for tmux on cygwin
このパッチは現在tmuxのレポジトリに適用されているようで、メンテナがtmuxの時期バージョンであるtmux1.9でのCygwin版のサポートを(ほぼ公式に?)宣言している。
Re: tmux on Cygwin
というわけで、Cygwin上にtmuxをインストールするためのマニュアルを簡単に作ってみる。
基本的に以下のページを参考にしており、自分がインストールする際の手順を纏めただけのものなので注意されたし。
Steps to install tmux in Cygwin
以下、適当なディレクトリ(自分の場合は$HOME/work)で作業。
tmuxのインストール手順
依存パッケージのインストール
依存するlibeventとncursesもダウンロード。別途、setup.exeを使ってautomake, gcc, git, pkg-configをインストールしておくこと。
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz
依存パッケージのビルド
Cygwinなだけあって時間かかりますね。
tar xvf libevent-2.0.21-stable.tar.gz cd libevent-2.0.21-stable ./configure --prefix=/usr make && make install cd .. tar xvf ncurses-5.9.tar.gz cd ncurses-5.9 ./configure --prefix=/usr make && make install cd ..
ここまでは上手くいくだろう。さて、tmuxは入るだろうか...
tmuxのインストール
git clone http://git.code.sf.net/p/tmux/tmux-code tmux-tmux-code cd tmux-tmux-code ./autogen.sh CFLAGS="-I/usr/include/ncurses" ./configure --prefix=/usr make && make install
しかしビルドに失敗する...
tty-term.o:tty-term.c:(.rdata$.refptr.cur_term[.refptr.cur_term]+0x0): undefined reference to `cur_term' collect2: error: ld returned 1 exit status
やむなく以下の変更を行う。とりあえずコメントアウトして再度make install。(こんなんで良いのか...)
2014.2.25追記 tmux1.9以降では不要な操作となりました。
diff --git a/tty-term.c b/tty-term.c index a3292eb..50af6e9 100644 --- a/tty-term.c +++ b/tty-term.c @@ -389,10 +389,10 @@ tty_term_find(char *name, int fd, const char *overrides, char **cause) tty_term_override(term, overrides); /* Delete curses data. */ -#if !defined(NCURSES_VERSION_MAJOR) || NCURSES_VERSION_MAJOR > 5 || \ - (NCURSES_VERSION_MAJOR == 5 && NCURSES_VERSION_MINOR > 6) - del_curterm(cur_term); -#endif +//#if !defined(NCURSES_VERSION_MAJOR) || NCURSES_VERSION_MAJOR > 5 || \ +// (NCURSES_VERSION_MAJOR == 5 && NCURSES_VERSION_MINOR > 6) +// del_curterm(cur_term); +//#endif /* These are always required. */ if (!tty_term_has(term, TTYC_CLEAR)) {
結果、動きました
何はともあれtmuxが無事動いたようなので何より。
今回は若干手間取りましたが、今後tmux 1.9リリースに向けて種々の問題は解消されていくことでしょう。*1
雑なパッチによりどんな不具合があるか想像出来ないため、ビルドし直したいところ。
2014.1.9追記
cygwin + tmux。現時点では最後のtmuxのmakeも行けた。 / “tmuxがCygwin上で動作するようになったのでインストール手順をまとめてみた - atdxfe's Blog” http://t.co/QKWPsdGPTZ
— 川名忠彦 (@tadahiko_kawana) January 9, 2014
とのことです。
ありがとうございました。
2014.2.25追記
tmux1.9のリリースに伴いCygwinが正式にサポートされました。
tmux1.9のコードは以下のURLから入手可能です。
http://tmux.sourceforge.net/