File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / rsync / support / instant-rsyncd
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Oct 14 07:51:15 2013 UTC (10 years, 8 months ago) by misho
Branches: rsync, MAIN
CVS tags: v3_1_2p5, RSYNC3_1_0, HEAD
v 3.1.0

    1: #!/bin/bash
    2: 
    3: # instant-rsyncd lets you quickly set up and start a simple, unprivileged rsync
    4: # daemon with a single module in the current directory.  I've found it
    5: # invaluable for quick testing, and I use it when writing a list of commands
    6: # that people can paste into a terminal to reproduce a daemon-related bug.
    7: # Sysadmins deploying an rsync daemon for the first time may find it helpful as
    8: # a starting point.
    9: #
   10: # Usage: instant-rsyncd MODULE PORT RSYNCD-USERNAME [RSYNC-PATH]
   11: # The script asks for the rsyncd user's password twice on stdin, once to set it
   12: # and once to log in to test the daemon.
   13: # -- Matt McCutchen <matt@mattmccutchen.net>
   14: 
   15: set -e
   16: 
   17: dir="$(pwd)"
   18: 
   19: echo
   20: echo "This will setup an rsync daemon in $dir"
   21: 
   22: if [ $# = 0 ]; then
   23: 	IFS='' read -p 'Module name to create (or return to exit): ' module
   24: 	[ ! "$module" ] && exit
   25: else
   26: 	module="$1"
   27: 	shift
   28: fi
   29: 
   30: if [ $# = 0 ]; then
   31: 	IFS='' read -p 'Port number the daemon should listen on [873]: ' port
   32: else
   33: 	port="$1"
   34: 	shift
   35: fi
   36: [ "$port" ] || port=873
   37: 
   38: if [ $# = 0 ]; then
   39: 	IFS='' read -p 'User name for authentication (empty for none): ' user
   40: else
   41: 	user="$1"
   42: 	shift
   43: fi
   44: 
   45: if [ "$user" ]; then
   46: 	IFS='' read -s -p 'Desired password: ' password
   47: 	echo
   48: fi
   49: 
   50: rsync="$1"
   51: [ "$rsync" ] || rsync=rsync
   52: 
   53: moduledir="${dir%/}/$module"
   54: 
   55: mkdir "$module"
   56: 
   57: cat >rsyncd.conf <<EOF
   58: log file = rsyncd.log
   59: pid file = rsyncd.pid
   60: port = $port
   61: use chroot = no
   62: 
   63: [$module]
   64:     path = $module
   65:     read only = false
   66: EOF
   67: 
   68: if [ "$user" ]; then
   69: 	cat >>rsyncd.conf <<-EOF
   70: 	    auth users = $user
   71: 	    secrets file = $module.secrets
   72: 	EOF
   73: 	touch "$module".secrets
   74: 	chmod go-rwx "$module".secrets
   75: 	echo "$user:$password" >"$module".secrets
   76: 	user="$user@"
   77: fi
   78: 
   79: cat >start <<EOF
   80: #!/bin/bash
   81: set -e
   82: cd \`dirname \$0\`
   83: ! [ -e rsyncd.pid ] || {
   84: 	echo "Is the daemon already running?  If not, delete rsyncd.pid."
   85: 	exit 1
   86: }
   87: $rsync --daemon --config=rsyncd.conf
   88: EOF
   89: chmod +x start
   90: 
   91: cat >stop <<"EOF"
   92: #!/bin/bash
   93: set -e
   94: cd `dirname $0`
   95: ! [ -e rsyncd.pid ] || kill -s SIGTERM $(< rsyncd.pid)
   96: EOF
   97: chmod +x stop
   98: 
   99: path="rsync://$user$(hostname):$port/$module/"
  100: 
  101: if ./start; then
  102: 	sleep .2
  103: 	echo
  104: 	echo "I ran the start command for the daemon.  The log file rsyncd.log says:"
  105: 	echo
  106: 	cat rsyncd.log
  107: 	echo
  108: 	echo "You can start and stop it with ./start and ./stop respectively."
  109: 	echo "You can customize the configuration file rsyncd.conf."
  110: 	echo
  111: 	echo "Give rsync the following path to access the module:"
  112: 	echo "    $path"
  113: 	echo
  114: 	if [ "$user" ]; then
  115: 		echo "Let's test the daemon now.  Enter the password you chose at the prompt."
  116: 	else
  117: 		echo "Let's test the daemon now."
  118: 	fi
  119: 	echo
  120: 	echo '$' $rsync --list-only "$path"
  121: 	$rsync --list-only "$path"
  122: 	echo
  123: 	echo "You should see an empty folder; it's $moduledir."
  124: else
  125: 	echo "Something went wrong.  Do you see an error message?"
  126: fi

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>