Oracle Solarisのパッケージ化(管理者向け)

OTNのシステム管理者/開発者コミュニティのハンズオン・ラボ

Glynn Foster著

このラボでは、Oracle Solaris 11でNagios用に新しいソフトウェア・パッケージを作成するために必要なものを示します。


2013年11月公開


この記事についてコメントする場合は、リンクをFacebookのOTN Garageのページに投稿してください。同様の記事を共有する場合は、FacebookまたはTwitterに投稿してください。みんなで議論しましょう。
目次
はじめに
前提条件
環境
ラボの概要
ラボの目標
演習1:Nagiosのビルド
演習2:パッケージ・マニフェストの作成
演習3:パッケージの公開とインストール
演習4:サービス管理機能サービスの作成
演習5:追加のタスク
参考資料
著者について

はじめに

Nagiosは、広く使用されているオープン・ソースのシステム、ネットワーク、およびインフラストラクチャ監視アプリケーションです。Nagiosは、サーバー、スイッチ、アプリケーション、サービスに関する監視および警告サービスを提供します。

このラボでは、Oracle Solaris 11でNagios用に新しいソフトウェア・パッケージを作成するために必要なものを示します。また、新しいパッケージをパッケージ・リポジトリに公開し、それをシステムにインストールします。さらに、このアプリケーションをオペレーティング・システムに統合し、独自のサービス可用性およびセキュリティ機能を利用してこのアプリケーションをOracle Solaris 11のファーストクラス・オブジェクトにする別の方法についても学習します。

前提条件

Oracle Solaris 11システム(新しいパッケージ・システムを含む)の管理に関する基本的な知識があると、学習をスムーズに進めることができます。

環境

Oracle VM VirtualBoxを使用して、Oracle Solaris 11仮想マシンで作業を行います。Oracle Solaris 11仮想マシンは、このラボに関するかぎり、ベアメタル・インスタンスとして扱うことができます。仮想マシンは、Oracle Solaris 11とともに事前にインストールされています。

このラボでは、表1のログイン資格証明を使用します。ouserアカウントには、rootロールが割り当てられています。他のオペレーティング・システムと異なり、Oracle Solaris 11では、監査上の理由から、rootでシステムに直接ログインすることはできず、個別のユーザー・アカウントでログイン後にrootロールを継承する必要があります。

表1:ログイン資格証明
ユーザーID パスワード
ouser Oracle 123
root solaris11

ラボの概要

このラボは、多数の基本的な管理タスクを説明する多数の異なる演習に分かれています。各演習は、相互に独立しています。

演習の最後には、より高度な管理を学習したい場合のために追加のタスクが用意されています。これらの追加タスクを完了するための手順は示されていないため、必要に応じて、製品ドキュメント、オンラインHow-Toガイド、およびマニュアル・ページを参照してください。

表2:演習
演習 タイトル 学習内容
1 Nagiosのビルド
  • GCCのインストール
  • Nagiosのコンパイル
2 パッケージ・マニフェストの作成
  • パッケージ・メタデータの作成
  • ファイルおよびディレクトリ・リストの作成
  • 依存関係の評価
3 パッケージの公開とインストール
  • パッケージ・リポジトリの作成
  • パッケージの公開
  • パッケージのインストール
4 サービス管理機能サービスの作成
  • Oracle Solarisのサービス管理機能によるマニフェストの作成
  • パッケージ・マニフェストへのサービス管理機能マニフェストの追加
  • パッケージの再公開
  • パッケージの更新
5 追加のタスク
  • パッケージへのユーザーおよびグループの追加
  • 配布用のパッケージ・アーカイブの作成
  • 新しいパッケージ・リポジトリの作成とそのリポジトリへのパッケージの転送

ラボの目標

このラボを終了すると、Oracle Solaris 11におけるパッケージの作成と公開に関する基本的な知識を得ることができます。さらに、アプリケーション可用性のためのサービス管理機能サービスの追加やアプリケーションのセキュリティ強化の基本といった、アプリケーションをより完全にオペレーティング・システムに統合するために必要な手順を理解することができます。製品ドキュメント、マニュアル・ページ、またはオンラインHow-To記事を参照することにより、より高度な管理タスクも容易に調べて実行することができます。また、ヘルプ情報の入手先も知ることができます。

演習1:Nagiosのビルド

最初の作業は、Nagiosのビルドです。GCCソフトウェア・コンパイラを使用することにより、簡単にPROTO領域にインストールできます。PROTO領域は、基本的には、実行可能ファイル、ライブラリ、ドキュメント、およびその他の任意の付随ファイルをパッケージに容易に収集できるようにする、ファイル・システム上の隔離された場所です。

このラボでは、次のコマンドを実行して、rootロールを取得します。

ouser@solaris:~$ su -
Password: solaris11
root@solaris:~# 

まずは、pkg searchコマンドを使用してGCCコンパイラを検索しましょう。

ouser@solaris:~$ su -

Password: solaris11
root@solaris:~# pkg search -p gcc
PACKAGE                                                   PUBLISHER
pkg:/developer/gcc-3@3.4.3-0.175.1.0.0.24.0               solaris
pkg:/developer/gcc-45@4.5.2-0.175.1.0.0.24.0              solaris
pkg:/library/gc@7.2-0.175.1.0.0.17.0                      solaris
pkg:/system/library/gcc-3-runtime@3.4.3-0.175.1.0.0.24.0  solaris
pkg:/system/library/gcc-45-runtime@4.5.2-0.175.1.0.0.24.0 solaris

Nagiosをコンパイルするためにdeveloper/gcc-45パッケージを使用します。そのために、pkg installコマンドを使用して、このパッケージをインストールしましょう。

root@solaris:~# pkg install gcc-45

           Packages to install:  5
       Create boot environment: No
Create backup boot environment: No
            Services to change:  1

DOWNLOAD                       PKGS         FILES    XFER (MB)   SPEED
Completed                       5/5     1154/1154  111.3/111.3  1.5M/s

PHASE                                          ITEMS
Installing new actions                     1490/1490
Updating package state database                 Done 
Updating image state                            Done 
Creating fast lookup database                   Done 

NagiosはPHPアプリケーションであるため、PHPパッケージもインストールしましょう。

root@solaris:~# pkg install web/php-53 apache-php53

Nagiosアプリケーション(バージョン3.5.0)をhttp://www.nagios.orgからダウンロードしてください。その後、そのtarballを解凍します。


root@solaris:~# tar -zxf files/nagios-3.5.0.tar.gz 
root@solaris:~# cd nagios
root@solaris:~/nagios# ls
base            functions       Makefile.in     subst.in
cgi             html            mkpackage       t
Changelog       include         module          t-tap
common          indent-all.sh   nagios.spec     tap
config.guess    indent.sh       OutputTrap.pm   THANKS
config.sub      install-sh      p1.pl           tools
configure       INSTALLING      pkg             update-version
configure.in    LEGAL           pkginfo.in      UPGRADING
contrib         LICENSE         README          xdata
daemon-init.in  make-tarball    sample-config

ここで、アプリケーションのコンパイル先として使用するPROTO領域を作成しましょう。

root@solaris:~/nagios# mkdir ../PROTO


これで、アプリケーションをビルドする準備が整いました。Nagiosは、標準のconfigureコマンドを使用して環境をチェックします。また、Nagiosは、デフォルトの構成を使用して/usr/localプリフィックスにインストールします。

root@solaris:~/nagios# ./configure 
checking for a BSD-compatible install... /usr/bin/ginstall -c
checking build system type... i386-pc-solaris2.11
checking host system type... i386-pc-solaris2.11
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... 
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
....
*** Configuration summary for nagios 3.5.0 03-15-2013 ***:

 General Options:
 -------------------------
        Nagios executable:  nagios
        Nagios user/group:  nagios,nagios
       Command user/group:  nagios,nagios
            Embedded Perl:  no
             Event Broker:  yes
        Install ${prefix}:  /usr/local/nagios
                Lock file:  ${prefix}/var/nagios.lock
   Check result directory:  ${prefix}/var/spool/checkresults
           Init directory:  /etc/init.d
  Apache conf.d directory:  /etc/httpd/conf.d
             Mail program:  /usr/bin/mail
                  Host OS:  solaris2.11

 Web Interface Options:
 ------------------------
                 HTML URL:  http://localhost/nagios/
                  CGI URL:  http://localhost/nagios/cgi-bin/
 Traceroute (used by WAP):  /usr/sbin/traceroute

Review the options above for accuracy.  If they look okay,
type 'make all' to compile the main program and CGIs.

root@solaris:~/nagios# 

このように表示されれば、正しく構成されているので、gmake allターゲットを使用して、GCCによるこのパッケージのコンパイルを開始できます。

root@solaris:~/nagios# gmake all
cd ./base && gmake
gmake[1]: Entering directory `/root/nagios/base'
gcc -Wall -g -O2 -DHAVE_CONFIG_H -DNSCORE   -c -o broker.o broker.c
gcc -Wall -g -O2 -DHAVE_CONFIG_H -DNSCORE   -c -o nebmods.o nebmods.c
gcc -Wall -g -O2 -DHAVE_CONFIG_H -DNSCORE -c -o ../common/shared.o ../common/shared.c
gcc -Wall -g -O2 -DHAVE_CONFIG_H -DNSCORE   -c -o checks.o checks.c
gcc -Wall -g -O2 -DHAVE_CONFIG_H -DNSCORE   -c -o config.o config.c
....
If you have questions about configuring or running Nagios,
please make sure that you:

     - Look at the sample config files
     - Read the documentation on the Nagios Library at:
           http://library.nagios.com

before you post a question to one of the mailing lists.
Also make sure to include pertinent information that could
help others help you.  This might include:

     - What version of Nagios you are using
     - What version of the plugins you are using
     - Relevant snippets from your config files
     - Relevant error messages from the Nagios log file

For more information on obtaining support for Nagios, visit:

       http://support.nagios.com

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

Enjoy.

root@solaris:~/nagios#

すべてのコンパイルが完了したら、gmake installgmake install-commandmode、およびgmake install-configターゲットを使用して、DESTDIRコマンドライン置換により、コンパイルされたバイナリとサンプル構成をPROTO領域にインストールします。この作業を正常に完了するために、nagiosユーザーとnagiosグループを作成する必要があります。これは、useraddコマンドとgroupaddコマンドを使用して簡単に実行できます。

root@solaris:~/nagios# groupadd nagios
root@solaris:~/nagios# useradd -g nagios nagios
root@solaris:~/nagios# gmake install DESTDIR=/root/PROTO
cd ./base && gmake install
gmake[1]: Entering directory `/root/nagios/base'
gmake install-basic
gmake[2]: Entering directory `/root/nagios/base'
/usr/bin/ginstall -c -m 775 -o nagios -g nagios -d /root/PROTO/usr/local/nagios/bin
/usr/bin/ginstall -c -m 774 -o nagios -g nagios nagios /root/PROTO/usr/local/nagios/bin
/usr/bin/ginstall -c -m 774 -o nagios -g nagios nagiostats /root/PROTO/usr/local/nagios/bin
....
make install-config
     - This installs sample config files in /root/PROTO/usr/local/nagios/etc

gmake[1]: Leaving directory `/root/nagios'

root@solaris:~/nagios# gmake install-commandmode DESTDIR=/root/PROTO
/usr/bin/ginstall -c -m 775 -o nagios -g nagios -d /root/PROTO/usr/local/nagios/var/rw
chmod g+s /root/PROTO/usr/local/nagios/var/rw

*** External command directory configured ***

root@solaris:~/nagios# gmake install-config DESTDIR=/root/PROTO

/usr/bin/ginstall -c -m 775 -o nagios -g nagios -d /root/PROTO/usr/local/nagios/etc
/usr/bin/ginstall -c -m 775 -o nagios -g nagios -d /root/PROTO/usr/local/nagios/etc/objects
/usr/bin/ginstall -c -b -m 664 -o nagios -g nagios sample-config/nagios.cfg /root/PROTO/usr/local/nagios/etc/nagios.cfg
/usr/bin/ginstall -c -b -m 664 -o nagios -g nagios sample-config/cgi.cfg /root/PROTO/usr/local/nagios/etc/cgi.cfg
....
*** Config files installed ***

Remember, these are *SAMPLE* config files.  You'll need to read
the documentation for more information on how to actually define
services, hosts, etc. to fit your particular needs.

root@solaris:~/nagios#

これで、すべてのビルドとインストールが正常に完了しました。ここで、PROTOディレクトリの内容を確認できます。

root@solaris:~/nagios# ls ../PROTO/usr/local/nagios
bin    etc    lib    sbin   share  var
root@solaris:~/nagios# ls ../PROTO/usr/local/nagios/bin/
nagios      nagiostats
root@solaris:~/nagios# cd ..

root@solaris:~#

PROTO領域に多数のディレクトリ(binlibsbinsharevar)があることが分かります。binディレクトリ内には2つの実行可能ファイル(nagiosnagiostats)があります。これで、これらのバイナリをこのディレクトリから簡単に実行できますが、このハンズオン・ラボでは、Oracle SolarisのImage Packaging System機能を使用してパッケージを作成し、パッケージ・マニフェストについて学習します。

演習2:パッケージ・マニフェストの作成

各パッケージの背後には、そのパッケージの構築方法が記述されたパッケージ・マニフェストがあります。パッケージ・マニフェストには、パッケージ名、バージョン、およびパッケージの依存関係に関する情報と、ファイル、ディレクトリ、リンクなどのパッケージの内容のリストが含まれています。リポジトリに公開するプロセスの一部として、Nagiosパッケージのマニフェストを作成する必要があります。

次のように、pkg contentsコマンドを、-mオプションを使用して実行することにより、一般的なパッケージ・マニフェストを調べることができます。

root@solaris:~/nagios# pkg contents -m gzip
set name=pkg.fmri value=pkg://solaris/compress/gzip@1.4,5.11-0.175.1.0.0.24.0:20120904T170603Z
set name=org.opensolaris.consolidation value=userland
set name=pkg.summary value="GNU Zip (gzip)"

set name=pkg.description value="The GNU Zip (gzip) compression utility"
set name=info.source-url value=ftp://ftp.gnu.org/gnu/gzip/gzip-1.4.tar.gz
set name=info.classification value="org.opensolaris.category.2008:Applications/System Utilities"
set name=info.upstream-url value=http://www.gnu.org/software/gzip/
set name=org.opensolaris.arc-caseid value=PSARC/2000/488
set name=variant.arch value=i386 value=sparc
depend fmri=pkg:/system/library@0.5.11-0.175.1.0.0.23.0 type=require
depend fmri=pkg:/shell/bash@4.1.9-0.175.1.0.0.23.0 type=require
dir group=sys mode=0755 owner=root path=usr
dir group=bin mode=0755 owner=root path=usr/bin
dir group=sys mode=0755 owner=root path=usr/share
....
signature 235c7674d821032ae3eeda280c7837d1f1f4fdb5 algorithm=rsa-sha256 
chain="8e422c1bb80b05f08f7a849f3d7ae90a976e048e 754665e03bd28ef63b05a416073eb6d649624781" 
chain.chashes="083e40bb50e6964834ebfd3c66b8720b46028068 
f85dabbb0d56b37de3c3de98663dd8f27a12ff8e" chain.csizes="1273 1326" chain.sizes="1773 2061" 

chash=05654e46fc5cac3b9b9bd11c39512bc92bc85089 pkg.csize=1281 pkg.size=1753 
value=41df24b2bc4fe0cc705642f7bcad54f8d96017d919865d12da22bbb42ab451b2d1e28c50c0d2b5a52b1e4
9e2732aeae9296216a3418c57fab6ed68624d492e68b8f8a4c728ec03f823608c2f95437ced3591a957fc8c9a69
fdbb3e5f0e45cf6a74b9341c97d727a60ef1f8be78a91114e378d84b530ae1b6565e15e060802f96fdbbea19823
f0e2c8e4dc2e5f6f82c6e9b85362c227704ecefc4460fc56dc947af2d872823138378e4c1d224012f135281c567
ef854b63cc75b43336142a5db78c0544f3e31cd101a347a55c25b77463431ce65db04f5821fe9e7d5e27718fb9b
e71373d110ca8eea4a82b5b3571684a6a182910b87e7f65c22d590a8e6523f9 version=0

ここには、考慮する必要のある多くの事柄があります。各行は、パッケージに関するメタデータ(名前、説明など)の設定やパッケージに含まれるファイルおよびディレクトリの指定といったアクションを定義しています。この演習では、Nagiosパッケージのパッケージ・マニフェストの作成時に、マニフェストを異なる3つのセクションに分割します。

パッケージ・メタデータの作成

最初のセクションはすべて、パッケージ・メタデータの作成に関係します。gzipのパッケージ・マニフェストでは、最初の部分に以下の行があります。

set name=pkg.fmri value=pkg://solaris/compress/gzip@1.4,5.11-0.175.1.0.0.24.0:20120904T170603Z
set name=org.opensolaris.consolidation value=userland
set name=pkg.summary value="GNU Zip (gzip)"
set name=pkg.description value="The GNU Zip (gzip) compression utility"

set name=info.source-url value=ftp://ftp.gnu.org/gnu/gzip/gzip-1.4.tar.gz
set name=info.classification value="org.opensolaris.category.2008:Applications/System Utilities"
set name=info.upstream-url value=http://www.gnu.org/software/gzip/

Nagiosについて、同様のメタデータを作成する必要があります。まず、nagios.mogというファイルを編集して、以下の行を追加します。

set name=pkg.fmri value=nagios@3.5.0,5.11-0
set name=pkg.summary value="Nagios monitoring utility"
set name=pkg.description value="Nagios is a host/service/network monitoring program"

set name=variant.arch value=$(ARCH)

この初期マニフェストの各部分について簡単に説明します。setアクションは、パッケージの属性(パッケージのバージョン、サマリー、説明など)の設定方法を表します。パッケージの障害管理リソース識別子(FMRI)をnagios@3.5.0,5.11-0に設定します。これは、Oracle Solaris 11(5.11)でNagios 3.5.0を使用すること示しています。バリアント(variant)は、Image Packaging Systemの機能です。これにより、単一のパッケージに複数のアーキテクチャのサポートをパッケージ化することができます(つまり、SPARCとx86の両方に対応する単一のパッケージを作成できます)。variant.archは、後で置き換える変数に設定します。

ファイルおよびディレクトリ・リストの作成

次は、PROTOディレクトリを調べて、パッケージに含めるファイルとディレクトリのリストを作成します。幸いにも、この作業の大半は、pkgsend generateコマンドによって自動的に実行されます。また、リスト1のように、このコマンドとpkgfmtコマンドをパイプして出力を改善するとともに、この出力をnagios.p5m.genファイルに挿入します。

root@solaris:~# pkgsend generate PROTO | pkgfmt > nagios.p5m.gen
root@solaris:~# cat nagios.p5m.gen
dir  path=usr owner=root group=bin mode=0755
dir  path=usr/local owner=root group=bin mode=0755
dir  path=usr/local/nagios owner=root group=bin mode=0755
dir  path=usr/local/nagios/bin owner=root group=bin mode=0775
file usr/local/nagios/bin/nagios path=usr/local/nagios/bin/nagios owner=root \
    group=bin mode=0774
file usr/local/nagios/bin/nagiostats path=usr/local/nagios/bin/nagiostats \
    owner=root group=bin mode=0774
dir  path=usr/local/nagios/etc owner=root group=bin mode=0775
....
dir  path=usr/local/nagios/var/archives owner=root group=bin mode=0775
dir  path=usr/local/nagios/var/rw owner=root group=bin mode=0775
dir  path=usr/local/nagios/var/spool owner=root group=bin mode=0755
dir  path=usr/local/nagios/var/spool/checkresults owner=root group=bin mode=0775

リスト1

リスト1には、複数の新しいアクション(filedir)が含まれています。これらは、パッケージの内容と、そのユーザー/グループ所有権および権限を指定します。/usr/local/nagios/var/usr/local/nagios/var/rw、および/usr/local/var/spool/checkresultsのユーザー/グループ権限を、nagiosユーザー/グループを使用するように変更する必要があります。これを行うには、次のように、transformの行を数行追加します。
<transform dir path=usr/local/nagios/var$ -> set owner nagios>
<transform dir path=usr/local/nagios/var$ -> set group nagios>
<transform dir path=usr/local/nagios/var/rw$ -> set owner nagios>
<transform dir path=usr/local/nagios/var/rw$ -> set group nagios>

<transform dir path=usr/local/nagios/var/spool/checkresults$ -> set owner nagios>
<transform dir path=usr/local/nagios/var/spool/checkresults$ -> set group nagios>

Nagiosは/usr/binにインストールする予定なので、Oracle Solaris 11のパッケージ作成の推奨事項に従い、このリストをチェックして、Nagiosによってインストールされるディレクトリと、デフォルトのシステム・インストールの一部としてすでに作成されているディレクトリを確認します。すでに作成されているディレクトリは、パッケージ・マニフェストから動的に削除できます(これは変換(transform)と呼ばれます)。今回は、ファイルを/usrにインストールする予定ですが、このディレクトリはシステムによってすでに作成されています。このため、/usrディレクトリをマニフェストから削除する必要があります。これを行うには、次の行をnagios.mogファイルに追加して、このdirアクションを削除します。

<transform dir path=usr$ -> drop>

これでnagios.mognagios.p5m.genの両方が作成されたので、pkgmogrifyコマンドによってこれらのファイルをマージしてnagios.p5m.mogを作成しましょう。また、リスト2のように、$(ARCH)変数を実際のアーキテクチャ・タイプに置き換えます。

root@solaris:~# pkgmogrify -DARCH=`uname -p` nagios.p5m.gen nagios.mog | pkgfmt > nagios.p5m.mog
root@solaris:~# cat nagios.p5m.mog
set name=pkg.fmri value=nagios@3.5.0,5.11-0
set name=pkg.summary value="Nagios monitoring utility"
set name=pkg.description \
    value="Nagios is a host/service/network monitoring program"
set name=variant.arch value=i386
....
dir  path=usr/local/nagios/var owner=nagios group=nagios mode=0775
dir  path=usr/local/nagios/var/archives owner=root group=bin mode=0775
dir  path=usr/local/nagios/var/spool owner=root group=bin mode=0755
dir  path=usr/local/nagios/var/spool/checkresults owner=nagios group=nagios mode=0775

リスト2

リスト2から分かるとおり、2つのファイルがマージされました。variant.archの値がi386に置き換えられていることに注意してください。

Nagiosの依存関係の評価

次に、Nagiosのパッケージ依存関係を作成します。Image Packaging Systemは、パッケージの内容をスキャンして、存在する依存関係の検出を試みる機能を備えています。これは、ファイル・タイプがスクリプトか実行可能ファイルかを検出することによって実行されます。

ファイルがスクリプトである場合は、スクリプトの最初の部分にある#!行を調べて、そのスクリプトが、Perl、Python、Bashスクリプトまたはその他の種類のシェル・スクリプトであるかどうかを識別します。ファイルが実行可能ファイルである場合は、ELFヘッダーを調べて、正常なランタイム実行のために必要な他のライブラリを確認します。これらのファイルの依存関係からパッケージの依存関係を構成する必要があるため、このプロセスには2つの手順が含まれます。

まず、Nagiosが持つファイルの依存関係のリストを作成しましょう。リスト3のように、pkgdepend generateコマンドを使用し、リストをPROTO領域の格納場所に渡します。

root@solaris:~# pkgdepend generate -md PROTO nagios.p5m.mog > nagios.p5m.dep
root@solaris:~# tail nagios.p5m.dep
depend fmri=__TBD pkg.debug.depend.file=libc.so.1 pkg.debug.depend.path=lib 
pkg.debug.depend.path=usr/lib pkg.debug.depend.reason=usr/local/nagios/sbin/outages.cgi 
pkg.debug.depend.type=elf type=require
depend fmri=__TBD pkg.debug.depend.file=libsocket.so.1 pkg.debug.depend.path=lib 
pkg.debug.depend.path=usr/lib pkg.debug.depend.reason=usr/local/nagios/sbin/outages.cgi 
pkg.debug.depend.type=elf type=require
depend fmri=__TBD pkg.debug.depend.file=libsocket.so.1 pkg.debug.depend.path=lib 
pkg.debug.depend.path=usr/lib pkg.debug.depend.reason=usr/local/nagios/sbin/status.cgi 
pkg.debug.depend.type=elf type=require
depend fmri=__TBD pkg.debug.depend.file=libc.so.1 pkg.debug.depend.path=lib 
pkg.debug.depend.path=usr/lib pkg.debug.depend.reason=usr/local/nagios/sbin/showlog.cgi 
.debug.depend.type=elf type=require
depend fmri=__TBD pkg.debug.depend.file=libc.so.1 pkg.debug.depend.path=lib 
pkg.debug.depend.path=usr/lib pkg.debug.depend.reason=usr/local/nagios/bin/nagiostats 
pkg.debug.depend.type=elf type=require
depend fmri=__TBD pkg.debug.depend.file=libc.so.1 pkg.debug.depend.path=lib 
pkg.debug.depend.path=usr/lib pkg.debug.depend.reason=usr/local/nagios/sbin/config.cgi 
pkg.debug.depend.type=elf type=require
depend fmri=__TBD pkg.debug.depend.file=libsocket.so.1 pkg.debug.depend.path=lib 
pkg.debug.depend.path=usr/lib pkg.debug.depend.reason=usr/local/nagios/bin/nagiostats 
pkg.debug.depend.type=elf type=require
depend fmri=__TBD pkg.debug.depend.file=libm.so.2 pkg.debug.depend.path=lib 
pkg.debug.depend.path=usr/lib pkg.debug.depend.reason=usr/local/nagios/bin/nagiostats 
pkg.debug.depend.type=elf type=require
depend fmri=__TBD pkg.debug.depend.file=libsocket.so.1 pkg.debug.depend.path=lib 
pkg.debug.depend.path=usr/lib pkg.debug.depend.reason=usr/local/nagios/sbin/config.cgi 
pkg.debug.depend.type=elf type=require
depend fmri=__TBD pkg.debug.depend.file=libc.so.1 pkg.debug.depend.path=lib 
pkg.debug.depend.path=usr/lib pkg.debug.depend.reason=usr/local/nagios/sbin/cmd.cgi 
pkg.debug.depend.type=elf type=require

リスト3

リスト3から分かるとおり、dependアクションで始まる多数の行が生成されています。出力された行をよく見ると、pkg.debug.depend.fileの値がlibc.so.1またはlibsocket.so.1であることが分かります。つまり、これらは、共有オブジェクトに関する依存関係です。ELFヘッダーを調べることによって、これらの依存関係のすべてが検出されていることが分かります。また、pkg.debug.depend.reasonの値を調べることによって、これらの依存関係を発生させているファイルも確認できます。

ここで、これらの依存関係を、依存関係の基であるパッケージへと解決する必要があります。これを行うには、リスト4のように、pkgdepend resolveコマンドを使用します。

root@solaris:~# pkgdepend resolve -m nagios.p5m.dep
root@solaris:~# tail nagios.p5m.dep.res
file usr/local/nagios/share/stylesheets/trends.css \
    path=usr/local/nagios/share/stylesheets/trends.css owner=root group=bin \
    mode=0664
dir  path=usr/local/nagios/var owner=root group=bin mode=0775
dir  path=usr/local/nagios/var/archives owner=root group=bin mode=0775
dir  path=usr/local/nagios/var/spool owner=root group=bin mode=0755
dir  path=usr/local/nagios/var/spool/checkresults owner=root group=bin mode=0775
depend fmri=pkg:/system/library/math@0.5.11-0.175.1.0.0.19.0 type=require
depend fmri=pkg:/system/library@0.5.11-0.175.1.0.0.24.2 type=require
depend fmri=pkg:/system/linker@0.5.11-0.175.1.0.0.24.2 type=require

リスト4

リスト4の最後の3行から、依存関係がわずか3つのパッケージ(system/library/mathsystem/librarysystem/linker)に正常に解決されたことが分かります。これで、パッケージの公開時に使用する最終的なパッケージ・マニフェストであるnagios.p5m.dep.resが完成しました。

演習3:パッケージの公開とインストール

次に、コンパイル済みのNagiosアプリケーションとパッケージ・マニフェストを用意して、これらをパッケージ・リポジトリに公開します。リポジトリを格納する新しいZFSデータセットを簡単に作成し、pkgrepo createコマンドを使用してリポジトリを作成しましょう。

root@solaris:~# zfs create rpool/extra-software
root@solaris:~# zfs set mountpoint=/extra-software rpool/extra-software
root@solaris:~# pkgrepo create /extra-software

root@solaris:~# ls /extra-software
pkg5.repository

pkgrepo setコマンドを使用して、このリポジトリのパブリッシャ・プリフィックスを設定する必要があります。

root@solaris:~# pkgrepo -s /extra-software set publisher/prefix=extra-software

リポジトリが作成されたので、パッケージを公開しましょう。これを行うには、pkgsend publishコマンドを使用し、リポジトリの格納場所、PROTO領域、および最終的なIPSパッケージ・マニフェストを指定します。

root@solaris:~# pkgsend -s /extra-software publish -d PROTO nagios.p5m.dep.res 
pkg://extra-software/nagios@3.5.0,5.11-0:20130811T210125Z
PUBLISHED
root@solaris:~# pkgrepo -s /extra-software refresh
root@solaris:~# pkgrepo -s /extra-software info
PUBLISHER      PACKAGES STATUS           UPDATED
extra-software 1        online           2013-08-11T21:01:31.353448Z

パッケージが公開されたので、パッケージをシステムにインストールしましょう。これを行うには、pkg set-publisherコマンドを使用して新しいリポジトリを追加する必要があります。

root@solaris:~# pkg set-publisher -g /extra-software extra-software
root@solaris:~# pkg publisher
PUBLISHER                   TYPE     STATUS P LOCATION
solaris                     origin   online F http://pkg.oracle.com/solaris/release
extra-software              origin   online F file:///extra-software/

最後に、pkg installを使用してパッケージをインストールします。

root@solaris:~# pkg install nagios

           Packages to install:  1
       Create boot environment: No
Create backup boot environment: No

DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                                1/1       373/373      1.8/1.8    0B/s

PHASE                                          ITEMS
Installing new actions                       403/403
Updating package state database                 Done 
Updating image state                            Done 
Creating fast lookup database                   Done
root@solaris:~# pkg info nagios
          Name: nagios
       Summary: Nagios monitoring utility
   Description: Nagios is a host/service/network monitoring program
         State: Installed
     Publisher: extra-software
       Version: 3.5.0
 Build Release: 5.11
        Branch: 0
Packaging Date: August  8, 2013 02:24:32 AM 
          Size: 4.54 MB
          FMRI: pkg://extra-software/nagios@3.5.0,5.11-0:20130811T210125Z

このパッケージが正常に機能することを確認するには、いくつかの手順を実行する必要があります。まず、以下の行を/etc/apache2/2.2/httpd.confに追加して、Nagiosに関する情報を取得するようにApache HTTPサーバーを構成しましょう。

<IfModule alias_module>
    ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"

    Alias /nagios /usr/local/nagios/share
</IfModule>
<Directory "/usr/local/nagios/sbin/">
    Options ExecCGI
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
<Directory "/usr/local/nagios/share">
    Options None
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>


また、リスト5のように、Apacheサービスを有効にして、サービスがオンラインになっていることを確認しましょう。

root@solaris:~# svcadm enable apache22
root@solaris:~# svcs apache22
STATE          STIME    FMRI
online          2:10:22 svc:/network/http:apache22

リスト5

最後に、次のように、サンプル構成ファイルを使用して、/usr/local/nagios/binディレクトリからNagiosコマンドを実行できます。

root@solaris:~# /usr/local/nagios/bin/nagios \
/usr/local/nagios/etc/nagios.cfg

Firefox Webブラウザを起動し、http://localhost/nagiosに移動すると、図1のような画面が表示されるはずです。これが表示されない場合は、コマンドライン出力を調べて、エラーがないか確認してください。

図1

図1:Nagiosパッケージの正常なインストール

演習4:サービス管理機能サービスの作成

サービス管理機能を使用してNagiosを管理できると便利です。リスト5で、svcadm enableコマンドを使用してApacheインスタンスを起動しました。これには、何らかの理由でApacheインスタンスが停止してもサービス管理機能によって自動的に再起動されるというメリットがあります。同じことを、Nagiosについても行いましょう。

サービス管理機能マニフェストは、サービス、その構成、およびそれを起動および停止できる方法を記述するために使用されます。サービス管理機能マニフェストは、XMLベースのファイルで、通常、/lib/svc/manifestにあります。マニフェストを手動で作成することもできますが、今回は、svcbundleコマンドを使用して簡単なマニフェストを作成します。

svcbundleを使用すると、管理者は、一般的なシナリオでマニフェストまたはシステム・プロファイルを作成でき、任意でインストールできます。そのため、svcbundleは、数多くのシンプルな想定のもとで、デフォルトでのサービスの自動起動といった一連の一般的な事例(詳しくは、マニュアル・ページを参照)に対処します。

サービス管理機能マニフェストは、以下のような操作で作成できます。

root@solaris:~# svcbundle -o nagios.xml \
 -s service-name=application/nagios \
 -s start-method="/usr/local/nagios/bin/nagios /usr/local/nagios/etc/nagios.cfg"
root@solaris:~# cat nagios.xml 
<?xml version="1.0" ?>

<!DOCTYPE service_bundle
  SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
<!--
    Manifest created by svcbundle (2013-Aug-12 00:39:14+0000)
-->
<service_bundle type="manifest" name="application/nagios">
   <service version="1" type="service" name="application/nagios">

      <!--
          The following dependency keeps us from starting until the
          multi-user milestone is reached.
      -->
      <dependency restart_on="none" type="service"
          name="multi_user_dependency" grouping="require_all">

          <service_fmri value="svc:/milestone/multi-user"/>
      </dependency>
      <exec_method timeout_seconds="60" type="method" name="start"

          exec="/usr/local/nagios/bin/nagios /usr/local/nagios/etc/nagios.cfg"
        />
        <!--
        The exec attribute below can be changed to a command that SMF
        should execute to stop the service.  See smf_method(5) for more
        details.
        -->
        <exec_method timeout_seconds="60" type="method" name="stop"

            exec=":true"/>
        <!--
        The exec attribute below can be changed to a command that SMF
        should execute when the service is refreshed.  Services are
        typically refreshed when their properties are changed in the
        SMF repository.  See smf_method(5) for more details.  It is
        common to retain the value of :true which means that SMF will
        take no action when the service is refreshed.  Alternatively,
        you may wish to provide a method to reread the SMF repository
        and act on any configuration changes.
        -->
        <exec_method timeout_seconds="60" type="method" name="refresh"

            exec=":true"/>
        <property_group type="framework" name="startd">
            <propval type="astring" name="duration" value="transient"/>

        </property_group>
        <instance enabled="true" name="default"/>
        <template>
            <common_name>

                <loctext xml:lang="C">
                    <!--
                    Replace this comment with a short name for the
                    service.
                    -->
                </loctext>
            </common_name>
            <description>
                <loctext xml:lang="C">

                    <!--
                    Replace this comment with a brief description of
                    the service
                    -->
                </loctext>
            </description>
        </template>
    </service>
</service_bundle>


次に、このサービス定義をパッケージに統合します。PROTO領域内に/lib/svc/manifest/siteと同等のディレクトリを作成し、そこにnagios.xmlファイルをコピーします。

root@solaris:~# mkdir -p PROTO/lib/svc/manifest/site
root@solaris:~# cp nagios.xml PROTO/lib/svc/manifest/site

これが完了したら、新しいパッケージ・マニフェストの作成手順をもう一度実行する必要があります。必要に応じて、前のセクションを参照して、手順を確認してください。

最初に、pkg update nagiosを使用するだけで新しいバージョンをインストールできるようにするために、nagios.mogを修正してバージョン番号を更新します。

set name=pkg.fmri value=nagios@3.5.0,5.11-1

また、リスト6のように、システムが作成するディレクトリである/lib/lib/svc/lib/svc/manifest、および/lib/svc/manifest/applicationを削除する4つのtransformを追加するとともに、サービス管理機能マニフェストを処理する新しいtransformも追加します。

<transform dir path=lib$ -> drop>
<transform dir path=lib/svc$ -> drop>
<transform dir path=lib/svc/manifest$ -> drop>
<transform dir path=lib/svc/manifest/site$ -> drop>

<transform file path=lib/svc/manifest/.*\.xml$ -> \
    default restart_fmri svc:/system/manifest-import:default>

リスト6

リスト6の最後のtransformにより、lib/svc/manifestディレクトリ内にある.xml拡張子のファイルが検出され、パッケージのインストール時にsystem/manifest-importサービスを再起動するアクチュエータが追加されます。これにより、Nagiosサービスの記述がサービス管理機能のサービス・フレームワークに登録されます。

これが完了したら、もう一度、最終的なImage Packaging Systemマニフェストを作成しましょう。

root@solaris:~# pkgsend generate PROTO | pkgfmt > nagios.p5m.gen
root@solaris:~# pkgmogrify -DARCH=`uname -p` nagios.p5m.gen nagios.mog | pkgfmt > nagios.p5m.mog
root@solaris:~# pkgdepend generate -md PROTO nagios.p5m.mog > nagios.p5m.dep

root@solaris:~# pkgdepend resolve -m nagios.p5m.dep
root@solaris:~# pkgsend -s /extra-software/ publish -d PROTO nagios.p5m.dep.res 
pkg://extra-software/nagios@3.5.0,5.11-1:20130812T005707Z
PUBLISHED

最後に、リスト7のように、新しいバージョンをインストールできます。

root@solaris:~# pkg update nagios
            Packages to update:   1
       Create boot environment:  No
Create backup boot environment: Yes
            Services to change:   1

DOWNLOAD                        PKGS         FILES    XFER (MB)   SPEED
Completed                        1/1           1/1      0.0/0.0    0B/s

PHASE                                          ITEMS
Installing new actions                           3/3
Updating modified actions                        2/2
Updating package state database                 Done 
Updating package cache                           1/1 
Updating image state                            Done 
Creating fast lookup database                   Done
root@solaris:~# pkg info nagios

          Name: nagios
       Summary: Nagios monitoring utility
   Description: Nagios is a host/service/network monitoring program
         State: Installed
     Publisher: extra-software
       Version: 3.5.0
 Build Release: 5.11
        Branch: 1
Packaging Date: August 12, 2013 12:57:07 AM 
          Size: 4.55 MB
          FMRI: pkg://extra-software/nagios@3.5.0,5.11-1:20130812T005707Z

リスト7

リスト7で、更新に必要なものは、サービス管理機能マニフェストのためにインストールする追加の1つのファイルだけであったことに注意してください。Image Packaging Systemは、パッケージのアンインストールおよび再インストールを行いません。

ここで、サービスが登録されているかどうかを確認しましょう。

root@solaris:~# svcs nagios
STATE          STIME    FMRI
online          1:02:12 svc:/application/nagios:default

Nagiosインスタンスは、動作しており、サービス管理機能によって管理されています。

演習5:追加のタスク

これで、このハンズオン・ラボは完了です。セクションの大半を学習し、以下のいくつかの追加タスクに自信を持って取り組んでいただければ幸いです。

  • 最初にNagiosのパッケージを作成したときに、nagiosユーザーおよびグループを手動で作成しました。パッケージは、パッケージを作成したシステム上では正常に動作しましたが、その構成を他のターゲット・システムにも提供する必要があります。幸いにも、この作業は、Image Packaging Systemを使用して簡単に実行できます。nagiosユーザーおよびグループをImage Packaging Systemパッケージに加えて、それらが新しいインストール用に確実に作成されるようにできるか試してください。
  • Image Packaging Systemは、パッケージ・アーカイブ(USBドライブなどによって配布できるスタンドアロンのファイル)の概念をサポートしています。配布用のNagiosパッケージのパッケージ・アーカイブを作成してください。
  • 管理者は、パッケージの内容をリポジトリ間で簡単に転送できます。新しいパッケージ・リポジトリを作成し、Nagiosパッケージを/extra-softwareと新しいリポジトリの間で転送してください。

参考資料

以下に、Oracle Solaris 11の管理に関する優れた参考資料のリストを示します。

著者について

Glynn Fosterは、Oracle SolarisのPrincipal Product Managerであり、Image Packaging Systemやサービス管理機能などのテクノロジー領域に取り組んでいます。Glynnは、Sun Microsystemsの買収に伴い、2010年にオラクルに入社しました。

リビジョン1.0、2013年11月13日

フォロー先:
ブログ | Facebook | Twitter | YouTube

false