FreeBSD Ports: condivisione distfiles

Al fine di ottimizzare al massimo i tempi di installazione dei pacchetti scaricati tramite ports e minimizzare i trasferimenti da web, è possibile realizzare una struttura condivisa di gestione della directory distfiles dei ports di FreeBSD.

La directory, normalmente situata in /usr/ports/distfiles, contiene infatti tutti i pacchetti scaricati da internet per effettuare l’installazione dei ports.

La logica alla base dell’ottimizzazione è quella di creare una singola macchina repository che condivida a tutte le altre macchine la directory distfiles. La tecnologia “nativa” per la condivisione delle directory via rete sotto FreeBSD/Unix è l’NFS. La sua configurazione è piuttosto semplice, ed essendo parte del base-system, non richiede alcuna installazione di software aggiuntivo.

Condivisione lato Repository

Per condividere la cartella sulla macchina di Repository sarà sufficiente attivare il servizio nfsserver ed esportare la directory.

Il primo step da effettuare è quello di configurare il file export indicando quali directory si voglia esportare ed a quali server. Il file è situato in /etc/export e la sua sintassi è piuttosto basilare: ogni riga contiene il path da esportare e l’indirizzo IP (o gli indirizzi IP) che potranno accederci. Sarà possibile inoltre specificare alcuni parametri aggiuntivi quali -ro per indicare che l’export debba essere effettuato “read-only”. Nel nostro caso, però, non è così:

/usr/ports/distfiles 192.168.1.10 192.168.1.24 192.168.1.45

A questo punto per attivare il servizio nfsserver bisogna modificare il file /etc/rc.conf aggiungendo le seguenti righe:

rpcbind_enable="YES"
nfs_server_enable="YES"
mountd_flags="-r"

A questo punto per avviare manualmente il server (che comunque si avvierà al reboot della macchina) è sufficiente eseguire:

/etc/rc.d/rpcbind start
/etc/rc.d/nfsserver start
/etc/rc.d/nfsd start

Per verificare di aver effettuato tutto correttamente a questo punto si può eseguire il comando showmount -e che elencherà tutti i filesystem condivisi sull’attuale macchina (nonché chi possa accedere alle condivisioni).

Accesso al Repository

L’accesso al Repository lato client è ancora più semplice: sarà infatti sufficiente attivare il client NFS e provvedere al mount del volume remoto. Per attivare il client NFS bisogna modificare il file /etc/rc.conf aggiungendo le seguenti righe:

nfs_client_enable="YES"

A questo punto per avviare manualmente il client (che comunque si avvierà al reboot della macchina) è sufficiente eseguire:

/etc/rc.d/nfsclient start

Bene, a questo punto è possibile effettuare il mount del volume remoto. Per far ciò la cosa migliore è rinominare l’eventuale vecchia distfiles già presente sul client ed effettuare il mount.

mv /usr/ports/distfiles /usr/ports/distfiles.old
mount <server>:/usr/ports/distfiles /usr/ports/distfiles

Per essere sicuri che il volume remoto venga automaticamente rimontato al boot sarà sufficiente modificare il file /etc/fstab aggiungendo una riga relativa al mount remoto:

<server>:/usr/ports/distfiles /usr/ports/distfiles nfs rw 0 0

One thought on “FreeBSD Ports: condivisione distfiles”

  1. Nota importante: per poter anche scrivere nella distfile è necessario che l’export includa un mapping dell’utente root remoto ad un utente valido sulla macchina di repository che possa scrivere nella corrispettiva distfile.

    Non so quanto sia salubre ma la mia soluzione è stata di aggiungere

    -maproot=root

    dentro l’export.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

This site uses Akismet to reduce spam. Learn how your comment data is processed.