checkinstallのコンパイル

公式サイトからソースファイルをダウンロードしてきます。

本来は以下のように、

$ wget http://asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.6.2.tar.gz

と、ソースファイルをダウンロードしてきて、解答&コンパイル出来るはずなのですが、現時点で公開されているファイルにはバグがあるらしく、そのままだと以下のようなメッセージが出力されて、x86_64でコンパイル出来ませんでした。

$ gcc -Wall -c -D_GNU_SOURCE -DPIC -fPIC -D_REENTRANT -DVERSION=\”0.7.0beta7\” installwatch.c

installwatch.c:2942: error: conflicting types for ‘readlink’ /usr/include/unistd.h:828: note: previous declaration of ‘readlink## was here installwatch.c:3080: error: conflicting types for ‘scandir’ /usr/include/dirent.h:252: note: previous declaration of ‘scandir’ was here

make[1]: *** [installwatch.o] エラー 1

make[1]: ディレクトリ `/home/hogehoge/checkinstall-1.6.2/installwatch’ から出ます

make: *** [all] エラー 2

そのため、gitを用いて最新のソースをダウンロードしてきます。

$ git clone http://asic-linux.com.mx/~izto/checkinstall/checkinstall.git

このままでもコンパイルは通りますが、64bit環境ではライブラリパスの位置が違うため、以下のような修正を行います。

$ diff installwatch/Makefile.org installwatch/Makefile
14c14
< LIBDIR=$(PREFIX)/lib
---
> LIBDIR=$(PREFIX)/lib64

また、インストール時に「/selinuxに書き込めない」的なメッセージが出るのを回避するため、次のような修正を行います。

$ diff checkinstallrc-dist.org checkinstallrc-dist
120c120
< EXCLUDE=""
---
> EXCLUDE="/selinux"

そして、このままですと checkinstallrc は /usr/local/lib/checkinstallrc にインストールされますが、コンパイルして出来たバイナリは /usr/local 直下にあるものと認識してしまい、実行時に

# checkinstall
checkinstall 1.6.3, Copyright 2010 Felipe Eduardo Sanchez Diaz Duran
このソフトウェアはGNU GPLの下でリリースしています。

The checkinstallrc file was not found at:
/usr/local/sbin/../checkinstallrc

デフォルトの内容を使うものとします

といったメッセージが出て読み込んでくれないため、次のような修正を行っておきます。

$ diff Makefile.org Makefile
7c7
< CONFDIR=$(PREFIX)/lib/checkinstall
---
> CONFDIR=$(PREFIX)

修正が終わったら、コンパイルと一旦インストールを行います。

$ cd checkinstall
$ make
$ sudo make install

rpm-buildのインストールと、checkinstallのrpm化

インストールに成功したらcheckinstall自体をrpm化します。 まず、rpm化のために必要な以下のパッケージをインストールしておきます。

# yum install rpm-build

rpm構築に必要なディレクトリを作成します。

# mkdir -p ~/.rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
# echo "%_topdir $HOME/.rpmbuild" > ~/.rpmmacros

先ほどインストールしたcheckinstallコマンドを実行してRPMを作成します。途中でパッケージの種類を選択するところ以外はデフォルトのままで結構です。

# checkinstall

パッケージ作成に成功したら、パッケージとして再度インストールを行います。

# rpm -ivh /root/.rpmbuild/RPMS/x86_64/checkinstall-20120428-1.x86_64.rpm

コメントを残す

メールアドレスが公開されることはありません。