diff options
Diffstat (limited to 'rsync')
-rw-r--r-- | rsync/.footprint.i686 | 13 | ||||
-rw-r--r-- | rsync/.footprint.x86_64 | 13 | ||||
-rw-r--r-- | rsync/.md5sum.i686 | 2 | ||||
-rw-r--r-- | rsync/.md5sum.x86_64 | 2 | ||||
-rwxr-xr-x | rsync/Pkgfile | 30 | ||||
-rw-r--r-- | rsync/rsync.driver | 143 |
6 files changed, 203 insertions, 0 deletions
diff --git a/rsync/.footprint.i686 b/rsync/.footprint.i686 new file mode 100644 index 000000000..cf9c999ea --- /dev/null +++ b/rsync/.footprint.i686 @@ -0,0 +1,13 @@ +drwxr-xr-x root/root etc/ +drwxr-xr-x root/root etc/ports/ +drwxr-xr-x root/root etc/ports/drivers/ +-rwxr-xr-x root/root etc/ports/drivers/rsync +drwxr-xr-x root/root usr/ +drwxr-xr-x root/root usr/bin/ +-rwxr-xr-x root/root usr/bin/rsync +drwxr-xr-x root/root usr/share/ +drwxr-xr-x root/root usr/share/man/ +drwxr-xr-x root/root usr/share/man/man1/ +-rw-r--r-- root/root usr/share/man/man1/rsync.1.gz +drwxr-xr-x root/root usr/share/man/man5/ +-rw-r--r-- root/root usr/share/man/man5/rsyncd.conf.5.gz diff --git a/rsync/.footprint.x86_64 b/rsync/.footprint.x86_64 new file mode 100644 index 000000000..cf9c999ea --- /dev/null +++ b/rsync/.footprint.x86_64 @@ -0,0 +1,13 @@ +drwxr-xr-x root/root etc/ +drwxr-xr-x root/root etc/ports/ +drwxr-xr-x root/root etc/ports/drivers/ +-rwxr-xr-x root/root etc/ports/drivers/rsync +drwxr-xr-x root/root usr/ +drwxr-xr-x root/root usr/bin/ +-rwxr-xr-x root/root usr/bin/rsync +drwxr-xr-x root/root usr/share/ +drwxr-xr-x root/root usr/share/man/ +drwxr-xr-x root/root usr/share/man/man1/ +-rw-r--r-- root/root usr/share/man/man1/rsync.1.gz +drwxr-xr-x root/root usr/share/man/man5/ +-rw-r--r-- root/root usr/share/man/man5/rsyncd.conf.5.gz diff --git a/rsync/.md5sum.i686 b/rsync/.md5sum.i686 new file mode 100644 index 000000000..581d9308c --- /dev/null +++ b/rsync/.md5sum.i686 @@ -0,0 +1,2 @@ +b53525900817cf1ba7ad3a516ab5bfe9 rsync-3.0.7.tar.gz +c607264a85b42c902a0ee88cfad61dd6 rsync.driver diff --git a/rsync/.md5sum.x86_64 b/rsync/.md5sum.x86_64 new file mode 100644 index 000000000..581d9308c --- /dev/null +++ b/rsync/.md5sum.x86_64 @@ -0,0 +1,2 @@ +b53525900817cf1ba7ad3a516ab5bfe9 rsync-3.0.7.tar.gz +c607264a85b42c902a0ee88cfad61dd6 rsync.driver diff --git a/rsync/Pkgfile b/rsync/Pkgfile new file mode 100755 index 000000000..918797059 --- /dev/null +++ b/rsync/Pkgfile @@ -0,0 +1,30 @@ +# Description: Protocol de synchronisation de fichiers très efficace +# URL: http://samba.anu.edu.au/rsync/ +# Maintainer: NuTyX core team +# Packager: thierryn1 at hispeed dot ch +# Depends on: + +name=rsync +version=3.0.7 +release=2 +source=( http://rsync.samba.org/ftp/$name/$name-$version.tar.gz\ + rsync.driver) + + +build() { + cd $name-$version + ./configure --prefix=/usr \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info + make + make DESTDIR=$PKG install + install -d $PKG/etc/ports/drivers + case `uname -m` in + i?86) + sed -i "s/ARCH/x86_64/g" $SRC/rsync.driver;; + x86_64) + sed -i "s/ARCH/i686/g" $SRC/rsync.driver;; + esac + + install -m 755 $SRC/rsync.driver $PKG/etc/ports/drivers/rsync +} diff --git a/rsync/rsync.driver b/rsync/rsync.driver new file mode 100644 index 000000000..ecd087d65 --- /dev/null +++ b/rsync/rsync.driver @@ -0,0 +1,143 @@ +#!/usr/bin/perl +# +# /etc/ports/drivers/rsync: rsync(1) driver script for ports(8) +# + +use warnings; +use strict; +use File::Basename; + +my $host = ''; +my $collection = ''; +my $destination = ''; +my %new_checkouts; +my %old_checkouts; + +sub error +{ + my $message = shift; + print "Error: $message ($!)\nUpdating failed\n"; + exit 1; +} + +sub warning +{ + my $message = shift; + print "Warning: $message ($!)\n"; +} + +if ($#ARGV < 0) +{ + print "Usage: $0 <file>\n"; + exit 1; +} + +open(FILE, $ARGV[0]) or error("Couldn't open $ARGV[0]"); +while (<FILE>) +{ + chomp; + if (/^host=(.*)/) { $host = $1; } + elsif (/^collection=(.*)/) { $collection = $1; } + elsif (/^destination=(.*)/) { $destination = $1; } +} +close(FILE); + +if ($host eq '') { error("Host field not set in $ARGV[0]"); } +if ($collection eq '') { error("Collection field not set in $ARGV[0]"); } +if ($destination eq '') { error("Destination field not set in $ARGV[0]"); } + +if (-e "$destination/.checkouts") +{ + # read the old .checkouts file into memory + open(FILE, "$destination/.checkouts") or error("Couldn't read checkouts from $destination/.checkouts"); + while (<FILE>) + { + chomp; + $old_checkouts{$_} = 1; + } + close(FILE); +} + +print "Updating file list from " . $host . "::$collection\n"; + +# get the remote file list (new .checkouts) +open(PIPE, 'rsync -crz rsync://' . $host . '/' . $collection . '|') or error("Couldn't open pipe to rsync"); +while (<PIPE>) +{ + chomp; + + next if /^MOTD:/; # ignore MOTD lines + s/^(.{43})//; # ignore the first 43 characters (mode, date etc...) + next if /^.$/; # ignore the . directory + + $new_checkouts{$_} = 1; +} +close(PIPE); +error("Running rsync failed") unless $? == 0; + +print "Updating collection " . basename($destination) . "\n"; + +# now really run rsync +open(PIPE, 'rsync -crz --exclude=.footprint.ARCH --exclude=.md5sum.ARCH --log-format "%o %n" rsync://' . $host . "/$collection $destination|") or error("Couldn't open pipe to rsync"); +while (<PIPE>) +{ + chomp; + + if (/^recv (.*)/) + { + if ($old_checkouts{$1}) + { + s/^recv/ Edit/; + } + else + { + s/^recv/ Checkout/; + } + } + + print $_ . "\n"; +} +close(PIPE); +error("Running rsync failed") unless $? == 0; + +# save new checkouts into .checkouts +open(FILE, ">$destination/.checkouts") or error("Couldn't save checkouts to $destination/.checkouts"); +foreach my $checkout (sort keys %new_checkouts) +{ + print FILE "$checkout\n"; +} +close(FILE); + +# use chroot as an additional safety measure when removing files +chroot($destination) or error("Couldn't chroot into $destination"); +chdir('/'); + +# iterate through old checkouts, remove obsolete files +foreach my $checkout (sort keys %old_checkouts) +{ + if (!$new_checkouts{$checkout}) + { + if (-f $checkout) + { + print " Delete $checkout\n"; + unlink($checkout) or warning("Couldn't delete $checkout"); + } + } +} + +# iterate through old checkouts, remove obsolete directories +foreach my $checkout (sort keys %old_checkouts) +{ + if (!$new_checkouts{$checkout}) + { + if (-d $checkout) + { + print " Delete $checkout\n"; + rmdir($checkout) or warning("Couldn't delete $checkout"); + } + } +} + +print "Finished successfully\n"; + +# End of file |