svcbundle - SMF サービスバンドルの作成
svcbundle [-i | -o output_file] -s name=value...
svcbundle help [name]
svcbundle コマンドは、SMF マニフェストを生成するために使用されます。マニフェストは複数の –s オプションによって指定されます。マニフェストを生成するには、service-name および start-method を指定する必要があります。その他の NV ペアはオプションであり、ユーザーはこれらを使用してサービスの詳細を指定できます。svccfg(8) 検証コマンドは、生成されたマニフェストで実行され、テンプレートの競合を検出します。
svcbundle を使用してプロファイルを生成することもできます。後述の bundle-type を参照してください。
2 つめの形式では、有効な名前がすべて一覧表示されるヘルプメッセージを標準出力に出力します。あるいは、help と名前を指定して、その名前に有効な値についての考察を表示することもできます。
ユーザーへの負担を軽減するために、svcbundle はマニフェストの生成時に、作業を簡素化するための仮定をいくつか設けます。これらの想定が、使用しているアプリケーションに適さない場合は、生成されたマニフェストを編集できます。
生成されたマニフェストは、マスターリスタータ svc.startd(8) で使用されることを意図されています。
サービスの開始が早くなりすぎないように、svc:/milestone/multi-user への依存関係が生成されます。これの例外については、後述の rc-script を参照してください。In order to have a service start earlier, the manifest may be edited to depend on any specific services or any of the milestones described in smf(7).
バンドル名は service-name で提供される値と同じになります。
Timeouts for all exec_methods will be 60 seconds unless specified using timeout.However, timeout is set to 0 for periodic/scheduled services if no timeout is specified.
–i オプションの使用により、サービスのインストール作業の大半を svcbundle に実行させることができます。生成されたマニフェストは /lib/svc/manifest/site、または /etc/svc/profile/site 内のプロファイルに自動的に保存されます。生成されたファイルの名前は –s service-name で指定されるサービス名のベース名になり、ファイルには .xml 拡張子が付けられます。警告: svcbundle はその名前を持つ既存ファイルがあれば上書きします。
次に、svcbundle は manifest-import サービスを再起動して新しく作成されたファイルを処理し、それを SMF に組み込みます。マニフェストの場合、svcbundle はサービスが最終状態 (オンライン、無効、または保守のいずれか) に入るのを待機します。この待機期間の始めに、svcbundle は次を出力します。
svcbundle: waiting for service to reach final_state state
...ここで、final_state は enabled (有効) または disabled (無効) です。このメッセージが表示されたあとは、svcbundle を中断しても安全です。
–i オプションを使用するには、これらの限定されたディレクトリにファイルを作成し、manifest-import サービスを再起動するのに十分な承認が必要であることは明らかです。smf_security(7) を参照してください。
このセクションでは、名前/値 (NV) ペアについて説明します。
生成されたバンドルは、コマンド行で複数の -s オプションを使用することによって完全に定義されます。各 NV ペアの形式は name=value であり、ここでの name と name はこのリストからのものです。
生成するサービスバンドルのタイプ。有効な値は、manifest および profile です。manifest がデフォルトです。
model の同義語。
インスタンスを有効にすべきかどうかを示します。有効な値は、true および false です。デフォルト値は true です。
サービスモデルを設定します。これは startd/duration プロパティーの値です。svc.startd(8) を参照してください。モデルは、次のいずれかの値に設定できます。
contract
daemon — contract の同義語
child
wait — child の同義語
transient
デフォルトは transient です。
インスタンスの名前。デフォルト値は default です。
これらのオプションは、pg_name という名前のプロパティーグループをインスタンスまたはサービス内に作成するために使用され、それにはアプリケーションのタイプが割り当てられます。この PG には、prop_type タイプの 1 つの値を持つ、prop_name という名前のプロパティーが 1 つ含まれます。複数のプロパティーを持つプロパティーグループを作成するには、*-property を複数回呼び出します。ゼロまたはそれ以上の *-property= 宣言を使用できます。プロパティーグループが入れ子になっている (したがって、祖先を含む完全なプロパティーグループ名であるべき) 場合、あるいは、プロパティーグループ名またはプロパティー名に予約文字が含まれている場合は (smf(7) を参照)、プロパティーグループ名とプロパティー名はエンコードされる必要があります。
プロパティータイプをデフォルトにするには、2 つの連続するコロンを使用します。後述の「使用例」を参照してください。マニフェストの場合は、astring というデフォルトのプロパティータイプが使用されます。プロファイルの場合、プロパティーは通常ほかの情報ソースから判断できるため、それを指定する必要はありません。
この NV ペアによって svcbundle は、レガシー rc スクリプトから SMF サービスへの変換を容易にするマニフェストを発行できます。script_path は rc スクリプトへのパスであり、run_level は rc スクリプトが実行されている実行レベルです (init(8) を参照)。script_path は、exec_method の開始と停止の要素をマニフェスト内に生成するために使用されます。exec 属性は次に設定されます。
script_path %m
run_level は依存関係の生成に使用されるため、そのスクリプトはブート中の適切な時期に実行されます。
サービスがリフレッシュされるときに実行するコマンド。この値を空白にしてもかまいません。この値には、smf_method(7) に記載されている、パーセント記号 (%) によって取り込まれるメソッドトークンを指定できます。デフォルト値は :true です。
サービスの名前。この NV ペアは必須です。
サービスが開始されるときに実行するコマンド。この値を空白にしてもかまいません。smf_method(7) に記載されている、% によって取り込まれるメソッドトークンを指定でき、リスタータによる展開用としてマニフェストに格納されます。:true を指定できます。rc-script の NV ペアが指定されていないかぎり、マニフェストにはこの NV ペアが必要です。プロファイルには必要ありません。
サービスが停止されるときに実行するコマンド。これは、start-method と同様の値を受け入れ、さらに :kill も受け入れます。transient サービスのデフォルト値は :true、contract および child サービスのデフォルト値は :kill です。
The service will be set with a general method timeout in seconds if method specific timeout is not provided.The default timeout is 60 seconds and for periodic or scheduled services, the default value is 0 seconds which signifies no timeout for the exec method of the service.Also, method specific timeouts do not apply to periodic/scheduled services.
The service will be set with a timeout specified by user specifically for the start-method.
The service will be set with a timeout specified by user specifically for the stop-method.
The service will be set with a timeout specified by user specifically for the refresh-method.
The service will run as the defined user rather than root.
Note that the user name is not validated by svcbundle(8) or required to exist on the system where svcbundle(8) is run.
The service will run as the defined group rather than root.
Note that the group name is not validated by svcbundle(8) or required to exist on the system where svcbundle(8) is run.
The service will run with the defined set of privileges.A privilege specification can include any of the predefined sets: basic, all and may use the extended policy specification and negation operations (to remove a privilege).See privileges(7) and smf_method(8)for details and syntax.
Note that the names of the privileges are not validated by svcbundle(8).
The following attributes are used to create a periodic or scheduled service.
This NV pair is used to create a manifest for a periodic service.The value is used for the period, in seconds, when the start-method should run.
スケジュールされたサービスを作成する際の「曜日」の制約を指定します。スケジュールされたサービスに関する詳細は、svc.periodicd(8) を参照してください。
スケジュールされたサービスを作成する際の「月の日」の制約を指定します。
サービスが online 状態に遷移してから、起動メソッドの最初の呼び出しまでの固定の秒数。
スケジュールされたサービスを作成する際の頻度を指定します。
period から起動メソッドが実行されるまでのランダムな最大秒数。使用される最後の秒数は、0 からこのプロパティーの値までの範囲です。
スケジュールされたサービスを作成する際の「分」の制約を指定します。
スケジュールされたサービスを作成する際の「月」の制約を指定します。
スケジュールされたサービスを作成する際の「時」の制約を指定します。
この NV ペアは、スケジュールされたサービスのマニフェストを作成するために、start-method ペアとともに使用されます。このペアの値は、スケジュールされたサービスを実行する頻度を指定します。このペアを指定する場合は、start-method も指定する必要があります。start-method ペアの値は、scheduled_method 要素の exec 属性に使用されます。スケジュールされたサービスに関する詳細は、svc.periodicd(8) を参照してください。
スケジュールされたサービスを作成する際の「タイムゾーン」の値を指定します。
スケジュールされたサービスを作成する際の「weekday_of_month」の制約を指定します。
スケジュールされたサービスを作成する際の「年の週番号」の制約を指定します。
スケジュールされたサービスを作成する際の「年」の制約を指定します。
次のコマンド行オプションがサポートされています。
生成されたファイルをインストールします。詳細は、「機能説明」を参照してください。
作成されるファイルの名前を指定します。
名前/値ペアを指定します。詳細は、「拡張機能説明」を参照してください。
–i も –o も指定されていない場合、生成されたファイルは標準出力に書き出されます。
次のコマンドでは、単純な transient サービス用のマニフェストを作成します。transient サービスは svcbundle のデフォルトであるため、2 つのオプションだけでマニフェストを指定できます。
# svcbundle -s service-name=site/sneezy \ -s start-method=/lib/svc/method/sneezy使用例 2 daemon サービス用のマニフェストを作成する
次のコマンドでは、daemon サービス用のマニフェストを作成します。
# svcbundle -s service-name=site/sneezy \ -s start-method=/lib/svc/method/sneezy \ -s model=daemon使用例 3 停止およびリフレッシュコマンドを使用して daemon サービス用のマニフェストを作成する
次のコマンドでは、停止コマンドとリフレッシュコマンドを使用して daemon サービス用のマニフェストを作成します。
# svcbundle -s service-name=site/sleepy \ -s start-method="/lib/svc/method/sleepy %m" \ -s stop-method="/lib/svc/method/sleepy %m" \ -s refresh-method="/lib/svc/method/sleepy %m" \ -s model=daemon使用例 4 インスタンスプロパティーを使用してマニフェストを作成する
次のコマンドでは、インスタンスプロパティーを使用してマニフェストを作成します。
# svcbundle -s service-name=system/happy \ -s start-method=/lib/svc/method/happy \ -s instance-property=config:velocity:count:50 \ -s instance-property=config:color:astring:red
生成されたマニフェストは、2 つのプロパティー velocity と color を含む config プロパティーグループを使用してサービスインスタンスを作成します。
使用例 5 予約文字を含むインスタンスプロパティーを使用してマニフェストを作成する次のコマンドでは、インスタンスプロパティーを使用してマニフェストを作成します。
# svcbundle -s service-name=system/happy \ -s start-method=/lib/svc/method/happy \ -s instance-property=config:velocity:count:50 \ -s instance-property=config:color%20name:astring:red
生成されたマニフェストは、2 つのプロパティー velocity と color name を含む config プロパティーグループを使用してサービスインスタンスを作成します。
使用例 6 rc スクリプト変換用のマニフェストを作成する次のコマンドでは、rc スクリプトの変換に役立つマニフェストを作成します。この例では、rc スクリプトがマルチユーザーレベルで実行され、デーモンを起動しないものと想定します。
# svcbundle -s service-name=doc \ -s rc-script=/etc/init.d/doc:2
注意深いユーザーは、/lib/svc/share/smf_include.sh を含めるように rc スクリプトを変更します。
使用例 7 サービスプロパティーを変更するためのプロファイルを生成する次のコマンドでは、grumpy サービスの nfsmapid_domain プロパティーを設定するためのプロファイルを生成します。
# svcbundle -s bundle-type=profile \ -s service-name=network/nfs/grumpy \ -s service-property=nfs-props:nfsmapid_domain:astring:grumpy使用例 8 デフォルトのプロパティータイプを使用する
次のコマンドでは、デフォルトで astring になる config/color のプロパティータイプを設定します。
# svcbundle -s service-name=system/happy \ -s start-method=/lib/svc/method/happy \ -s instance-property=config:color::red使用例 9 Installing the Manifest
次のコマンドでは、–i オプションを使用してマニフェストをインストールします。この例では、bashful はサービス名のベース名であるため、生成されたマニフェストは /lib/svc/manifest/site/bashful.xml に書き出されます。
# svcbundle -i -s service-name=application/bashful \ -s start-method=/opt/bashful/start svcbundle: waiting for application/bashful to reach enabled state使用例 10 Specifying user and privileges for service method
The following command creates a service that runs as a non-root user but with more than basic privileges.
# svcbundle -s service-name=site/myapp -s user=appuser \ -s privileges=basic,proc_chroot,{file_write}:/var/share/myapp*
属性についての詳細は、マニュアルページの attributes(7) を参照してください。
|
svcs(1), service_bundle(5), attributes(7), smf(7), smf_method(7), smf_security(7), smf_template(7), init(8), svc.startd(8), svccfg(8), svc.periodicd(8)