prototype(4)
NAME
prototype - package information file
DESCRIPTION
prototype is an ASCII file used to specify package informa-
tion. Each entry in the file describes a single deliverable
object. An object may be a data file, directory, source
file, executable object, and so forth. This file is gen-
erated by the package developer.
Entries in a prototype file consist of several fields of
information separated by white space. Comment lines begin
with a ``#'' and are ignored. The fields are described below
and must appear in the order shown.
part An optional field designating the part number in which
the object resides. A part is a collection of files
and is the atomic unit by which a package is pro-
cessed. A developer can choose criteria for grouping
files into a part (for example, based on class). If
this field is not used, part 1 is assumed.
ftype A one-character field that indicates the file type.
Valid values are:
b block special device
c character special device
d directory
e a file to be edited upon installation or removal
(may be shared by several packages)
f a standard executable or data file
i installation script or information file
l linked file
p named pipe
s symbolic link
v volatile file (one whose contents are expected
to change, like a log file)
x an exclusive directory accessible only by this
package
class The installation class to which the file belongs. This
name must contain only alphanumeric characters and be
no longer than 12 characters. The field is not speci-
fied for installation scripts. (admin and all classes
beginning with capital letters are reserved class
names.)
pathname
The pathname where the file will reside on the target
machine, for example, /usr/bin/mail or bin/ras/proc.
Relative pathnames (those that do not begin with a
slash) indicate that the file is relocatable. The form
path1=path2
may be used for two purposes: to define a link and to define
local pathnames.
For linked files, path1 indicates the destination of the
link and path2 indicates the source file. (This format is
mandatory for linked files.)
For local pathnames, path1 indicates the pathname an object
should have on the machine where the entry is to be
installed and path2 indicates either a relative or fixed
pathname to a file on the host machine which contains the
actual contents.
A pathname may contain a variable specification of the
form $variable. If variable begins with a lower case
letter, it is a build variable. If variable begins
with an upper case letter, it is an install variable.
Build variables are bound at build time. If an install
variable is known at build time, its definition is
inserted into the pkginfo(4) file so that it will be
available at install time. If an install variable is
not known at build time, it will be bound at install
time.
major The major device number. The field is only specified
for block or character special devices.
minor The minor device number. The field is only specified
for block or character special devices.
mode The octal mode of the file (for example, 0664). A
question mark (?) indicates that the mode will be left
unchanged, implying that the file already exists on
the target machine. This field is not used for linked
files or packaging information files.
The mode can be a variable specification of the form
$variable. If variable begins with a lower case
letter, it is a build variable. If variable begins
with an upper case letter, it is an install variable.
Build variables are bound at build time. If an install
variable is known at build time, its definition is
inserted into the pkginfo(4) file so that it will be
available at install time. If an install variable is
not known at build time, it will be bound at install
time.
owner The owner of the file (for example, bin or root). The
field is limited to 14 characters in length. A ques-
tion mark (?) indicates that the owner will be left
unchanged, implying that the file already exists on
the target machine. This field is not used for linked
files or packaging information files.
The owner can be a variable specification of the form
$variable. If variable begins with a lower case
letter, it is a build variable. If variable begins
with an upper case letter, it is an install variable.
Build variables are bound at build time. If an install
variable is known at build time, its definition is
inserted into the pkginfo(4) file so that it will be
available at install time. If an install variable is
not known at build time, it will be bound at install
time.
group The group to which the file belongs (for example, bin
or sys). The field is limited to 14 characters in
length. A question mark (?) indicates that the group
will be left unchanged, implying that the file already
exists on the target machine. This field is not used
for linked files or packaging information files.
The group can be a variable specification of the form
$variable. If variable begins with a lower case
letter, it is a build variable. If variable begins
with an upper case letter, it is an install variable.
Build variables are bound at build time. If an install
variable is known at build time, its definition is
inserted into the pkginfo(4) file so that it will be
available at install time. If an install variable is
not known at build time, it will be bound at install
time.
An exclamation point (!) at the beginning of a line indi-
cates that the line contains a command. These commands are
used to incorporate files in other directories, to locate
objects on a host machine, and to set permanent defaults.
The following commands are available:
search
Specifies a list of directories (separated by white
space) to search for when looking for file contents on
the host machine. The base name of the path field is
appended to each directory in the ordered list until
the file is located. Searches are not recursive.
include
Specifies a pathname which points to another prototype
file to include. Note that search requests do not span
include files.
default
Specifies a list of attributes (mode, owner, and
group) to be used by default if attribute information
is not provided for prototype entries which require
the information. The defaults do not apply to entries
in include prototype files.
param=value
Places the indicated parameter in the current environ-
ment. Spans to subsequent included prototype files.
The above commands may have variable substitutions embedded
within them, as demonstrated in the two example prototype
files below.
Before files are overwritten during installation, they are
copied to a temporary pathname. The exception to this rule
is files whose mode includes execute permission, unless the
file is editable (that is, ftype is e). For files which meet
this exception, the existing version is linked to a tem-
porary pathname, and the original file is removed. This
allows processes which are executing during installation to
be overwritten.
EXAMPLES
Example 1: Example 1:
!PROJDIR=/usr/proj
!BIN=$PROJDIR/bin
!CFG=$PROJDIR/cfg
!LIB=$PROJDIR/lib
!HDRS=$PROJDIR/hdrs
!search /usr/myname/usr/bin /usr/myname/src /usr/myname/hdrs
i pkginfo=/usr/myname/wrap/pkginfo
i depend=/usr/myname/wrap/depend
i version=/usr/myname/wrap/version
d none /usr/wrap 0755 root bin
d none /usr/wrap/usr/bin 0755 root bin
! search $BIN
f none /usr/wrap/bin/INSTALL 0755 root bin
f none /usr/wrap/bin/REMOVE 0755 root bin
f none /usr/wrap/bin/addpkg 0755 root bin
!default 755 root bin
f none /usr/wrap/bin/audit
f none /usr/wrap/bin/listpkg
f none /usr/wrap/bin/pkgmk
# the following file starts out zero length but grows
v none /usr/wrap/logfile=/dev/null 0644 root bin
# the following specifies a link (dest=src)
l none /usr/wrap/src/addpkg=/usr/wrap/bin/rmpkg
! search $SRC
!default 644 root other
f src /usr/wrap/src/INSTALL.sh
f src /usr/wrap/src/REMOVE.sh
f src /usr/wrap/src/addpkg.c
f src /usr/wrap/src/audit.c
f src /usr/wrap/src/listpkg.c
f src /usr/wrap/src/pkgmk.c
d none /usr/wrap/data 0755 root bin
d none /usr/wrap/save 0755 root bin
d none /usr/wrap/spool 0755 root bin
d none /usr/wrap/tmp 0755 root bin
d src /usr/wrap/src 0755 root bin
Example 2: Example 2:
# this prototype is generated by 'pkgproto' to refer
# to all prototypes in my src directory
!PROJDIR=/usr/dew/projx
!include $PROJDIR/src/cmd/prototype
!include $PROJDIR/src/cmd/audmerg/protofile
!include $PROJDIR/src/lib/proto
SEE ALSO
pkgmk(1), pkginfo(4)
Application Packaging Developer's Guide
NOTES
Normally, if a file is defined in the prototype file but
does not exist, that file is created at the time of package
installation. However, if the file pathname includes a
directory that does not exist, the file will not be created.
For example, if the prototype file has the following entry:
f none /usr/dev/bin/command
and that file does not exist, it will be created if the
directory /usr/dev/bin already exists or if the prototype
also has an entry defining the directory:
d none /usr/dev/bin
Man(1) output converted with
man2html