home | help
sitecopy(1)			  User Manuals			     sitecopy(1)

NAME
     sitecopy - maintain remote copies of web sites

SYNOPSIS
     sitecopy [options] [operation mode] sitename ...

DESCRIPTION
     sitecopy  is for copying locally stored web sites to remote web servers.  A
     single command will upload files to the server which have changed	locally,
     and  delete  files from the server which have been removed locally, to keep
     the remote site synchronized with the local site.	The aim is to remove the
     hassle of uploading and deleting individual  files  using	an  FTP  client.
     sitecopy  will also optionally try to spot files you move locally, and move
     them remotely.

     FTP, WebDAV and other HTTP-based authoring servers (for instance, AOLserver
     and Netscape Enterprise) are supported.

GETTING STARTED
     This section covers how to start maintaining a  web  site	using  sitecopy.
     After  introducing the basics, two situations are covered: first, where you
     have already upload the site  to  the  remote  server;  second,  where  you
     haven't.  Lastly, normal site maintenance activities are explained.

   Introducing the Basics
     If  you  have not already done so, you need to create an rcfile, which will
     store information about the sites you wish to administer. You also need  to
     create  a storage directory, which sitecopy uses to record the state of the
     files on each of the remote sites. The rcfile and	storage  directory  must
     both  be accessible only by you - sitecopy will not run otherwise.  To cre-
     ate the storage directory with the correct permissions, use the command
	  mkdir -m 700 .sitecopy
     from your home directory. To create the rcfile, use the commands
	  touch .sitecopyrc
	  chmod 600 .sitecopyrc
     from your home directory. Once this is done, edit the rcfile to enter  your
     site details as shown in the CONFIGURATION section.

   Existing Remote Site
     If you have already uploaded the site to the remote server, ensure your lo-
     cal files are synchronized with the remote files. Then, run
	  sitecopy --catchup sitename
     where  sitename  is the name of the site you used after the site keyword in
     the rcfile.

     If you do not have a local copy of the remote site, then you can use  fetch
     mode  to discover what is on the remote site, and synchronize mode to down-
     load it. Fetch mode works well for WebDAV servers, and might work if you're
     lucky for FTP servers. Run
	  sitecopy --fetch sitename
     to fetch the site - if this succeeds, then run
	  sitecopy --synch sitename
     to download a local copy.	Do NOT do this if you already have a local  copy
     of your site.

   New Remote Site
     Ensure  that  the root directory of the site has been created on the server
     by the server administrator. Run
	  sitecopy --init sitename
     where sitename is the name of the site you used after the site  keyword  in
     the rcfile.

   Site Maintenance
     After  setting  up  the site as given in one of the two above sections, you
     can now start editing your local files as normal. When you have finished  a
     set of changes, and you want to update the remote copy of the site, run:
	  sitecopy --update sitename
     and  all  the  changed  files will be uploaded to the server. Any files you
     delete locally will be deleted remotely too, unless the nodelete option  is
     specified in the rcfile. If you move any files between directories, the re-
     mote  files  will be deleted from the server then uploaded again unless you
     specify the checkmoved option in the rcfile.

     At any time, if you wish to see what changes you have  made  to  the  local
     site since the last update, you can run
	  sitecopy sitename
     which will display the list of differences.

   Synchronization Problems
     In  some circumstances, the actual files which make up the remote site will
     be different from what sitecopy thinks is on the remote site. This can hap-
     pen, for instance, if the connection to the server is broken during an  up-
     date.  When  this	situation arises, Fetch Mode should be used to fetch the
     list of files making up the site from the remote server.

INVOCATION
     In normal operation, specify a single operation mode, followed by	any  op-
     tions you choose, then one or more site names. For instance,
	  sitecopy --update --quiet mainsite anothersite
     will quietly update the sites named 'mainsite' and 'anothersite'.

OPERATION MODES
     -l, --list
	    List  Mode	-  produces a listing of all the differences between the
	    local files and the remote copy for the specified sites.

     -ll, --flatlist
	    Flat list Mode - like list mode, except the output produced is suit-
	    able for parsing by an external script or program.	An  AWK  script,
	    changes.awk.   is  provided  which	produces  an HTML page from this
	    mode.

     -u, --update
	    Update Mode - updates the remote copy of the specified sites.

     -f, --fetch
	    Fetch Mode - fetches the list of files from the remote server.  Note
	    that this mode has only limited support in FTP - the server must ac-
	    cept the MDTM command, and use a Unix-style 'ls' for LIST  implemen-
	    tation.

     -s, --synchronize
	    Synchronize  Mode  -  updates  the	local site from the remote copy.
	    WARNING: This mode overwrites local files. Use with care.

     -i, --initialize
	    Initialization Mode - initializes the sites specified - making site-
	    copy think there are NO files on the remote server.

     -c, --catchup
	    Catchup Mode - makes sitecopy think the local site	is  exactly  the
	    same as the remote copy.

     -v, --view
	    View Mode - displays all the site definitions from the rcfile.

     -h, --help
	    Display help information.

     -V, --version
	    Display version information.

OPTIONS
     -y, --prompting
	    Applicable	in  Update Mode only, will prompt the user for confirma-
	    tion for each update (i.e., creating a directory, uploading  a  file
	    etc.).

     -r RCFILE, --rcfile=RCFILE
	    Specify an alternate run control file location.

     -p PATH, --storepath=PATH
	    Specify an alternate location to use for the remote site storage di-
	    rectory.

     -q, --quiet
	    Quiet output - display the filename only for each update performed.

     -qq, --silent
	    Very quiet output - display nothing for each update performed.

     -o, --show-progress
	    Applicable	in  Update  Mode only, displays the progress (percentage
	    complete) of data transfer.

     -k, --keep-going
	    Keep going past errors in Update Mode or Synch Mode

     -a, --allsites
	    Perform the given operation on all sites - applicable for all  modes
	    except View Mode, for which it has no effect.

     -d MASK, --debug=KEY[,KEY...]
	    Turns  on  debugging.   A list of comma-separated keywords should be
	    given. Each keyword may be one of:
	      socket	Socket handling
	      files	File handling
	      rcfile	rcfile parser
	      http	HTTP driver
	      httpbody	Display response bodies in HTTP
	      ftp	FTP driver
	      xml	XML parsing information
	      xmlparse	Low-level XML parsing information
	      httpauth	HTTP authentication information
	      cleartext Display passwords in plain text

	    Passwords will be obscured in the debug output unless the  cleartext
	    keyword  is  used. An example use of debugging is to debug FTP fetch
	    mode:

		 sitecopy --debug=ftp,socket --fetch sitename

CONCEPTS
     The stored state of a site is the snapshot of the state of the  site  saved
     into  the	storage  directory  (~/.sitecopy/).  The storage file is used to
     record this state between invocations. In update mode, sitecopy builds up a
     files list for each site by scanning the local directory,	reading  in  the
     stored state, and comparing the two - determining which files have changed,
     which have moved, and so on.

CONFIGURATION
     Configuration  is	performed  via the run control file (rcfile).  This file
     contains a set of site definitions.  A unique name  is  assigned  to  every
     site definition, which is used on the command line to refer to the site.

     Each  site definition contains the details of the server the site is stored
     on, how the site may be accessed at that server, where the site is held lo-
     cally and remotely, and any other options for the site.

   Site Definition
     A site definition is made up of a series of lines:

     site sitename
	server server-name
	remote remote-root-directory
	local local-root-directory
      [ port port-number ]
      [ username username ]
      [ password password ]
      [ proxy-server proxy-name
	proxy-port port-number ]
      [ url siteURL ]
      [ protocol { ftp | webdav } ]
      [ ftp nopasv ]
      [ ftp showquit ]
      [ ftp { usecwd | nousecwd } ]
      [ http expect ]
      [ http secure ]
      [ safe ]
      [ state { checksum | timesize } ]
      [ permissions { ignore | exec | all | dir } ]
      [ symlinks { ignore | follow | maintain } ]
      [ nodelete ]
      [ nooverwrite ]
      [ checkmoved [renames] ]
      [ tempupload ]
      [ exclude pattern ]...
      [ ignore pattern ]...
      [ ascii pattern ]...

     Anything after a hash (#) in a line is ignored as a comment.  Values may be
     quoted and characters may be backslash-escaped.  For example,  to	use  the
     exclude pattern *#, use the following line:
	  exclude "*#"

   Remote Server Options
     The  server key is used to specify the remote server the site is stored on.
     This may be either a DNS name or IP address. A connection is  made  to  the
     default  port  for the protocol used, or that given by the port key.  site-
     copy supports the WebDAV or FTP protocols	-  the	protocol  key  specifies
     which to use, taking the value of either webdav or ftp respectively. By de-
     fault, FTP will be used.

     The  proxy-server and proxy-port keys may be used to specify a proxy server
     to use. Proxy servers are currently only supported for WebDAV.

     If the FTP server does not support passive (PASV) mode, then  the	key  ftp
     nopasv  should  be  used.	To display the message returned by the server on
     closing the connection, use the ftp showquit option.  If  the  server  only
     supports  uploading files in the current working directory, use the key ftp
     usecwd (possible symptom: "overwrite permission denied").	 Note  that  the
     remote-directory  (keyword  remote) must be an absolute path (starting with
     '/'), or usecwd will be ignored.

     If the WebDAV server correctly supports the 100-continue expectation,  e.g.
     Apache  1.3.9  and  later, the key http expect should be used. Doing so can
     save some bandwidth and time in an update.

     If the WebDAV server supports access via SSL, the key http  secure  can  be
     used.   Doing  so will cause the transfers between sitecopy and the host to
     be performed using an secure, encrypted link.  The first time SSL	is  used
     to  access the server, the user will be prompted to verify the SSL certifi-
     cate, if it's not signed by a CA trusted in the system's CA root bundle.

     To authenticate the user with the server, the username  and  password  keys
     are used. If it exists, the ~/.netrc will be searched for a password if one
     is not specified. See ftp(1) for the syntax of this file.

     Basic  and  digest authentication are supported for WebDAV. Note that basic
     authentication must not be used unless the connection is known  to  be  se-
     cure.

     The full URL that is used to access the site can optionally be specified in
     the  url  key.  This is used only in flat list mode, so the site URL can be
     inserted in 'Recent Changes' pages. The URL must not have a trailing slash;
     a valid example is
	  url http://www.site.com/mysite

     If the tempupload option is given, new or changed files are upload  with  a
     ".in." prefix, then moved to the true filename when the upload is complete.

   File State
     File  state  is stored in the storage files (~/.sitecopy/*), and is used to
     discover when a file has been changed.  Two methods are supported, and  can
     be  selected  using  the state option, with either parameter: timesize (the
     default), and checksum.

     timesize uses the last-modification date and the size of  files  to  detect
     when  they  have  changed.   checksum  uses  an  MD5 checksum to detect any
     changes to the file contents.

     Note that MD5 checksumming involves reading in  the  entire  file,  and  is
     slower  than  simply  using  the last-modification date and size. It may be
     useful for instance if a versioning system is  in	use  which  updates  the
     last-modification	date  on  a 'checkout', but this doesn't actually change
     the file contents.

   Safe Mode
     Safe Mode is enabled by using the safe key. When enabled, each time a  file
     is  uploaded  to  the  server,  the modification time of the file as on the
     server is recorded. Subsequently, whenever this file has been  changed  lo-
     cally  and  is  to  be uploaded again, the current modification time of the
     file on the server is retrieved, and compared with  the  stored  value.  If
     these  differ,  then the remote copy of the file has been altered by a for-
     eign party.  A warning message is issued, and your local copy of  the  file
     will not be uploaded over it, to prevent losing any changes.

     Safe  Mode can be used with FTP or WebDAV servers, but if Apache/mod_dav is
     used, mod_dav 0.9.11 or later is required.

     Note Safe mode cannot be used in conjunction with	the  nooverwrite  option
     (see below).

   File Storage Locations
     The remote key specifies the root directory of the remote copy of the site.
     It may be in the form of an absolute pathname, e.g.
	  remote /www/mysite/
     For  FTP,	the directory may also be specified relative to the login direc-
     tory, in which case it must be prefixed by "~/", for example:
	  remote ~/public_html/

     The local key specifies the directory in which the site is stored	locally.
     This may be given relative to your home directory (as given by the environ-
     ment variable $HOME), again using the "~/" prefix.
	  local ~/html/foosite/
	  local /home/fred/html/foosite/
     are equivalent, if $HOME is set to "/home/fred".

     For  both	the local and remote keywords, a trailing slash may be used, but
     is not required.

   File Permissions Handling
     File permissions handling is dictated by the permissions key, which may  be
     given one of three values:

     ignore
	    to ignore file permissions completely (the default),

     exec   to mirror the permissions of executable files only,

     all    to mirror the permissions of all files.

     This  can be used, for instance, to ensure the permissions of CGI files are
     set. The option is currently ignored for WebDAV servers. For FTP servers, a
     chmod is performed remotely to set the permissions.

     To handle directory permissions, the key:
	permissions dir
     may be used in addition to a permissions key of either exec, local or  all.
     Note that permissions all does not imply permissions dir.

   Symbolic Link Handling
     Symlinks  found in the local site can be either ignored, followed, or main-
     tained. In 'follow' mode, the files references by the symlinks will be  up-
     loaded  in  their	place.	In 'maintain' mode, the link will be created re-
     motely as well, see below for more information. The mode used for each site
     is specified with the symlinks rcfile key, which may take the value of  ig-
     nore, follow or maintain to select the mode as appropriate.

     The default mode is follow, i.e. symbolic links found in the local site are
     followed.

   Symbolic link Maintain Mode
     This  mode  is currently only supported by the WebDAV driver, and will work
     only with servers which implement WebDAV Advanced Collections, which  is  a
     work-in-progress.	The target of the link on the server is literally copied
     from the target of the symlink. Hint: you can use URL's if you like:
	  ln -s "http://www.somewhere.org/" somewherehome

     In this way, a "302 Redirect" can be easily set up from the client, without
     having to alter the server configuration.

   Deleting and Moving Remote Files
     The nodelete option may be used to prevent remote	files  from  ever  being
     deleted. This may be useful if you keep large amounts of data on the remote
     server which you do not need to store locally as well.

     If  your  server  does  not allow you to upload changed files over existing
     files, then you can use the nooverwrite option. When this is  used,  before
     uploading a changed file, the remote file will be deleted.

     If  the  checkmoved  option is used, sitecopy will look for any files which
     have been moved locally. If any are found, when the remote site is updated,
     the files will be moved remotely.

     If the checkmoved renames option is used, sitecopy will look for any  files
     which  have  been moved or renamed locally. This option may only be used in
     conjunction with the state checksum option.

     WARNING

     If you are not using MD5 checksumming (i.e. the state checksum  option)  to
     determine	file state, do NOT use the checkmoved option if you tend to hold
     files in different directories with identical sizes, modification times and
     names and ever move them about. This seems  unlikely,  but  don't	say  you
     haven't been warned.

   Excluding Files
     Files  may be excluded from the files list by use of the exclude key, which
     accepts shell-style globbing patterns. For example, use
	  exclude *.bak
	  exclude *~
	  exclude "#*#"
     to exclude all files which have a .bak extension, end in a tilde (~)  char-
     acter,  or  which begin and end with a a hash. Don't forget to quote or es-
     cape the value if it includes a hash!

     To exclude certain files within an particular directory, simply prefix  the
     pattern with the directory name - including a leading slash. For instance:
	  exclude /docs/*.m4
	  exclude /files/*.gz
     which will exclude all files with the .m4 extension in the 'docs' subdirec-
     tory  of the site, and all files with the .gz extension in the files subdi-
     rectory.

     An entire directory can also be excluded - simply use  the  directory  name
     with no trailing slash. For example
	  exclude /foo/bar
	  exclude /where/else
     to exclude the 'foo/bar' and 'where/else' subdirectories of the site.

     Exclude  patterns are consulted when scanning the local directory, and when
     scanning the remote site during a --fetch.  Any file which matches any  ex-
     clude pattern is not added to the files list.  This means that a file which
     has  already been uploaded by sitecopy, and subsequently matches an exclude
     pattern will be deleted from the server.

   Ignoring Local Changes to Files
     The ignore option is used to instruct sitecopy to ignore any local  changes
     made  to  a  file.  If a change is made to the contents of an ignored file,
     this file will not be uploaded by update mode. Ignored files will	be  cre-
     ated, moved and deleted as normal.

     The ignore option is used in the same way as the exclude option.

     Note that synchronize mode will overwrite changes made to ignored files.

   FTP Transfer Mode
     To  specify  the  FTP transfer mode for files, use the ascii key. Any files
     which are transferred using ASCII mode have CRLF/LF  translation  performed
     appropriately. For example, use
	  ascii *.pl
     to  upload all files with the .pl extension as ASCII text.  This key has no
     effect with WebDAV (currently).

RETURN VALUES
     Return values are specified for  different  operation  modes.  If	multiple
     sites  are specified on the command line, the return value is in respect to
     the last site given.

   Update Mode
      -1 ... update never even started - configuration problem
       0 ... update was entirely successful.
       1 ... update went wrong somewhere
       2 ... could not connect or login to server

   List Mode (default mode of operation)
      -1 ... could not form list - configuration problem
       0 ... the remote site does not need updating
       1 ... the remote site needs updating

EXAMPLE RCFILE CONTENTS
   FTP Server, Simple Usage
     Fred's site is uploaded to the FTP server 'my.server.com' and held  in  the
     directory	'public_html',	which  is  in  the  login directory. The site is
     stored locally in the directory /home/fred/html.

     site mysite
       server my.server.com
       url http://www.server.com/fred
       username fred
       password juniper
       local /home/fred/html/
       remote ~/public_html/

   FTP Server, Complex Usage
     Here, Freda's site is uploaded to the FTP server 'ftp.elsewhere.com', where
     it is held in the directory  /www/freda/.	The  local  site  is  stored  in
     /home/freda/sites/elsewhere/

     site anothersite
       server ftp.elsewhere.com
       username freda
       password blahblahblah
       local /home/freda/sites/elsewhere/
       remote /www/freda/
       # Freda wants files with a .bak extension or a
       # trailing ~ to be ignored:
       exclude *.bak
       exclude *~

   WebDAV Server, Simple Usage
     This example shows use of a WebDAV server.

     site supersite
       server dav.wow.com
       protocol webdav
       username pow
       password zap
       local /home/joe/www/super/
       remote /

FILES
     ~/.sitecopyrc Default run control file location.
     ~/.sitecopy/ Remote site information storage directory
     ~/.netrc Remote server accounts information

BUGS
     Known  problems: Fetch + synch modes are NOT reliable for FTP.  If you need
     reliable operation of fetch or synch modes, you shouldn't	be  using  site-
     copy.  Try rsync instead.

     Please  send bug reports and feature requests to <sitecopy@lyra.org> rather
     than to the author, since the mailing list is archived and can be a  useful
     resource for others.

SEE ALSO
     rsync(1), ftp(1), mirror(1)

STANDARDS
     [Listed  for  reference  only,  no  claim of compliance to any of the below
     standards is made.]

     RFC 959 - File Transfer Protocol (FTP)
     RFC 1521 - Multipurpose Internet Mail Extensions Part One
     RFC 1945 - Hypertext Transfer Protocol -- HTTP/1.0
     RFC 2396 - Uniform Resource Identifiers: Generic Syntax
     RFC 2518 - HTTP Extensions for Distributed Authoring -- WEBDAV
     RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1
     RFC 2617 - HTTP Authentication
     REC-XML - Extensible Markup Language (XML) 1.0
     REC-XML-NAMES - Namespaces in XML

DRAFT STANDARDS
     draft-ietf-ftpext-mlst-05.txt - Extensions to FTP
     draft-ietf-webdav-collections-protocol-03.txt - WebDAV Advanced Collections
     Protocol

AUTHOR
     Joe Orton and others.
     e-mail: sitecopy@lyra.org
     www: http://www.lyra.org/sitecopy/

sitecopy			    June 2001			     sitecopy(1)

home | help