PKGMK(1) User Commands PKGMK(1)


pkgmk - produce an installable package


pkgmk [-o] [-a arch] [-b base_src_dir] [-d device]
[-f prototype] [-l limit] [-p pstamp] [-r root_path]
[-v version] [variable=value]... [pkginst]


The pkgmk utility produces an installable package to be used as input to
the pkgadd(8) command. The package contents is in directory structure

The command uses the package prototype(5) file as input and creates a
pkgmap(5) file. The contents for each entry in the prototype file is
copied to the appropriate output location. Information concerning the
contents (checksum, file size, modification date) is computed and stored
in the pkgmap file, along with attribute information specified in the
prototype file.

pkgmk searches for the files listed in the prototype(5) file as described
in the following conditions. Note: If a prototype file contains the
explicit location of the file to include in the package, then the
following search explanations do not apply.

1. If neither -b nor -r options are specified, the file name
component of each file path listed in the prototype(5) file is
expected to be found in the same directory as the prototype(5)

2. If -b is specified as a relative path (without a leading "/"),
then base_src_dir is prepended to the relative file paths from
the prototype(5) file. The resulting path is searched for in
the root_path directories. If a root_path is not specified, it
defaults to "/".

3. If -b is specified as an absolute path (with a leading "/"),
then base_src_dir is prepended to the relative paths from the
prototype(5) file and the result is the location of the file.
root_path is not searched.

4. If -r is specified, then full file paths are used from the
prototype(5) file. Relative paths have base_src_dir prepended.
If base_src_dir is not specified, it defaults to "". The
resulting path is searched for in each directory of the

If you created your prototype file using "pkgproto a/relative/path"or
"pkgproto a/relative/path=install/path", you should use the -r root_path
option to specify the location of a/relative/path so that pkgmk can
correctly locate your source files.

Package commands, including pkgmk, are largefile(7)-aware. They handle
files larger than 2 GB in the same way they handle smaller files. In
their current implementations, pkgadd(8), pkgtrans(1) and other package
commands can process a datastream of up to 4 GB.


The following options are supported:

-a arch
Overrides the architecture information provided in the
pkginfo(5) file with arch.

-b base_src_dir
Prepends the indicated base_src_dir to locate
relocatable objects on the source machine. Use this
option to search for all objects in the prototype
file. pkgmk expects to find the objects in
/base_src_dir or to locate the objects by use of the
-b and -r options, respectively.

-d device
Creates the package on device. device can be an
absolute directory pathname or the identifiers for a
floppy disk or removable disk (for example,
/dev/diskette). The default device is the installation
spool directory (/var/spool/pkg).

-f prototype
Uses the file prototype as input to the command. The
default prototype filename is [Pp]rototype.

-l limit
Specifies the maximum size in 512 byte blocks of the
output device as limit. By default, if the output file
is a directory or a mountable device, pkgmk employs
the df(8) command to dynamically calculate the amount
of available space on the output device. This option
is useful in conjunction with pkgtrans(1) to create a
package with a datastream format.

Overwrites the same instance; package instance is
overwritten if it already exists.

-p pstamp
Overrides the production stamp definition in the
pkginfo(5) file with pstamp.

-r root_path
Uses the indicated root_path with the source pathname
appended to locate objects on the source machine,
using a comma (,) as the separator for the path
elements. If this option is specified, look for the
full destination path in each of the directories
specified. If neither -b nor -r is specified, look for
the leaf filename in the current directory.

-v version
Overrides the version information provided in the
pkginfo(5) file with version.

Places the indicated variable in the packaging
environment. (See prototype(5) for definitions of
variable specifications.)


The following operand is supported:

A package designation by its instance. An instance can be the
package abbreviation or a specific instance (for example,
inst.1 or inst.2). All instances of a package can be requested
by inst.*. The asterisk character (*) is a special character
to some shells and might need to be escaped. In the C-Shell, *
must be surrounded by single quotes (') or preceded by a
backslash (\).


The following exit values are returned:

Successful completion.

An error occurred.


pkgparam(1), pkgproto(1), pkgtrans(1), uname(1), pkginfo(5), pkgmap(5),
prototype(5), attributes(7), largefile(7), df(8), pkgadd(8)

Application Packaging Developer's Guide


Architecture information is provided on the command line with the -a
option or in the prototype(5) file. If no architecture information is
supplied, pkgmk uses the output of uname -m (see uname(1)).

Version information is provided on the command line with the -v option or
in the pkginfo(5) file. If no version information is supplied, a default
based on the current date is provided.

Command line definitions for both architecture and version override the
prototype(5) definitions.

pkgmk fails if one of the following invalid combinations of zone-related
parameters is used:


2. SUNW_PKG_HOLLOW is set to TRUE and SUNW_PKG_ALLZONES is set to

3. The package contains a request script and SUNW_PKG_THISZONE
set to TRUE.

For additional information regarding these parameters, see pkginfo(5).

October 30, 2007 PKGMK(1)