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です)
(jdはオープンソースのプロジェクトなのでソースも公開されています。)
ソースからインストールしようと思ったのは、apt-getやパッケージマネージャでインストールされるjdのバージョンが古かった事(詳しく調べてないけど、恐らくリポジトリを差し替えれば最新バージョンを取得できるとは思うけど…)、そして、何よりもソースからmakeコンパイル~インストールするのも勉強になるかなと思ってやってみました。
という訳で、以下jdのソースからのインストールのメモ書きです。
(私のubuntu Linuxのバージョンは8.10です)
まずはSourceForge.JPのJD for Linuxページからソースをダウンロードしてきます。
今回は現時点での最新安定バージョン2.4.2のソースjd-2.4.2-090927.tgzをダウンロードしました。
適当なディレクトリにダウンロードして解凍します。
今回は現時点での最新安定バージョン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コマンドを実行。
$ 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をインストールします。
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の実行です。
$ ./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.
$ 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の実行。
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でインストールします。
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はエラーもなく一発で成功しました。(ちなみにmakeには20分くらいかかりました。マシンスペックはCPU:Cele1.4G、メモリ512GB。)
これで一応終了です。
srcディレクトリにあるjdが実行ファイルなので、これでjdを起動できます。
ただ、INSTALLファイルのmake方法の最後に「4. (お好みで) strip src/jd」と書いてあったのでstripコマンドを実行してみます。
stripコマンドは実行ファイルにくっついているデバッグ用のデータを削除します。これによって実行ファイルのサイズを減少させることができます。
ちなみにstripコマンドの前後でlsコマンドとfileコマンドを実行してファイルサイズとファイルの種類も確認してみました。
これで一応終了です。
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」になっています。
