Configurare un server push

La configurazione di un server push consiste in due compiti di base: la configurazione dell'accesso rsync (per un normale mirroring di tipo pull) e la configurazionre del un meccanismo di attivazione via ssh (per avviare il mirroring push).

(Per maggiori informazioni su cosa è un server push si veda la spiegazione sul push mirroring.)

Configurazione di rsync

Installare rsync 2.1.1 o superiore. Se sul proprio sito si utilizza Debian, è sufficiente installare il pacchetto rsync più recente.

Creare il file rsyncd.conf e inserirvi qualcosa di simile a questo:

uid = nobody
gid = nogroup
max connections = 25
socket options = SO_KEEPALIVE

[debian]
  path = /srv/debian/mirror
  comment = The Debian Archive (~250 GB)
  auth users = authorized_account1,authorized_account2,authorized_accountN
  read only = true
  secrets file = /etc/rsyncd/debian.secrets

Aggiungere nel file /etc/rsyncd/debian.secrets una voce per ogni sito verso cui si vuole effettuare il pushing:

authorized_account1:a_password
authorized_account2:another_password
authorized_accountN:password

Con questo si è dato accesso ai mirror destinazione all'archivio sulla propria macchina.

Per far avviare il demone rsync da inetd si deve aggiungere il servizio rsync nel file /etc/services (se non fosse già presente), in questo modo:

rsync           873/tcp

Per abilitare il demone da inetd, aggiungere quanto segue al proprio file /etc/inetd.conf:

rsync      stream      tcp         nowait      root /usr/bin/rsync rsyncd --daemon

(Ricordasi di inviare a inetd un segnale HUP per fargli rileggere il file di configurazione dopo la modifica).

Configurazione del meccanismo di attivazione con ssh

Creare una nuova chiave ssh per l'account che usa per il mirror di Debian. Assicurarsi di non sovrascrivere la chiave ssh originale usando l'opzione -f, per esempio:

ssh-keygen -f ~/.ssh/identity.mysite

Assicurarsi che la nuova chiave pubblica (~/.ssh/identity.mysite.pub) contenga all'inizio questo, dove IPADDRESS è l'indirizzo IP del proprio mirror di origine:

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="~/bin/ftpsync",from="IPADDRESS" &"

Occorre configurare uno script che contatterà i mirror destinazione. Creare un file chiamato signal, con il seguente contenuto:

#!/bin/sh

# This script is called to signal the remote host that it is time to
# mirror the archive.

echo Signalling $1
ssh -o"BatchMode yes" -o"user $2" "$1" -i $HOME/.ssh/identity.mysite sleep 1

Questo script si allocherà sulla macchina remota usando la speciale chiave ssh creata prima, fornita a ciascun mirror destinatario e aggiunta nei rispettivi ~/.ssh/authorized_keys (sostituendo ftpsync con con un qualsiasi altro comando per avviare il mirroring). Lo script stesso non farà nulla di utile in remoto, l'unico comando sarà lanciato in base alle impostazioni dalla chiave.

Per inviare un segnale ai mirror effettivamente, è necessario aggiungere le righe ./signal <site> <username> al termine di del proprio rsync. Quindi, appena completato il proprio mirroring con il sito di origine, inizia il push verso i propri destinatari.

È possibile mettere questi comandi sia all'inizio che al termine del proprio script ftpsync.conf oppure, se più conveniente, in un nuovo script che viene avviato da anonftpsync, per esempio:

#!/bin/sh

# This script is called by websync to signal the downstream mirrors.

./signal some.other.site archvsync
./signal and.another.site othersiteaccount

In caso di problemi, contatteci.