Unison

From ortiche
Jump to navigation Jump to search

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.