Oracle Solaris 11でsvcbundleを使用してSMFマニフェストとプロファイルを作成する方法

Glynn Foster著

この記事では、Oracle Solaris 11.1で新たに導入されたユーティリティ、svcbundleについて説明し、開発者と管理者がsvcbundleを使用して、より迅速に、アプリケーションをSMFに統合する方法を示します。


2012年10月公開

Oracle Solaris 11でsvcbundleが導入されたことにより、マニフェストとプロファイルの作成がさらに容易になり、Service Management Facility(SMF)と統合する際に使用されるXMLファイル形式の完全な知識を必要とすることなく、アプリケーションの自動再起動のメリットを活かすことができます。

Oracle Technology Network(OTN)は、ユーザーがOracleテクノロジーについて学ぶことで、情報に基づく意思決定を行えるように支援するコミュニティです。 記事、ソフトウェア、ダウンロード、ドキュメントなどをご利用いただけます。 OTNに参加して、業務に必要な技術的リソースをぜひご活用ください。

Oracle Solaris 10で初めて導入されたSMFは、システムやアプリケーション・サービスを管理するためのオペレーティング・システムの機能であり、Oracle Solarisの以前のリリースや他のUNIXオペレーティング・システムで一般的だった、従来のinitスクリプトによる起動メカニズムに取って代わるものです。 SMFは、ハードウェアやソフトウェアのどれが故障しても、必要なシステム・サービスとアプリケーション・サービスが稼働し続けるようにすることで、システムの可用性を改善します。 SMFは、より広範なOracle Solarisの予測的自己修復機能のコンポーネントの1つです。

この記事では、Oracle Solaris 11.1で新たに導入されたsvcbundleユーティリティについて説明し、このユーティリティを使用して、アプリケーションをSMFにより迅速に統合する方法を示します。 SMFに精通していない場合は、先行記事として、" Introducing the Basics of Service Management Facility (SMF) on Oracle Solaris 11"および" Advanced Administration with the Service Management Facility (SMF) on Oracle Solaris 11"を参照することをお勧めします。

サービス・バンドルの概要

SMFの根幹には、サービス・バンドルという概念があります。これは、XMLベースのファイルで、サービスまたはサービスのインスタンスに関するすべて(その構成を含む)を記述するために使用します。記述後、SMF構成リポジトリにインポートして、実行中のシステムで使用します。 サービス・バンドルは、Oracle Solarisにサービスを提供するために使用しますが、カスタム構成をさまざまな種類のシステムに提供する場合にも役立ちます。

SMFで使用されるサービス・バンドルのタイプには、マニフェストとプロファイルの2つがあります。

  • マニフェストは、サービスおよびサービスのインスタンスを記述し、これらのサービスに関連付けられたプロパティとともに使用します。 マニフェストは通常、/lib/svc/manifest内にあり、システムの再起動中に自動的にSMF構成リポジトリにインポートされます。または、svc:/system/manifest-import:defaultサービスを再起動すると、手動でインポートできます。
  • プロファイルはマニフェストに似ていますが、通常、マニフェストで提供されたサービスまたはサービス・インスタンスのカスタマイズを行う場合に使用します。 カスタマイズでは、サービスのインスタンスを有効または無効にするか、あるいはサービス構成プロパティへの変更を含めるかどうかを指定します。 プロファイルは通常、/etc/svc/profiles内にあり、システムの再起動中に適用されます。または、マニフェストの場合と同様に、svc:/system/manifest-import:defaultサービスを再起動することで、手動で適用できます。

svcbundleを使用したアプリケーションのSMFへの統合

"How to Migrate Control of System Services from Scripts to the Service Management Facility"では、/usr/share/lib/xml/dtd/service_bundle.dtd.1にあるXML DTDに従って、SMFマニフェストを最初から作成する(または既存のシステム・マニフェストからコピーして変更する)方法について説明します。 ただし、Oracle Solaris 11.1では、XMLファイル形式の知識がなくても、使いやすい新たなsvcbundleコマンドライン・ユーティリティを利用すれば、SMFマニフェストまたはシステム・プロファイルを作成できます。

svcbundleを使用すると、一般的なシナリオでマニフェストまたはシステム・プロファイルを作成でき、任意でインストールできます。 そのため、svcbundleは数多くのシンプルな想定のもとで、一般的なシナリオに対処します。

  • 生成されたマニフェストは、マスター・リスタータsvc.startdとともに使用します。
  • svc:/milestone/multi-userサービスの依存性の自動管理により、システム・ブート・プロセスでサービスが早く起動してしまうことがなくなります。
  • startおよびrestartのexecメソッドのタイムアウトは、デフォルトの60秒になります。

マニフェストまたはプロファイルの各種要素の定義に使用する、一連の名前と値のペアをsvcbundleで指定します。たとえば、サービス・インスタンス名、有効または無効にするか、さまざまなプロパティ値、start、stop、refreshの各メソッド、どのサービス・タイプにするかなどを指定します。 また、このユーティリティは、従来のRC(実行制御)スクリプトを容易にSMFに変換するのに役立ちます。

多くのコマンドライン・ユーティリティと同様に、例で示した方がわかりやすいため、svcbundleを使用した2つの例を紹介します。

  • オープンソース・システム監視アプリケーションであるNagiosを起動するマニフェストの作成方法
  • データセンター環境にインストールされた複数のOracle Solarisシステム全体にカスタマイズを行うためのシステム・プロファイルの作成方法

svcbundleを使用したSMFマニフェストの作成

この例では、svcbundleを使用して、再起動時にNagiosを自動的に起動するためのSMFマニフェストを作成します。 Nagiosは現在、Oracle Solaris 11パッケージ・リポジトリに同梱されていないため、まず、http://www.nagios.orgからダウンロードして、シンプル・インストールを実行する必要があります。

この例では、Nagiosを/usr/local/nagiosプレフィックスにインストールし、Nagiosインストールを認識するようにApache Webサーバー構成ファイルを変更しました。 次に示すように、-dオプションを使用して、構成ファイルの場所を指定することで、Nagiosデーモンを直接起動できます。

# /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg

図1に示すように、ブラウザでhttp://localhost/nagiosにナビゲートすると、Nagiosが正常に実行されていることを確認できます。

図1

図1 Nagios

Nagiosインストールが稼働したら、次のステップでは、このアプリケーションをSMFに統合することで、何らかのソフトウェアに障害が発生した場合にシステムがブートまたは再起動する際にNagiosが起動するようにします。 それには、svcbundleを使用して、そのSMFマニフェストを次のように生成します。

# svcbundle -o nagios.xml -s service-name=application/nagios -s model=daemon \
  -s start-method="/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg"


リスト1に示す例では、3つの名前と値のペアを定義しています。 -s service-nameオプションをapplication/nagiosと定義します。その結果、svc:/application/nagios:defaultというサービスになります。 -s modelオプションをdaemonと定義して、SMFがこのサービスのプロセスを追跡するようにします。 また、-s start-methodオプションには、Nagiosデーモンを起動するために先だって使用したものと同じ値を定義します。 -oオプションで定義されているように、このマニフェストをファイルnagios.xmlに出力します。 SMFは、生成されたマニフェストを自動的に検証します。

# cat nagios.xml
<?xml version="1.0" ?>
<!DOCTYPE service_bundle
  SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
<!--
    Manifest created by svcbundle (2012-Sep-11 00:19:49+1200)
-->
<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 -d /usr/local/nagios/etc/nagios.cfg"
        />
        <!--
            The exec attribute below can be charged 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=":kill"/>
        <!--
            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"/>
        ....
    </service>
</service_bundle>

リスト1 マニフェストの例

次のステップでは、svc:/system/manifest-import:defaultサービスを再起動することで、このマニフェストを取得して、/lib/svc/manifest/siteにインストールします。 また、Apache構成を変更したため、svc:/network/http:apache22サービスも再起動します。

# svcadm restart apache22
# cp nagios.xml /lib/svc/manifest/site
# svcadm restart manifest-import
# svcs nagios
STATE          STIME    FMRI
online         2:13:01  svc:/application/nagios:default
# ps -ef | grep nagios
  nagios 25743     1   0 00:50:43 ?  0:06 /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg


-iオプションを-oオプションの代わりに使用して、生成されたSMFマニフェストをシステムに直接インストールし、svc:/system/manifest-import:defaultサービスを自動的に再起動することもできます。

これは、svcbundleを使用して簡単なSMFマニフェストを素早く生成する方法を示すシンプルな例です。 さらにカスタマイズする場合は、生成後にこのテンプレート・マニフェストを変更できます。

svcbundleを使用したSMFシステム・プロファイルの作成

この例では、svcbundleを使用してSMFシステム・プロファイルを生成し、svc:/network/dns/clientサービス内のネーム・サーバー・アドレス構成をカスタマイズします。 それには、次に示すように、service-propertyおよびbundle-typeの名前と値のペアを使用する必要があります。

# svcbundle -o nameserver-config.xml -s service-name=network/dns/client \
  -s bundle-type=profile -s service-property="config:nameserver:net_address:192.168.0.1"

svcbundleのデフォルトのバンドル・タイプはmanifestなので、bundle-typeprofileと定義します。 サービスおよびサービス・インスタンス構成プロパティは、プロパティ・グループ、プロパティ名、プロパティ・タイプ、および値の4つをコロン区切りで使用して定義します。 リスト2では、service-propertyの名前と値をconfig:nameserver:net_address:192.168.0.1と定義します。

# cat nameserver-config.xml
<?xml version="1.0" ?>
<!DOCTYPE service_bundle
  SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
<!--
    Manifest created by svcbundle (2012-Sep-11 02:33:16+1200)
-->
<service_bundle type="profile" name="network/dns/client">

    <service version="1" type="service" name="network/dns/client">
        <property_group type="application" name="config">

            <propval type="net_address" name="nameserver"
                value="192.168.0.1"/>
        </property_group>
    </service>

</service_bundle>

リスト2 プロファイルの例

前のSMFマニフェストと同様に、このSMFシステム構成プロファイルを取得して、システムにインストールする必要があります。 それには、プロファイルを/etc/svc/profile/site/にコピーして、svc:/system/manifest-import:defaultサービスを再起動します。

# cp nameserver-config.xml /etc/svc/profile/site
# svcadm restart manifest-import

# svcprop -p config/nameserver dns/client
192.168.0.1

前の例と同様に、-iオプションを使用して、プロファイルをシステムに直接インストールすることもできます。

これは、サービスの1つのプロパティのみを設定する簡単な例です。 今回、svcbundleは、1つのサービスまたはサービス・インスタンスのみのシステム構成プロファイルの作成をサポートしていますが、これらの初期プロファイルの作成後に、より複雑なプロファイルを構築できます。

まとめ

Oracle Solaris 11でシステム・サービスやアプリケーションを管理している場合は、SMFを使用すると、サービスの自動再起動、サービス構成の統合、障害管理フレームワークへの統合など、多数のメリットを活かすことができます。 新しいツール、svcbundleを使用すると、SMFマニフェストを作成して、重要なサービスとアプリケーションをSMFフレームワークに統合できます。 また、システム・プロファイルを作成して、データセンター環境にインストールされた複数のOracle Solarisシステム全体にカスタマイズを行うことが可能です。

関連項目

著者について

Glynn Fosterは、Oracle SolarisのPrincipal Product Managerであり、Image Packaging System(IPS)やService Management Facility(SMF)などのテクノロジー領域に取り組んでいます。 Glynnは、Sun Microsystemsの買収に伴い、2010年にオラクルに入社しました。

リビジョン1.0、2012年10月22日

facebook banner twitter banner

false