System Admins and Developers
Hands-On Labs
Glynn Foster著
2013年11月公開
|
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ロールを継承する必要があります。
| ユーザーID | パスワード |
|---|---|
ouser |
Oracle 123 |
root |
solaris11 |
このラボは、多数の基本的な管理タスクを説明する多数の異なる演習に分かれています。各演習は、相互に独立しています。
演習の最後には、より高度な管理を学習したい場合のために追加のタスクが用意されています。これらの追加タスクを完了するための手順は示されていないため、必要に応じて、製品ドキュメント、オンラインHow-Toガイド、およびマニュアル・ページを参照してください。
表2:演習| 演習 | タイトル | 学習内容 |
|---|---|---|
| 1 | Nagiosのビルド |
|
| 2 | パッケージ・マニフェストの作成 |
|
| 3 | パッケージの公開とインストール |
|
| 4 | サービス管理機能サービスの作成 |
|
| 5 | 追加のタスク |
|
このラボを終了すると、Oracle Solaris 11におけるパッケージの作成と公開に関する基本的な知識を得ることができます。さらに、アプリケーション可用性のためのサービス管理機能サービスの追加やアプリケーションのセキュリティ強化の基本といった、アプリケーションをより完全にオペレーティング・システムに統合するために必要な手順を理解することができます。製品ドキュメント、マニュアル・ページ、またはオンラインHow-To記事を参照することにより、より高度な管理タスクも容易に調べて実行することができます。また、ヘルプ情報の入手先も知ることができます。
最初の作業は、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 install、gmake 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領域に多数のディレクトリ(bin、lib、sbin、share、var)があることが分かります。binディレクトリ内には2つの実行可能ファイル(nagiosとnagiostats)があります。これで、これらのバイナリをこのディレクトリから簡単に実行できますが、このハンズオン・ラボでは、Oracle SolarisのImage Packaging System機能を使用してパッケージを作成し、パッケージ・マニフェストについて学習します。
各パッケージの背後には、そのパッケージの構築方法が記述されたパッケージ・マニフェストがあります。パッケージ・マニフェストには、パッケージ名、バージョン、およびパッケージの依存関係に関する情報と、ファイル、ディレクトリ、リンクなどのパッケージの内容のリストが含まれています。リポジトリに公開するプロセスの一部として、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には、複数の新しいアクション(fileとdir)が含まれています。これらは、パッケージの内容と、そのユーザー/グループ所有権および権限を指定します。/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.mogとnagios.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のパッケージ依存関係を作成します。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/math、system/library、system/linker)に正常に解決されたことが分かります。これで、パッケージの公開時に使用する最終的なパッケージ・マニフェストであるnagios.p5m.dep.resが完成しました。
次に、コンパイル済みの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:Nagiosパッケージの正常なインストール
サービス管理機能を使用して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インスタンスは、動作しており、サービス管理機能によって管理されています。
これで、このハンズオン・ラボは完了です。セクションの大半を学習し、以下のいくつかの追加タスクに自信を持って取り組んでいただければ幸いです。
nagiosユーザーおよびグループを手動で作成しました。パッケージは、パッケージを作成したシステム上では正常に動作しましたが、その構成を他のターゲット・システムにも提供する必要があります。幸いにも、この作業は、Image Packaging Systemを使用して簡単に実行できます。nagiosユーザーおよびグループをImage Packaging Systemパッケージに加えて、それらが新しいインストール用に確実に作成されるようにできるか試してください。/extra-softwareと新しいリポジトリの間で転送してください。以下に、Oracle Solaris 11の管理に関する優れた参考資料のリストを示します。
Glynn Fosterは、Oracle SolarisのPrincipal Product Managerであり、Image Packaging Systemやサービス管理機能などのテクノロジー領域に取り組んでいます。Glynnは、Sun Microsystemsの買収に伴い、2010年にオラクルに入社しました。
| リビジョン1.0、2013年11月13日 |