akishin999の日記

調べた事などを書いて行きます。

64bit 版 CentOS での CheckInstall 導入方法

このところ CheckInstall の挙動についていろいろと調べていました。
検証に際して使用していた 64bit 版 CentOS での導入方法を整理しておきます。

確認した環境は CentOS 5.9 x86_64 ですが、CentOS 6 系でもほぼ同じ方法でいけると思います。

また、事前に git を使えるようにしておく必要があります。
ここでは RPMforge を追加してインストールした git を使用しました。

まずは依存パッケージをインストール。

# yum install -y gettext rpm-build

CheckInstall の本体は git リポジトリにあるものが最新なので、そちらからソースコードを取得しました。

# cd /usr/local/src/
# git clone http://checkinstall.izto.org/checkinstall.git

CentOS に合わせ、いくつか設定ファイルの内容を変更します。

# cd checkinstall
# sed -i 's|MAKEPKG=/sbin/makepkg|MAKEPKG=|' checkinstallrc-dist
# sed -i 's|INSTYPE=""|INSTYPE="R"|' checkinstallrc-dist
# sed -i 's|TRANSLATE=1|TRANSLATE=0|' checkinstallrc-dist
# sed -i 's|EXCLUDE=""|EXCLUDE="/selinux"|' checkinstallrc-dist
# sed -i 's|/lib|/lib64|' installwatch/Makefile
# sed -i 's|CONFDIR=$(PREFIX)/lib/checkinstall|CONFDIR=$(PREFIX)/etc|' Makefile
# sed -i '66s|^$|CHECKINSTALLRC=$INSTALLDIR/etc/checkinstallrc|' checkinstall

上から順に以下のような変更を行っています。

  • /sbin/makepkg は不要なので空に
  • 作成されるパッケージをデフォルトで RPM にする
  • fstrans=no をデフォルト
  • /selinux を除外
  • installwatch.so のインストール先を /usr/local/lib64 に変更
  • 設定ファイルの配置場所を /usr/local/etc に変更
  • スクリプトが見る設定ファイルの場所を /usr/local/etc/checkinstallrc に変更

一部の設定に関しては実行時のオプションでも指定可能なのですが、ここではデフォルトを指定するために設定ファイルの雛形を置換しました。

make してインストール。

# make
# make install

バージョンを確認して表示されたらインストール成功です。

# checkinstall -v

インストールした CheckInstall を使用して CheckInstall 自身の RPM を作成します。
途中の質問は全てデフォルトで問題ないはずです。
(ちなみに、CentOS 6.3 の場合は以下を実行する前に「mkdir -p /root/rpmbuild/SOURCES」してディレクトリを作成しておく必要があるようです。)

# checkinstall

生成された RPM パッケージの内容を確認します。
今回は CheckInstall 自身なので恐らく問題はありませんが、ソフトウェアによっては RPM 内に必要なファイルが含まれていない、などといった問題が起きることがあるので、必ず生成された RPM ファイルの中身は確認した方が良いです。

# rpm -qlp /usr/src/redhat/RPMS/x86_64/checkinstall-20130220-1.x86_64.rpm

問題がなければ 生成された RPM をインストールします。

# rpm -ivh /usr/src/redhat/RPMS/x86_64/checkinstall-20130220-1.x86_64.rpm

ここで、念のためちゃんとアンインストール出来るかも確認しておきます。
$HOME に移動し、rpm -e を実行してアンインストールします。

# cd ~
# rpm -e checkinstall

更に念のため rpm -qa も実行してパッケージが確実にアンインストールされたことを確認します。
updatedb して locate するともっと確実かも知れません。

# rpm -qa | grep checkinstall

checkinstall コマンドを実行して以下のようにコマンドが確実にアンインストールされていることが確認できれば OK です。

# checkinstall
-bash: /usr/local/sbin/checkinstall: そのようなファイルやディレクトリはありません

問題がなければ再度 RPM をインストールしておきます。

# rpm -ivh /usr/src/redhat/RPMS/x86_64/checkinstall-20130220-1.x86_64.rpm

CheckInstallRPM ファイルの作成時に make install を実行するようなので、実際には RPM ファイルは正常に生成されていないのに make install でコマンドがインストールされているために実行できてしまったりします。
そのため一見上手く RPM が作成されたと勘違いしてしまうといった事も起こるようです。

そのままにしておいた場合、後々 rpm -e したのにコマンドが残ってしまったりと、アップデートの際などに問題になることもあるので、実際に業務等で使用する際には、生成された RPM を同一 OS の別マシンに持って行って正常にインストール / アンインストールが行えるかをきちんと確認しておいた方が安心です。

参考

ngyuki/checkinstall GitHub
https://github.com/ngyuki/checkinstall

CentOS 6.xにCheckInstallをインストール、RPMを生成する際のコツ - 理想未来はどうなった?
http://d.hatena.ne.jp/pcmaster/20120916/p1

CentOS 6.3 に checkinstall をインストールする - パンダのメモ帳
http://shogogg.hatenablog.jp/entry/2012/12/20/001457