Created
September 2, 2018 17:40
-
-
Save rcarmo/2e5af759966bee90f457965375a4ef63 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 <[email protected]> | |
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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment