Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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)"
- 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
Add Comment
Please, Sign In to add comment