Current File : //usr/share/doc/rsync/support/instant-rsyncd
#!/bin/bash

# instant-rsyncd lets you quickly set up and start a simple, unprivileged rsync
# daemon with a single module in the current directory.  I've found it
# invaluable for quick testing, and I use it when writing a list of commands
# that people can paste into a terminal to reproduce a daemon-related bug.
# Sysadmins deploying an rsync daemon for the first time may find it helpful as
# a starting point.
#
# Usage: instant-rsyncd MODULE PORT RSYNCD-USERNAME [RSYNC-PATH]
# The script asks for the rsyncd user's password twice on stdin, once to set it
# and once to log in to test the daemon.
# -- Matt McCutchen <matt@mattmccutchen.net>

set -e

dir="$(pwd)"

echo
echo "This will setup an rsync daemon in $dir"

if [ $# = 0 ]; then
	IFS='' read -p 'Module name to create (or return to exit): ' module
	[ ! "$module" ] && exit
else
	module="$1"
	shift
fi

if [ $# = 0 ]; then
	IFS='' read -p 'Port number the daemon should listen on [873]: ' port
else
	port="$1"
	shift
fi
[ "$port" ] || port=873

if [ $# = 0 ]; then
	IFS='' read -p 'User name for authentication (empty for none): ' user
else
	user="$1"
	shift
fi

if [ "$user" ]; then
	IFS='' read -s -p 'Desired password: ' password
	echo
fi

rsync="$1"
[ "$rsync" ] || rsync=rsync

moduledir="${dir%/}/$module"

mkdir "$module"

cat >rsyncd.conf <<EOF
log file = rsyncd.log
pid file = rsyncd.pid
port = $port
use chroot = no

[$module]
    path = $module
    read only = false
EOF

if [ "$user" ]; then
	cat >>rsyncd.conf <<-EOF
	    auth users = $user
	    secrets file = $module.secrets
	EOF
	touch "$module".secrets
	chmod go-rwx "$module".secrets
	echo "$user:$password" >"$module".secrets
	user="$user@"
fi

cat >start <<EOF
#!/bin/bash
set -e
cd \`dirname \$0\`
! [ -e rsyncd.pid ] || {
	echo "Is the daemon already running?  If not, delete rsyncd.pid."
	exit 1
}
$rsync --daemon --config=rsyncd.conf
EOF
chmod +x start

cat >stop <<"EOF"
#!/bin/bash
set -e
cd `dirname $0`
! [ -e rsyncd.pid ] || kill -s SIGTERM $(< rsyncd.pid)
EOF
chmod +x stop

path="rsync://$user$(hostname):$port/$module/"

if ./start; then
	sleep .2
	echo
	echo "I ran the start command for the daemon.  The log file rsyncd.log says:"
	echo
	cat rsyncd.log
	echo
	echo "You can start and stop it with ./start and ./stop respectively."
	echo "You can customize the configuration file rsyncd.conf."
	echo
	echo "Give rsync the following path to access the module:"
	echo "    $path"
	echo
	if [ "$user" ]; then
		echo "Let's test the daemon now.  Enter the password you chose at the prompt."
	else
		echo "Let's test the daemon now."
	fi
	echo
	echo '$' $rsync --list-only "$path"
	$rsync --list-only "$path"
	echo
	echo "You should see an empty folder; it's $moduledir."
else
	echo "Something went wrong.  Do you see an error message?"
fi
Site is undergoing maintenance

PACJA Events

Maintenance mode is on

Site will be available soon. Thank you for your patience!