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 format.
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
- 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)
- 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 "/".
- 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.
- 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 root_path.
If you created your prototype file using "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:
Overrides the architecture information provided in the
file with arch
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.
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).
Uses the file prototype as input to the command.
The default prototype filename is [Pp]rototype.
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)
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.
Overrides the production stamp definition in the
file with pstamp
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.
Overrides the version information provided in the
file with version
Places the indicated variable in the packaging
environment. (See prototype(5)
for definitions of variable
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:
An error occurred.
pkgparam(1), pkgproto(1), pkgtrans(1),
uname(1), pkginfo(5), pkgmap(5), prototype(5),
attributes(7), largefile(7), df(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:
- Both SUNW_PKG_ALLZONES and SUNW_PKG_THISZONE are set to
- SUNW_PKG_HOLLOW is set to TRUE and SUNW_PKG_ALLZONES
is set to FALSE.
- The package contains a request script and SUNW_PKG_THISZONE set to
For additional information regarding these parameters, see