Last Update 2013年 12 月 29日
自分では spec が書けなくて…。そういう人にお薦め、Checkinstall。
tar ball だけが配布されているパッケージの場合、もちろんそのままインストールしても良いのですが、せっかくの rpm パッケージ管理システムがあるのだから、できれば rpm パッケージでインストールしたい。
ちょっと試して期待外れだったり、不要になったら -e でアンインストールも簡単にできるし、バージョン管理も確実になる。spec さえ自分で書ければ世話は無いのですが、そもそもそこまでのスキルは無いという私にとってあまりにありがたいアプリケーション。
rpm 専用ではありません。パッケージ作成の際に Slackware の tgz 形式や deb 形式も選べます。
この文書では 2010 年 3 月最新のパッケージ checkinstall-1.6.2.tar.gz について解説します。checkinstall-1.6.0.tar.gz については古い文書をお読みください。
- make が通らないとき
- checkinstall-1.6.2.tar.gz が最近のディストリビューションで make 出来ない場合の対処法
- Checkinstall を tar ball からインストール
- 汎用のインストール法
- Checkinstall を rpm からインストール
- ビルド済み RPM パッケージのダウンロードとインストール
- Checkinstall の使い方
- もっとも基本的な Checkinstall の使用法
- アンインストーラとしての Checkinstall
- make install したパッケージを checkinstall を利用して簡単にアンインストール
glibc が新しめ目のディストリビューションでは make が通らないことがあります。「git の最新版なら通る」などの情報もありますが、それでも通らない環境も。理由は glibc への対応記述が足らないだけのようです。
パッケージを展開して、/installwatch/create-localdecls に glibc のバージョン記述を追加します。
7) echo '#define GLIBC_MINOR 7' >> $OUTFILE SUBVERSION='glibc-2.7' ;; 8) echo '#define GLIBC_MINOR 8' >> $OUTFILE SUBVERSION='glibc-2.8' ;; 9) echo '#define GLIBC_MINOR 9' >> $OUTFILE SUBVERSION='glibc-2.9' ;; 10) echo '#define GLIBC_MINOR 10' >> $OUTFILE SUBVERSION='glibc-2.10' ;; 11) echo '#define GLIBC_MINOR 11' >> $OUTFILE SUBVERSION='glibc-2.11' ;; 12) echo '#define GLIBC_MINOR 12' >> $OUTFILE SUBVERSION='glibc-2.12' ;; 13) echo '#define GLIBC_MINOR 13' >> $OUTFILE SUBVERSION='glibc-2.13' ;; 14) echo '#define GLIBC_MINOR 14' >> $OUTFILE SUBVERSION='glibc-2.14' ;; *) echo 'Treated as glibc >= 2.1 (finger crossed)' echo '#define GLIBC_MINOR 1' >> $OUTFILE SUBVERSION='glibc-2.1' ;;
このように修正してから make してください。
オリジナル Web http://asic-linux.com.mx/%7Eizto/checkinstall/ の『DOWNLOAD』からパッケージをダウンロードします。
2010年 3月 6日現在の最新パッケージは checkinstall-1.6.2.tar.gz です。
インストールはパッケージ展開後に make から始めます。
注意: すべてのコマンドは意味を汲み取り、ご自身の必要な形に読み替えてください。
tar xvzf checkinstall*
cd checkinstall*
make
su
make install
これでインストールは完了したのですが、rpm を作るアプリが tar ball インストールされているのもおかしなものです。既に稼働状態に入った checkinstall を使って checkinstall を rpm パッケージに作り直して上書きインストールします。
同じディレクトリで、root ユーザで checkinstall コマンドを使います。
/usr/local/sbin/checkinstall
フルパスで起動します。checkinstall が起動して、作業の進行ごとにいくつか質問に答えることになりますが、パッケージネーム、バージョンを変更したり、という問い合わせです。tar ball をそのまま RPM パッケージを作成したいだけなら default 設定に従って [ enter ] だけでも大丈夫。
現行の checkinstall は UTUMI Hirosi さんの ja.po が取り込まれ、メッセージはかなり日本語で表示されます。
rpm パッケージが必要なら 『r』をタイプし Enter で進めます。
となれば、表示されたディレクトリにパッケージが出来上がっていますので、root 権限でインストールします。
以上の手順で tar ball が書き込んだファイル群を rpm パッケージが同じファイルで上書きします。機能自体は変わりませんが rpm コマンドで様々な情報も得られるようになります。
rpm -qli checkinstall
Name : checkinstall Relocations: (not relocatable)以上が基本の手順なのですが、ここ最近(y2010m3)、64bit 環境への対応、glibc、rpm のバージョンの差異に完全には対応ができていないのでしょうか、make が通らないことも少なくないようで、各ディストリビューションとも、patch で対応しているような状況に見えます。できる限り、ディストリビューションが供給する checkinstall パッケージを利用したほうがいいでしょう。
以下からダウンロードできる SRPM は Vine Linux 用に作成したものと機能的には同等のパッケージです (gnome アプリケーションメニューへのエントリ、アイコンは抜いてありますが)。tar ball からインストール、rpm 化して再インストールという手間を省くことができます。
たぶん、多くのディストリビューションで動くと思います。
リビルドが正常に通れば大丈夫だと思います。
32bit、64bit 両環境対応、glibc、rpm のバージョンの差異対応で、mandriva の patch を中心に取り込んであります。1.6.2 以降の git リポジトリ由来の内容は含んていません。
/usr/bin/checkinstall
/usr/bin/installwatch
/usr/lib64/checkinstall
/usr/lib64/checkinstall/checkinstallrc
/usr/lib64/checkinstall/installwatch.so
/usr/lib64/checkinstall/locale
/usr/lib64/checkinstall/locale/ja
/usr/lib64/checkinstall/locale/ja/LC_MESSAGES
/usr/lib64/checkinstall/locale/ja/LC_MESSAGES/checkinstall.mo
/usr/sbin/makepak
/usr/share/doc/checkinstall-1.6.2
/usr/share/doc/checkinstall-1.6.2/BUGS
/usr/share/doc/checkinstall-1.6.2/COPYING
/usr/share/doc/checkinstall-1.6.2/CREDITS
/usr/share/doc/checkinstall-1.6.2/INSTALL
/usr/share/doc/checkinstall-1.6.2/README
/usr/share/doc/checkinstall-1.6.2/RELNOTES
/usr/share/doc/checkinstall-1.6.2/TODO
インストールするには SRPM をリビルドし、バイナリ RPM を作成します。
rpmbuild --rebuild checkinstall*.src.rpm
バイナリ RPM をインストールします。
rpm -Uvh checkinstall*.arch(i386,x86-64}.rpm
もちろん、Vine Linux ユーザなら Plus にパッケージがありますから
apt-get install checkinstall
だけで apt が Vine Plus のバイナリパッケージをインストールしてくれて、即時利用可能になります。
ディストリビューションがパッケージとして供給していないプログラムの tar ball をダウンロードして展開し「configure」、「make」するのは通常の tar ball インストールと一緒です。
tar xvzf package-name.tar.gz (または tar xvjf package-name.tar.bzip2)
cd package-name
./configure --prefix=/usr
--prefix=hoge はインストールディレクトリを設定する設定オプション。必要ならば加えてください。
make
「configure」を行うときに prefix を指定したり、パッケージ独自の confugure オプション(./configure --help などで調べてください)を加えたりするのも通常の tar ball インストールと同様です。
「configure」の終盤で makefile が作成されているか確認してください。makefile が作成されていなければ「make」も正常に通らず、Checkinstall も作業を行えません。makefile が作成されない理由は、おおよそ以下のような原因です。
ここまではまだ checkinstall は登場していません。
checkinstall を起動します。上記からダウンロードできる checkinstall RPM は checkinstall コマンドの起動を root で行い、インストールは自動的に行われます。 checkinstall を tar ball からインストールした場合は、パッケージ作成までが行われ、インストールは別途行います。
su
checkinstall
あとは対話的にパッケージにバージョンを指定したりして作業を進めます。
checkinstall の ja.po はすべて日本語訳が当たっているのですが、メッセージは一部翻訳が表示されません。多分、オリジナルの国際化にバグがあるのだと思いますが。
http://www.vinelinux.org/docs/vine6/cui-guide/using-rpm.html 内の「『RPMパッケージの作成』を読みましたが、よく分かりません。個人的に使うアプリケーションを簡単にRPMパッケージにする方法はありませんか?」も参照してください。
tar.ball から make install したパッケージをアンインストールしたいが、アンインストールスクリプトが無い場合、いちいちすべてのファイルを調べて削除しなければならない?
そういうときにも checkinstall が役に立ちます。インストールした tar.ball パッケージを checkinstall を使って作った RPM でいったん上書きしてしまえば、後は、
rpm -e package-name
make install したときに使った configure、make をしたディレクトリが残っていれば、そこで checkinstall コマンドを走らせるだけで上書き用の RPM が作成できます。残っていない場合は prefix 先などを make install したときと合わせてください。
少し以前の話になりますが、Vine Linux ユーザの 尹 (Yun) さんがcheckinstallを利用してspecファイルを作成するスクリプトを作成されました。
http://www.kids-clinic.jp/uni/spec.html
「関心のある方がいらっしゃれば改編・再配布はご自由にどうぞ。」とおっしゃってくださっていました。
興味のある方は試してご覧になってご意見など差し上げると取り上げていただける "かも" しれません。
su - で root になった場合は /usr/local/sbin/ にパスが通っていますから
# checkinstall
とするだけで良いのですが、逆にカレントが /root に移動してしまいますので、再び cd /home/hoge/checkinstall-1.6.0( or Package-hoge ) する必要があります。
「ならば、最初から su - して全て root で作業すれば良い」と考えるかもしれませんが、パッケージビルドは一般ユーザで行った方が、トラブルの元になりにくいので安心とされています。プログラマのミスで BUILDROOT が OS の / を指定していた場合を考えてみてください(checkinstall は環境の BUILDROOT、checkinstall 内部に指定された安全な /tmp を利用するので問題はありません)。起動コマンドはフルパスを覚えてしまう方が良いでしょう。▲本文に戻る
いつもご協力いただいている、同じ Vine Linux ユーザの 加藤さんには、今回も検証等でご協力いただきました(感謝)。