トップ 一覧 検索 ヘルプ RSS ログイン

パッケージの作成の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!パッケージの作成

!!!概要
RedhatのrpmやDebianのdpkgほど高機能ではありませんが、Solarisにもバイナリパッケージでソフトウェアをインストールする仕組みがあります。例としてApache httpdのパッケージを作成してみます。

!!!mkpkg tools
Sunの中の人がパッケージ作成を簡単に行えるmkpkg toolsというツールを作成しておられるのでそちらを使用してみます。[Solaris関係の物置き|http://blogs.sun.com/thaniwa/page/SolarisJa] からmkpkg toolsをダウンロードして適当なディレクトリに展開します。

 # wget http://blogs.sun.com/roller/resources/thaniwa/mkpkg.zip
 # unzip mkpkg.zip
 # cp mkpkg mkpinfo mkproto /usr/local/bin

mkprotoスクリプトは環境変数USERとGROUPがセットされていることを前提としているようなのですが、私の環境ではGROUPという環境変数はセットされていませんでした。GROUP環境変数がセットされていない場合は、現在のグループ名をセットするようにmkprotoを修正しました。

 mkprotoの先頭のあたりに追加
 ------------------------------
 GROUP=${GROUP:-`/usr/xpg4/bin/id -gn`}

また、preinstall, postinstall, preremove, postremoveというファイルがある場合はインストールスクリプトまたはアンインストールスクリプトとみなすようにしました。
 mkprotoの下の方のpkgprotoのパイプラインに追加
 ------------------------------
 ... | 
 awk '{
     if ( $3 ~ /preinstall|postinstall|preremove|postremove/ )
         print "i "$3
     else
         print $0
 }' >> $PROTOTYPE

変更したmkproto
{{ref mkproto}}

!!!インストールスクリプト、アンインストールスクリプト
インストールスクリプト、アンインストールスクリプトについて簡単に説明しておきます。 これらは、prototypeファイルの中で"i preinstall"のように記述します。 "i preinstall=/path/to/script"のように明示的にスクリプトファイル名を指定することもできます。
:preinstall:インストール前に実行されるスクリプト
:postinstall:インストール後に実行されるスクリプト
:preremove:アンインストール前に実行されるスクリプト
:postremove:アンインストール後に実行されるスクリプト
:preinstall:インストール前に実行するスクリプト。
:postinstall:インストール後に実行するスクリプト。
:preremove:アンインストール前に実行するスクリプト。
:postremove:アンインストール後に実行するスクリプト。

詳しくはdocs.sun.comか [SUN packaging guide|http://www.garex.net/sun/packaging/] を見てください。後者は英語ですがdocs.sun.comより簡潔でわかりやすいと思います。

!!!Apacheのパッケージを作成する
ApacheのソースにはSolarisのパッケージ作成用のスクリプト(build/pkg/buildpkg.sh)が付属していますが、それは使わずmkpkg toolsを使ってパッケージを作成してみます。

!!コンパイル
Apacheを通常通りコンパイルします。
 $ tar zxvf httpd-2.2.4.tar.gz
 $ cd httpd-2.2.4
 $ ./configure --prefix=/usr/local/apache2 --enable-so --enable-mods-shared=most
 $ gmake

適当なDESTDIRを指定してインストールします。
 $ gmake install DESTDIR=/var/tmp/pkg 

!!mkpkgの実行
インストールしたディレクトリに移動してmkpkgを実行します。

パッケージ名は、「Ticker Symbol(NASDAQ株式市場での表示シンボル。例:SUNW)+ アプリケーション名」とするのが通例のようです。NASDAQ上場企業じゃない場合はどうすればいいんでしょうかね。

 $ cd /var/tmp/pkg
 $ mkpkg httpd-2.2.4-i86pc-local -p SHhttpd -n httpd -v 2.2.4 -a i86pc

コマンドを実行すると、httpd-2.2.4-i86pc-localというパッケージがカレントディレクトリに作成されます。上の例では必須のオプションだけを指定しています。

オプションの詳細はヘルプを参照してください。
 $ mkpkg -h
 Usage of /usr/local/bin/mkpkg
 > /usr/local/bin/mkpkg output [-g] [-user <username>] [-group <group>]
              -p <pkg> -n <name> -v <version> -a <arch> [-c <category>]
             [-b <basedir>] [-d <description>] [-vd <vendor>] [-o <flag>...]
 
   output             : output file name
 
   [Details of Option]
   -g                 : create gzipped package
   -p  <pkg>          : package name (ex. SUNWgcc)
   -n  <name>         : application name (ex. gcc)
   -v  <version>      : application version (ex. 4.2.0)
   -a  <arch>         : architecuture, i86pc,sun4u...
   -c  <category>     : category of the application (ex. system, application, GNOME2)
                        (default = appilcation)
   -b  <basedir>      : base directory of the application (default = /)
   -d  <description>  : package description
   -vd <vendor>       : vendor name (default = unknown)
   -o  <flag>         : if you want to add other flags, please use it
                        (ex. -o "SUMW_PRODNAME=SunOS" -o "SUNW_PRODVERS=5.10"

!!パッケージのインストール
作成したパッケージはpkgaddコマンドでインストールできます。

 # pkgadd -d httpd-2.2.4-i86pc-local

!!!リンク

*[Solaris関係の物置き|http://blogs.sun.com/thaniwa/page/SolarisJa]
*[docs.sun.com: Application Packaging Developer's Guide|http://docs.sun.com/app/docs/doc/806-7008]
*[docs.sun.com: パッケージコマンドによるソフトウェアパッケージの管理|http://docs.sun.com/app/docs/doc/819-0378/6n2qdm04a?a=view]
*[SUN packaging guide|http://www.garex.net/sun/packaging/]