This resource is about a project did between my degrees. It is quite old work.
A project to ensure I didn't loose programming skills, but a graphically configured multi-host file volume comparator and updater. I used this for a period to ensure file backups where up-do-date. I wrote this in Java as this was this most convenient language to include a GUI, to ensure adoption by other users on my LAN. I benefited from the languages strong support for threads and synchronisation.
Although I did create MANIFEST files, I don't seem to have completed the packaging process. There are temparay files all over the source directories. If you would like a copy, I will clean up the tarball ball and email it to you.
This is a file volume synchroniser. While you are likely to have one of these shipped with your operating system (if it's any good), this is (a) free, and (b) designed to run with different operating systems, which proprietary ones are not likely to. The sync can ensure up-to-date-ness on file systems on the same machine, or across a LAN. The sync only transfers the absent files, and is threaded, so it runs at the speed of your network. The project is name is unlikely to clash with the traditional Unix tool 'sync', due to the implementation interpreter needing invocation first. The logical name 'rsync' has already been taken. I may move this to 'jsync' later, but this is approaching marketing whoffle ('J!sYnc', 'J-SINc', etc).
As transferring large volumes of data is a slow non interactive process, the system is mostly non interactive. The initial configuration is either provided by a GUI or a config file. If I ever write my complete virtual machine, this functionality will be subsumed (but don't hold your breath).
This tool has a GUI for pre-configuring, and is non-interactive. I don't seem to have had time to create a manual (although this would be short).
- A recent version of Java, and an equivalent Java compiler. This should be properly installed and on the path etc. I was also using jikes - the IBM compiler - when I was running this.
- The source of linx itself depends on a number of libraries. These have been included in the installation bundle. If you have several of my tools, you only need one copy of each library.
- The network to run it for (no, not run it on).
- This should only be used on LANs or over private networks, as it provides no security features at all. It should be possible to use a SSH tunnel, although I haven't tried. Over the long term this type of approach is encouraged, as SSH (or similar) has vastly more testing and real world exposure.
- Currently the compression stream is not implemented, so it costs a megabyte to transfer a megabyte. On a LAN this is not an issue.
- Kitchen sink jokes are not normally funny.
Sample config file
;sample conf file, actual file can be given any name, but im using *.conf in doc. ;all files are written as binary (think like ftp), as most text editors can cope with foreign O/S convensions ;this conf system uses: ; ';' charactor : for comments, like '//' in C/C++/Java/c# ; '#' charactor : for headers, don't edit these ;plain (no punctuation) : for numbers/ single values ;round brackets and commas : to seperate multiple values ;full quotes : for literal values that are not to be interpretted, like file names. ;the default parser makes everything into uppercase, so use quotes for picky things ;************ IMPORTANT: only to be run when no one is writting to the files/dirs ************* ;tags for my generic conf filereader ;requires version, author, and date #__SYSTEM version = “sync (java) v1.1.0” author = “Owen Beresford” date = 8/11/01 long = “config file for 'sync', a program to synchronise different archives, may be on separate machines.” ;main settings #MAIN ;hosts = (ranaenorma.ranvilles) hosts = (ranaenorma.ranvilles, meshedfrog.ranvilles) ;list of names of machines to talk to. must be recogniusable ip-names to localhost ;dont include the local machine, unless you want two copies on this machine ;refer to the local machine, by its external name (not 'localhost'), to allow the sort functions to work properly root_dir = “D:\desk\test\data” ;o/s specific, absolute path of base directory ;will include special token for whole dir tree later (ie /. on unixen) file_buf_size = 8192 ;int range 0-infinity ;this is measured in bytes, the amount of a file that should be in memory, and ip stack at once ;smaller files are sent as one block thread_no = 10 ;int range 0-(2^32-1) ;number of threads to run simultainously, all of the network code is in a thread ;higher no, means more threads, means higher contension, therefore dont say 10000000 or something ;practical limit of about 30 or so. create_bup = 1 ;[1 | yes] | [0 |no] ;make a backup of the overwritten files first, the bups are stored in a new dir (named “backup.”+start time ;as a long) in the root_dir location. ;the files are name mangled, to a unique int, there original names (and directorys) are stored in a text file ;named names.txt in the same dir ;will include a script to translate back again ignore_files = “NO_FILE_SHOULD_MATCH_THIS” ;regular expression ;lists files to ignore in the directories ;see 'man egrep' in a unix box or a search engine for notes on regular expressions ignore_dirs = “NO_FILE_SHOULD_MATCH_THIS” ;regular expression ;list of sub directories which are to be ignored ;mostly cause u kno theres nothing changed in them ;also so two instances on the same machine can be made to ignore each others data ;i cant think of a good example ;see 'man egrep' in a unix box or a search engine for notes on regular expressions delete_ignored = no ;[1|yes|delete]|[0|no|keep]|[move | 2] ;what to do with ignored files. ;'move' puts the files in the backup dir comparator = modify ;modify | size ;how to decide the 'better' file. ;modify is the last modified date, size is the size in bytes (more relavent for log files /partial downloads) server = yes ;[yes |1]|[no |0] ;whether or not to make sure the local machine is up-to-date or not.