diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 16:14:31 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 16:14:31 +0000 |
commit | 2d5707c7479eacb3b1ad98e01b53f56a88f8fb78 (patch) | |
tree | d9c334e83692851c02e3e1b8e65570c97bc82481 /support/instant-rsyncd | |
parent | Initial commit. (diff) | |
download | rsync-2d5707c7479eacb3b1ad98e01b53f56a88f8fb78.tar.xz rsync-2d5707c7479eacb3b1ad98e01b53f56a88f8fb78.zip |
Adding upstream version 3.2.7.upstream/3.2.7
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'support/instant-rsyncd')
-rwxr-xr-x | support/instant-rsyncd | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/support/instant-rsyncd b/support/instant-rsyncd new file mode 100755 index 0000000..8bcfd00 --- /dev/null +++ b/support/instant-rsyncd @@ -0,0 +1,126 @@ +#!/usr/bin/env 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)" + +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 + +if [ $# = 0 ]; then + IFS='' read -p 'Port number the daemon should listen on [873]: ' port +else + port="$1" + shift +fi +[ "$port" ] || port=873 + +if [ $# = 0 ]; then + IFS='' read -p 'User name for authentication (empty for none): ' user +else + user="$1" + shift +fi + +if [ "$user" ]; then + IFS='' read -s -p 'Desired password: ' password + echo +fi + +rsync="$1" +[ "$rsync" ] || rsync=rsync + +moduledir="${dir%/}/$module" + +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 +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 +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 ran the start command for 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 + 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 + echo "You should see an empty folder; it's $moduledir." +else + echo "Something went wrong. Do you see an error message?" +fi |