Package: zyklop
This program is a wrapper around rsync. It will help you:if you need to sync files from remote server frequentlyNo need to keep the location of the file in your mind. It finds
them for you.RequirementsPython >= 2.6 (Python >= 2.7 for tests)rsync installedlocate installed with up-to-date database on the remote systemFirst StepsIf you are new to ssh, setup an ssh configuration first. If you are
dealing with a lot of servers, giving them an alias makes them easier to
remember and you don’t have to type as much.Create an ssh configuration in your SSH home, e.g.:vim ~/.ssh/configYou can use the following example as a starter:Host spameggs
Hostname  12.112.11.122
Compression yes
CompressionLevel 9
User guidobut be sure to check thedocumentationor the man page (5) forssh_configMake the config only readable for the owner:chmod 600 ~/.ssh/configTest if you can login to your configured host using only your
alias:ssh spameggsExamplesSyncing ZODB from remote server configured in~/.ssh/configas spameggs. We choose not the first database, but the second:$ zyklop spameggs:Data.fs .
Use /opt/otherbuildout/var/filestorage/Data.fs? Y(es)/N(o)/A(bort) n
Use /opt/buildout/var/filestorage/Data.fs? Y(es)/N(o)/A(bort) ySyncing a directory providing a path segment:$ zyklop spameggs:buildout/var/filestorage$ .Syncing a directory which ends withblobstorage`, excluding any
otherblobstoragedirectories with postfixes in the name (e.g.blobstorage.old):$ zyklop spameggs:blobstorage$ .Use anabsolute pathif you know exactly where to copy from:$ zyklop spameggs:/tmp/Data.fs .Syncing a directory which needs higher privileges. We use the-sargument:$ zyklop -s spameggs:blobstorage$ .Dry runprints out all found remote paths and just exits:$ zyklop -d spameggs:blobstorage$ .
/opt/otherbuildout/var/blobstorage
/opt/otherbuildout/var/blobstorage.old
/opt/buildout/var/blobstoragSync the first result zyklop finds automaticallywithout
prompting:$ zyklop -y spameggs:blobstorage$ .Known ProblemsZyklop just hangsThis can be caused by paramiko and a not sufficient SSH setup. Make
sure you can login without problems by simply issuing a:ssh myhostIf that does not solve your problem, try to provide an absolute path
from the source. Sometimes users don’t have many privileges on the
remote server and the paramiko just waits for the output of a remote
command:zyklop myhost:/path/to/file .MotivationI’m dealing with Zope servers most of my time. Some of them have ahugeData.fs - an object oriented database. I do have in 99% of the
cases an older version of the clients database on my PC. Copying the
whole database will take me ages. Using rsync and simply downloading a
binary patch makes updating my local database a quick thing.To summarize, with zyklop I’d like to address two things:Downloading large ZODBs takes a long time and
bandwidth. I simply don’t want to wait that long and download that
much.Most of the time I can not remember the exact path where the item
to copy is on the remote server.TODOtty support: sometimes needed if SSH is configured to only allow
tty’s to connect.Don’t hang if only password auth is configured for SSHDevelopmentIf you’re interested in hacking, clone zyklop on github:https://github.com/romanofski/zyklopCHANGES0.5.2 (2013-02-12)Bugfix: use one function to retrieve the username.0.5.1 (2013-02-12)Command line utility now shows version information.Bugfix: now uses the ‘user’ configured in the ssh config and falls
back to the environment user0.5 (2013-02-06)Added -d or –dry-run switch to only print out found
remote paths by zyklopAdded -y or –assume-yes switch to sync the first result found.Fixed b0rked README.rst0.4 (2013-02-05)Improved documentationFixed bug, which lead to a hanging command when issuing a remote
command in order to find the target path0.3 (2013-01-14)Changed host, match parameters: Now you can specify the source
host and path match in one parameter delimited by a column,
similar to scp (e.g. foohost:/path)Allow to provide an absolute path to the file you’d like to copy.0.2 (2012-03-08)Added basic support for using sudo in finding and syncing (rsync)Added argparse as dependency as Python 2.6 won’t have itNew positional argument to provide destination to copy
file/directory