10 use Data::Dump qw(dump);
13 my $dir = '/srv/cloudstore/var';
14 my $log_fifo = "$dir/rsyncd.log";
15 my $pid_file = "$dir/rsyncd.pid";
16 my $cfg_file = "$dir/rsyncd.conf";
19 mkdir $dir if ! -e $dir;
21 mkfifo $log_fifo, 0700 unless -p $log_fifo;
39 my $rsync_config = qq{
47 lock file = $dir/rsyncd.lock
49 #syslog facility = local5
52 transfer logging = yes
53 log format = transfer-log:} . join('|',values %$transfer_log) . qq{
58 # don't check secrets file permission (uid)
61 pre-xfer exec = /srv/cloudstore/pre-xfer.sh
62 post-xfer exec = /srv/cloudstore/post-xfer.sh
65 path = /srv/cloudstore/users/dpavlin/blob
67 secrets file = /srv/cloudstore/secrets/dpavlin
72 write_file $cfg_file, $rsync_config;
73 warn "created $cfg_file ", -s $cfg_file, " bytes\n";
76 my $pid = read_file $pid_file;
79 warn "found rsync pid $pid";
85 if ( ! -e $pid_file ) {
86 my $exec = "rsync --daemon --config $cfg_file --no-detach --port=6501";
89 die "could not fork\n" unless defined(my $pid = fork);
91 warn "start server with $exec\n";
95 warn "wait for pid file";
96 while ( ! -e $pid_file ) {
103 warn "# reading log output from $log_fifo\n";
104 open(my $log, '<', $log_fifo);
105 while( my $line = <$log> ) {
107 if ( $line =~ /transfer-log:(.+\|.+)/ ) {
109 my @k = keys %$transfer_log;
110 my @v = split(/\|/,$1);
111 @data{@k} = @v ; # FIXME validate?
112 print "transfer-log:",dump(\%data),$/;