User Commands pkgsend(1)
NAME
pkgsend - image packaging system publication client
SYNOPSIS
/usr/bin/pkgsend [options] command [cmd_options] [operands]
/usr/bin/pkgsend refresh-index
/usr/bin/pkgsend open [-en] pkg_fmri
/usr/bin/pkgsend add action arguments
/usr/bin/pkgsend include [-d basedir] ... [-T pattern] [manifest] ...
/usr/bin/pkgsend publish [-d basedir] ... [-T pattern] [--no-index]
[--fmri-in-manifest | pkg_fmri] [--no-catalog] [manifest] ...
/usr/bin/pkgsend close [-A | --no-index] [--no-catalog]
/usr/bin/pkgsend generate [-T pattern] [--target file] bundlefile ...
/usr/bin/pkgsend import [-T pattern] [--target file] bundlefile ...
DESCRIPTION
pkgsend allows the publication of new packages and new package
versions to an image packaging repository. Each publication isstructured as a transaction; multiple invocations of pkgsend
through a transaction allow the addition of resources and the transaction submission. To create or manage repositories, see pkgrepo(1). OPTIONS The following options are supported:-s repo_uri A URI representing the location of the target
repository. Both HTTP and filesystem-based
publication are supported. The default value is http://localhost:10000/.For filesystem-based publication, the repo_uri
should be specified as follows:file://
See the NOTES section below for more information about restrictions or suggestions for publication.--help or -?
Displays a usage message. SUBCOMMANDS The following subcommands are supported:open [-en] pkg_fmri
Begin a transaction on the package and version specified bypkg_fmri.
By default, or if the -e option is given, a successfully
opened transaction's ID will be published in a form suitablefor use with eval(1), to set the PKG_TRANS_ID environment
variable. This form can be convenient for delivering a package transaction from a shell script, for example. If the-n option is given, the transaction ID is displayed as a
string; this may be more useful in situations where shell scripting is not an available option. add action arguments Add a resource associated with an action to the current transaction. Requires transaction context. See ACTIONS below.import [-T pattern] [--target file] bundlefile ...
Add each given bundlefile into the current transaction. Supported bundle types are:- filesystem format SVr4 packages
- datastream format SVr4 packages
- tar files
- directories
If the basename of files in the bundle match the pattern(s)specified with -T, the timestamp of the file is added to the
action for that file. The pattern uses shell matching rules: * matches everything ? matches any single character [seq] matches any character in seq [!seq] matches any character not in seq When the bundle is a directory, there is no clear way to distinguish a file action from a hardlink action when there are multiple pathnames for a single inode. Normally, the first one found in the filesystem walk is treated as a file and the rest as hardlinks. This may be arbitrary, depending on the implementation of the filesystem. To specify which pathnames should be treated as files, pass each pathname as an argument tothe --target option. This option has no effect on other bundle
types, as they are capable of expressing which pathnames are files and which are hardlinks.include [-d basedir] ... [-T pattern] [manifest] ...
Add resources associated with the multiple actions present in each manifest file to the current transaction. If no files are specified, the standard input is read. Each line in the file should be the string representation of an action. In particular, the "add" token as described above should not be present, nor should there be open and close tokens representing transaction boundaries. For those actions with datastreams, the path to the file containing the data should be the second word on the line; for file actions if this is set to "NOHASH" the value of the "path" attribute is used instead.If the user specifies the -d option, basedir is prepended to
the search path when locating files in the manifest. Multiple-d options have their directories searched in the order they
appear on the command line.The -T option works as in the import command.
close [-A] [--no-index]
Close current transaction. With -A, abandon the current
transaction. With --no-index, do not update the
repository's search indices. With --no-catalog, do not add
to catalog which for now is only effective with file:// scheme repositories. This improves performance when publishing many packages at once; the repository will need to bestarted with a --add-content flag (see pkg.depotd(1M) man
page) to catalog and index the new content.publish [ -d basedir] ... [-T pattern] [--no-index]
[--fmri-in-manifest | fmri] [--no-catalog] [manifest] ...
Combines open, include and close in a single operation. -d
and --no-index options behave as described for include and
close subcommands. With --fmri-in-manifest, use the fmri
specified in the package manifest w/ a set action name of "pkg.fmri". Otherwise the fmri must be specified on thecommand line. With --no-catalog (which has effect only w/
file:// scheme repositories), do not update the catalog with the new package. This improves performance when publishing many packages at once; the repository will need to be startedwith a --add-content flag (see pkg.depotd(1M) man page) to
catalog and index the new content.The -T option works as in the import command.
generate [-T pattern] [--target file] bundlefile ...
Read each given bundlefile (such as an SVR4 package, directory, tarfile, etc) and emit the manifest describing the bundlefile tothe stdout. The -T and --target options work as in the import
command. The repo argument or PKG_TRANS_ID is not used with this
subcommand. Once obtained, the manifest can be annotated, have dependencies analyzed, added, etc before being passed to the publish or import subcommands.refresh-index
Update the repository's search indices. Should be used afterclosing one or more transactions using --no-index.
ENVIRONMENT VARIABLES The following environment variables are supported:PKG_TRANS_ID Identifier to use for this transaction.
If undefined (and no alternative means of specifying a transaction is given), subcommands requiring transaction context will fail. ACTIONS Each resource within a package must be associated with an action. See pkg(5) for a complete list of actions. If an action has an associated payload, the path to the payload must be the first argument after the action name. (At present, the file and license actions have payloads.) All other attributes arespecified as a list of name-value pairs, and may be given in any
order. An action must always have a key attribute; however, some actions may require additional attributes to work correctly. Arbitrary attributes, beyond those defined for a given action, may be included in the action. Such attributes are expected to follow defined conventions such that they carry appropriate meaning or avoid collision with attributes from other action providers; specific attributes that cause additional operations, known as "actuators", are documented in pkg(5).depend type=
Make this package version dependent on the give package FMRI.fmri= [ property_list ] Valid depend_types are require and optional.
dir mode=owner= group= path= \ [ property_list ]
Deliver a directory with the listed attributes into the transaction. driver name=perms= class= alias= \ [ property_list ]
Deliver driver configuration with the listed attributes into the transaction. Multiple alias entries may be given to record multiple device aliases.file src_path mode=
owner= group= \ path=
Deliver a file with the listed attributes into the transaction.[ property_list ] group groupname=
Deliver a group definition as defined in group(4). If the group ID, or gid, is omitted, the first free group under 100 will be assigned at installation time. See pkg(5) for additional details, and relation to the user action below.gid= [ property_list ] hardlink path=
Deliver a link with given path, pointing to the given target. legacy category=target= [ property_list ] desc= hotline= \ name=
pkg= vendor= version= \ [ property_list ]
Deliver sufficient metadata, as given by the various fields,to represent a System V package with name given by legacy_pkg.
license src_path license=
\ [ property_list ]
Deliver, into the image packaging metadata, the license fileat src_path, labeled by the given license value.
link path=
Deliver a symbolic link with given path, pointing to the given target.target= [ property_list ] set name=
Deliver a "package property" defined by the given name and value. user username=value= [ property_list ] password= uid= \ group=
gcos-field= home-dir= \ login-shell=
group-list= \ [ group-list=
lastchng=... ] ftpuser={true|false} \ min= max= \ warn= inactive= expire= \ flag=
Deliver a user account, as defined in passwd(4), shadow(4), group(4), and ftpusers(4). If the user ID, or uid, is omitted, then the first free user ID under 100 will be assigned at installation time. The primary group, specified by group, must exist prior to the action's execution; this condition can be ensured by having a group action deliver the group definition in the same package as the user action, or by having a depend action that expresses a requirement on a[ property_list ] package possessing a group action. The group-list property
delivers one group to the group(4) entry for the specified user. Multiple groups are delivered by multiple assignmentsto group-list. See pkg(5) for additional details.
EXAMPLES
Example 1: Create a trivial package.$ eval `pkgsend open example@1.0-1`
$ pkgsend add file example mode=0555 owner=root group=bin \
path=/usr/bin/example$ pkgsend close
Example 2: Publish a package using filesystem-based publication
and a pre-existing manifest:
$ pkgsend -s file:///tmp/example_repo -d /tmp/pkg_files \
/tmp/pkg_manifest
Example 3: Create a package that delivers two groups and a user.$ eval `pkgsend open groups-and-user@1.0-1`
$ pkgsend add group groupname=maingrp
$ pkgsend add group groupname=auxgrp
$ pkgsend add user ftpuser=false gcos-field="Example User" \
group=maingrp group-list=auxgrp password=NP username=exuser
$ pkgsend close
EXIT STATUS The following exit values are returned: 0 Command succeeded. 1 An error occurred. 2 Invalid command line options were specified.ATTRIBUTES
See attributes(5) for descriptions of the following attributes:____________________________________________________________
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
|_____________________________|_____________________________|
| Availability | ||_____________________________|_____________________________|
SEE ALSO
eval(1), pkgrepo(1), pkg.depotd(1M), ftpusers(4), group(4), passwd(4), shadow(4), attributes(5), pkg(5) NOTESThe image packaging system is an under-development feature.
Command names, invocation, formats, and operations are all subject to change. Development is hosted in the OpenSolaris community at:http://hub.opensolaris.org/bin/view/Project+pkg/ Other package bundle formats can be created. Other forms of package publication, via the underlying Python API or via the web API, are also possible. When publishing individual package files that are greater than 128MB
in size, filesystem-based publication must be used due to publication
protocol limitations. It is also the recommended method of publication when access control for a repository is needed.When using filesystem-based publication, any pkg.depot(1M) processes
serving the target repository must be restarted after publication is completed for the changes to be reflected in its web interface or search responses. See pkg.depotd(1M) for more information.