Unison
Replicazione con unison su chroot
Appunti su come è realizzata la replicazione generica tra macchine a foglia lunga.
La replicazione sfrutta unison chrootato in una opportuna jail, all'interno della quale risiedono anche le cose da replicare. In ricezione, unison viene invocato da scponly impostato come shell dell'utente designato per la replicazione.
Avvio della replicazione
HOME=/ chroot -u $USER $BASEROOT /usr/pkg/bin/unison -sshcmd '/usr/pkg/bin/ssh' -force /$URL/ -root /$URL/ -root ssh://$USER@$IP///$URL/
Dove:
- $BASEROOT è il path alla jail nel filesystem (e.g. /var/www per il www).
- $IP è l'IP dell'altra macchina.
- $URL è il percorso da replicare, relativamente alla jail (e.g. vhosts/fuffa.antani.org per il www).
- $USER è l'utente designato per la replicazione.
Costruzione della jail chroot
Setup funzionante trovato più o meno empiricamente. Nota: omettere cose, metterle nel posto sbagliato o inserirne di superflue può creare casini allucinanti, apparentemente inspiegabili e praticamente non diagnosticabili quando si lanciano ssh e unison nella jail.
dev: pochi device indispensabili,
console constty drum klog kmem ksyms mem null random stderr stdin stdout tty urandom zero
etc: master.passwd (e figli, creati con pwd_mkdb) più services,
master.passwd passwd pwd.db services spwd.db
master.passwd contiene solo la riga dell'utente designato per la replicazione. La home dev'essere settata a /, cioè la jail stessa. La shell deve essere scponly compilato in modo da avviare unison.
usr/lib:
libc.so.12 libcrypt.so.0 libcrypto.so.3 libm.so.0 libm387.so.0 libskey.so.1 libutil.so.7
usr/libexec:
ld.elf_so
usr/pkg/bin:
ssh unison
usr/pkg/lib:
libz.so.1
.ssh con chiavi e authorized_keys opportuni.