NetBSD/usr.sbin/sup/source/sup.doc

765 lines
40 KiB
Plaintext

THE SUP SOFTWARE UPGRADE PROTOCOL
Carnegie Mellon University
School of Computer Science
Steven Shafer
Mary Thompson
8 September 1989
The SUP system is a set of programs for maintaining a set of files in
identical versions across a network of cooperating machines. It runs under the
Mach operating system.
1. Introduction
The SUP System is a set of programs that provide for collections of files to
be maintained in identical versions across a number of machines. These
programs are:
SUP The "client" program, run by users or system maintainers, which
initiates the upgrade activity on a machine requesting the
latest version of a collection of files. SUP will normally be
run as a daemon, firing up once each night (week, etc.) to
upgrade the specified file collections.
SUPFILESRV The "file server" program, a daemon that is run by the system
maintainer to service requests for files initiated by client
SUP programs. The file server runs on every machine used as a
"repository" of distributable versions of files. It runs
continuously and listens for network connection requests by
individual client processes; for each individual client
request, a process is forked to service that request.
SUPSCAN The "file scanner" program, that may optionally be run
periodically to speed up execution of the file server. It
pre-compiles a list of files on the file system that match the
specifications for a given file collection so that the file
server need not do this during each upgrade of that collection.
The file scanner is normally used daily for very large file
collections that are upgraded by many clients each day; it is
not so useful for small file collections or for those that are
upgraded by only a few client machines per day.
When SUP is run, the user designates the names of certain "file collections",
sets of files, that should be upgraded. All pre-defined system collections
have entries in the coll.host file that gives the name of the host will act as
the repository for that software collection. The file server on that machine
provides a list of the files included in the collection and which ones have
been changed since the last time this collection was upgraded from that client
machine; the client decides which of these files it needs to receive; and the
files are sent from the file server. In this way, files can be installed on
the repository machine once, and they will propagate to all machines upgrading
from that repository as soon as the respective users execute SUP to perform the
upgrade. This allows groups of cooperating users to establish sets of files
that can be relied upon to be the same across a set of host machines.
SUP is intended to provide a broadcast facility for maintaining identical
versions of files across multiple machines. An alternative approach is to
provide a common file system; even when such a system is available, SUP is
useful for maintaining frequently used files on local disk storage, and for
maintaining files across the file server machines themselves.
The SUP system does not address the issues of version control, nor of
maintaining compatibility of pieces of a system that are being independently
changed by different users or on different machines; what SUP provides is a
broadcast mechanism for issuing stable, reliable versions of software or data
files, produced by a small number of maintainers and needed by a larger number
of users. SUP is intended specifically to address these situations:
- A large collection of system software prepared by a maintenance staff
for use by a large user community. For example, the CMU-CSD UNIX
software used by hundreds of workstations. In such situations, the
users know absolutely nothing about how to obtain such software, but
they need to keep it constantly upgraded on their machines.
Similarly, the maintainers cannot possibly maintain each user's
machine individually: they must rely on a broadcast mechanism such as
SUP.
- A moderate collection of software and data files shared by the
members of a project. For example, the vision libraries used by
computer vision researchers at CMU. Again, a small number of
maintainers on a specific machine produce and maintain this software,
which is used by many users on many machines in the CMU environment.
However, SUP will not support the practice of some groups that have
large programs with different pieces being simultaneously modified
and tested in incompatible ways by various users.
- A user with accounts on more than one machine. Such a user can set
up SUP to automatically copy a collection of files from one machine
to one or more others whenever they are changed on the repository
machine.
If the system maintenance staff is involved on the repository machine a
"system" file collection can be set up for which client SUP programs need know
nothing but the name of the collection. Otherwise, the file collection will be
"private", and client SUP programs must be specifically told the name of the
repository host and the base directory name for the collection on that host.
SUP provides facilities for upgrading read-protected files (i.e. files that
are not readable by the general public), data encryption of transmitted files
and filenames, allowing access only to selected host machines not on the local
network, automatically creating backup copies of critical files, executing
command-files or programs after upgrading files that require special handling,
and mailing progress and error messages to designated users. SUP is also as
clever as can be about ensuring that upgraded files have the same accounting
information (mode, owner, links, etc.) on the client machine as on the
repository machine, and ensuring that upgrade problems don't wipe out existing
files when this is avoidable.
2. How to Use SUP to Upgrade a File Collection
You will normally want to run SUP periodically, say every day or every week,
using the at program, to upgrade important file collections such as UNIX system
software. You can also execute SUP directly at any time. The SUP command
looks like this:
$ sup [flags] [supfile]
These are the flags and arguments:
-a (all files) Normally, SUP only upgrades files if they are out-of-date or
missing on your machine. If you specify the -a flag, then all
files in the collection will be upgraded regardless of whether
they meet these conditions. This is useful for recovering from
catastrophic file deletions or disk crashes.
-b (backup) If this flag is 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 overrides and disables the -b flag and the backup supfile
option.
-d (delete) Files that are no longer in the collection on the repository
will be deleted if present on the local machine. This may also
be specified in a supfile with the deleteoption.
-D This flag overrides and disables the -d flag and the delete
supfile option.
-e (execute) 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 overrides and disables the -e flag and the execute supfile
option.
-f (file list) If you specify -f, then SUP will print a list of all the files
in the specified collections, indicating which ones need to be
upgraded, which are directories, and which require backup
copies to be created. The upgrade itself will not be
performed.
-l (local) 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 (mail) Normally, SUP prints log messages on its standard output and
diagnostic output. With the -m flag, messages will be mailed
to you instead. This also allows the notify option to be
effective (see the discussion of supfiles below) to send mail
to someone else.
-N (network debugging)
The -N flag causes SUP to produce tons of output lines
describing the progress and status of the network
communications with the name server and file server.
-P (debugging ports)
The -P flag tells SUP to use an alternate set of TCP ports from
the normal ports. This is a debugging aid for system
maintenance.
-o (old files) This flag overrides the noold option if it appears in the
supfile. The -a flag also overrides the noold option. See
"Supfiles" below for details.
-O overrides and disables the -o flag and the old supfile option.
-s (system collections)
Normally, you will specify a specific supfile to describe the
file collections you want. If you use the -s flag, then a
specific supfile will be used that describes the system
software file collections. The supfile for system software is
/usr/cmu/lib/supfiles/coll.list.
-t (time) If you specify -t, then SUP will simply print out the last time
and date at which each specified file collection was
successfully upgraded; it will not perform any actual upgrade.
This is a diagnostic aid in case you suspect the upgrades
aren't working.
-v (verbose) Normally, SUP only produces messages to tell what's gone wrong
(if anything does go wrong). With the -v flag, messages will
be produced to tell what is happening when things are going
normally as well.
supfile You must specify the name of a supfile, unless you use the -s
flag to indicate the system software supfile. The supfile,
described below, specifies which file collections you want to
upgrade.
For example, to upgrade system software on your machine, type:
$ sup -s
or, to have detailed log messages mailed to you:
$ sup -v -m -s
Because SUP runs with your user-id, you will not be able to upgrade the system
software unless you are logged onto that account when you execute SUP.
Each file collection being upgraded must have a base directory on your
machine, which will normally contain all the files in the collection. Within
this directory there should be 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 files into this directory as needed.
If you want to find out what files need to be upgraded, type:
$ sup -f supfile
This will list all the files in the collection, indicating which need to be
upgraded (and why), which are directories, and which would have backup copies
created if the upgrade were performed. If you simply want to find out the date
and time of the last successful upgrades, type:
$ sup -t supfile
This will print the collection name and time of the last upgrade for each
collection described in the indicated supfile. For the system collections, you
can use:
$ sup -s -t
2.1 Supfiles
When you execute SUP, you specify a supfile either by name or by using the -s
flag. This file is a list of the file collections you wish to upgrade.
The supfile is a text file, with each file collection described on a single
line. The line begins with the name of the collection, and may then have a
number of options separated by spaces. The options are:
base=directory The name of the base directory on this machine for this file
collection, when you don't want to use the default
(/usr/collection).
host=hostname The name of the host machine acting as the repository for this
file collection, used for "private" file collections. For
"system" file collections, this is unnecessary because the this
information is kept in /usr/cs/lib/supfiles/coll.host.
hostbase=directory
The name of the base directory on the repository machine for
the file collection (see "How to Set Up a File Collection"
below). This is also used only for "private" file collections;
for "system" file collections, the information is obtained
automatically by the file server. The default name of the host
base directory is /usr/collection.
login=accountid The name of the account to be used by the file server, when the
default is not acceptable (i.e. it doesn't have the necessary
file access privileges to read the file collection). The
default at CMU is the "Anonymous FTP" account if no data
encryption is used, or the owner of the directory
sup/collection within the repository machine's base directory
if encryption is used.
password=password
The password used for the login account specified by the
"login" option. This password will be transmitted in encrypted
form over the network.
crypt=key An optional encryption key for filenames and file data for this
file collection. If used, the same key must be specified on
the repository machine or the upgrade will not take place.
This key is used for filenames and data only -- not for
transmission of the passsword in the "password" option. The
use of data encryption also implies an alternate default
account for the file server (see the "login" option above).
notify=mailaddress
The account name to which mail is to be addressed for log
messages for this file collection, when the -m flag is given to
SUP. The account name can be a complete mail address, possibly
including a network host name such as sas@cmu-cs-ius.
noexec This option prevents the automatic execution of command files
on your machine with the upgrade is finished (see "What SUP
Does" below).
backup This option enables backup copies of critical files to be
created by SUP as specified in "What SUP Does" below.
nodelete This option prevents SUP from deleting files on your machine if
they are deleted from the file collection on the repository
machine.
noold This option tells SUP not to check on files in the collection
that have not been modified or created since the last upgrade.
This allows SUP to run much faster on large file collections,
but prevents it from deleting files on the client machine if
they are deleted from the repository, or from restoring files
that have been accidentally deleted from the client machine.
This option is normally useful only for very large file
collections. Its function subsumes that of the nodelete
option. The noold flag will be ignored when either the -a or
-o flag is specified to SUP; this allows a complete file check
to be performed with the -o flag when needed to recover from,
say, accidental deletion of critical files.
Here is an example of a supfile:
cmu backup
vision crypt=pupil backup notify=vision@cmu-cs-ius
sas host=ius hostbase=/usr/sas/sun login=sas password=foo crypt=bletch
This supfile specifies the following file collection upgrades:
cmu The "cmu" file collection, which is a "system" file collection,
with local base directory /usr/cmu (the default). Backup
copies of critical files will be created during upgrading.
vision The "vision" file collection, also a "system" file collection,
with local base directory /usr/vision. Backups will be
created. The data will be encrypted with key pupil, and log
messages will be sent to the vision account on cmu-cs-ius.
sas A "private" file collection will be upgraded from the
cmu-cs-ius machine. The remote base directory is /usr/sas/sun,
but the local base directory is /usr/sas. The file server will
login on account sas with password foo; the data will be
encrypted with key bletch.
3. What SUP Does
An upgrade involves several steps:
1. SUP first reads the specified supfile, checking it for errors and
recording all the specifications and options.
2. If any collections do not specify a host name, SUP will look in
/usr/cs/supfiles/coll.host to find out the names of the hosts for
these collections. In the preceding example, the name server would
be asked to supply the host names for the cmu and vision file
collections.
3. For each collection on the list, SUP will connect to the file server
on the appropriate host and carry on the upgrade process. (If the
file server is on the same host machine as the client, and the base
directories are the same, then no upgrade is performed.)
a. The file server and SUP exchange setup information, including
the host base directory, login account name, password, and
encryption key. SUP also reports the time of the last
upgrade, by looking in the file sup/collection/when (e.g.
/usr/vision/sup/vision/when) on the client machine. The file
server gets the base directory name, if needed, by looking in
the file /usr/cs/lib/supservers/coll.dir, and gets the
encryption key from sup/collection/crypt on the repository
machine. The connection may be refused by the file server for
such reasons as:
- incorrect login name or password
- base directory is protected against access by the
specified account
- incorrect data encryption key
- host not allowed access
b. Once the connection is established and access permission has
been granted as above, the file server builds a list of all
files and directories in the file collection. The list file
sup/collection/list (see "How to Set Up a File Collection"
below) is used to generate this list. The files indicated in
the list file are marked with a special flag if they are
indicated to have backup copies created in case of upgrade.
The last modification date of each file is checked against the
time of the last upgrade (reported by the client above), and
if it has been modified since the last upgrade, a flag is set
to indicate that the client's copy of this file is out of
date. The file list, along with the backup and out-of-date
flag for each file, is sent to the client. If a scan file
exists as created by SUPSCAN (sup/collection/scan), then the
file list is taken from the scan file instead of being
constructed from the list file by the file server. In this
case, the time of record for the upgrade will be the time at
which the scan file was created rather than the time at which
the upgrade actually occurs. If the noold option was
specified in the supfile (and not overridden by the -a or -o
flag to SUP), the list of filenames sent to the client process
will exclude those files that were not created or modified
since the last upgrade.
c. The client SUP process receives the list of files and
constructs a list of the files it needs. This will normally
be those files that are either (1) out-of-date as indicated by
the flag sent from the file server, or (2) missing from the
local machine. However, if the -a flag was specified to SUP,
then every file in the list will be selected by the client
process. The list of needed files is sent to the file server.
For each selected file, if the backup flag was marked and the
user specified the backup option in the supfile, then a backup
copy of the file will be created. This will be a copy of the
file with "backup/" inserted in the filename just after the
directory name, i.e. /usr/vision/lib/libvision.a would have a
backup copy named /usr/vision/lib/backup/libvision.a. (The
indicated directory, e.g. /usr/vision/lib/backup, will be
created if needed.) Also at this time, if the nodelete option
was not specified, the client reads its list of files in the
collection during the last successful upgrade,
sup/collection/last, and deletes any files appearing in that
list that are not in the current file list.
d. The file server receives the list of files requested by the
client. It checks to see that each file is on its list of
files for this collection, and that each file is accessible;
if a file fails either condition its name will be reported to
the client as being denied to that client. Each file will be
sent to the client machine, along with the owning account
name, the owning group name, the 12 low-order mode bits, and
the last modification time for that file. If a file has more
than one link (filename), both of which are requested by the
client, then the file will be sent once and the second (etc.)
filename will be accompanied only by a flag saying it's a link
and the name of the file actually sent. The client receives
each file and processes it as described under "File
Installation" below. Directories are treated similarly to
files; the mode, owning account and group, and modification
time are transmitted to the client machine whenever a
directory is upgraded.
e. When all files have been transmitted, the file server looks at
the list of command-files to be executed after upgrading for
this collection (see "How to Set Up a File Collection" below).
If any of the command-files or their trigger files have been
upgraded, then the client is sent the filename of the
command-file. The client SUP process will normally execute
these files; however, if the user has specified noexec in the
supfile, then the files will not be executed. In this case, a
log message will be created and printed or mailed, telling the
user to please execute these files. When creating command
files to be executed by SUP, you should bear in mind that the
command file might be executed several times on the same
version of the trigger files.
f. Finally, if the upgrade is successfully completed, the file
server reports the time (on its own clock) at which the
upgrade began; the client will record this time in the file
sup/collection/when to be reported as above at the start of
the next upgrade. If the nodelete option was not specified,
then the list of all files in the collection is written into
sup/collection/last.
SUP and the server processes begin each connection by determining whether
byte-swapping is necessary for passing integers across the network. If so, the
server process performs byte-swapping on input or output of integers to the
network, while the client uses its natural representation for network I/O.
3.1 File Installation
When SUP receives an ordinary file (i.e. one that is not a link to a
previously sent file), it follows this procedure:
1. If the file doesn't already exist on the local machine, it's a new
file. It will be created and the data will be read directly into
this file.
2. Otherwise, the file already exists. An attempt will be made to read
the file contents from the network into a temporary file, which will
later be renamed to replace the destination file. SUP will try to
create a temporary file in the following directories, proceeding
down the list until one of the attempts succeeds:
a. destination-directory (the directory containing the file
itself)
b. sup (the sup subdirectory of the local base directory)
c. . (the local base directory)
d. /usr/tmp
e. /tmp
If all these attempts fail, SUP will try to create the destination
file itself instead of using a temporary file. If that fails, SUP
will complain with a log message and go on to the next file.
3. The file data itself is read into the temporary or destination file.
Interrupts are disabled during this process.
4. If the file read was a temporary file, it is renamed to the
destination file. This is done via link/unlink, if possible, unless
the destination file has more than one link already on this machine.
If the link/unlink fails or if the destination file has multiple
links, then the temporary file is actually copied to the destination
and the temporary file is unlinked.
5. The owner, group, modification time, and low-order 12 mode bits of
the destination file are set to the values received from the file
server. The last-access time of the file is set to the current
local clock.
6. If the -v flag was specified to SUP, a log message is printed
indicating the successful receipt of the file.
When SUP receives a new link to a file previously received, it simply tries
to unlink and link unless the two names are on different file systems on the
local machine. If this is the case, or if the link fails, then the previously
received file is actually copied to the new name (using exactly the same
process as described above for creating a temporary file if needed, etc.) The
file-system comparison checks the file system of the old file itself and the
directory containing the new name.
In all cases, if the directory containing a received file or link does not
exist on the local machine, SUP creates it with mkdir (recursively if needed)
before creating that file or link. The mode, owner, group, and modification
time of the newly created directory will then be set to be the same as the mode
of the corresponding directory on the repository machine. This accounting
information will be updated whenever the directory is modified on the
repository machine.
As can be seen from this description, SUP will work the most smoothly (i.e.
always using link/unlink for file name changing) if it has write permission in
the local base directory and in all subdirectories of that directory.
4. How to Set Up a File Collection
It takes only a little bit of effort to set up a file collection on a
repository machine to be upgraded by authorized clients.
First, the file collection must be given a name and a base directory. There
can be several collections with different names sharing the same base
directory; for example, there might be a file collection called cmulib for the
CMU C library, and one called cmumathlib for just the math routines in the CMU
C library, both using /usr/cmu as the base directory.
If it is a "private" file collection, client users must be told the name of
the repository host and the name of the host base directory for use in the host
and hostbase options in the supfile, described above. If it is a "system"
collection instead, the system maintainers must alert the name servers of the
host name (in /usr/cmu/lib/supservers/coll.host) and the appropriate file
server of the base directory name (if not the default, by putting it into
/usr/cmu/lib/supservers/coll.dir).
Within the base directory, a subdirectory must be created called sup. Within
this subdirectory will be a further subdirectory whose name is the name of the
collection (there may be several of these if several collections share the same
base directory). Each collection's subdirectory will contain any or all of
four files:
collection/list The list file, describing the files in the collection. The
format of this file is explained below.
collection/host Normally, the file server allows access to a collection by all
machines. If you wish to allow access only to specific remote
hosts, you can list their names, one per line, in this text
file. If a remote host has several alias names, it need only
be listed once in this file. The name LOCAL can be used to
allow access to all machines on the local network. This access
control is in addition to the other forms of authentication
provided by SUP (data encryption and UNIX file protection
modes).
collection/crypt
If you wish to apply data encryption to the filenames and file
contents in this collection during upgrading, create this file
and place in it the encryption key. This should be on a single
line of text containing nothing else except an optional newline
character. The client must supply the same key via the crypt
option in the supfile for this file collection; the file server
checks that explicitly before authorizing the upgrade to take
place.
collection/scan To speed up execution of the file server, you may wish to
create a scan file periodically. This is done by executing the
SUPSCAN program:
$ supscan [-v] collection [basedir]
This will construct a list of all files matching the
specifications in the list file, and record it in the scan
file. When an upgrade is performed on the collection, the file
server will notice that the scan file is present and use this
list instead of actually building the filename list by
analyzing the list file. The time of record for the upgrade
will then be the time at which the scan file was created rather
than the time at which the upgrade occurs. A scan file is only
useful for very large file collections that are upgraded many
times each day. The options for the SUPSCAN program are -v
("verbose") to produce messages as it scans the file list, and
basedir if the collection is a private collection whose base
directory name is not the default name.
This is all the preparation required for a file collection to be upgraded.
Note that the default user-id for the file server is "Anonymous FTP" if no
data encryption is used; if encryption is used, the default will be the owner
of the subdirectory sup/collection within the base directory.
4.1 The List File
The list file contains a description of the files to be upgraded. It
contains any number of commands, each on a separate line of text. Each line
contains a keyword and a number of operands separated by spaces. All filenames
in the list are evaluated relative to the collection's base directory on the
repository machine for the file server, and relative to the base directory on
the client machine for the client SUP process. All (except execfile) may be
file specifications containing the shell's meta-characters *, ?, [...], and
{...}.
The commands are:
upgrade filename ...
These files will be included in the list of files to be
upgraded. If a directory name is given, all the files in that
directory will be included and any subdirectories will be
recursively included as well.
omit filename ...
These files will not be included in the list; if a directory is
specified, it will not be included nor will its contents be
included. For example, the specifications upgrade lib and omit
lib/test will include all files and subdirectories of lib
except lib/test (and any subdirectories or files within
lib/test).
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 files will be marked for creating backup copies whenever
they are upgraded (as described above). Only files can be
included in this list -- not directories. As noted above,
actual backup copies will only be created by SUP when these
files are being upgraded, and then only if the user has
specified the backup option in the supfile.
execute execfile (triggerfile ...) ...
The listed execfiles are command files or programs to be
executed after an upgrade to perform routine installation of
the upgraded files. Each execfile will be executed only when
it is upgraded itself, or when any of its listed triggerfiles
have been upgraded. The installation tasks performed by such
files might be, for example, creating a table of contents for
manual entries or for a subroutine library, or modifying a host
name field within a data file.
include listfile ...
The named listfiles will be read at this point. This allows a
collection to contain another collection in its entirety, by
simply specifying the name of the listfile for that other
collection.
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.
symlink filename...
The specified file(s) are to be treated as symbolic links and
will be transfered as such and not followed. By default, SUP
will follow symbolic links.
rsymlink dirname...
All the symbolic links in the specified subdirectories are to
be transferred as such and not followed.
Blank lines may appear freely in the list file, and the order in which
command lines appear within the file does not matter. Filenames must generally
match as strings, e.g. with base directory /usr/vision, "lib" in the upgrade
command would not match "/usr/vision/lib" in the omit command; it would only
match "lib" in the omit command. However, one special exception exists: if
the base directory is specified via "dot" (.) in the upgrade command, the
filenames within that directory need not begin with "./" in other commands.
For example, with base directory /usr/vision, the commands "upgrade ." and
"omit exp" specify a file list including all files and directories within
/usr/vision except the subdirectory /usr/vision/exp and its subdirectories and
files.
5. Setup for SUP
You need to add the following entries to /etc/services:
supfilesrv 871/tcp
supfiledbg 1127/tcp
A supfilsrv daemon should be kept running on any machine that may act as a
repository for a collection. Since this includes private collections, it is
advisable to have supfilesrv running on all machines if SUP is to be widely
used. nanny can be used to start the supfilesrv.
The program modcoll.8 is used to set up the control files for the "system"
collections. See /usr/cs/man/man8/modcoll.8
Table of Contents
1. Introduction 1
2. How to Use SUP to Upgrade a File Collection 2
2.1 Supfiles 2
3. What SUP Does 4
3.1 File Installation 4
4. How to Set Up a File Collection 5
4.1 The List File 5
5. Setup for SUP 6