Man Linux: Main Page and Category List

NAME

       fcopy - copy files using classes

SYNOPSIS

       fcopy [options] SOURCE...

DESCRIPTION

       Copy  a  file  from  SOURCE  to its target using classes.  It also sets
       permission modes, owner and group.  Each SOURCE argument is a directory
       which  contains one or more template files for the source file to copy.
       Depending on the list of  defined  classes,  one  file  of  the  source
       directory is selected and copied to the target.  The target filename is
       the name of the source directory.

       The exit  code  returned  by  fcopy  is  0  if  all  files  are  copied
       successfully  and >0 if an error occurs.  For every successfully copied
       file, a log message is printed to standard output.

OPTIONS

       Options -c, -s, -t and a SOURCE are required. Usually -c, -s and -t
              are set via variables in FAI.

       -B     Remove backup files with suffix .pre_fcopy. You can also set the
              environment variable FCOPY_NOBACKUP to 1.

       -b dir Don't  copy  files  to  file.pre_fcopy,  but use hierarchy under
              "dir"  instead.   The  same  effect  is  achieved   by   setting
              environment variable FAI_BACKUPDIR.

       -c class[,class]
              Define  classes.   Multiple classes must be comma separated.  If
              not specified,  use  the  shell  environment  variable  $classes
              (space separated).  The first class has lowest priority.

       -C file
              Read  classes  from  file.   Lines  can contain multiple classes
              which are space separated.  Lines starting with # are  comments.

       -d     Delete target file if no class applies.

       -D     Create debugging output.

       -F file
              Read list of sources from file.  One SOURCE per line.

       -h     Show help, version and summary of options.

       -i     Ignore  warnings about no matching class and always exit with 0.

       -I dir[,dir]
              Override list of ignored  directories  when  recursing.  If  not
              given,  it  is taken from $FCOPY_IGNOREDIRS and as a last chance
              an internal list of known revision control system's metadata  is
              used (CVS, .cvs, {arch}, .arch-ids).

       -l     Do not copy if destination is a symbolic link

       -L file
              Log SOURCE and used class to file.  Output format is
              SOURCE CLASS COMMENT
              where COMMENT gives some information about why the file has been
              preserved (especially useful in combination  with  -P).  If  not
              specified and $LOGDIR is set, use $LOGDIR/fcopy.log.

       -m user,group,mode
              Set  user,  group  and  mode for all copied files (mode as octal
              number, user and group numeric id or name).  If  not  specified,
              use file file-modes or data of source file.

       -M     Use  default  values for user, group and mode.  This is equal to
              -m root,root,0644

       -n     Print the commands, but do not execute them. This is like --dry-
              run  in other programs. You can enable it for all calls of fcopy
              by setting the environment variable $FCOPY_DRYRUN.

       -P plog,changes
              Don't compare files literally, but use  information  from  files
              plog  and  changes:  A  file  is overwritten when either another
              class applies (plog is a log generated with -L in  the  previous
              run,  so  it  now  contains  the  necessary  information) or the
              version of SOURCE for the used class  has  changed  (changes  is
              checked for the appearance of the version itself, the file-modes
              and the postinst of the particular SOURCE)  changes  is  a  file
              specifying line by line in the last column which files have been
              changed, path has to be relative to $FAI, i.e. should begin with
              'files/'.  This way, the logfile from cvs checkout could be used
              directly.  If not given, $FCOPY_LASTLOG and $FCOPY_UPDATELOG are
              used for plog and changes.

       -r     Copy recursively (traverse down the tree).  Copy all files below
              SOURCE.  These are all subdirectory leaves in the  SOURCE  tree.
              Ignore "ignored" directories (see "-I" for details).

       -s source_dir
              Look for SOURCE files relative to source_dir.  Use $FAI/files if
              not specified.

       -t target_dir
              Copy  files  relative  to  target_dir.   Use  $FAI_ROOT  if  not
              specified.

       -U     If in softupdate mode skip this entire fcopy command.

       -v     Create verbose output.

SCRIPTS

       preinst
              If  a file 'preinst' exists and is executable, it is used in the
              following way:

              1. a temporary copy of the file for the used class is created

              2. preinst is called with the used class and the  full  pathname
                 to  this temporary copy (you can do in-place substitutions or
                 other modifications on this copy)

              3. the copy is compared to the destination and replaces it  only
                 if there are any differences

       postinst
              If  a  file  'postinst'  exists  and is executable, it is called
              after successfully having copied the file. It is called with two
              parameters,  the  class  being used and the full pathname to the
              target file. The variable ROOTCMD is set, so you can prepend  it
              to  commands  which  should  be  executed in the newly installed
              system.

EXAMPLES

       Suppose the source directory /files/etc/X11/XF86Config consists of  the
       following files:

       CAD DEFAULT LAB MACH64 server1 faifoo file-modes postinst

       Each  file  is an instance of a XF86Config file for a different xserver
       configuration except file-modes, which holds the  file  creation  data.
       The command

           # fcopy -s /files -t /target /etc/X11/XF86Config

       copies  one of these files from the directory /files/etc/X11/XF86Config
       to the file /target/etc/XF86Config.  For  all  defined  classes,  fcopy
       looks  if  a  corresponding  file  exists.   The class with the highest
       priority will be used  for  copying.   Here  are  examples  of  defined
       classes and the file which will be copied by fcopy.

             Defined classes                   File used for copy

             DEFAULT,LAB,server3               LAB
             DEFAULT,CAD,server1               server1
             DEFAULT,MACH64,ant01              MACH64
             DEFAULT,TFT,ant13                 DEFAULT

       In  FAI  (look  at  SEE  ALSO)  the list of defined classes starts with
       DEFAULT and the last class is the hostname.  So DEFAULT  is  only  used
       when  no  file  for  another  class  exists.  If a file is equal to the
       hostname, this will be used, since hostname should always be  the  last
       class.

       User,  group  and  permissions  for the files can be defined in several
       ways.  Option -m has the highest priority and  will  be  used  for  all
       files,  if  specified.  The file file-modes in the source directory can
       contain one line for each class.  The space separated parameters are:

       owner group mode class

       where owner and group can be specified by numeric id or by  name.   The
       file permissions are defined by mode, which must be octal.  If class is
       missing, the data is used for all other classes, for which no  data  is
       defined.   If  neither  -m  or  file-modes data is available, the user,
       group and mode of the source file will be used for the target file.

       Missing subdirectories for the target file are created with mode  0755.
       If the destination file already exists and is different from the source
       file, the suffix .pre_fcopy is appended  to  the  old  version  of  the
       target  file.   If  source  and  target  files  are  equal,  no copy is
       performed.  A copied file gets the same access and modification time as
       the  source  file, not the time of the copy.  If also the file postinst
       exists, it will be executed after the file was copied.

NOTES

       Do not create a file DEFAULT if  no  reasonable  default  configuration
       file  can  be  used.   It's better to exit with an error than to copy a
       wrong configuration file.

       This command can also be used to maintain your configuration files on a
       huge number of hosts.

SEE ALSO

       ftar(8)

       This  program  is  part of FAI (Fully Automatic Installation).  See the
       FAI manual for more information on how to use fcopy.  The FAI  homepage
       is http://www.informatik.uni-koeln.de/fai.

AUTHOR

       Thomas Lange <lange@informatik.uni-koeln.de>
       Henning Glawe <glaweh@physik.fu-berlin.de>