『checkinstall を使ってみよう』

初出:Software Design 2002年11月号
	大特集「究めるPlamo Linux クライアント編 
	3章○自分だけのPlamoを楽しむ〜MyPlamo作成術」
Checkinstall は Slackware, RPM, Debian などに互換のパッケージを作成 することができるプログラムです。デフォルトは Slackware になっています。 ここでは Plamo Linux のベースとなっている Slackware での使い方について 説明します。
  読者のみなさんも、自分のコンピュータにインストールしたプログラムを消す
時にどうしようかと悩んだことがあると思います。最近は Makefile の中に
uninstall のルールが書かれたたものもありますが、まだ少ないと思います。
そんなときは checkinstall でパッケージにしてみましょう。Slackwareベース
の Plamo Linux でも installpkg コマンドでインストールしたパッケージを
removepkg コマンドで削除できます。
  checkinstallはデフォルトで 'make install' を実行します。インストール
実行時のログが installwatch プログラムを通して記録されます。installwatch
プログラムは checkinstall プログラムのソースアーカイブに一緒に梱包されて
います。
  checkinstall については、
   http://asic-linux.com.mx/~izto/checkinstall/

に説明があります。


= checkinstallのインストール =

インストールの仕方は、まず、プログラムのアーカイブをを次のURI:
http://asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.5.2.tgz 
からダウンロードします。そして、以下のように

     # tar xvfz checkinstall-1.5.2.tgz
     # cd checkinstall-1.5.2/
     # make
     # make install

一般的なインストール手順にて行いますが、最後に checkinstall を実行します。

     # checkinstall

次のように途中で質問があるのでそれに答えて行きます。

--
.....
======================== Installation succesful ==========================

Copying files to the temporary directory...OK

Striping ELF binaries...OK

Compressing man pages...OK

Building file list...OK

Please choose the packaging method you want to use.
Slackware [S], RPM [R] or Debian [D]? S<<RETURN



This package will be built according to these values: 

1 -  Summary: [ CheckInstall installations tracker, version 1.5.2 ]
2 -  Name:    [ checkinstall ]
3 -  Version: [ 1.5.2 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ Applications/System ]
7 -  Architecture: [ i386 ]
8 -  Source location: [ checkinstall-1.5.2 ]
9 -  Alternate source location: [  ]

Enter a number to change any of them or press ENTER to continue: 9<<RETURN
Enter the alternate source location: 
>> http://asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.5.2.tgz<<RETURN

This package will be built according to these values: 
1.	.....
9 -  Alternate source location: [ http://asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.5.2.tgz ]

Enter a number to change any of them or press ENTER to continue: <<RETURN

********************************************
**** Slackware package creation selected ***
********************************************

Preparing Slackware install directory...OK

Writing Slackware install script...OK

Creating package checkinstall-1.5.2-i386-1...OK

Installing package...OK

Erasing temporary files...OK

Writing backup package...OK

Deleting temp dir...OK


**********************************************************************

 Done. The new package has been installed and saved to
 /opt/Package/checkinstall-1.5.2/checkinstall-1.5.2-i386-1.tgz

 You can remove it from your system anytime using: 

      removepkg checkinstall-1.5.2-i386-1

**********************************************************************
--

そして、checkinstall-1.5.2-i386-1.tgz という名前で checkinstall のパッ
ケージができあがります。


= checkinstallの使い方 =

  このように、checkinstall を引数なしで実行すると(デフォルトでは)、
make install を行い、インストールしたものをパッケージにしてくれます。
checkinstall にインストール時に実行するコマンドラインを引数として
渡すこともできます。たとえば、
    checkinstall make install	(デフォルト)
    checkinstall modues_install
    checkinstall install.sh
    checkinstall setup
などのようにも使えます。

 Checkinstall は内部で installwatch を使って引数のコマンドラインを実
行し、その出力ログをもとにインストールされたプログラムのパス名を抽出し、
makepak プログラムを使ってパッケージにしてくれます。makepak プログラム
は Slackware の makepkg の改良版ですが、checkinstall の中の MAKEPKG 変
数で定義されていて、これを変更することで好みのパッケージャを利用するこ
ともできます。
  checkinstall でパッケージをつくるときの Slackware との 違いは、
description-pak というファイルにパッケージの説明を含められることです。
もしこのファイルが無い場合はコマンド実行時に聞いてきます。
  ドキュメントは doc-pak/ サブディレクトリの下にコピーしておくとパッ
ケージにする際に一緒に入れてくれます。

 Checkinstall のカスタマイズは checkinstallrc に記述することができます。
デフォルトでは /usr/local/lib/checkinstall/checkinstallrc にあります。
カスタマイズできる項目は下表のとおりです。

表
------------------------------------------------------------------------------
o DEBUG: デバグレベル               (Default: 0)
   0 => デバグ無し/1 => パッケージのファイル以外を残す/3 => すべて残す
   
o INSTALLWATCH_PREFIX: installwatch のライブラリのインストール先プレフィクス
   
o INSTALLWATCH: installwatch プログラムの場所

o BASE_TMP_DIR: checkinstall の一時ファイル/ディレクトリのプレフィクス
   "/tmp" や "/" には決してしないこと。
   "/tmp" のパーミションが 700に変わってしまったり、"rm -rf /*" で
   ファイルが無くなってしまうので。

o DOC_DIR: 文書ファイルがインストールされる場所。

o ARCHITECTURE: デフォルトのターゲットアーキテクチャ  (Default: empty)
   デフォルトで自動検出。

o INSTYPE: 作ろうとしているパッケージの種類       (Default: empty)
   "S" は Slackware の .tgz, "R" は RedHat 系の .rpm, 
   "D" は Debian。デフォルトだと聞いてくれる。

o RPM_FLAGS: RPM コマンドのオプションフラグ。

o DPKG_FLAGS: dpkg コマンドのオプションフラグ。

o PAK_DIR: パッケージを保存するディレクトリ。
   指定が無ければそのディレクトリになる。 


o SHOW_INSTALL: Boolean  (0 or 1)  (Default: 1)
   インストールコマンドの出力を表示するかしないか。インターラクティブ用。

o SHOW_SLACK_INSTALL: Boolean  (0 or 1)  (Default: 0)
   Slackware の installpkg コマンドの出力を表示するかしないか。インターラクティブ用。

o DEL_DOCPAK: Boolean (Default: 1)
   プログラム終了時に "doc-pak" ディレクトリを消去するかしないか。

o DEL_SPEC: Boolean   (Default: 1)
   プログラム終了時に .spec ファイルを消去するかしないか。

o DEL_DESC: Boolean   (Default: 1)
   プログラム終了時に "description-pak" ファイルを消去するかしないか。

o STRIP_ELF: Boolean  (Default: 1)
   パッケージの中に ELF バイナリを見つけたときにストリップするかしないか。

STRIP_SO_ELF: Boolean (Default: 0)
   すべての ELF 共有ライブラリを自動的にストリップするかしないか。
   Note: STRIP_ELF=0 のときは自動的に "0" となる。

o COMPRESS_MAN: Boolean (Default: 1)
   man ファイルを自動的に圧縮するかしないか。

o BACKUP: Boolean (Default: 1)
   パッケージのインストールで上書きされるファイルをバックアップするかしないか。

o AUTODOINST: Boolean (Default: 1)
   パッケージをインストール際に起動される doinst.sh スクリプトを書くかどうか。

o EXCLUDE: (カンマ区切りのリスト)
   パッケージに納めるファイルを探すときに無視をするファイルとディレクトリ。

o ACCEPT_DEFAULT: Boolean (Default: 0)
  すべての質問にデフォルト値を受け入れる。
------------------------------------------------------------------------------

  checkinstall をコマンドラインで '-h' または '--help' を引数として実
行すると下記リストのような引数の説明が表示されます。

    % checkinstall  -h

リスト
==================================
checkinstall 1.5.2, Copyright 2001 Felipe Eduardo Sanchez Diaz Duran
           This software is released under the GNU GPL.

Usage: checkinstall [options] [command [command arguments]]
Options:

*Package type selection*

-t,--type=<slackware|rpm|debian> Choose packaging system
-S                               Build a Slackware package
-R                               Build a RPM package
-D                               Build a Debian package

*Scripting options*

-y, --default                  Accept default answers to all questions
--pkgname=<name>               Set name
--pkgversion=<version>         Set version
-A, --arch, --pkgarch=<arch>   Set architecture
--pkgrelease=<release>         Set release
--pkglicense=<license>         Set license
--pkggroup=<group>             Set software group
--pkgsource=<source>           Set source location
--pkgaltsource=<altsource>     Set alternate source location
--pakdir=<directory>           The new package will be saved here
--maintainer=<email addr>      The package maintainer (.deb)
--provides=<list>              Features provided by this package (.rpm)
--rpmflags=<flags>             Pass this flags to the rpm installer
--dpkgflags=<flags>            Pass this flags to the dpkg installer
--spec=<path>                  .spec file location
--nodoc                        Do not include documentacion files

*Info display options*

-d<0|1|2>                      Set debug level
-si                            Run an interactive install command
--showinstall=<yes|no>         Toggle interactive install command
-ss                            Run an interactive Slackware installation script
--showslack=<yes|no>           Toggle interactive Slackware installation script
--exclude=<file|dir[,...]>     Exclude files/directtories from the package

*Package tuning options*

--autodoinst=<yes|no>          Toggle the creation of a doinst.sh script
--strip=<yes|no>               Strip any ELF binaries found inside the package
--stripso=<yes|no>             Strip any ELF binary libraries (.so files)
--gzman=<yes|no>               Compress any man pages found inside the package
--docdir=<path>                Where to put documentation files

*Cleanup options*

--deldoc=<yes|no>              Delete doc-pak upon termination
--deldesc=<yes|no>             Delete description-pak upon termination
--delspec=<yes|no>             Delete spec file upon termination
--bk                           Backup any overwritten files
--backup=<yes|no>              Toggle backup

*About CheckInstall*

--help, -h                     Show this message
--copyright                    Show Copyright information
--version                      Show version information

==================================

= installwatch プログラムとは =

  既にのべたように checkinstall は installwatch というプログラムを内部
で利用していますが、この installwatch プログラムもまた面白い機能を持ち
ます。このプログラムは次のように実行できます。

	installwatch -o <filename> <command>

<command> は実行するコマンドラインで、引数に "-o" オプションで
<filename> にログの出力ファイルを指定できるのですが、この指定が無い場
合は出力は syslog(3) へと送られます。syslog のプライオリティは
(LOG_USER | LOG_INFO | LOG_PID)ですので、これを拾ってシステムのログに
出すことができます。
  たとえば、/etc/syslog.conf に
  --
  user.*                  /var/log/install
  --
を追加して、

    # kill -HUP `pidof syslogd`

で syslogd を初期化します。そして、先ほどの checkinstall プログラムの
インストールを次のように行うと、

    # installwatch make install

  /var/log/install ファイルには次のようにログが出力されます。

--
Sep 13 20:15:50 mango sh: 3^Iopen^I/dev/tty^I#success 
Sep 13 20:16:21 mango cp: 4^Iopen^I/usr/sbin/checkinstall^I#success 
Sep 13 20:16:21 mango cp: 4^Iopen^I/usr/sbin/makepak^I#success 
Sep 13 20:16:21 mango sh: 3^Iopen^I/dev/tty^I#success 
Sep 13 20:16:21 mango rm: 0^Iunlink^I/usr/lib/installwatch.so^I#success 
Sep 13 20:16:21 mango sh: 3^Iopen^I/dev/tty^I#success 
Sep 13 20:16:21 mango sh: 3^Iopen^I/usr/bin/installwatch^I#success 
Sep 13 20:16:21 mango chmod: 0^Ichmod^I/usr/bin/installwatch^I00755^I#success 
Sep 13 20:16:21 mango mkdir: -1^Imkdir^I/usr/lib/checkinstall^I#File exists 
Sep 13 20:16:21 mango cp: 4^Iopen^I/usr/lib/checkinstall/checkinstallrc^I#succes
--

この、installwatch プログラムも使い方によってはとても面白いことも考え
られそうですね。


(c) 2002-2003 juk at yokohama email ne jp