福冨諭の福冨論

RSSリーダーではこちらをどうぞ→https://feeds.feedburner.com/fuktommy

SMF

はじめに

SMFはSolaris10で導入された、スクリプト管理システムです。 /etc/rc?.d/* や inetd から呼び出されるデーモンの管理などを行います。

参考リンク

基本的な仕組み

原則は、パッケージ(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