ホーム 主筆 その他ソフト その他情報 Syuhitu.org English

Windows関連

スクリーンセーバー作成法

半透明ウインドウの性能

bootfont.bin

キャビネット形式

ウインドウスタイルをいじる

Java製ソフトをServiceに登録する

イベントログにメッセージを出力する

コントロールパネルにアイコンを追加する

スクリプトによる拡張1

スクリプトによる拡張2

ガジェットの作成

大容量メモリ

メモリ搭載量の下限に挑む

スパースファイルにする

表示されるアイコンの種類を調べてみた

メモリマップIOとエラー処理

ファイルを作る順番と速度の関係

Cryptography API: Next Generationを使う

Windows 10のアクセントカラー

iSCSIディスクにバックアップを取る

サーバプロセスを分離して実装する

サーバプロセスを分離して実装する - F#

レジストリに大量に書き込む

Solaris関連

OpenGL

Solaris設定

ディレクトリの読み込み

主筆プラグイン開発

マルチスレッドでの開発

door

音を出す

Blade100の正しい虐め方

パッケージの作成

画像入出力

BMPファイル

ICOファイル

ANIファイル

JPEGファイル

減色アルゴリズム

減色アルゴリズムの並列化

その他アルゴリズムなど

自由軸回転

Base64

文字列操作

CPU利用率の取得

正規表現ライブラリ

メタボールを作る

メタボールを作る2

正規表現とNFA・DFA

C言語の構文解析

液晶ディスプレイを解体してみた

iSCSIの理論と実装

単一フォルダにファイルを沢山作る

USB-HUBのカスケード接続

SafeIntの性能

VHDファイルのフォーマット

USBメモリに書き込み続けてみた

パッケージの作成

2006年5月28日公開

はじめに

ソフトウェアを開発したのなら、インストーラーも作成する必要がある。なぜならば、どんなに優秀なソフトウェアでも、インストールすることができなければ使うことができないからだ。

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というコマンドを使用する。

pkgmk -r / -d .

特に指定しないと、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権限で下記のコマンドを実行してみる。

pkgadd -d .

"-d ."は、インストールするべきパッケージを検索するパスを指定している。このように指定することで、置かれんとディレクトリにあるパッケージ(すなわち"APKG")をインストールすることができる。

パッケージのインストールに成功したら、「/usr/apkg/a.txt」が生成されていること、及びファイルの所有者やパーミッションが正しく設定されていることを確認して欲しい。

単一のファイルにまとめる

生成されたディレクトリをzipか何かで固めて配布したって良いのだろうが、何となくディレクトリのままだと「パッケージ」だという気分がしなから、単一のファイルにまとめたい気もする。

生成されたパッケージを1個のファイルにまとめるには、pkgtransというコマンドを使う。

pkgtrans . APKG.pkg

このコマンドを入力すると、変換するパッケージを聞かれるから、それに答えてやると"APKG.pkg"という名前の単一のファイルにまとまったパッケージが生成される。

また、単一ファイルにまとめたパッケージは、下記のコマンドでインストールすることができる。

pkgadd -d APKG.pkg


連絡先 - サイトマップ - 更新履歴
Copyright (C)  2000 - 2016 nabiki_t All Rights Reserved.