読者です 読者をやめる 読者になる 読者になる

Fedora12にcheckinstallをインストールする

linux

本家に行けば最新版の1.6.2がDLできますが、私の環境の Fedora12 ではコンパイルできませんでした。

MLにも報告されています

コンパイル時に以下のようなエラーが発生します。
(注:私の環境ではなくMLからのコピペ。基本的に同じです)

installwatch.c:3080: error: conflicting types for ‘scandir’
/usr/include/dirent.h:252: note: previous declaration of ‘scandir’ was here
installwatch.c:3692: error: conflicting types for ‘scandir64’
/usr/include/dirent.h:275: note: previous declaration of ‘scandir64’ was here

この2つの関数、参照されてる箇所が限られてるし、リネームするなりすれば普通にコンパイル通ってしまうのですが、今度は checkinstall スクリプト本体に、rpmbuild にオプションを渡し忘れてパスが分からなくなるというバグが待ってます。

結局、大人しく git リポジトリから取ってくることにしました。

git clone http://checkinstall.izto.org/checkinstall.git

とってきたら後は普通に make, make install でインストールできます。

次に checkinstall 自身の rpm 化ですが、rpm 化には成功しても、rpm のインストール時に selinux に阻止されました。

id:comutt さんが CentOS 上で実施した解決策で、この部分については解決できます。

# checkinstall --exclude=/selinux

これでようやくFedora12上でもcheckinstallを使うことができるようになりましたが、実はこれでは動きません。
他のパッケージを checkinstall すると、mkdir に失敗してエラーが発生するという奇妙な現象に遭遇します。

これを解決するには、--fstrans=no オプションをつけて実行するか、/usr/local/checkinstallrc に以下の一文を追加します。

TRANSLATE=0

また、selinux は度々障害となるため、先ほどの exclude オプションで除外しないといけません。毎回オプション書くのが面倒であれば、以下のオプションも checkinstallrc に書く必要があります。

EXCLUDE="/selinux"

(補足:その他のオプションは、checkinstall の README に書いています)

参考リンク(既出のものは除く)