Go to main content

man pages section 8: System Administration Commands

Exit Print View

Updated: Wednesday, July 27, 2022
 
 

svcbundle(8)

Name

svcbundle - create an SMF service bundle

Synopsis

svcbundle [-i | -o output_file] -s name=value...
svcbundle help [name]

Description

The svcbundle command is used to generate SMF manifests. The manifest is specified by multiple –s options. To generate a manifest, you must specify service-name and start-method. The other NV pairs are optional and allow the user to specify more details of the service. The svccfg(8) validate command will be run on the generated manifest to detect any templating conflicts.

You can also use svcbundle to generate profiles. See bundle-type below.

The second synopsis prints a help message on standard out listing all legal names. Alternatively, you can specify help and a name to see a discussion of legal values for that name.

In order to reduce the burden on the user, svcbundle makes several simplifying assumptions when generating a manifest. You can edit the generated manifest if these assumptions are not correct for your application:

  • The generated manifest is intended to be used with the master restarter, svc.startd(8).

  • A dependency on svc:/milestone/multi-user will be generated to keep the service from starting too early. See rc-script below for an exception to this. 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).

  • The bundle name will be the same as the value provided for 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.

By using the –i option, you can get svcbundle to do much of the work of installing the service. It will automatically save the generated manifest in /lib/svc/manifest/site or the profile in /etc/svc/profile/site. The name of the generated file will be the basename of the service name that is specified with –s service-name, and the file will have an .xml extension. Warning: svcbundle will overwrite any existing file with that name.

svcbundle will then restart the manifest-import service to process the newly created file and incorporate it into SMF. In the manifest case, svcbundle will then wait for the service to enter a final state -- one of online, disabled, or maintenance. At the start of this wait period, svcbundle will print:

svcbundle: waiting for service to reach final_state state

...where final_state is enabled or disabled. It is safe to interrupt svcbundle after this message appears.

Clearly, to use the –i option, you need sufficient authorizations to create the file in these restricted directories and to restart the manifest-import service. See smf_security(7).

Extended Description

This section discusses name/value (NV) pairs.

The generated bundle is entirely defined by the use of multiple -s options on the command line. Each NV pair is of the form name=value where name and name come from this list:

bundle-type

Type of service bundle to generate. Legal values are manifest and profile. manifest is the default.

duration

Synonym for model.

enabled

Indicates whether or not the instance should be enabled. Legal values are true and false. The default value is true.

model

Sets the service model. This is the value of the startd/duration property. Refer to svc.startd(8). Model can be set to one of the following values:

  • contract

  • daemon — synonym for contract

  • child

  • wait — synonym for child

  • transient

The default is transient.

instance-name

Name of the instance. The default value is default.

instance-property=pg_name:prop_name:prop_type:value
service-property=pg_name:prop_name:prop_type:value

These options are used to create a property group named pg_name in the instance or service, and it will have a type of application. The PG will have a single property named prop_name with a single value that is of type prop_type. Property groups with multiple properties can be created by invoking *-property multiple times. Zero or more *-property= declarations can be used. The property group name and property name must be encoded if the property group is nested (and should therefore be the complete property group name including ancestors) or if either the property group or property name contains a reserved character (see smf(7)).

The property type can be defaulted by using two consecutive colons. See “Examples,” below. For manifests, a default property type of astring will be used. Profiles do not require that the property be specified, since it can usually be determined from other sources of information.

rc-script=script_path:run_level

This NV pair causes svcbundle to emit a manifest that facilitates conversion of a legacy rc script to an SMF service. script_path is the path to the rc script and run_level is the run level (see init(8)) where the rc script runs. script_path is used to generate the start and stop exec_method elements in the manifest. The exec attribute will be set to:

script_path %m

run_level is used to generate dependencies, so that the script runs at the appropriate time during booting.

refresh-method

The command to execute when a service is refreshed. Whitespace is allowed in the value. The value can include method tokens introduced by a percent sign (%), as documented in smf_method(7). The default value is :true.

service-name

Name of the service. This NV pair is required.

start-method

The command to execute when the service is started. Whitespace is allowed in the value. The method tokens that are introduced by % as documented in smf_method(7) are allowed and will be placed in the manifest for expansion by the restarter. :true is allowed. This NV pair is required for manifests unless the rc-script NV pair is specified. It is not required for profiles.

stop-method

The command to execute when the service is stopped. It accepts values like start-method and also accepts :kill. :true is the default value for transient services and :kill for contract and child services.

timeout

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.

start-timeout

The service will be set with a timeout specified by user specifically for the start-method.

stop-timeout

The service will be set with a timeout specified by user specifically for the stop-method.

refresh-timeout

The service will be set with a timeout specified by user specifically for the refresh-method.

user

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.

group

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.

privileges

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).

Periodic and Scheduled service attributes

The following attributes are used to create a periodic or scheduled service.

period

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.

day

Specifies the 'day' constraint when creating a scheduled service. Refer to svc.periodicd(8) for detailed information regarding scheduled services.

day_of_month

Specifies the 'day_of_month' constraint when creating a scheduled service.

delay

The fixed number of seconds after the service has transitioned to the online state before the first invocation of the start method.

frequency

Specifies the frequency when creating a scheduled service.

jitter

The maximum of a random number of seconds after period before the start method is run. The final number of seconds that is used ranges between 0 and the value of this property.

minute

Specifies the 'minute' constraint when creating a scheduled service.

month

Specifies the 'month' constraint when creating a scheduled service.

hour

Specifies the 'hour' constraint when creating a scheduled service.

interval

This NV pair, along with the start-method pair, is used to create a manifest for a scheduled service. The value of this pair determines how frequently the scheduled service should be run. If this pair is specified, it is required that start-method be specified as well. The value of the start-method pair will be used for the exec attribute of the scheduled_method element. Refer to svc.periodicd(8) for detailed information regarding scheduled services.

timezone

Specifies the 'timezone' value when creating a scheduled service.

weekday_of_month

Specifies the 'weekday_of_month' constraint when creating a scheduled service.

week_of_year

Specifies the 'week_of_year' constraint when creating a scheduled service.

year

Specifies the 'year' constraint when creating a scheduled service.

Options

The following command-line options are supported:

–i

Installs the generated file. See “Description” for details.

–o output_file

Specifies the name of the file to be created.

–s name=value

Specifies a name/value pair. See “Extended Description” for details.

If neither –i nor –o are specified, the generated file will be written to stdout.

Examples

Example 1 Creating Manifest for Transient Service

The following command creates a manifest for a simple transient service. Since transient services are the default for svcbundle, you can specify the manifest with just two options.

# svcbundle -s service-name=site/sneezy \
-s start-method=/lib/svc/method/sneezy
Example 2 Creating Manifest for Daemon Service

The following command creates a manifest for a daemon service.

# svcbundle -s service-name=site/sneezy \
-s start-method=/lib/svc/method/sneezy \
-s model=daemon
Example 3 Creating Manifest for Daemon Service with Stop and Refresh Commands

The following command creates a manifest for a daemon service with stop and refresh commands.

# 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
Example 4 Creating Manifest with Instance Properties

The following command creates a manifest with instance properties.

# 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

The generated manifest will create a service instance with a config property group containing two properties, velocity and color.

Example 5 Creating Manifest with Instance Properties With Reserved Characters

The following command creates a manifest with instance properties.

# 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

The generated manifest will create a service instance with a config property group containing two properties, velocity and color name.

Example 6 Creating Manifest for rc Script Conversion

The following command creates a manifest to assist in converting an rc script. This example assumes that the rc script runs at the multiuser level and does not start a daemon.

# svcbundle -s service-name=doc \
-s rc-script=/etc/init.d/doc:2

The conscientious user will modify the rc script to include /lib/svc/share/smf_include.sh.

Example 7 Generating Profile to Modify Service Property

The following command generates a profile to set the nfsmapid_domain property of the grumpy service.

# svcbundle -s bundle-type=profile \
-s service-name=network/nfs/grumpy \
-s service-property=nfs-props:nfsmapid_domain:astring:grumpy
Example 8 Using the Default Property Type

The following command sets the property type for config/color defaults to astring.

# svcbundle -s service-name=system/happy \
-s start-method=/lib/svc/method/happy \
-s instance-property=config:color::red
Example 9 Installing the Manifest

The following command uses the –i option to install the manifest. In this example the generated manifest will be written to /lib/svc/manifest/site/bashful.xml, since bashful is the basename of the service name.

# svcbundle -i -s service-name=application/bashful \
-s start-method=/opt/bashful/start
svcbundle: waiting for application/bashful to reach enabled state
Example 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

See attributes(7) for descriptions of the following attributes:

ATTRIBUTE TYPE
ATTRIBUTE VALUE
Availability
system/core-os
Interface Stability
Committed

See Also

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)