No, I will not fix your pc.
[Detto anonimo e largamente condiviso]
Aggiornamento / Update (05/02/2012):
Per il servizio nfsd in kernelspace, guardate i commenti di questo stesso articolo.
Suggerisco di usare il servizio nfsd in kernelspace, dato che supporta il lock dei file.
For nfsd kernel space, look at the comments of this article.
I recommend to use nfs kernel space since it supports file locking.
All thanks go to Bert.
Avevo tentato precedentemente di installare il supporto nfs sul mio vecchio (v1) nas 2Big Network della LaCie ma avevo desistito per la mancanza del modulo kernel nfsd, che permette di abilitare nfs server in kernelspace.
Di recente, dopo una richiesta di aiuto da parte di un navigatore, ho riaffrontato il problema trovando una soluzione: nsf in spazio utente. Ok storco il naso anche io per l’enormità di quello che ho appena detto..
Infatti ci sono grossi handicap per nfs userspace: lo sviluppo del codice è stato completamente abbandonato (l’ultima versione è la 0.9.22 e risale al 05/01/2009), ma il problema più grave che non vi è alcun supporto per il lock dei file.
Per installare il supporto per nfs v3 sul nas c’è bisogno dei demoni unfsd e portmap, il primo è nfs stesso il secondo è un servizio ONC RPC, in esecuzione su una macchina collegata in rete, che fornisce altri servizi ONC RPC (Remote Procedure Call). (Chi è abituato a programmare sa di che sto parlando)
Per farla breve il pacchetto unfs3 dipende dal pacchetto portmap. Ai fini pratici significa che è richiesto l’installazione anche del servizio portmap per avere nfs funzionante.
Significa anche che ho dovuto scrivere due script per initng per avviare/arrestare correttamente i due demoni.
File portmap.i
:
# NAME: portmap # DESCRIPTION: DARPA port to RPC program number mapper # WWW: # exec daemon = /sbin/portmap -d ${PORTMAP_OPTS}; daemon portmap { need = bootmisc virtual/net; provide = virtual/portmap; pid_file = /var/run/portmap.pid; forks; env PORTMAP_OPTS=; env_file = /etc/portmap.conf; exec daemon = /sbin/portmap; }
File unfs3.i
:
# NAME: unfs3 # DESCRIPTION: starts user-space NFSv3 server. # UNFS3 is a user-space implementation of the NFSv3 server specification. # It provides a daemon for the MOUNT and NFS protocols, # which are used by NFS clients for accessing files on the server. # Unlike nfs-user-server, unfs3 is capable of handling files larger than 2GB, # but there is currently no support for file locking. # WWW: daemon unfs3 { need = initial virtual/portmap virtual/net; env PID_FILE = /var/run/unfsd.pid; env_file = /etc/unfs3.conf; pid_file = ${PID_FILE}; require_network; forks; exec daemon = /usr/sbin/unfsd -i ${PID_FILE} $DAEMON_OPTS; daemon_stops_badly; }
Installazione di nfs3 server
Come premessa generale si presuppone che:
- abbiate già effettuato l’hack del vostro nas (vedi articolo),
- installato ssh e soprattutto con esso le librerie tcp-wrappers,
- avete un account di root sul vostro nas (tutte operazioni documentate nell’articolo già citato)
- e sopratutto, una buona padronanza della bash e dei sistemi linux.
Per installare nfs server dovete scaricare questi due archivi:
portmap_6.0-9_armel.tar.gz
(10,6Kb)unfs3_0.9.21_armel.tar.gz
(38,2Kb)
I pacchetti sono stati scaricati della distro debian lenny e sono compilati per armtel, da entrambi gli archivi ho eliminato i man page e i doc al fine di recuperare tutto lo spazio possibile.
Ho spostato il file di configurazione di portmap nella cartella /etc
e l’ho rinominato in portmap.conf
.
Il demone unfsd ha in file di configurazione proprio (da non confondere con il file /etc/exports
) che ho rinominato in unfs3.conf
e inserito anch’esso nella cartella /etc
.
Queste modifiche erano dovute dato che l’architettura del nas differisce dall’architettura di un sistema operativo debian. Gli script per initng riflettono queste modifiche per cui se cambiate posto a quei file dovrete modificare di conseguenza gli script di avvio dei demoni.
Copiate l’archivio nella vostra cartella condivisa del nas.
# cd /home/share/nome_cartella_della_vostra_condivisione # tar -xvzf portmap_6.0-9_armel.tar.gz -C / # tar -xvzf unfs3_0.9.21_armel.tar.gz -C / # rm portmap_6.0-9_armel.tar.gz # rm unfs3_0.9.21_armel.tar.gz # cd /etc/initng/runlevel/ # echo portmap >> default.runlevel # echo unfs3 >> default.runlevel
Adesso dovete configurare il file exports
che indica al demone nfs quali cartelle deve condividere nella vostra rete locale:
# vi /etc/exports
Vi ricordo che i comandi per modificare un file con l’editor vi sono “i” per inserire nuovo testo e “ESC”+“:wq” per salvare e uscire, “ESC”+“:q!” per forzare l’uscita dal file senza salvare le modifiche apportate.
La configurazione del file in questione la lascio alla vostra esperienza personale, se state installando nfs sul nas si presuppone che sappiate quello che state facendo. Vi informo tuttavia che questa versione di nfs (unfs3) non supporta nfs v4 ne nfs v2, inoltre non supporta nemmeno alcuni tag di configurazione come sync
.
Non ho voluto implementare il supporto per nfs v2 perché assolutamente obsoleto, infatti un client nfs presuppone che, se non diversamente specificato, il protocollo, che deve usare per condividere in locale una cartella esportata da una macchina remota, sia nfs v3. Per finire nfs v2 non supporta file di dimensione superiore a i 2Gb.
Una volta configurato il file exports potete riavviare la macchina o se preferite avviare manualmente i demoni con i comandi:
# ngc -u portmap # ngc -u unfs3
Per maggiori informazioni su ngc, digitate:
# ngc -h
E dire che questo nas non lo uso neanche più…
Aggiornamento.
Ho modificato nuovamente lo script unfs3.i
inserendo la riga require_network
a causa dell’avvio immediato del demone unfsd da parte di initng (prima ancora che l’interfaccia di rete lan fosse attiva). Il demone unfsd non pubblicava la socket sull’indirizzo di rete locale impedendo l’accesso da remoto.
La clausola require_network
impone ad initng di attendere che l’interfaccia di rete della lan sia attiva prima di avviare il server unfsd: problema risolto.
Rsync
Script di avvio per rsync. (Il programma è già incluso nel nas)
File rsyncd.i
:
#!/sbin/itype # Short-Description: fast remote file copy program daemon # Description: rsync is a program that allows files to be copied to and # from remote machines in much the same way as rcp. # This provides rsyncd daemon functionality. daemon rsyncd { need = bootmisc virtual/net; require_network; env RSYNC_CONFIG_FILE=/etc/rsyncd.conf; env_file = ${RSYNC_CONFIG_FILE}; exec daemon = /usr/bin/rsync --daemon --no-detach --config ${RSYNC_CONFIG_FILE}; daemon_stops_badly; }
Per maggiori informazioni su rsync vedere nei commenti di questo stesso articolo.