Lezione n.9 del 07/12/2007 ========================== Argomenti --------- * Network File System (NFS) - architettura - lato client . opzioni di montaggio - lato server . invocazione server . file /etc/exports . vincoli sulle condivisioni * Thread POSIX - Emacs come ambiente di sviluppo Riferimenti ::::::::::: * Dispensa 'Amministrazione di un Sistema UNIX in Rete', Capitolo 6 * Dispensa 'Supplementi per il Sistema FreeBSD ed Integrazioni', Capitolo 2 * The Linux Development Platform, Capitolo 2 http://www.informit.com/store/product.aspx?isbn=0130091154 * Emacs Manual, Sezioni 32.1 e 32.2 http://www.gnu.org/software/emacs/manual/html_node/emacs/Building.html * PThreads Primer, Capitolo 6 http://www.cs.umu.se/kurser/TDBC64/VT03/pthreads/pthread-primer.pdf Esercizio --------- Prima parte ........... Dividersi in gruppi di 2 computer (denominati A e B) * Sul computer A: - creare un utente 'osora' - modificare il file /etc/exports in modo tale che A esporti, solo in lettura, la cartella /mfsusers/osor1/prova alla macchina B mappando gli utenti root remoti sull'utente root locale - creare da utente 'osor' la directory /mfsusers/osora/prova e copiarci dentro file a piacere * Sul computer B: - creare un utente 'osorb' - montare la directory /mfsusers/osora/prova esportata da A su una directory di B (ad esempio su /tmp/prova_nfs) - aggiungere una riga ad fstab che automatizzi il punto precedente, in modo che il mount NON venga fatto automaticamente al boot - verificare che si possa leggere il contenuto del filesystem montato e che non si possano effettuare modifiche al suo contenuto - smontare le directory montate in precedenza * Computer A: - esportare /mfsusers/osor1/prova in lettura/scrittura - verificare come si comporta il sistema a seconda che l'utente pluto di B sia/non sia mappato sull'utente pippo di A Seconda parte ............. * pthreads-1a-simple.c - analizzare l'output - cambiare pthreads_exit(NULL) in return(0) . cosa succede? - aggiungere il passaggio di un parametro ai thread (passare a tutti lo stesso valore) * pthreads-1b-simple.c - cosa cambia rispetto al precedente? - far restituire un valore non nullo ai thread * pthreads-2a-args.c - analizzare l'output - modificare in modo da ottenere un funzionamento corretto * pthreads-3a-mutex.c - analizzare l'output - modificare in modo da ottenere un funzionamento corretto * pthreads-4a-barrier.c - modificare in modo da ottenere la sincronizzazione desiderata . tutti i thread si bloccano alla barriera aspettando l'arrivo di tutti gli altri . tutti i thread proseguono l'esecuzione quando l'ultimo ha raggiunto la barriera - suggerimento: usare una variabile condition Soluzione --------- Prima parte ........... * (Computer A) - adduser -s [...] - da utente root aggiungere al file /etc/exports la seguente riga /tmp/pippo/prova -ro,maproot=0 ip_B dove ip_B e` l'indirizzo IP del computer B e notificare il server del cambiamento kill -HUP `cat /var/run/mountd.pid` * (Computer B) - adduser -s [...] - mount -t nfs ip_A:/tmp/pippo/prova /tmp/pluto/prova_nfs dove ip_A e` l'indirizzo IP del computer A - aggiungere al file /etc/fstab la seguente riga ip_A:/tmp/pippo/prova /tmp/pluto/prova_nfs rw,noauto 0 0 - cd /tmp/pluto/prova_nfs ls -l rm * - umount /tmp/pluto/prova_nfs * (Computer A) - da utente root aggiungere al file /etc/exports la seguente riga /tmp/pippo/prova -rw ip_B dove ip_B e` l'indirizzo IP del computer B e notificare il server del cambiamento kill -HUP `cat /var/run/mountd.pid` - assegnare all'utente 'pluto' del computer B lo stesso UID dell'utente pippo di A montare nella macchina B il filesystem esportato da A provare a modificare qualche file contenuto dentro il filesystem montato da utente 'pluto' (in questo caso 'pluto' e` in grado di operare modifiche sul filesystem montato) smontare il filesystem montato - assegnare all'utente 'pluto del computer B un UID diverso rispetto a quello dell'utente 'pippo' del computer A (e` necessario fare logout e login) montare nella macchina B il filesystem esportato da A provare a modificare qualche files contenuto dentro il filesystem montato da utente pluto (in questo caso 'pluto' non e` in grado di operare modifiche sul filesystem montato)