Table of Contents
Ora che la rete è funzionante è possibile condividere file e directory attraverso la rete utilizzando il Network File System (NFS). Dal punto di vista della condivisione, il computer che dà accesso ai suoi file e directory è chiamato server, e il computer che utilizza questi file e directory è il client. Un computer può essere client e server allo stesso tempo.
Un kernel deve essere compilato con le opzioni appropriate per il client e il server (le opzioni sono semplici da trovare nel file di configurazione del kernel. Vedere Section 23.1, “A walk through the kernel configuration” per maggiori informazioni sulle opzioni del kernel correlate ad NFS.
Il server deve abilitare i demoni
rpcbind,
mountd
lockd
statd
e
nfs_server
in
/etc/rc.conf
:
rpcbind=yes mountd=yes nfs_server=yes lockd=yes statd=yes
Il client deve abilitare i demoni
rpcbind,
lockd
statd
e
nfs_client
in
/etc/rc.conf
:
rpcbind=yes nfs_client=yes lockd=yes statd=yes
Il server deve elencare le directory esportate in
/etc/exports
quindi eseguire il
comando
kill -HUP `cat /var/run/mountd.pid
(hup mountd può funzionare
pure!).
Un host client può accedere a una directory remota attraversoA clien NFS se:
L'host server esporta la directory sul client. L'elenco dei filesystem che un server NFS esporta può essere controllato con il comando showmount -e, vedere showmount(8):
#
showmount -e 192.168.1.2
Exports list on 192.168.1.2: /home host1 host2 host3
L'host client monta la directory remota con il comando mount 192.168.1.2:/home /home
Il comando mount a una ricca gamma di opzioni per le directory remote, le quali non sono molto intuitive (come minimo).
Lo scenario qui descritto è il seguente: cinque macchine client (cli1, ..., cli5) condividono qualche directory sul server (buzz.toys.org). Alcune directory esportate dal server sono riservate per un client specifico, le altre sono comuni per tutte le macchine client. Tutti i client si avviano dal server e devono montare le directory.
Le directory esportate dal server sono:
/export/cli?/root
le cinque directory radice per le cinque macchine client. Ogni client ha la sua directory radice.
/export/cli?/swap
Cinque directory di scambio per le cinque macchine di scambio.
/export/common/usr
la directory /usr
; comune per tutti gli host
client.
/usr/src
Directory /usr/src
comune per tutte
le macchine client.
I seguenti filesystem esistono sul server
/dev/ra0a on / /dev/ra0f on /usr /dev/ra1a on /usr/src /dev/ra2a on /export
Ogni client necessita dei seguenti file system
buzz:/export/cli?/root on / buzz:/export/common/usr on /usr buzz:/usr/src on /usr/src
La configurazione del server è la seguente:
# /etc/exports /usr/src -network 192.168.1.0 -mask 255.255.255.0 /export -alldirs -maproot=root -network 192.168.1.0 -mask 255.255.255.0
Nelle macchine client /etc/fstab
contiene:
buzz:/export/cliX
/root / nfs rw
buzz:/export/common/usr /usr nfs ro,nodev,nosuid
buzz:/usr/src /usr/src nfs rw,nodev,nosuid
Ogni macchina client ha il suo numero sostituito dal carattere
“X
” nella prima riga
dell'esempio precedente.
/net
con amd(8)
Il problema col mount di NFS (e altri) è che generalmente
bisogna essere root per farlo, cosa che può essere piuttosto
sconveniente per gli utenti. Utilizzando amd(8) è
possibile mettere a punto una certa directory (Comunemente
/net
), sotto la quale è possibile
effettuare ogni NFS-mount come utente normale, finchè
il filesystem da accedere è effettivamente esportato dal
server NFS.
Per controllare se un certo server esporta un filesystem, e
quale, usare il comando showmont con lo
switch -e
(export).
$
showmount -e wuarchive.wustl.edu
Exports list on wuarchive.wustl.edu: /export/home onc.wustl.edu /export/local onc.wustl.edu /export/adm/log onc.wustl.edu /usr onc.wustl.edu / onc.wustl.edu /archive Everyone
Se si vuole quindi montare una directory per accedere ad ogni
cosa al suo interno (per esempio
/archive/systems/unix/NetBSD
), basta
andare in quella directory:
$
cd /net/wuarchive.wustl.edu/archive/systems/unix/NetBSD
Il filesystem verrà montato (da amd), e si potrà accedere ad ogni file semplicemente come se la directory fosse montata dal superutente sul sistema locale.
Si può mettere a punto directory del tipo di /net
con i seguenti passi (inclusa
la configurazione di base per amd):
in /etc/rc.conf
, impostare le seguenti
variabili:
amd=yes
mkdir /amd
mkdir /net
Partendo da
/usr/share/examples/amd/amd.conf
,
mettere quanto segue in /etc/amd.conf
:
[ /net ] map_name = /etc/amd/net map_type = file
Partendo da /usr/share/examples/amd/net
come esempio,
mettere quanto segue in /etc/amd/net
:
/defaults type:=host;rhost:=${key};fs:=${autodir}/${rhost}/root * host==${key};type:=link;fs:=/ \ host!=${key};opts:=ro,soft,intr,nodev,nosuid,noconn
Fare il reboot, o (ri)avviare amd a mano:
#
sh /etc/rc.d/amd restart
Non è usuale trovare che l'orologio di sistema sia sbagliato, spesso di diversi minuti: per qualche strana ragione sembra che gli orologi dei computer non siano molto accurati. Il problema si complica se si stanno amministrano molti host in rete: tenere gli orologi sincronizzati può facilmente diventare un incubo. Per risolvere questo problema, il protocollo NTP (versione 3) viene in nostro supporto: questo protocollo può essere usato per sincronizzare gli orologi di una rete di stazioni di lavoro usando uno o più server NTP
Grazie al protocollo NTP è possibile agiustare l'orologio di una singola stazione di lavoro ma anche sincronizare un'intera rete. Il protocollo NTP è abbastanza complesso, definendo una struttura gerarchica master-slave (padrone-schiavo, NdT) di server divisi per strati: la cima della gerarchia è occupata dai server dello strato 1, connessi ad un orologio esterno (es. un orologio radio) per garantire un alto livello di accuratezza. Scendendo, i server dello strato 2 sincronizzano i loro orologi con lo strato 1, e così via. L'accuratezza diminuisce man mano si procede verso i livelli più bassi. Questa struttura gerarchica previene le congestioni che potrebbero essere causate avendo tutti gli host che si riferiscono agli stessi (pochi) server dello strato 1. Se, per esempio, si vuole sincronizzare una rete, non bisogna collegare tutti gli host allo stesso server pubblico dello strato 1. Invece, si crea un server locale da collegare al server principale e i rimanenti host sincronizzano i loro orologi con il server locale.
Fortunatamente, per usare gli strumenti NTP non è necessario comprendere i dettagli del protocollo e la sua implementazione (se si è interessati, riferirsi al RFC 1305) e si bisogna solo sapere come configurare e avviare qualche programma. il sistema di base di NetBSD contiene già gli strumenti necessari per utilizzare questo protocollo (e altri protocolli relativi al tempo, come vedremo), derivati dall'implementazione xntp. Questa sezione descrive un metodo semplice per avere sempre un orario di sistema corretto.
Prima, è necessario trovare l'indirizzo dei server NTP pubblici da usare come riferimenti; un elenco dettagliato può essere trovato su http://ntp.isc.org/bin/view/Servers/WebHome. Ad esempio, per l'Italia possono essere utilizzati i due server di strato 1 ntp1.ien.it e ntp2.ien.it.
Successivamente, si agiusta l'orario di sistema dando il seguente comando da root:
#
ntpdate -b
ntp1.ien.it
ntp2.ien.it
(sostituire i nomi dei server nell'esempio con quelli che si
stanno effettivamente utilizzando).
L'opzione -b
dice a ntpdate
di impostare l'orario di sistema con la chiamata di sistema
settimeofday, invece di rallentarlo con adjtime (il default).
Questa opzione è suggerita quando la differenza fra
l'orario di sistema e l'orario corretto è considerevole.
Come si è visto, ntpdate non è difficile da usare.
Il prossimo passo è avviarlo automaticamente, al fine di
avere sempre un orario di sistema corretto.
Se si ha una connessione permanente ad Internet, si può
avviare il programma al boot con la seguente linea di
/etc/rc.conf
:
ntpdate=YES ntpdate_hosts="ntp1.ien.it
"
Il nome del server NTP da usare è specificato nella
variabile ntpdate_hosts
; se si lascia vuota
questa voce, lo script di boot proverà ad estrarre il
nome dal file /etc/ntp.conf
.
Se non si ha una connessione permenante ad Internet (es. si
ha una connessione con modem dial-up attraverso un ISP) si
può avviare ntpdate dallo script ip-up
,
come spiegato in Chapter 23, Setting up TCP/IP on NetBSD in practice.
In questo caso aggiungere la seguente linea allo script
ip-up
:
/usr/sbin/ntpdate -s -b ntp1.ien.it
(il percorso è obbligatorio o lo script probabilmente non
troverà l'eseguibile).
L'opzione -s
devia l'output di login dallo
standard output (questo è il default) alla funzione
syslog(3) di sistema, ciò significa che i messaggi
da ntpdate si concluderanno generalmente in
/var/log/messages
.
Oltre ad ntpdate ci sono altri utili comandi NTP. É anche
possibile girare uno degli host locali in un server NTP per gli
host rimanenti nella rete. Il server locale sincronizzerà
il suo orario con un server pubblico.
Per questo tipo di configurazione si deve usare il demone
ntpd e creare il file di configurazione
/etc/ntp.conf
. Per esempio:
serverntp1.ien.it
serverntp2.ien.it
ntpd può anche essere avviato da rc.conf
,
usando le opzioni rilevanti:
ntpd=YES
NTP non è la sola opzione se si vuole sincronizzare la rete: si può anche usare il domeno timed o allo stesso modo il comando rdate(8). timed fu sviluppato per 4.3BSD.
Anche timed usa una gerarchia master-slave: quando avviato su un
host, timed chiede l'orario di rete a un master e aggiusta di
conseguenza l'orario locale. Si può usare una struttura
mista, con entrambe timed e ntpd. Uno degli host locali ottiene
l'orario corretto da un server NTP pubblico ed è il master
timed per i rimanenti host della rete, i quali diventano i suoi
client e sincronizzano i loro orologgi usando timed. Questo vuol
dire che il server locale deve eseguire entrambe NTP e timed;
bisogna stare attenti che questi non interferiscano con gli altri
(timed dev'essere avviato con l'opzione -F hostname
così da non provare ad aggiustare l'orologio locale).
Infine, rdate(8) può essere usato per sincronizzare
ancora una volta un dato host, in modo molto simile a ntpdate(8).
L'host in questione deve avere il servizio "tempo" (porta 37)
abilitato in /etc/inetd.conf
.