SMF
はじめに
SMFはSolaris10で導入された、スクリプト管理システムです。 /etc/rc?.d/* や inetd から呼び出されるデーモンの管理などを行います。
参考リンク
- Solaris10 でのサービスの有効化/無効化 [SMF]~Solaris User
- うにっくすさんの覚え書き - Solaris - SMFによるサービス制御
- Solaris10 - JAVAに関する備忘録 HIDEKAZU PukiWiki
基本的な仕組み
原則は、パッケージ(Apache, Sendmailなど)をインストールすると、 起動のための設定をいろいろやってくれるようです。 Xなんかは自動的に起動するように設定してくれるようですし、 Apacheはちょっとしたコマンドを打てばPC起動時に起動するようになるようです。
感覚的にはDebian流の 「インストール→自動的にrcに登録→自動的に実行」ではなくて、 Gentoo流の 「インストール→自分でrcに登録→自分で実行」に近いです。
ただし実際には例外があります。 CUPSはSMFに登録されていません。 理由はわかりません。 そこで上のページを参考にしながら、設定を行いました。
SMFへの登録
これが必要なのかはわかりませんが、一応やったということで。
# svccfg svc:> add site/cups svc:> select site/cups svc:/site/cups> addpg start method svc:/site/cups> addpg stop method svc:/site/cups> setprop start/exec = astring:"/opt/sfw/cups/etc/init.d/cups start" svc:/site/cups> setprop stop/exec = astring:"/opt/sfw/cups/etc/init.d/cups stop" svc:/site/cups> add default svc:/site/cups> quit # svcadm -v enable svc:/site/cups:default
設定ファイル
たいていの場合は上の項目だけで大丈夫らしいのですが、 /optをマウントする前に実行されてしまうので、CUPSの場合にはうまくいきません。 そこで依存関係を設定します。
なんでそういう設定になっているのかはわかりません。 Debianだと全てのローカルファイルシステムをマウントした後に 各種デーモンを起動していく、という設定なんですけどね。
/var/svc/manifest/site/cups.xml:
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<service_bundle type='manifest' name='site:cups'>
<service name='site/cups' type='service' version='0'>
<create_default_instance enabled='true' />
<single_instance />
<dependency name='paths'
grouping='require_all'
restart_on='error'
type='path'>
<service_fmri value='file://localhost/opt/sfw/cups/sbin/cupsd' />
<service_fmri value='file://localhost/opt/sfw/cups/etc/init.d/cups' />
</dependency>
<dependency name='network'
grouping='require_any'
restart_on='error'
type='service'>
<service_fmri value='svc:/network/service' />
</dependency>
<dependency
name='fs-local'
type='service'
grouping='require_all'
restart_on='none'>
<service_fmri value='svc:/system/filesystem/local' />
</dependency>
<property_group name='start' type='method'>
<propval name='exec' type='astring' value='/opt/sfw/cups/etc/init.d/cups start'/>
</property_group>
<property_group name='stop' type='method'>
<propval name='exec' type='astring' value='/opt/sfw/cups/etc/init.d/cups stop'/>
</property_group>
</service>
</service_bundle>
そして設定ファイルを登録します。
#svccfg -v import /var/svc/manifest/site/cups.xml