fpkg(1M)
NAME
fpkg − file packaging utility for use with update(1m)
SYNOPSIS
fpkg [-m media_type] [-d destination_directory] [-a archive_file] [-s device_size] [-V media_format_version] [-S machine_series] [-c comment_string] [-L log_file] [-hvM] Product_Specification_File
fpkg [-L log_file] [-v] -r media_directory > Product_Specification_File
DESCRIPTION
fpkg is used to package a collection of files and produce media in a format usable by update (see update(1M)). The media produced can be either tape archive format (see tar(1)) or in a format usable by netdistd (see netdistd(1M)). fpkg cannot be used to make CD-ROM media. When making network media fpkg must be executed by user root (super-user) so that file modes can be correctly set under the netdist directory. Making tape media does not require root privileges unless source files cannot otherwise can be read. For tape media, file modes are set inside the archive and no special privileges are required.
fpkg packages files according to the specifications in the user-supplied Product_Specification_File (PSF), unless the -r option is specified. With the -r option, fpkg examines the given media_directory, and writes a PSF to the standard output. The PSF that is produced can be used as input to a second invocation of fpkg in order to repackage media_directory. media_directory can be a netdistd directory, or a mounted CD-ROM (See -r description for details).
Options
fpkg recognizes the following options:
-m media_type Valid media_type is either network or tape. Setting media_type to network causes fpkg to load the package into the destination_directory (-d option) in a format suitable for use by netdistd. Setting media_type to tape causes fpkg to write the package to the specified archive_file (-a option) in tar format which is directly usable by update. Specifying the -m option is redundant information and not necessary if the -a or -d option has been specified (these options imply the media type).
The default media_type is network.
-d destination_directory
Specifies the directory in which fpkg creates the package in a format suitable for use by netdistd. This option implies a media_type (-m option) of network. fpkg must be executed by root (super-user) when making network media.
The default destination_directory is /netdist.
−a archive_file Specifies the output device file (or regular disk file) for fpkg to write the tape archive. The output device (or file) can then be used directly by update. The output is also readable by tar (although only the table-of-contents option is of real use). This option implies a media_type (-m option) of type tape. An archive_file argument of - causes fpkg to write the resulting archive to standard out. This can be useful when writing to a device on a remote host (see EXAMPLES ).
The default archive_file is /dev/rmt/0m.
−s device_size Specifies the archive_file capacity in Mbytes (where 1 Mbyte = 1024 × 1024 bytes). Used only if the media_type (-m or -a option) is tape. The size information is used to determine how much of the package can fit on one tape volume. This information is necessary when the package spans more than one tape volume. For some devices fpkg can automatically determine the capacity. For those devices the default sizes are:
Cartridge tape: 63 Mbytes
9-track tapes: 40 Mbytes
DDS tapes: 1330 Mbytes
Regular disk file: size of free file system space.
-V media_format_version
Specifies the format of media produced by fpkg. media_format_version determines which versions of update are able to read the media produced. update is able to read media marked with a media_format_version older than the time of its release, but not newer. Acceptable values for media_format_version are: A.B7.00, A.B8.00, and A.B8.05. If media_format_version does not match one of these, it is rounded down to one of the accepted values and a notice message is produced. Only A.B8.05 media fully supports the S700.
The default media_format_version is A.B8.00.
-S machine_series
Specifies which series of machines can read the media produced. Acceptable values are: 300 (implies also Series 400), 700, and 800. For tape media it is possible to allow all series to read the media, in which case the -S option should be omitted and the PSF should not set any architecture specifiers (sys or is keywords or H or M flags to the ff keyword). For network media, this information is needed because an element of the netdistd directory structure contains the series name.
For tape media of version A.B8.05, it is possible to specify a mixture of machines that can load the media. In this case, multiple -S options can be specified (such as -S700 or -S800).
For network media, fpkg uses the -S option to determine which subdirectory (300, 700, or 800) under the destination_directory to place the package. If multiple -S options are given, fpkg uses the first one found for determining the netdist subdirectory. Therefore fpkg must be executed multiple times, rearranging the -S options so that the package can be placed in each of the appropriate subdirectories.
The default machine_series is “all series” for tape media. For network media it defaults to the machine series that fpkg is executed from. This default value is overridden if the PSF contains any machine-architecture specifiers (fpkg issues a notice in this case).
-c comment-string
Allows the user to override the default comment string that is placed in the MAIN.pkg file used by netdistd. The default string is: Fileset packages for use by update(1M).
-L logfile Changes the log file from the default: /tmp/fpkg.log, to logfile. fpkg appends a log of messages, errors, option settings, and other information to this file.
-h This option tells fpkg to ignore files that are symbolic links, and to treat the linked-to file as the file to be placed into the package instead of the link. Without the -h option, fpkg stores the symbolic link as it appears. update then restores the symbolic link when the media is loaded.
-v Sets verbose mode. fpkg prints information that is normally not necessary. This is useful for determining what defaults were chosen and for a step-by-step progress report. Normally fpkg issues some status information, notices, and errors.
-M Setting this option allows fpkg to produce media that contains filesets destined for a mixture of architectures. However, until HP-UX Release 9.0, update refuses to load media that contains filesets with mixed architecture specifiers. Using this option may cause the media to be loadable only by HP-UX Release 9.0 or later systems. fpkg gives a warning if this is the case.
-r media_directory
Recreates a PSF that can be used in a second invocation of fpkg to repackage the filesets found in media_directory. This option is used to transfer filesets from either CD-ROM or netdistd media to tape. media_directory is the path name of a mounted CD-ROM, or that of the architecture level of a netdistd directory (such as /UPDATE_CDROM, /netdist/300, /netdist/800, etc). updist should be used when transferring media to a netdistd directory (see updist(1M)).
fpkg skips any filesets on CD-ROM media that are secured (encrypted). If the -v option is given, a notice is given for each secured fileset skipped. If a secured fileset is to be transferred to the tape media, updist must be used (with a valid codeword) to first transfer the fileset or filesets to a netdistd directory where they are in unencrypted form. A PSF can then be created from the netdist media and appended to the deficient PSF created from the secured CD-ROM. If all desired filesets were loaded by updist, the PSF created from the netdistd directory should be complete as-is. Use appropriate precautions when duplicating any material that may be protected by copyright and/or license agreements.
-? Any invalid option causes fpkg to display a general usage message.
Product Specification File (PSF) format
Update media appears as a three-layer hierarchy. The top layer contains partitions. Under each partition is a collection of filesets. Each fileset contains any number of files.
The PSF is used to specify the structure of the package and the attributes of the files and filesets contained in the package. It is composed of recognized keywords and lists of file names to be included in the package (one per line). Extra white space is ignored. Comments are recommended, and consist of a # character followed by optional arbitrary text through end-of-line. In general, the pseudo structure of the PSF is:
Partition name and description
Fileset name and description
Fileset attributes
Files in fileset
Another fileset
Attributes
Files in this fileset
Next Partition name and description
Next Fileset
Attributes
Files
etc, etc, ...
Valid Keywords.
The PSF is made up of a list of keywords usually followed by an argument of some kind. For example:
pn OS-CORE
defines the next partition which is to be named OS-CORE. The following table is a list of recognized keywords. Most keywords have a short (abbreviated) form and an unabbreviated, more readable form; the two forms can be used interchangeably:
| Keyword | Unabbreviated Form | Argument(s) | Required? |
| pn | partition_name | string | Recommended |
| pd | partition_description | string | Recommended |
| fn | fileset_name | string | Yes |
| fd | fileset_description | string | Recommended |
| ff | fileset_flags | characters | No |
| is | instruction_set | instruction-id | No |
| sys | system_architecture_type | Series-list | No |
| dep | fileset_dependency | string(s) | No |
| fv | fileset_version | version-string | No |
| ffperm | fileset_file_permission | owner group mode | No |
| fdperm | fileset_directory_permission | owner group mode | No |
| customize | filename | No | |
| decustomize | filename | No | |
| copyright | filename | No | |
| CDFinfo | filename | No | |
| systemfile | filename | No | |
| media_order | number | No | |
| media_format | format-version | No | |
| pr | pseudo_root | path[=path] | No |
| F | Files | ∗, or none | Yes |
Keyword Descriptions.
The recognized keywords are described below:
pn | partition_name
Example: pn OS-CORE
Indicates the partition name to which the filesets that follow this keyword belong. This keyword must precede the partition description and any fileset specifiers within the partition. Maximum length is 14 characters; anything beyond 14 is ignored.
pd | partition_description
Example: pd "The base product"
Gives the current partition a short description string. Maximum length is 32 characters; anything beyond 32 is ignored.
fn | fileset_name
Example: fn UX-CORE
Always necessary and is used to mark and name the beginning of a new fileset. Must precede any other keywords associated with this fileset (except for partition information). Maximum length is 14 characters; anything beyond 14 is ignored. Note that each fileset name must be unique, both on the update media and when loaded onto a system. Care should be taken when naming filesets to avoid fileset name collisions. Look in the /system or /etc/filesets directory for examples of names already in use on your system (this is not by any means the complete set).
fd | fileset_description
Example: fd "OS Runtime files"
Gives the current fileset a short description of what purpose the fileset serves. Maximum length is 32 characters; anything beyond 32 is ignored.
ff | fileset_flags
Example: ff CD
Used to assign special attributes to a fileset. Depending on these attributes, update treats this fileset differently. The argument to this keyword is a list of characters; each character has a special meaning (order is not important). Possible character flags are:
B Causes update to rebuild the kernel and reboot after the fileset is loaded and after its customize script is run. All filesets marked with a B flag are loaded before the kernel is rebuilt.
C Indicates that this fileset cannot be loaded under a user-specified directory; it must be loaded relative to /.
Y Indicates to update that it should run sysrm or rmfn to remove any existing fileset having the same name, prior to reloading. This can slow the update process considerably and is not normally done. It is best to remove specific unwanted files in the customize script.
D Used to indicate that the fileset’s customize script should not be run until after all filesets have been loaded. This is the default action for filesets loaded with 8.05-or-later update. Thus this flag is obsolete (but can still be specified) for loading on 8.05 or later systems. This flag is not compatible with the B flag.
S Used only if this media is later transferred to a CD-ROM through HP ’s integration and manufacturing process. When this flag is set, the fileset is encrypted upon transfer to the CD. When encrypted, the fileset cannot be loaded without first obtaining a codeword (password). Note that fpkg cannot make CD-ROM media.
The architecture-specific flags H and M are used on A.B7.00 and A.B8.00 version media. For A.B8.05 media, use the sys and is keywords instead. The H and M flags may be used to specify the types of machines that can load this fileset. These flags can be left off to indicate that the fileset is loadable by all series machines. Or they can be left off and later specified by using the -S command line option, in which case fpkg automatically supplies these flags (if the media version is A.B7.00 or A.B8.00 — if the media version is A.B8.05, it uses the appropriate sys and is keywords). All filesets on the media must have the same architecture-specific flags (unless the -M option is used). It is recommended that neither the H nor M flag be specified and that the -S option be used, causing fpkg to supply the appropriate flags.
H For A.B7.00 and A.B8.00 version media, this flag is used to indicate that this fileset is loadable only onto HP-PA-RISC architecture machines, namely Series 800 and Series 700. The H and M flags cannot be used simultaneously.
M Used to specify the architecture type, like the H flag, but instead indicates compatibility with MC -680x0 series machines; namely Series 300 and Series 400. Cannot be used simultaneously with the H flag.
sys | system_architecture_type
Example: sys S700,S800
Can be used to specify which series of systems are allowed to load this fileset. This keyword is only valid with A.B8.05-version media. Valid system types are S300, S400 (translated to be S300), S600 (translated to be S800), S700, S800, or * (meaning any). One or more series specifiers can be used, separated by commas. If this keyword is used, the is keyword must also be specified. This keyword cannot be used in conjunction with the H or M flag to the ff keyword. It is recommended that neither the sys or is keywords be used, and the -S command-line option be used to allow fpkg to automatically generate this keyword (as appropriate). Using the sys and is to specify the architecture overrides the value set with the -S option. This keyword is used primarily when some filesets are for a different architecture.
is | instruction_set
Example: is PA_RISC_1_0
Can be used to specify the instruction set of systems allowed to load this fileset. This keyword is only valid with A.B8.05 version media. Valid instruction-set identifiers are: MC68020 (for Series 300 and Series 400 machines), PA_RISC_1_0 (for Series 700 and Series 800), PA_RISC_1_1 (for Series 700 only), or *, indicating that any instruction-set machine can load this fileset. If this keyword is used, the sys keyword must also be specified. This keyword cannot be used in conjunction with the H or M flag to the ff keyword. It is recommended that neither the sys nor is keywords be used and the -S command line option be used to allow fpkg to automatically generate this keyword (as appropriate). Specifying the architecture with the sys and is keywords overrides the value set with the -S option. This keyword is mainly used when not all filesets are for the same architecture.
dep | fileset_dependency
Usage: dep fileset [version]
Example: dep UX-CORE A.B8.07.0A
Can be used to specify any fileset (and fileset version) that must be loaded before, or along with this fileset for the product to function properly. This keyword can be used multiple times for the same fileset if it depends on multiple filesets. fpkg gives a warning if the fileset depended on is not contained in the same package. This is because update cannot enforce this dependency if it is not on the same media; it can only give a warning during loading. The optional version string is used to specify what version of another fileset this fileset depends on. This version feature is not supported when making A.B7.00 media (fpkg gives a warning in this case). See the fv keyword for more details. Fileset name must not exceed 14 characters; version is truncated at 11 characters.
fv | fileset_version
Example: fv A.B8.07.0A
Sets the version string for the current fileset. The version string is used by update to prevent the accidental loading of a fileset that is older than what currently resides on the system. update gives a warning if the fileset version being loaded is lower than the version of the same fileset already loaded. The version string is also used in calculating fileset dependencies (refer to the dep keyword). Giving a fileset a version allows other filesets to depend on a particular version of this fileset. For example, if this fileset is loaded onto a system and has a fileset version of A.B8.07.0A (as in the above example), and later another fileset is loaded that has a dependency on version A.B8.05.0A of this fileset, update proceeds with the load because it knows that the system contains a fileset equal or greater than the version required. The concept of giving a fileset a version number was introduced at HP-UX Release 8.0. Therefore when making media for HP-UX 7.0, the fileset version is ignored, and fpkg gives a warning (if the media version (-V) is A.B7.00). Giving a fileset version A.B7.00 (the default) indicates to update that it should not use the version number in its calculations, and it always reloads the fileset if another selected fileset depends on it.
update (and thus fpkg), requires that the fileset version be at least A.B7.00; thus a version of A.B6.5 is rejected.
Fileset version strings are a sequence of dot-separated letters and digits. When update compares two version strings, it compares each corresponding sub-string between the dots. So a version of B6 is greater than A.B7.00. Version strings are truncated at 11 characters.
ffperm | fileset_file_permission
Usage: ffperm owner group mode
Example: ffperm root bin 0555
The ffperm or fileset_file_permission keyword is used to set the default file permissions on files listed following this keyword up to the next occurrence of the ffperm keyword or the beginning of the next fileset (determined by the fn keyword). If this keyword is not given for a particular fileset, the default action is that each file inherits the permissions (owner, group and mode) of the source file. This keyword is most useful when a group of files all have the same permissions. To set the permissions on a per-file basis, or to override the default permissions, the -o, -g, and -m file flags can be used (see the F keyword for more details). File modes are assumed to be specified in octal, a leading 0 can be used to emphasize this, but is not necessary. To specify a hexadecimal mode, use a 0x prefix. Modes cannot be specified in decimal. Any field (owner, group, or mode) can be left to take the default action by specifying a * character in its place. Default permissions for directories can be set using the fdperm keyword.
fdperm | fileset_directory_permission
Usage: fdperm owner group mode
Example: fdperm root bin 0777
The fdperm or fileset_directory_permission keyword is very similar to the ffperm keyword, except that it is used to specify the default permissions for directories. See ffperm description for details.
customize Example: customize /foo/filename
Allows a customize script to be placed on the media and associated with the current fileset. This script is executed after the fileset has been successfully loaded. The customize script is executed with the current working directory set to where the fileset is loaded (usually /, but can be relocated as specified by the user, if the fileset flag ff C is not specified). The customize script is passed one argument, which is either HP-MC68020 or HP-PA depending on which type of machine the fileset is loaded for (this is useful when loading on a mixed-architecture cluster).
decustomize Example: decustomize /users/joe/file
Allows a decustomize script to be placed on the media and associated with the current fileset. This script is executed when the fileset is removed using rmfn (see rmfn(1M)). It is important to know that the decustomize script is executed twice. The first time rmfn runs the script is just to check if the fileset is removable; the second time, it is called just prior to the removal of all files loaded with this fileset. It is during the second invocation that actions related to file removal should take place (such as killing processes, etc). The first invocation of the script is given two arguments: the machine architecture (HP-MC68020 or HP-PA), and the word check (meaning don’t do anything yet, just checking). The second invocation of the script is given just one argument (the machine architecture). The script should exit with a return code of 0 if no problems are encountered, and with the value 1 if an error occurred. The first invocation of the script is the only chance it has to stop the removal process (by exiting with a value of 1).
copyright Example: copyright /build/thecopyright
Used to place a file on the system called: /system/fileset-name/copyright. This is where most HP applications place copyright information about the product contained in that fileset.
CDFinfo Example: CDFinfo /build/cluster.info
Allows a CDF info file to be placed on the media and associated with the current fileset (see cdfinfo(4)). The CDF info file contains rules that update uses when loading the fileset onto a clustered system. These rules specify which files should be loaded as context-dependent files (or CDF s). The rules in this file also apply to sam when a system is changed into a cluster server, or when adding a cnode (see sam(1M)). A CDF info file is not necessary if the application is not supported on HP-UX clusters, or if all the files are system-independent (i.e., can be shared by all systems in a cluster).
systemfile Example: systemfile /build/routines
Used if a file needs to be loaded in the /system/fileset-name directory but has no specific keyword to place it there (i.e., is not a customize, decustomize, copyright, or CDF info file). The file is loaded under the fileset directory associated with the current fileset, and is named the same as the basename of the source file.
Do not place files called index in this directory; that name is created by fpkg and used by update, and other utilities. Also if the filesets are to be loaded into a system running 8.0 HP-UX, update removes the obsoleted files called revlist, pif, and customize,old. It is best to avoid using system files of these names.
media_order Example: media_order 2
Range: 1-10
Used to control the order in which filesets are written to tape media. All filesets with media_order 1 are processed first, then those with media_order etc. However, all filesets that are marked with the ff B flag are placed on the media first (with media_order used to sort among these B flagged filesets). This is because update loads all B marked filesets first so that the new kernel can be built.
Those filesets with the same media_order are placed on the media as they appear in the PSF (this is the default case, all filesets initially having media_order 1).
media_format Example: media_format A.B8.00
Can be used to specify the media format version from within the PSF. This value must agree with any media_format_version supplied with the -V option.
pr | pseudo_root
Usage: pr source-directory[ =destination-directory ]
Example 1: pr /users/joe/build
Example 2: pr /users/joe/build=/usr/bin
The pr or pseudo_root keyword specifies where the source files are to be found on the system, and optionally where those files should be placed when loaded by update. The usage shown in example 1 causes fpkg to look for the source files in the directory /users/joe/build. Any files (not beginning with /) specified with the F keyword have their path prefixed with the path /users/joe/build and included in the current fileset. If the F * keyword is used, everything under the directory /users/joe/build are included in the current fileset.
The usage in example 2 also causes fpkg to look for files in the directory /users/joe/build, but the files have the path /users/joe/build replaced with the path /usr/bin when they are stored on the media. This is very useful if the directory that holds the source files is different than where they should be when loaded by update.
F | Files Usage: F [*]
Example 1:
F
file1
file2
etc...
Example 2: F *
Used to specify the files to be included in the current fileset. In the usage shown in example 1, the keyword is used to show that all the file names that follow this line are to be included in the current fileset. All following lines that do not match a reserved fpkg keyword are assumed to be file names. If a filename conflicts with a reserved keyword, the filename can be modified by either using its full path, or by inserting ./ in front of the name.
The usage shown in example 2 requires that the pr (pseudo_root) keyword be specified prior to this keyword. In this usage, the keyword says to start in the source-directory specified by the pr keyword and recursively include all files and directories found under that directory.
The file names that can follow the F keyword can have the following format:
sourcefile [destination] [-o owner] [-g group] [-m mode]
For example:
#specify a single file
sourcefile
# specify where to get the file and
# what to name it on the media
sourcefile destination
# specify a file, and override permissions
sourcefile -o root -g bin -m 0755
EXAMPLES
The examples below show how to use fpkg keywords to construct a useful PSF. They assume that certain files and directory structures already exist on the system where fpkg is being executed.
Example PSF:
# This fileset uses some of fpkg’s more advanced
# features, and has multiple partitions and filesets
# Start of DATABASE partition
pn DATABASE
pd "The Database"
fn DBASE-RUN
fd "The database application"
# set flag to make update load files under ‘/’
ff C
customize /build/scripts/customize-DBASE
decustomize /build/scripts/decustomize-DBASE
CDFinfo /build/scripts/CDFinfo-DBASE
copyright /build/misc/rights
fv A.B8.07.1A
# This fileset depends on 8.07 version of C-MIN
dep C-MIN A.B8.07.1A
#
# The DBASE-RUN product contains everything in
# /build/dbase/bin, and is loaded on the users system
# under /usr/bin. These are all executables so set the
# fileset permissions as such.
#
# set default permissions for files and directories
ffperm bin bin 0655
fdperm bin bin 0555
# specify the source and dest directories
pr /build/dbase/bin=/usr/bin
# load all files from bin directory
F *
# Now add the support files. Set permissions one-by-one
pr /build=/usr
F
# set permissions of directory
lib -o bin -g other -m 555
# Load these files from /build/lib to /usr/lib
lib/dictionary -o root -g bin -m 0444
lib/library -o root -o bin -m 644
# Now add some misc files.
ffperm bin bin 666 # set default perms for files
pr /build/misc=/usr/local/misc
F
file1
file2
ffperm bin bin 555 # set new default perms
F
file3
file4
# Start the DBASE-DOC fileset now
fn DBASE-DOC
fd "Documentation for DBASE"
copyright /build/misc/rights
# manuals in correct place on this machine
pr /usr/man/man1
# include all manuals as they appear.
F *
# Now start another partition, DBEXAMPLES
pn DBEXAMPLES
pd "Database examples"
fn DBASE-EXAMPLE
fd "Example database’s"
# specify directory permissions
fdperm bin bin 555
pr /build/examples=/usr/local/examples
F
# override permissions on each file
# and rename them.
example1 good -o bin -g bin -m 644
example2 bad -o bin -b bin -m 555
example3 ugly -o bin -b bin -m 444
Common usages of fpkg are shown below:
Create netdistd media for S300 machines (using the Product Specification File /tmp/psf).
fpkg -d /netdist/rel1.0 -S300 -v /tmp/psf
Create a S800 tape from a existing netdistd directory (2 steps).
fpkg -r /netdist/800 > /tmp/psf
fpkg -a /dev/rmt/0m -S800 -v /tmp/psf
Create a tape using a device on a remote host (tape size must be specified). It is important to set the output block size with obs (as opposed to bs which sets the input block size as well).
fpkg -a - -s1330 /tmp/psf | remsh host dd obs=10k of=/dev/rmt/0m
Create a tape image, then transfer the image to DDS and cartridge tapes, respectively.
fpkg -a /tmp/update.image /tmp/psf
dd if=/tmp/update.image of=/dev/rmt/0m bs=10k
cat /tmp/update.image | tcio -o -Z -vV -S 8 /dev/update.src
SEE ALSO
update(1M), update(4), netdistd(1M), rmfn(1M), CDFinfo(4), sam(1M), tar(1).
Creating Product Packages for HP-UX manual.
Hewlett-Packard Company — HP-UX Release 9.0: August 1992