Annotation of embedaddon/rsync/support/instant-rsyncd, revision 1.1.1.2
1.1.1.2 ! misho 1: #!/usr/bin/env bash
1.1 misho 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>