FreeBSD Ports: installazioni tramite proxy http

Al fine di superare eventuali blocchi topologici, o semplicemente per ottimizzare l’utilizzo della connessione ad internet è possibile specificare le impostazioni relative ad un server Proxy HTTP ed FTP da usarsi durante le operazioni di compilazione dei Ports.

La cosa è piuttosto semplice: i ports scaricano ogni pacchetto utilizzando l’utility di sistema fetch la quale referenzia due variabili di ambiente per leggere le impostazioni relative ai proxy:

  • HTTP_PROXY
  • FTP_PROXY

Per far si, quindi, che i ports utilizzino il proxy in fase di installazione del software basterà modificare il file RC del proprio profilo (ad esempio .cshrc per l’utente root) aggiungendo le seguenti righe:

setenv HTTP_PROXY http://192.168.1.200:3128/
setenv FTP_PROXY http://192.168.1.200:3128/

Al fine di risolvere alcuni problemi di compatibilità con alcuni software di scuola linux (ad esempio wget) può essere utile specificare le stesse variabili anche in lower-case:

setenv http_proxy http://192.168.1.200:3128/
setenv ftp_proxy http://192.168.1.200:3128/

Da notare, inoltre, che è molto importante specificare le impostazioni del proxy con la sintassi http://utente:password@host:porta/ al fine di specificare che il proxy che si sta utilizzando è di tipo HTTP (ad esempio nel caso di SQUID). Discorso diverso invece qualora si stia utilizzando un ftp-gateway, in tal caso l’impostazione del FTP_PROXY dovrà seguire l’apposita sintassi.

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