2chブラウザ「jd」をソースからビルドしてインストールする

(2009年11月7日)
jdはlinux環境で人気の2chブラウザです。前に「ubuntu linuxに2chブラウザ「jd」をインストールする ~ apt-get installコマンド」でjdをapt-getコマンドからインストールしてみましたが、今回はソースからmakeビルドしてインストールしてみました。
(jdはオープンソースのプロジェクトなのでソースも公開されています。)
ソースからインストールしようと思ったのは、apt-getやパッケージマネージャでインストールされるjdのバージョンが古かった事(詳しく調べてないけど、恐らくリポジトリを差し替えれば最新バージョンを取得できるとは思うけど…)、そして、何よりもソースからmakeコンパイル~インストールするのも勉強になるかなと思ってやってみました。
という訳で、以下jdのソースからのインストールのメモ書きです。
(私のubuntu Linuxのバージョンは8.10です)
まずはSourceForge.JPのJD for Linuxページからソースをダウンロードしてきます。
今回は現時点での最新安定バージョン2.4.2のソースjd-2.4.2-090927.tgzをダウンロードしました。
適当なディレクトリにダウンロードして解凍します。
$ tar zxvf jd-2.4.2-090927.tgz
解凍してできたディレクトリに移動します。
$ cd jd-2.4.2-090927/
まぁこれから長々と書いていきますが、基本的にこのディレクトリにあったINSTALLファイルの「* make 方法( configure + make の場合 )」を見ながら実行していっただけです。
まずはautoreconfコマンドを実行。
$ autoreconf -i
プログラム 'autoreconf' は以下のパッケージで見つかりました:
 * autoconf
 * autoconf2.13
次の操作を試してください: sudo apt-get install 選択したパッケージ
bash: autoreconf: command not found
autoconfが見つからないと言われました。エラーメッセージで言われたとおり、autoconf、autoconf2.13をapt-get installコマンドでインストールします。
$ sudo apt-get install autoconf
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
  automake autotools-dev m4
提案パッケージ:
  autoconf2.13 autobook autoconf-archive gnu-standards autoconf-doc libtool
以下のパッケージが新たにインストールされます:
  autoconf automake autotools-dev m4
アップグレード: 0 個、新規インストール: 4 個、削除: 0 個、保留: 0 個。
1248kB のアーカイブを取得する必要があります。
この操作後に追加で 4153kB のディスク容量が消費されます。
続行しますか [Y/n]? y
取得:1 http://jp.archive.ubuntu.com intrepid/main m4 1.4.11-1 [218kB]
取得:2 http://jp.archive.ubuntu.com intrepid/main autoconf 2.61-7ubuntu1 [449kB]
取得:3 http://jp.archive.ubuntu.com intrepid/main autotools-dev 20080123.1 [62.6kB]
取得:4 http://jp.archive.ubuntu.com intrepid/main automake 1:1.10.1-3 [519kB]
1248kB を 5s で取得しました (232kB/s)
未選択パッケージ m4 を選択しています。
(データベースを読み込んでいます ... 現在 171195 個のファイルとディレクトリがインストールされています。)
(.../archives/m4_1.4.11-1_i386.deb から) m4 を展開しています...
未選択パッケージ autoconf を選択しています。
(.../autoconf_2.61-7ubuntu1_all.deb から) autoconf を展開しています...
未選択パッケージ autotools-dev を選択しています。
(.../autotools-dev_20080123.1_all.deb から) autotools-dev を展開しています...
未選択パッケージ automake を選択しています。
(.../automake_1%3a1.10.1-3_all.deb から) automake を展開しています...
Processing triggers for man-db ...
Processing triggers for doc-base ...
Processing 1 added doc-base file(s)...
Registering documents with scrollkeeper...
m4 (1.4.11-1) を設定しています ...

autoconf (2.61-7ubuntu1) を設定しています ...

autotools-dev (20080123.1) を設定しています ...
automake (1:1.10.1-3) を設定しています ...

$ sudo apt-get install autoconf2.13
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
  automake1.4
提案パッケージ:
  gnu-standards
以下のパッケージが新たにインストールされます:
  autoconf2.13 automake1.4
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。
584kB のアーカイブを取得する必要があります。
この操作後に追加で 2310kB のディスク容量が消費されます。
続行しますか [Y/n]? y
取得:1 http://jp.archive.ubuntu.com intrepid/main autoconf2.13 2.13-59 [351kB]
取得:2 http://jp.archive.ubuntu.com intrepid/main automake1.4 1:1.4-p6-13 [233kB]
584kB を 1s で取得しました (516kB/s)
未選択パッケージ autoconf2.13 を選択しています。
(データベースを読み込んでいます ... 現在 171469 個のファイルとディレクトリがインストールされています。)
(.../autoconf2.13_2.13-59_all.deb から) autoconf2.13 を展開しています...
`diversion of /usr/bin/autoconf to /usr/bin/autoconf2.50 by autoconf2.13' を追加しています
`diversion of /usr/share/man/man1/autoconf.1.gz to /usr/share/man/man1/autoconf2.50.1.gz by autoconf2.13' を追加しています
`diversion of /usr/bin/autoheader to /usr/bin/autoheader2.50 by autoconf2.13' を追加しています
`diversion of /usr/share/man/man1/autoheader.1.gz to /usr/share/man/man1/autoheader2.50.1.gz by autoconf2.13' を追加しています
`diversion of /usr/bin/autoreconf to /usr/bin/autoreconf2.50 by autoconf2.13' を追加しています
`diversion of /usr/share/man/man1/autoreconf.1.gz to /usr/share/man/man1/autoreconf2.50.1.gz by autoconf2.13' を追加しています
未選択パッケージ automake1.4 を選択しています。
(.../automake1.4_1%3a1.4-p6-13_all.deb から) automake1.4 を展開しています...
Processing triggers for man-db ...
Processing triggers for doc-base ...
Processing 1 added doc-base file(s)...
Registering documents with scrollkeeper...
autoconf2.13 (2.13-59) を設定しています ...

automake1.4 (1:1.4-p6-13) を設定しています ...
再度、autoreconfコマンドを実行。
$ autoreconf -i
Can't exec "libtoolize": No such file or directory at /usr/bin/autoreconf2.50 line 186.
Use of uninitialized value $libtoolize in pattern match (m//) at /usr/bin/autoreconf2.50 line 186.
configure.in:6: installing `./install-sh'
configure.in:6: installing `./missing'
src/Makefile.am: installing `./depcomp'
src/article/Makefile.am:1: library used but `RANLIB' is undefined
src/article/Makefile.am:1:   The usual way to define `RANLIB' is to add `AC_PROG_RANLIB'
src/article/Makefile.am:1:   to `configure.in' and run `autoconf' again.
~
autoreconf2.50: automake failed with exit status: 1
今度はlibtoolがないというエラーが出ました。
libtoolをインストールします。
$ sudo apt-get install libtool
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
  libltdl7-dev
提案パッケージ:
  libtool-doc gfortran fortran95-compiler gcj
以下のパッケージが新たにインストールされます:
  libltdl7-dev libtool
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。
698kB のアーカイブを取得する必要があります。
この操作後に追加で 2290kB のディスク容量が消費されます。
続行しますか [Y/n]? y
取得:1 http://jp.archive.ubuntu.com intrepid/main libltdl7-dev 2.2.4-0ubuntu4 [189kB]
取得:2 http://jp.archive.ubuntu.com intrepid/main libtool 2.2.4-0ubuntu4 [509kB]
698kB を 5s で取得しました (123kB/s)
未選択パッケージ libltdl7-dev を選択しています。
(データベースを読み込んでいます ... 現在 171616 個のファイルとディレクトリがインストールされています。)
(.../libltdl7-dev_2.2.4-0ubuntu4_i386.deb から) libltdl7-dev を展開しています...
未選択パッケージ libtool を選択しています。
(.../libtool_2.2.4-0ubuntu4_i386.deb から) libtool を展開しています...
Processing triggers for man-db ...
libltdl7-dev (2.2.4-0ubuntu4) を設定しています ...
libtool (2.2.4-0ubuntu4) を設定しています ...
再度、autoreconfコマンドを実行。
$ autoreconf -i
libtoolize: putting auxiliary files in `.'.
libtoolize: copying file `./config.guess'
libtoolize: copying file `./config.sub'
libtoolize: copying file `./ltmain.sh'
libtoolize: Consider adding `AC_CONFIG_MACRO_DIR([m4])' to configure.in and
libtoolize: rerunning libtoolize, to keep the correct libtool macros in-tree.
libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
今度はうまくいったみたいです。
続いてconfigureの実行です。
$ ./configure 
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
~
checking for diff... /usr/bin/diff
os = linux or gnu
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for GTKMM... no
checking for GTKMM... no
checking for GTKMM... no
checking for GTKMM... configure: error: Package requirements (gtkmm-2.4 >= 2.4.0) were not met:

No package 'gtkmm-2.4' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables GTKMM_CFLAGS
and GTKMM_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
gtkmmが見つからないというエラーメッセージが出ました。

参考サイト
UnixとLinux Chapter 2. インストール

apt-getコマンドからgtkmmをインストールしてみます。
$ sudo apt-get install libgtkmm
libgtkmm-2.4-1      libgtkmm-2.4-doc    libgtkmm1.2
libgtkmm-2.4-1c2    libgtkmm-dev        libgtkmm1.2-0
libgtkmm-2.4-1c2a   libgtkmm-doc        libgtkmm1.2-0c2
libgtkmm-2.4-dbg    libgtkmm-utils-dev  libgtkmm1.2-0c2a
libgtkmm-2.4-dev    libgtkmm-utils2     libgtkmm2.0-dev
$ sudo apt-get install libgtkmm2.4-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
E: パッケージ libgtkmm2.4-dev が見つかりません
でも、何故かインストールできない・・・
libgtkmm2.0-devならインストールできそうだったけど、jdのINSTALLファイルを見ると必須環境にgtkmm-2.4.8 以上、推奨環境にgtkmm-2.8以上と書いてあります。
ここでGUIの「パッケージマネージャ」を見るとlibgtkmm2.4-devがあったので、ここからインストールしてみました。
そして、再度configureの実行。
$ ./configure 
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
~
checking for SMlib.h and ICElib.h... /usr/include
checking for libSM and libICE... /usr/lib
use XSMP
use gnutls
checking for GNUTLS... configure: error: Package requirements (gnutls >= 1.2 ) were not met:

No package 'gnutls' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables GNUTLS_CFLAGS
and GNUTLS_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
今度はgnutlsがないというエラーが出ました。
gnutlsをapt-getでインストールします。
$ sudo apt-get install libgnutls-dev 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
  libgcrypt11-dev libgpg-error-dev libtasn1-3-dev
提案パッケージ:
  libgcrypt11-doc gnutls-doc gnutls-bin guile-gnutls
以下のパッケージが新たにインストールされます:
  libgcrypt11-dev libgnutls-dev libgpg-error-dev libtasn1-3-dev
アップグレード: 0 個、新規インストール: 4 個、削除: 0 個、保留: 0 個。
1079kB のアーカイブを取得する必要があります。
この操作後に追加で 3199kB のディスク容量が消費されます。
続行しますか [Y/n]? y
取得:1 http://jp.archive.ubuntu.com intrepid/main libgpg-error-dev 1.4-2ubuntu7 [35.1kB]
取得:2 http://jp.archive.ubuntu.com intrepid/main libgcrypt11-dev 1.4.1-1ubuntu1 [284kB]
取得:3 http://jp.archive.ubuntu.com intrepid/main libtasn1-3-dev 1.4-1 [358kB]
取得:4 http://jp.archive.ubuntu.com intrepid-updates/main libgnutls-dev 2.4.1-1ubuntu0.4 [402kB]
1079kB を 0s で取得しました (2121kB/s)
未選択パッケージ libgpg-error-dev を選択しています。
(データベースを読み込んでいます ... 現在 175185 個のファイルとディレクトリがインストールされています。)
(.../libgpg-error-dev_1.4-2ubuntu7_i386.deb から) libgpg-error-dev を展開しています...
未選択パッケージ libgcrypt11-dev を選択しています。
(.../libgcrypt11-dev_1.4.1-1ubuntu1_i386.deb から) libgcrypt11-dev を展開しています...
未選択パッケージ libtasn1-3-dev を選択しています。
(.../libtasn1-3-dev_1.4-1_i386.deb から) libtasn1-3-dev を展開しています...
未選択パッケージ libgnutls-dev を選択しています。
(.../libgnutls-dev_2.4.1-1ubuntu0.4_i386.deb から) libgnutls-dev を展開しています...
Processing triggers for man-db ...
Processing triggers for doc-base ...
Processing 1 added doc-base file(s)...
Registering documents with scrollkeeper...
libgpg-error-dev (1.4-2ubuntu7) を設定しています ...
libgcrypt11-dev (1.4.1-1ubuntu1) を設定しています ...
libtasn1-3-dev (1.4-1) を設定しています ...

libgnutls-dev (2.4.1-1ubuntu0.4) を設定しています ...

再度、configureの実行。
$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
~
config.status: creating src/xml/Makefile
config.status: creating src/control/Makefile
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
今度は成功。
続いてmakeコマンドを実行します。
$ make
makeはエラーもなく一発で成功しました。(ちなみにmakeには20分くらいかかりました。マシンスペックはCPU:Cele1.4G、メモリ512GB。)
これで一応終了です。
srcディレクトリにあるjdが実行ファイルなので、これでjdを起動できます。

ただ、INSTALLファイルのmake方法の最後に「4. (お好みで) strip src/jd」と書いてあったのでstripコマンドを実行してみます。
stripコマンドは実行ファイルにくっついているデバッグ用のデータを削除します。これによって実行ファイルのサイズを減少させることができます。
ちなみにstripコマンドの前後でlsコマンドとfileコマンドを実行してファイルサイズとファイルの種類も確認してみました。
$ ls -l src/jd
-rwxr-xr-x 1 hoge hoge 26619112 2009-11-06 14:52 src/jd
$ file src/jd
src/jd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.8, dynamically linked (uses shared libs), not stripped
$ strip src/jd
$ ls -l src/jd
-rwxr-xr-x 1 hoge hoge 4664860 2009-11-06 15:06 src/jd
$ file src/jd
src/jd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.8, dynamically linked (uses shared libs), stripped
ファイルサイズは減少してますし、ファイル種別も「not stripped」から「stripped」になっています。
Webサービス by Yahoo! JAPAN