Provided by: sup_20100519-3_amd64 bug

NAME

       sup - software upgrade protocol

SYNOPSIS

       sup [ flags ] [ supfile ] [ collection ...]

DESCRIPTION

       Sup  is  a  program  used  for  upgrading  collections of files from other machines to your machine.  You
       execute sup, the client program, which talks over the network using IP/TCP to a file server process.  The
       file server process cooperates with sup to determine which files of the collection need to be upgraded on
       your machine.

       Sup collections can have multiple releases. One use for such releases is to provide different versions of
       the same files. At CMU, for example, system binaries have alpha, beta and default  release  corresponding
       to  different  staging  levels  of the software. We also use release names default and minimal to provide
       complete releases or subset releases.  In both of these cases, it only makes sense to sup one release  of
       the  collections.  Releases  have  also  been  used  in  private  or  external sups to provide subsets of
       collections where it makes sense to pick up several of the releases. For  example  the  Mach  3.0  kernel
       sources  has  a default release of machine independent sources and separate releases of machine dependent
       sources for each supported platform.

       In performing an upgrade, the file server constructs a list of files included in the specified release of
       the collection.  The list is sent to your machine, which determines which files are needed.  Those  files
       are then sent from the file server.  It will be most useful to run sup as a daemon each night so you will
       continually have the latest version of the files in the needed collections.

       The  only  required  argument to sup is the name of a supfile.  It must either be given explicitly on the
       command line, or the -s flag must be specified.  If the -s flag is given, the system supfile will be used
       and a supfile command argument should not be specified.  The list  of  collections  is  optional  and  if
       specified will be the only collections upgraded.  The following flags affect all collections specified:

       -s     As described above.

       -t     When  this  flag  is given, sup will print the time that each collection was last upgraded, rather
              than performing actual upgrades.

       -u     When this flag is given, sup will not try to restore the user access and modified times  of  files
              in the collections from the server.

       -S     Operate silently printing messages only on errors.

       -N     Sup will trace network messages sent and received that implement the sup network protocol.

       -P     Sup will use a set of non-privileged network ports reserved for debugging purposes.

       The  remaining  flags  affect  all  collections unless an explicit list of collections are given with the
       flags.  Multiple flags may be specified together that affect the  same  collections.   For  the  sake  of
       convenience,  any  flags  that always affect all collections can be specified with flags that affect only
       some collections.  For example, sup -sde=coll1,coll2 would perform a system upgrade, and  the  first  two
       collections  would  allow  both  file  deletions  and command executions.  Note that this is not the same
       command as sup -sde=coll1 coll2, which would perform a system upgrade of just the  coll2  collection  and
       would ignore the flags given for the coll1 collection.

       -a     All  files in the collection will be copied from the repository, regardless of their status on the
              current machine.  Because of this, it is a very expensive operation and should only  be  done  for
              small  collections if data corruption is suspected and been confirmed.  In most cases, the -o flag
              should be sufficient.

       -b     If the -b flag if given, or the backup supfile option is specified, the contents of regular  files
              on  the local system will be saved before they are overwritten with new data.  The file collection
              maintainer can designate specific files to be worthy of backing up  whenever  they  are  upgraded.
              However,  such  backup will only take place if you specify this flag or the backup option to allow
              backups for a file collection on your machine.  The backup mechanism will create  a  copy  of  the
              current version of a file immediately before a new copy is received from the file server; the copy
              is  given  the same name as the original file but is put into a directory called BACKUP within the
              directory containing the original file.  For example, /usr/sas/src/foo.c would have a backup  copy
              called  /usr/sas/src/BACKUP/foo.c.   There  is no provision for automatically maintaining multiple
              old versions of files; you would have to do this yourself.

       -B     The -B flag overrides and disables the -b flag and the backup supfile option.

       -d     Files that are no longer in the collection on the repository will be deleted  if  present  on  the
              local  machine and were put there by a previous sup.  This may also be specified in a supfile with
              the delete option.

       -D     The -D flag overrides and disables the -d flag and the delete supfile option.

       -e     Sup will execute commands sent from the repository that should be run when a file is upgraded.  If
              the -e flag is omitted, Sup will print a message that specifies the command to execute.  This  may
              also be specified in a supfile with the execute option.

       -E     The -E flag overrides and disables the -e flag and the execute supfile option.

       -f     A  list-only  upgrade will be performed.  Messages will be printed that indicate what would happen
              if an actual upgrade were done.

       -k     Sup will check the modification times of files on the local disk before updating them.  Only files
              which are newer on the repository than on the local disk will be updated; files that are newer  on
              the  local  disk  will be kept as they are.  This may also be specified in a supfile with the keep
              option.

       -K     The -K flag overrides and disables the -k flag and the keep supfile option.

       -l     Normally, sup will not upgrade a collection if the repository is on the same machine.  This allows
              users to run upgrades on all machines without having to make special  checks  for  the  repository
              machine.   If  the  -l  flag  is specified, collections will be upgraded even if the repository is
              local.

       -m     Normally, sup used standard output for messages.  If the -m flag if given, sup will send  mail  to
              the  user  running sup, or a user specified with the notify supfile option, that contains messages
              printed by sup.

       -M <user>
              like -m but send mail to the specified user.

       -o     Sup will normally only upgrade files that have changed on the repository since the  last  time  an
              upgrade was performed. That is, if the file in the repository is newer than the date stored in the
              when  file  on  the  client.   The -o flag, or the old supfile option, will cause sup to check all
              files in the collection for changes instead of just the new ones.

       -O     The -O flag overrides and disables the -o flag and the old supfile option.

       -z     Normally sup transfers files directly without any other processing, but with the -z flag,  or  the
              compress  supfile  option,  sup  will  compress  the file before sending it across the network and
              uncompress it and restore all the correct file attributes at the receiving end.

       -Z     The -Z flag overrides and disables the -z flag and the compress supfile option.

       -v     Normally, sup will only print messages if there are problems.  This flag causes sup to also  print
              messages during normal progress showing what sup is doing.

SETTING UP UPGRADES

       Each  file  collection to be upgraded must have a base directory which contains a subdirectory called sup
       that will be used by the sup program; it will be created automatically if you do not create it.  Sup will
       put subdirectories and files into this directory as needed.

       Sup will look for a subdirectory with the same name as the collection within the sup subdirectory of  the
       base directory.  If it exists it may contain any of the following files:

       when.<rel-suffix>
              This  file is automatically updated by sup when a collection is successfully upgraded and contains
              the time that the file server, or possibly supscan, created the list of files in the upgrade list.
              Sup will send this time to the file server for generating the list of files that have been changed
              on the repository machine.

       refuse This file contains a list of files  and  directories,  one  per  line,  that  the  client  is  not
              interested in that should not be upgraded.

       lock   This  file is used by sup to lock a collection while it is being upgraded.  Sup will get exclusive
              access to the lock file using flock(2), preventing more than  one  sup  from  upgrading  the  same
              collection at the same time.

       last.<rel-suffix>
              This  file  contains a list of files and directories, one per line, that have been upgraded by sup
              in the past.  This information is used when the delete option, or the -d flag is  used  to  locate
              files previously upgraded that are no longer in the collection that should be deleted.

       Each  file collection must also be described in one or more supfiles.  When sup is executed, it reads the
       specified supfile to determine what file collections  and releases to upgrade.   Each  collection-release
       set  is  described  by  a  single  line  of  text  in the supfile; this line must contain the name of the
       collection, and possibly one or more options separated by spaces.  The options are:

       release=releasename
              If a collection contains multiple releases, you need to specify which release you  want.  You  can
              only specify one release per line, so if you want multiple releases from the same collections, you
              will  need  to  specify  the  collection more than once. In this case, you should use the use-rel-
              suffix option in the supfile to keep the last and when files for the two releases separate.

       base=directory
              The usual default name of the base directory for a collection is described below (see  FILES);  if
              you want to specify another directory name, use this option specifying the desired directory.

       prefix=directory
              Each  collection  may  also  have an associated prefix directory which is used instead of the base
              directory to specify in what directory files within the collection will be placed.

       host=hostname
       hostbase=directory
              System collections are supported by the system maintainers, and sup will  automatically  find  out
              the  name  of  the host machine and base directory on that machine.  However, you can also upgrade
              private collections; you simply specify with these options the hostname of the machine  containing
              the files and the directory used as a base directory for the file server on that machine.  Details
              of setting up a file collection are given in the section below.

       login=accountid
       password=password
       crypt=key
              Files  on  the  file  server  may  be protected, and network transmissions may be encrypted.  This
              prevents unauthorized access to files via sup.  When files  are  not  accessible  to  the  default
              account  (e.g.  the anon anonymous account), you can specify an alternative accountid and password
              for the file server to use on the repository host.  Network transmission of the password  will  be
              always  be  encrypted.   You can also have the actual file data encrypted by specifying a key; the
              file collection on the repository must specify the same key or  else  sup  will  not  be  able  to
              upgrade  files from that collection.  In this case, the default account used by the file server on
              the repository machine will be the owner of the encryption key file (see FILES)  rather  than  the
              anon anonymous account.

       notify=address
              If  you use the -m option to receive log messages by mail, you can have the mail sent to different
              user, possibly on another host, than the user running the sup program.  Messages will be  sent  to
              the  specified  address,  which  can  be  any  legal  netmail  address.   In particular, a project
              maintainer can be designated to receive mail for that project's file  collection  from  all  users
              running sup to upgrade that collection.

       backup As described above under the -b flag.

       delete As described above under the -d flag.

       execute
              As described above under the -e flag.

       keep   As described above under the -k flag.

       old    As described above under the -o flag.

       use-rel-suffix
              Causes  the  release  name  to  be  used as a suffix to the last and when files. This is necessary
              whenever you are supping more than one release in the same collection.

PREPARING A FILE COLLECTION REPOSITORY

       A set of files residing on a repository must be prepared before sup client processes  can  upgrade  those
       files.   The collection must be given a name and a base directory.  If it is a private collection, client
       users must be told the name of the collection,  repository  host,  and  base  directory;  these  will  be
       specified  in  the  supfile  via the host and hostbase options.  For a system-maintained file collection,
       entries must be placed into the host list file and directory list file as described in supservers(8).

       Within the base directory, a subdirectory must be created called sup .  Within this directory there  must
       be  a  subdirectory  for  each  collection  using  that  base  directory,  whose  name is the name of the
       collection; within each of these directories will be a list file and possibly a prefix file, a host file,
       an encryption key file, a log file and a scan file.  The filenames are listed under FILES below.

       prefix Normally, all files in the collection are relative to the base directory.  This  file  contains  a
              single  line  which  is the name of a directory to be used in place of the base directory for file
              references.

       host   Normally, all remote host machines are allowed access to  a  file  collection.   If  you  wish  to
              restrict  access  to  specific  remote  hosts  for this collection, put each allowed hostname on a
              separate line of text in this file.  If a host has more than one name, only one of its names needs
              to be listed.  The name LOCAL can be used to grant access to all hosts on the local  network.  The
              host name may be a  numeric network address or a network name. If a crypt appears on the same line
              as  the  host  name,  that crypt will be used for that host. Otherwise, the crypt appearing in the
              crypt file, if any will be used.

       crypt  If you wish to use the sup data encryption mechanism, create an encryption file containing,  on  a
              single  line of text, the desired encryption key.  Client processes must then specify the same key
              with the crypt option in the supfile or they will be denied access to  the  files.   In  addition,
              actual network transmission of file contents and filenames will be encrypted.

       list   This  file  describes the actual list of files to be included in this file collection, in a format
              described below.

       releases
              This file describes any releases that the collection may have. Each line starts with  the  release
              name  and  then may specify any of the following files: prefix=<dirname> to use a different parent
              directory for the files in this release.  list=<listname> to specify the  list  of  files  in  the
              release.   scan=<scanfile>  must be used in multi-release collections that are scanned to keep the
              scan files  for  the  different  releases  separate.   host=<hostfile>  to  allow  different  host
              restrictions  for  this  release.   next=<release>  used  to chain releases together. This has the
              effect of making one release be a combination of several other releases. If the same file  appears
              in  more  than  one  chained  release,  the  first one found will be used.  If these files are not
              specified for a release the default names: prefix,list,scan and host will be used.

       scan   This file, created by supscan, is the list of filenames that correspond to the instructions in the
              list file.  The scan file is only used for frequently updated file collections; it makes the  file
              server run much faster.  See supservers(8) for more information.

       lock   As  previously mentioned, this file is used to indicate that the collection should be locked while
              upgrades are in progress.  All file servers will try to get shared access to the  lock  file  with
              flock(2).

       logfile
              If  a  log  file  exists in the collection directory, the file server will append the last time an
              upgrade was successfully completed, the time the last upgrade started and finished, and  the  name
              of the host requesting the upgrade.

       It  should  be  noted that sup allows several different named collections to use the same base directory.
       Separate encryption, remote host access, and file lists are used for each collection, since  these  files
       reside in subdirectories <basedir>/sup/<coll.name>.

       The list file is a text file with one command on each line.  Each command contains a keyword and a number
       of  operands separated by spaces.  All filenames in the list file are evaluated on the repository machine
       relative to the host's base directory, or prefix directory if one is specified, and on your machine  with
       respect  to the base, or prefix, directory for the client.  The filenames below (except exec-command) may
       all include wild-cards and meta-characters as used by csh(1) including  *,  ?,  [...],  and  {...}.   The
       commands are:

       upgrade filename ...
              The specified file(s) (or directories) will be included in the list of files to be upgraded.  If a
              directory  name  is  given,  it  recursively  includes  all  subdirectories  and files within that
              directory.

       always filename ...
              The always command is identical to upgrade, except that omit and omitany commands  do  not  affect
              filenames specified with the always command.

       omit filename ...
              The  specified  file(s)  (or  directories) will be excluded from the list of files to be upgraded.
              For example, by specifying upgrade /usr/vision and omit /usr/vision/exp,  the  generated  list  of
              files  would  include  all subdirectories and files of /usr/vision except /usr/vision/exp (and its
              subdirectories and files).

       omitany pattern ...
              The specified patterns are compared against the files in the upgrade list.  If a pattern  matches,
              the  file is omitted.  The omitany command currently supports all wild-card patterns except {...}.
              Also, the pattern must match the entire filename, so a leading  */,  or  a  trailing  /*,  may  be
              necessary in the pattern.

       backup filename ...
              The specified file(s) are marked for backup; if they are upgraded and the client has specified the
              backup  option  in  the  corresponding  line of the supfile, then backup copies will be created as
              described above.  Directories may not be specified, and  no  recursive  filename  construction  is
              performed; you must specify the names of the specific files to be backed up before upgrading.

       noaccount filename ...
              The  accounting  information  of  the  specified file(s) will not be preserved by sup.  Accounting
              information consists of the owner, group, mode and modified time of a file.

       symlink filename ...
              The specified file(s) are to be treated as symbolic links and will be transferred as such and  not
              followed.  By default, sup will follow symbolic links.

       rsymlink dirname ...
              All symbolic links in the specified directory and its subdirectories are to be treated as symbolic
              links. That is the links will be transferred and not the files to which they point.

       execute exec-command (filename ...)
              The  exec-command  you  specified will be executed on the client process whenever any of the files
              listed in parentheses are upgraded.  A special token, %s, may be specified in the exec-command and
              will be replaced by the name of the file that was upgraded.   For  example,  if  you  say  execute
              ranlib  %s  (libc.a),  then  whenever  libc.a  is upgraded, the client machine will execute ranlib
              libc.a.  As described above, the client must invoke sup with the -e flag to  allow  the  automatic
              execution of command files.

       include listfile ...
              The  specified  listfiles will be read at this point.  This is useful when one collection subsumes
              other collections; the larger  collection  can  simply  specify  the  listfiles  for  the  smaller
              collections contained within it.

       The  order  in  which  the command lines appear in the list file does not matter.  Blank lines may appear
       freely in the list file.

FILES

       Files on the client machine for sup:

       /etc/supfiles/coll.list
              supfile used for -s flag

       /etc/supfiles/coll.what
              supfile used for -s flag when -t flag is also specified

       /etc/supfiles/coll.host
              host name list for system collections

       <base-directory>/sup/<collection>/last<.release>
              recorded list of files in collection as of last upgrade

       <base-directory>/sup/<collection>/lock
              file used to lock collection

       <base-directory>/sup/<collection>/refuse
              list of files to refuse in collection

       <base-directory>/sup/<collection>/when<.release>
              recorded time of last upgrade

       /usr/sup/<collection>
              default base directory for file collection

       Files needed on each repository machine for the file server:

       /etc/supfiles/coll.dir
              base directory list for system collections

       <base-directory>/sup/<collection>/crypt
              data encryption key for a collection. the owner of this file is the default account used when data
              encryption is specified

       <base-directory>/sup/<collection>/host
              list of remote hosts allowed to upgrade a collection

       <base-directory>/sup/<collection>/list
              list file for a collection

       <base-directory>/sup/<collection>/lock
              lock file for a collection

       <base-directory>/sup/<collection>/logfile
              log file for a collection

       <base-directory>/sup/<collection>/prefix
              file containing the name of the prefix directory for a collection

       <base-directory>/sup/<collection>/scan
              scan file for a collection

       /usr/<collection>
              default base directory for a file collection

SEE ALSO

       supservers(8)
       The SUP Software Upgrade Protocol, S. A. Shafer, CMU Computer Science Department, 1985.

EXAMPLE

       <example>

BUGS

       The encryption mechanism should be strengthened, although it's not trivial.

       sup can delete files it should not with the delete option.  This is because in the delete pass, it  tries
       to delete all files in the old list that don't exist in the new list.  This is a problem when a directory
       becomes a symlink to a hierarchy that contains the same names.  Then sup will cross the symlink and start
       deleting  files  and  directories  from  the  destination.  This is not easily fixed.  Don't use sup with
       symlink/rsymlink and the delete option at the same time or *be careful*!

                                                    10/01/08                                              SUP(1)