Solaris10のSMFによるサービス管理
サイオンコミュニケーションズ株式会社
大城 智史
1.Solaris10とSMF(Service Management Facility)
Solarisはサン・マイクロシステムズ社がリリースしているOSで、バージョンアップを重ね今年(2005年)には、Solaris10が発表されました。Solaris10はx64/x86版とsparc版があり、サンのサイトからダウンロードして無料で使用することができます。
SMFは(Service Management Facility)Solaris10から導入されたサービス管理のしくみです。従来のrcスクリプトを使用することも可能ですが多くのサービスがSMFでの管理に移行されています。
Solaris10は標準でApache1.3系とApache2系がインストールされています。 Apache1.3系は従来のrcスクリプトで、Apache2系は SMFで管理されています。ここではこの2つのApacheを使用せずApacheを新たにソースからインストールしてSMFで管理します。メリットとし てカスタマイズしたApacheをSMFで管理できることや、この作業を応用し、他の新たにインストールするサービスをSMFで管理できることが考えられます。
2.マシン環境
今回、検証をおこなったマシン環境は次のとおりとなっています。
| CPU | Pentium4 1.9GHz |
| Memory | 512MB |
| HDD | 60G |
| NIC | RealTek RTL-8139(PCI) |
| OS | Solaris10 x86 3/05 |
SolarisはLinuxやFreeBSDに比べサポートするハードウェアが多くありません。使用できるデバイスの確認はサン社のハードウェア互換リスト(HCL)のページをご確認ください。
今回の検証はOSをインストールした直後の状態で行いました。
OSのインストール途中でSolarisソフトウェアグループの選択をしますが、「全体ディストリビューション」を選択しています。
Solaris10×64/x86は64bit対応CPUが搭載されたシステムでは、自動的に64bitカーネルで起動しますが、今回使用したPentium4は64bitCPUではありませんので32bitモードで起動しています。動作モードの確認は次のように行います。
# isainfo -kv 32-bit i386 kernel modules
3.SMF関連コマンド
3.1.svcs
svcsコマンドは現在のサービスの状態を表示します。
現在無効のサービスを含めてすべて表示するには-aのオプションを用いて実行します。
# svcs -a STATE STIME FMRI legacy_run 9月_28 lrc:/etc/rcS_d/S50sk98sol legacy_run 9月_28 lrc:/etc/rc2_d/S10lu legacy_run 9月_28 lrc:/etc/rc2_d/S20sysetup ~中略 online 9月_28 svc:/milestone/multi-user-server:default online 9月_28 svc:/system/zones:default online 10:46:27 svc:/network/http:apache2 offline 9月_28 svc:/application/print/ipp-listener:default offline 9月_28 svc:/application/print/rfc1179:default
STATE項目のlegacy_runは従来のrcスクリプトで管理されている事を示し、onlineはSMFで管理されて起動中で接続可能な状態、offlineはSMFで管理されネットワーク接続はしないサービス、disableはSMFで管理され現在無効なサービスを表します。
STIMEはサービス状態の最終変更時刻を表します。
FMRIはサービスを特定するための識別子です。
現在のApacheの状態は以下のようにして確認します。
# svcs -a | grep apache legacy_run 9月_28 lrc:/etc/rc3_d/S50apache disabled 11:04:37 svc:/network/http:apache2
Apacheが2つ存在し、Apache1.3は従来のrcスクリプトで、Apache2はSMFで管理され現在は無効になっていることがわかります。
3.2.svcadm
svcadmを用いてSMFで管理されているサービスの操作をします。ここではデフォルトでインストールされているApache2を有効にしますが、Apache2の設定ファイルhttpd.confがないためそのままでは起動しません。以下のようにしてApache2を有効にします。
# cp /etc/apache2/httpd.conf-example /etc/apache2/httpd.conf
# svcadm enable svc:/network/http:apache2
# svcs -a | grep apache2
online 11:29:08 svc:/network/http:apache2
# ps -ef | grep httpd
root 663 1 0 16:14:15 ? 0:00 /usr/apache2/bin/httpd -k start
webservd 666 663 0 16:14:16 ? 0:00 /usr/apache2/bin/httpd -k start
webservd 664 663 0 16:14:16 ? 0:00 /usr/apache2/bin/httpd -k start
webservd 668 663 0 16:14:16 ? 0:00 /usr/apache2/bin/httpd -k start
webservd 667 663 0 16:14:16 ? 0:00 /usr/apache2/bin/httpd -k start
webservd 665 663 0 16:14:16 ? 0:00 /usr/apache2/bin/httpd -k start
#
無効化するにはdisableオプションを使用します。有効にする時はサービスを指定する際FMRIをすべて入力しましたが省略することもできます。
# svcadm disable apache2 # svcs -a | grep apache2 disabled 12:53:11 svc:/network/http:apache2
3.3.svccfg
import オプションはマニフェストと呼ばれるXMLファイルを読み込み、SMFで管理する際に使用します。
exportオプションは現在SMFで管理されているサービスのマニフェスト(XMLファイル)を出力します。ここでは後にインストールするApache2をSMFで管理するために、必要なXMLファイルのひな形をとしてデフォルトでインストールされているApache2のXMLファイルを出力します。exportオプションの後ろFMRIのサービスの種類(ここでは/network/http)をつけて実行します。
# svcs -a | grep apache2 disabled 12:53:11 svc:/network/http:apache2 # svccfg export network/http > ~/http-apache2.xml # cd # ls -la 合計 10 drwxr-xr-x 2 root root 512 10月 2日 13:31 . drwxr-xr-x 4 root root 512 9月 28日 08:02 .. -rw------- 1 root other 699 10月 2日 10:28 .bash_history -rw-r--r-- 1 root root 1778 10月 2日 13:33 http-apache2.xml
http-apache2.xmlの内容は以下のようになっています。
# cat http-apache2.xml
<?xml version='1.0'?>
$lt;strong>
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
<service_bundle type='manifest' name='export'>
<service name='network/http' type='service' version='0'>
<instance name='apache2' enabled='false'>
<dependency name='loopback' grouping='require_all' restart_on='error' ↓
type='service'>
<service_fmri value='svc:/network/loopback:default'/>
</dependency>
<dependency name='physical' grouping='optional_all' restart_on='error' ↓
type='service'>
<service_fmri value='svc:/network/physical:default'/>
</dependency>
<exec_method name='start' type='method' exec='/lib/svc/method/http-apache2 start'
timeout_seconds='60'>
<method_context/>
</exec_method>
<exec_method name='stop' type='method' exec='/lib/svc/method/http-apache2 stop'
timeout_seconds='60'>
<method_context/>
</exec_method>
<exec_method name='refresh' type='method' ↓
exec='/lib/svc/method/http-apache2 refresh'
timeout_seconds='60'>
<method_context/>
</exec_method>
<property_group name='httpd' type='application'>
<stability value='Evolving'/>
<propval name='ssl' type='boolean' value='false'/>
</property_group>
<property_group name='startd' type='framework'>
<propval name='ignore_error' type='astring' value='core,signal'/>
</property_group>
</instance>
<stability value='Evolving'/>
<template>
<common_name>
<loctext xml:lang='C'>Apache 2 HTTP server</loctext>
</common_name>
<documentation>
<manpage title='apache2' section='1M'/>
<doc_link name='apache.org' uri='http://httpd.apache.org'/>
</documentation>
</template>
</service>
</service_bundle>
delete オプションはSMFでのサービス管理から外す時に使用します。-fオプションを追加することで現在起動しているサービスでも強制的に削除します。
# svccfg delete -f apache2 # svcs -a |grep apache2 #
削除されたので表示されなくなりました。
4.SMF関連ファイル
/var/svc/manifest/*/*.xml
SMFでサービスを管理する時に使用するXMLファイルでマニフェストと呼ばれます。起動スクリプトや設定ファイルのパス、FMRI等の情報が書かれています
/lib/svc/method/*
SMFで管理されているサービスの起動スクリプトです。デフォルトでインストールされているApache2の起動スクリプトは/lib/svc/method/http-apache2 です。今回はこのファイルをソースからインストールしたApache2編集して使用します。
/etc/svc/*
SMFで使用するデータベースファイルです、テキストファイルではないのでエディタで直接編集することはできません、svccfgコマンド等でSMFを操作すると更新されます。
5.Apache2のインストール
以下の手順でApache2を新たにインストールします。
# PATH=/usr/sfw/bin:/usr/ccs/bin:$PATH # wget http://www.apache.jp/dist/httpd/httpd-2.0.54.tar.gz # gtar zxvf httpd-2.0.54.tar.gz # cd httpd-2.0.54 # ./configure # make # make install
以上の手順でインストールしたapacheは/usr/local/apache以下にインストールされます。
# pwd /usr/local/apache2 # ls -la 合計 54 drwxr-xr-x 15 root root 512 10月 2日 15:07 . drwxr-xr-x 3 root root 512 10月 2日 15:06 .. drwxr-xr-x 2 root root 512 10月 2日 15:07 bin drwxr-xr-x 2 root root 512 10月 2日 15:07 build drwxr-xr-x 2 root root 512 10月 2日 15:07 cgi-bin drwxr-xr-x 2 root root 512 10月 2日 15:07 conf drwxr-xr-x 3 root root 1024 10月 2日 15:07 error drwxr-xr-x 2 root root 1024 10月 2日 15:07 htdocs drwxr-xr-x 3 root root 3584 10月 2日 15:07 icons drwxr-xr-x 2 root root 2560 10月 2日 15:07 include drwxr-xr-x 2 root root 512 10月 2日 15:06 lib drwxr-xr-x 2 root root 512 10月 2日 15:07 logs drwxr-xr-x 4 root root 512 10月 2日 15:07 man drwxr-xr-x 14 root root 8192 10月 2日 15:07 manual drwxr-xr-x 2 root root 512 10月 2日 15:07 modules
起動させるには/usr/local/apache2/conf/httpd.conf の268行目をコメントアウトし以下のように書き換えます。
# User nobody #Group #-1 (コメントアウトする) Group nobody
6.SMFでの管理への移行
インストールしたapache2をSMFで管理するための設定を行います。ここからの操作を行う場合は、先に紹介したsvccfg delete でデフォルトでインストールされているapache2をSMFでの管理から削除されていることを確認してから行います。
/lib/svc/http-apache2の編集
デフォルトでインストールされているapache2を管理するため/lib/svc/method/http-apache2 があるのでこれをひな型としてファイルを作成します。ここでは/lib/svc/method/http-apache2.origとして元のファイルも保存しておきます。
# cd /lib/svc/method/ # cp http-apache2 http-apache2.orig
/lib/svc/method/http-apache2を新たにインストールしたapache2にあわせて編集します。赤い字の行はコメントアウトし、黄色の行は追加した行です。
# vi http-apache2
#!/sbin/sh
#
# Copyright 2004 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "@(#)http-apache2 1.2 04/11/11 SMI"
#
. /lib/svc/share/smf_include.sh
#APACHE_HOME=/usr/apache2
APACHE_HOME=/usr/local/apache2
#CONF_FILE=/etc/apache2/httpd.conf
CONF_FILE=/usr/local/apache2/conf/httpd.conf
#PIDFILE=/var/run/apache2/httpd.pid
PIDFILE=/usr/local/apache2/logs/httpd.pid
http-apache2.xmlのインポート
svccfg import コマンドでマニフェストを読み込み新にインストールしたApache2をSMFで管理します。マニフェストは先にルートディレクトリにしたhttp-apache2.xmlを使用します。このXMLファイルの中を見れば見当がつきますが、ファイルの中で起動スクリプトやサービスの種類等の情報が記載されています。今回はサービスの種類も起動スクリプトのパスも同じなため編集は必要ありません。
# cd
# svccfg import http-apache2.xml
#
# svcs -a |grep apache2
disabled 20:02:42 svc:/network/http:apache2
#
# svcadm enable apache2
# svcs -a |grep apache
legacy_run 20:34:36 lrc:/etc/rc 3_d/S50apache
online 20:38:10 svc:/network/http:apache2
# ps -ef| grep httpd
nobody 631 627 0 16:04:21 ? 0:00 /usr/local/apache2/bin/httpd -k start
nobody 630 627 0 16:04:21 ? 0:00 /usr/local/apache2/bin/httpd -k start
root 627 1 0 16:04:21 ? 0:00 /usr/local/apache2/bin/httpd -k start
nobody 628 627 0 16:04:21 ? 0:00 /usr/local/apache2/bin/httpd -k start
nobody 629 627 0 16:04:21 ? 0:00 /usr/local/apache2/bin/httpd -k start
nobody 632 627 0 16:04:21 ? 0:00 /usr/local/apache2/bin/httpd -k start
#
ソースからインストールしたApache2の/usr/local/apache2/bin/httpdが起動してます。
7.最後に
SMFはSolaris10になって突然導入されたため、戸惑った方も多いかとおもいます。
今回はマニフェストは編集せず、起動スクリプトを編集することで新たにインストールしたApache2をSMFで管理しましたが、新たにサービスをインストールする場合はマニフェストを編集しなければならない場合もあります。
マニフェストの編集方法については情報が少ないのですが、/var/svc/manifest/network/*.xmlが各ネットワークサーバ関連のマニフェストになっていますので、これを比較、参考にして編集するのがよいかと思われます。























