パッケージの作成
はじめに
ソフトウェアを開発したのなら、インストーラーも作成する必要がある。なぜならば、どんなに優秀なソフトウェアでも、インストールすることができなければ使うことができないからだ。
Windowsであれば、アプリケーションの追加/削除を行う統一された機構があり、それらの機構を利用する開発環境が提供されている。MicrosoftはWindows InstallerというMSI形式のインストーラーを作成する機能を提供しており、サードパーティの製品としてもInstallShield等といった製品が提供されている。
Solarisでは、UNIXの伝統もあり、あまり統一的な管理を行うようにはなっていない。しかしそれでも、Sunはパッケージと呼ばれるアプリケーションの追加/削除を管理する仕掛けを用意している。
基本的な機能
「パッケージ」にすると、次のような機能を利用することができるらしい。
- 所定のパスにファイルを格納することができる。
- 格納したファイルのパーミッションを設定することができる。
- インストール時に任意のスクリプトを動作させることができる。
- 格納したファイルを削除することができる。
- アンインストール時に任意のスクリプトを動作させることができる。
どうやら、パッケージという奴は、基本的にはソフトウェア製品を構成するファイルをあらかじめ指定されたパスに格納するという機能しか無いらしい。
ただ、それでは余りにも使いにくいので、インストール時やアンインストール時にスクリプトを動作させることができるようになっているらしい。
ということは、Windowsではインストール時に設定したレジストリキーの値はアンインストール時には確実に元に戻すことを要求しているのに対して、Solarisでは、そういったことはパッケージの開発者の良心に任されるということになるらしい。まぁ、それはどうでもいいか。
配布するファイル
いきなり複雑な奴で説明すると判りにくくなるから、とりあえずテキストファイルを1つだけ配置するパッケージを作成してみる。
| パッケージ名 |
APKG |
| ファイル |
/usr/apkg/a.txt |
/usrの下にapkgというディレクトリを作って、その中にa.txtというファイルを格納する。a.txtの所有者はroot、0644というパーミッションを割り当てる事にする。
また、パッケージを開発するための作業用ディレクトリとしては、「/export/home/nabiki/projects/testpkg」を使う事にする。
配布するファイルの作成
まずしなければならないのは、パッケージ化対象のソフトウェアを「インストールされた後の状態」になるよう、ファイルを配置する事である。
ここでは、「/usr/apkg/a.txt」というファイルを作成する事になる。
Prototypeファイルの作成
次はPrototypeファイルを作成する。
Prototypeファイルを作成するためには、まず一旦下記のような内容のファイルを作成して、適当な名前で保存する。
/usr/apkg
/usr/apkg/a.txt
|
とりあえず、b.txtという名前にしておく。
このファイルには、パッケージに含めるファイルとディレクトリを1行に1つずつ記述する。
「/usr」という名前のディレクトリはあらかじめ存在するはずなので、このパッケージでは明示的に作成するようなことはしない。その為、b.txtには記述しない。しかし、もしかしたらちゃんと記述するべきなのかも知れない。
インストール対象のマシンには、「/usr/apkg」というディレクトリは存在しないはずなので記述する必要がある。
同様に、「/usr/apkg/a.txt」も、これから配布しようとしているファイルなので、記述する必要がある。
b.txtを作成したら、ここでようやく本物のPrototypeファイルを作成する事ができるようになる。
Prototypeファイルは下記のコマンドで生成する事ができる。
pkgproto < b.txt > Prototype
|
Prototypeファイルには、下記のような内容が記述されている。
d none /usr/apkg 0755 root root
f none /usr/apkg/a.txt 0644 root root
|
5つのカラムはそれぞれ、行の書かれた情報の種別、ファイル・ディレクトリの種別、パス名、パーミッション、UID、GIDを示している。
パーミッションやユーザは必要に応じて修正する必要がある。
またここでもうひとつ、Prototypeファイルに"i pkginfo"という一文を記述する必要がある。
i pkginfo
d none /usr/apkg 0755 root root
f none /usr/apkg/a.txt 0644 root root
|
これはパッケージ化に際してpkginfoというファイルを使用する為である。
なお、最初から上記のようなファイルを自分で記述してもよい。しかし、ファイル数が増えた場合はpkgprotoコマンドを作成した方が作業効率を向上することができるらしい。
pkginfoファイルの作成
次にpkginfoファイルを作成する。
pkginfoファイルのファイル名は"pkginfo"で、下記のような内容を記述する。
PKG="APKG"
NAME="A Test Package"
VERSION="1.0"
ARCH="sparc"
CLASSES="none"
CATEGORY="utility"
VENDOR="nabiki_t"
PSTAMP="060520"
EMAIL="nabiki_t@XXXXXX"
ISTATES="S s 1 2 3"
RSTATES="S s 1 2 3"
BASEDIR="/"
|
記述する内容は大体見たとおりのものだが、詳細はこのページに記載している。
パッケージの作成
Prototypeとpkgnfoの両ファイルを作成したら、ようやくパッケージを作成することができるようになる。
パッケージを作成するにはpkgmkというコマンドを使用する。
特に指定しないと、Prototypeファイルはカレントディレクトリにある"Prototype"という名前のファイルを参照し、pkginfoファイルはカレントディレクトリの"pkginfo"ファイルを参照する。
コマンドを実行すると、下記のようなメッセージが表示されて、カレントディレクトリに"APKG"というディレクトリが作成される。
## prototype ファイルから pkgmap を作成中です。
## pkginfo ファイルを処理中です。
警告: </usr> のディレクトリ項目がありません。
## pkgmap の 2 個の項目をボリューム単位で分割しようとしています。
第 1 部-- 13 ブロック, 7 エントリ
## 1 部をパッケージ処理中です。
/export/home/nabiki/projects/testpkg/APKG/pkgmap
/export/home/nabiki/projects/testpkg/APKG/pkginfo
/export/home/nabiki/projects/testpkg/APKG/root/usr/apkg/a.txt
## 制御スクリプトの妥当性検査中です。
## パッケージ処理は完了しました。
|
Prototypeファイルに/usrというディレクトリに関する記述がないから警告が表示されるが、これは無視しても構わないらしい。
パッケージのインストール
pkgmkコマンドを実行して作成された"APKG"というディレクトリがパッケージである。パッケージができたら、とりあえず試しにパッケージをインストールしてみる。
一旦、「/usr/apkg」にあるファイルを削除してから、root権限で下記のコマンドを実行してみる。
"-d ."は、インストールするべきパッケージを検索するパスを指定している。このように指定することで、置かれんとディレクトリにあるパッケージ(すなわち"APKG")をインストールすることができる。
パッケージのインストールに成功したら、「/usr/apkg/a.txt」が生成されていること、及びファイルの所有者やパーミッションが正しく設定されていることを確認して欲しい。
単一のファイルにまとめる
生成されたディレクトリをzipか何かで固めて配布したって良いのだろうが、何となくディレクトリのままだと「パッケージ」だという気分がしなから、単一のファイルにまとめたい気もする。
生成されたパッケージを1個のファイルにまとめるには、pkgtransというコマンドを使う。
このコマンドを入力すると、変換するパッケージを聞かれるから、それに答えてやると"APKG.pkg"という名前の単一のファイルにまとまったパッケージが生成される。
また、単一ファイルにまとめたパッケージは、下記のコマンドでインストールすることができる。
|