File: aaa_rsync_readme.txt

This is an early developer build kit for rsync.

It is intended to help start others participating in porting rsync over
to OpenVMS.

What is rsync?  See http://rsync.samba.org.  It is a way of keeping
directories in sync between multiple systems that may not have reliable
communications links.

While the rsync client built by this kit will transfer files, it has several
latent bugs in it.

The UNIX/WINDOWS version of rsync uses fork() to run separate processes.  This
is not practical for OpenVMS.

Instead, this version of rsync for OpenVMS is merging in pthreads instead
of forked processes.

The consequence of this is silent data corruption.  rsync uses both global
and static varibles intensively, approximately 300 of them.  Of these about
100 have been determined to be only set before the child processes are forked,
and do not need to be changed.

The fix for this is to create global structures for the main, sender, and
receiver threads.  Then the variables that are thread specific moved into them,
and the routines need to learn what thread called them so they can reference
the right variable.  That is actually simpler than it looks.

But the more people working on it and testing it the better.

Only this type of syntax is known to run:

   rsync -ruv host.example.com::ftp/unpacked/rsync .

The other paths still have not been converted over to pthreads.  I doubt they
will work.


To build, you will need a C compiler, and either MMS or Madgoat Make,
and optionally gdiff.  You will need gzip or gunzip and VMSTAR to get
the UNIX sources for 2.5.6 from http://rsync.samba.org.

This kit only contains the changes for OpenVMS, and they are mainly in the
form of TPU macros.  This is so that I can build against the current CVS
checkins for rsync with out having to redo all of the edits.

So you will also need the UNIX source kit.

gdiff should be optional if I have setup the rsync.mms file correctly.

I have only built this on OpenVMS Alpha 7.3-2 EFT, but expect that it will
build on OpenVMS 7.3-1 also.  It also may require ODS-5 volumes for receiving
files because of UNIX file specifications.

I have not tried a VAX build because of the UNIX filename issues.  A wrapper
system like FRONTPORT or what ever the current SAMBA for OpenVMS is using may
help there.


The build procedure uses logical names and search lists.  It expects that the
UNIX source will be in one directory tree PROJECT_ROOT:[RSYNC].

It expects a set of local reference libraries to be in CMS_ROOT:[RSYNC_VMS]
That would be were you put the files unzipped from this kit.

And it expects that your scratch area, and source code work in progress will
be in the directory PROJECT_ROOT:[RYSNC_VMS]

When the RSYNC client is fully functional, it will be able to be used to
keep a different UNIX source tree up to date.  You will then want two UNIX
source trees, one for the current stable release, and the other for the
future release.

The idea is by doing the builds against the same future sources as the
UNIX developers of OpenSource projects, the OpenVMS ports can be released
at the same time.

Work to be done: (plenty)

1. Fix the other fork() references to be either thread creations or
   LIB$SPAWN()/SYS$CREPRC() calls, or document a different way of getting
   same task done.

2. Find all the global static variables and convert them to thread safe.

3. Get the server mode running.

4. Get the test scripts to work, under GNV, or provide DCL equivalents.

5. The TPU program that converts man pages to runoff .rnh files is not
   detecting and fixing a duplicate topic reference.

6. Any other general fixups including kitting, and documentation.


To build (quick instructions)

gunzip/detar UNIX source into RPOJECT_ROOT:[RSYNC],[RSYNC.LIB], ...
directories.

UNZIP the OpenVMS source into CMS_ROOT:[RYSNC_VMS],[RSYNC_VMS.LIB], ...
directories.

Create PROJECT_ROOT:[RYSNC_VMS.LIB],[RSYNC_VMS.ZLIB],[RSYNC_VMS.POPT].

Set default PROJECT_ROOT:[RSYNC_VMS]

Inspect all the *.com files in CMS_ROOT:[RSYNC_VMS]

@CMS_ROOT:[RSYNC_VMS]SETUP_LOCAL_BUILD.COM.  This sets up all the logical
names that are used for the build.

MMS OR MMK

MMS/DESCRIPT=PRJ_SRC:RSYNC.MMS/OUT=BUILD.LOG


Good Luck.
John Malmberg
wb8tyw@qsl.network (munged)