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
+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
-module="$1"
-port="$2"
-user="$3"
-rsync="$4"
-if [ ! "$rsync" ]; then
- rsync=rsync
+if [ $# = 0 ]; then
+ IFS='' read -p 'Port number the daemon should listen on [873]: ' port
+else
+ port="$1"
+ shift
fi
+[ "$port" ] || port=873
-moduledir="${dir%/}/$module"
+if [ $# = 0 ]; then
+ IFS='' read -p 'User name for authentication (empty for none): ' user
+else
+ user="$1"
+ shift
+fi
-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
+if [ "$user" ]; then
+ IFS='' read -s -p 'Desired password: ' password
+ echo
+fi
+
+rsync="$1"
+[ "$rsync" ] || rsync=rsync
-IFS='' read -s -p 'Desired password: ' password
+moduledir="${dir%/}/$module"
mkdir "$module"
use chroot = no
[$module]
- path = $module
- read only = false
- auth users = $user
- secrets file = $module.secrets
+ path = $module
+ read only = false
EOF
-touch "$module".secrets
-chmod go-rwx "$module".secrets
-cat >"$module".secrets <<EOF
-$user:$password
-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
EOF
chmod +x stop
-path="rsync://$user@$(hostname):$port/$module/"
+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 "I ran the start command for the daemon. The log file rsyncd.log says:"
echo
cat rsyncd.log
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."
+ 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