[Rsync-patches] [PATCH] Add instant-rsyncd to support/ .

Matt McCutchen <matt at mattmccutchen.net>
Thu Aug 14 10:59:02 PDT 2008


---
 support/instant-rsyncd |  107 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 107 insertions(+), 0 deletions(-)
 create mode 100755 support/instant-rsyncd

diff --git a/support/instant-rsyncd b/support/instant-rsyncd
new file mode 100755
index 0000000..dcd8757
--- /dev/null
+++ b/support/instant-rsyncd
@@ -0,0 +1,107 @@
+#!/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 at mattmccutchen.net>
+
+set -e
+
+dir="$(pwd)"
+
+if [ "$#" -lt 3 ]; then
+	echo "I would install an rsync daemon in $dir if you gave me"
+	echo "a module name, a port, and an rsync username."
+	exit 1
+fi
+
+module="$1"
+port="$2"
+user="$3"
+rsync="$4"
+if [ ! "$rsync" ]; then
+	rsync=rsync
+fi
+
+moduledir="${dir%/}/$module"
+
+echo
+echo "I'm about to install an rsync daemon in $dir."
+echo "It will listen on port $port for requests giving rsync username $user"
+echo "and the password you are about to specify.  It will serve a module"
+echo "$module corresponding to $moduledir."
+echo
+
+IFS='' read -s -p 'Desired password: ' password
+
+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
+	auth users = $user
+	secrets file = $module.secrets
+EOF
+
+touch "$module".secrets
+chmod go-rwx "$module".secrets
+cat >"$module".secrets <<EOF
+$user:$password
+EOF
+
+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 tried to start 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
+	echo "Let's test the daemon now.  Enter the password you chose."
+	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
-- 
1.6.0.rc3.9.g5ebb
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part
URL: <http://mattmccutchen.net/mailman/archives/rsync-patches/attachments/20080814/f4fbabd0/attachment.pgp>


More information about the rsync-patches mailing list