View  Edit  Attributes  History  Attach  Print  Search

ACCUEIL | ARDUINO > S'INSTALLER > DEBUTER > APPROFONDIR | PROCESSING | MECATRONIQUE | MATERIEL | OUTILS | TESTS | Plus...|
Python > Shell > ATELIERS Python + Qt > PyQt apps > PyQt+Arduino | Mes Robots | RepRap | Mes lib'Arduino | Mes shields Arduino | Mes distros | Les Mini-PC |
ATELIERS ARDUINO| VIDEOS | COMPRENDRE | REFERENCES | CODER | TECHNIQUE | GNU/LINUX | LIENS | Rien à voir |

Ubuntu : Procédure : Mise en place d'un partage de fichiers NFS entre 2 PC sous Ubuntu via un réseau wifi

Par X. HINAULT – 09 /04/2011

Procédure testée et validée sous Ubuntu LTS 10.04 côté PC fixe et côté PC embarqué - OK en Juin 2011

Introduction

  • La procédure décrite ici est utilisée dans le cas d'un PC embarqué (netbook ou eeePC) sous Ubuntu auquel on accède via wifi par accès au bureau distant par VNC sur le port 5900.
  • Très vite, on va avoir besoin d'accéder depuis le PC local aux fichiers du PC embarqué : ceci nécessite un système de partage de fichier sur le réseau entre le PC embarqué (qui sera le serveur) et le PC local (qui sera le client).
  • Sur cette page, je détaille la procédure opérationnelle qui permet la mise en place de ce partage de fichier sous Ubuntu 10.04

Sources utiles :

Le réseau utilisé

On utilise un réseau wifi entre 2 PC via routeur wifi DHCP (attribution automatique des adresses IP). Dans notre cas, les caractéristiques du réseau sont :

  • numéro réseau local wifi : 192.168.0.
  • sous-masque réseau : 255.255.255.0
  • l'adresse IP du serveur embarqué est 192.168.0.3
  • l'adresse IP du client permettant d'accéder au serveur est 192.168.0.4

Il est nécessaire d'adapter la procédure décrite ici à votre propre situation.

Procédure Côté serveur

Le Serveur est le pc embarqué sur lequel on veut accéder aux fichiers à distance...

Dans notre cas, l'adresse IP du serveur sera 192.168.0.3

Installation paquets nécessaires sur le serveur

  • Installation dans le gestionnaire de paquets Synaptic des paquets :
    • nfs-kernel-server
    • et nfs-common (est installé en même temps que nfs-kernel-server)

Ce qui donne en ligne de commande :

$ sudo apt-get install nfs-kernel-server nfs-common

Vérification ports

  • Vérification du fichier /etc/default/portmap
$ cat /etc/default/portmap

Paramétrage du dossier partagé

  • On va partager ici le répertoire /home/xavier/ du PC embarqué (serveur)
  • Edition du fichier /etc/exports
$ gksudo gedit /etc/exports

Ajouter dans le fichier exports :

# pour avoir tous les droits root :
/home/xavier 192.168.0.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check) # autorise accès par client 192.168.0.x en lecture / écriture

Autres exemples à titre informatif :

# /home/hinault/mon_nfs 192.168.1.1/24(rw,sync,no_root_squash) # autorise en lecture/écriture les adresses 192.168.1.1-24
#/home/hinault/mon_nfs 192.168.1.13 (rw,sync,no_root_squash) # autorise en lecture/écriture l'adresse 192.168.1.13
#/home/xavier 192.168.1.0/255.255.255.0(ro,sync,all_squash,no_subtree_check) # autorise accès par client 192.168.1.x en lecture seule
#/home/xavier 192.168.1.0/255.255.255.0(rw,sync,all_squash,no_subtree_check) # autorise accès par client 192.168.1.x en lecture / écriture
  • ATTENTION à l'adresse du réseau utilisé +++ : 192.168.0.0 et notamment le numéro du réseau... !
  • IL FAUT IMPERATIVEMENT QUE LA RACINE DU RESEAU UTILISEE COTE CLIENT SOIT DECLAREE DANS CE FICHIER. Ainsi, 192.168.3.0 si réseau 192.168.3.1-255
  • Si on utilise 2 réseaux différents (1 wifi et 1 ethernet par exemple), on peut déclarer successivement les 2.

On peut aussi faire : /home/xavier 192.168.1.0/240/24 (rw,sync,no_subtree_check) # autorise accès par client 192.168.1.x en lecture / écriture

Autre point important : « par defaut, si, au niveau du serveur on ne met que l'option rw, lors d'une requete de l'utilisateur root d'un serveur client, le serveur nfs change l'UID et le GID root en nobody (c'est le "root squashing"). on a donc pas les droit d'acces root sur le dossier importé par nfs. Heureusement il existe une option no_root_squash pour éviter cela. Donc la solution est d'ajouter l'option "no_root_squash" coté serveur ("master" pour moi). On a donc dans le fichier /etc/exports : /home slave1(rw,no_root_squash) slave2(rw,no_root_squash) ... »

pour que les modifs soient prises en compte, on fait :

$ sudo exportfs -a

ou

$ sudo exportfs -ra
  • -a : exporte tous les répertoires
  • -r : ré-exporte tous les répertoires

Configuration autorisations dans hosts.deny

On ouvre hosts.deny et on interdit tout par défaut

$ gksudo gedit /etc/hosts.deny

Ajouter les lignes


#pour partage NFS
# Tout interdire sur  portmap, nfsd et mountd
# les autoriser par hosts.allow
portmap:ALL
lockd : ALL
mountd:ALL  
rquotad : ALL
statd : ALL
#nfsd:ALL
 

Configuration autorisations dans hosts.allow

On ouvre hosts.allow et on autorise les adresses voulues :

$ gksudo gedit /etc/hosts.allow

ON ajoute les lignes :

#partage NFS
#Autoriser ces clients à se connecter avec services portmap, nfsd, moundt

portmap:ALL
lockd:192.168.
mountd:192.168.
rquotad:192.168.
statd:192.168.
#nfsd:192.168.

On relance NFS

$ sudo /etc/init.d/nfs-kernel-server reload

ou mieux, on redémarre le service :

$ sudo /etc/init.d/nfs-kernel-server restart

On obtient quelque chose comme çà :

xavier@xavier-laptop:~$ sudo /etc/init.d/nfs-kernel-server restart
[sudo] password for xavier:
 * Stopping NFS kernel daemon                                            [ OK ]
 * Unexporting directories for NFS kernel daemon...                      [ OK ]
 * Exporting directories for NFS kernel daemon...                        [ OK ]
 * Starting NFS kernel daemon                                            [ OK ]

Vérification

$ rpcinfo -p

Ce qui donne quelque chose comme çà :

xavier@xavier-laptop:~$ rpcinfo -p
   program no_version protocole  no_port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  54229  status
    100024    1   tcp  48158  status
    100021    1   udp  53570  nlockmgr
    100021    3   udp  53570  nlockmgr
    100021    4   udp  53570  nlockmgr
    100021    1   tcp  59175  nlockmgr
    100021    3   tcp  59175  nlockmgr
    100021    4   tcp  59175  nlockmgr
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100005    1   udp  54077  mountd
    100005    1   tcp  39749  mountd
    100005    2   udp  54077  mountd
    100005    2   tcp  39749  mountd
    100005    3   udp  54077  mountd
    100005    3   tcp  39749  mountd

Si problème, redémarrer le serveur NFS :

$ sudo /etc/init.d/nfs-kernel-server start

Récupérer ip du serveur

On note l'ip du serveur dont on va avoir besoin pour le montage depuis le client :

$ ifconfig

On obtient dans mon cas : 192.168.0.3

Désactiver le pare-feu (au moins la première fois)

$ sudo ufw disable

Sinon, il y a aussi une procédure pour fixer les ports utilisés et utiliser un parefeu en même temps... Mais si on n'est pas connecté à internet, on peut à priori monter comme çà, sans pare-feu.... au moins mettre un wep quand même non ?

=> C'est terminé sur le PC "serveur NFS"....

Paramétrer routeur

  • à priori, il faut ouvrir les port 111 et 2049 sur le routeur en mode UDP et TCP

Voir ici notamment : GnuLinuxOuvrirPortPCetRouteur

Sur le Client

Le client est le PC depuis lequel on accède aux fichiers du serveur

Installation des paquets utiles

  • Installer dans synaptic :
    • nfs-common
    • (et nfs-server tant qu'on y est....)

Création d'un point de montage sur le client

$ sudo mkdir /mnt/nfs

Montage du serveur (embarqué) sur le client (fixe)

On utilise ici l'adresse du serveur : 192.168.0.3

$ sudo mount -t nfs 192.168.0.3:/home/xavier/ /mnt/nfs

ou

$ sudo mount -t nfs -o rw 192.168.0.3:/home/xavier/ /mnt/nfs

Voilà, si pas de message d'erreur, c'est bon... Ne pas oublier le / avant le nom du chemin de montage après l'adresse...

Test

Saisir dans la console pour voir si le montage nfs est bien en place :

$ mount |grep nfs

ce qui donne

nfsd on /proc/fs/nfsd type nfsd (rw)
192.168.0.03:/home/xavier/ on /mnt/nfs type nfs (rw,addr=192.168.0.03)

Aller dans répertoire /mnt/nfs : on doit voir le contenu du bureau du pc embarqué !

Bon à savoir

Si on veut démonter le partage NFS du côté client, dans un terminal on fait :

$ sudo umount /mnt/nfs

Si problème : désactiver le pare-feu (au moins la première fois)

$ sudo ufw disable

Pour se simplifier la vie : un petit script tout prêt !

  • Pour éviter les "prises de tête", j'ai écrit un petit script tout bête qui permet de monter rapidement le partage NFS sur le poste client à partir de 2 ou 3 questions simples.

#!/bin/bash
# script montage NFS
# par XH - Aout 2011

echo "--- script de Montage NFS côté client ---" $disque

read -p "Quelle est l'adresse du serveur NFS (192.168.x.x ou équiv.) ? " adresse #saisie de l'adresse
echo "L'adresse IP du serveur NFS à monter est :" $adresse

read -p "Quel est le répertoire du /home du serveur NFS à monter sur le client (/xavier ou /glapbox/Bureau ou équiv) ?" repertoire #saisie du répertoire
echo "Le répertoire du /home du serveur NFS à monter sur le client est :" $repertoire


echo "Le script va monter "$adresse":/home"$repertoire"/ sur /mnt/nfs"

read -p "<OK>" # pour attendre entrée pour continuer
sudo mount -t nfs -o rw $adresse:/home$repertoire/ /mnt/nfs

echo "Opération terminée"

read -p "<OK>" # pour attendre entrée pour sortir

exit 0 ;

 
  • C'est un script shell : ouvrir gedit, copier/coller le script et enregistrer-le dans un fichier en .sh et ensuite faire clic-droit sur le fichier obtenu. Sélectionner Propriétés > Permissions > Rendre exécutable.
  • Pour lancer le script, faire double-clic dessus et choisir exécuter dans un Terminal. Taper entrée après chaque <OK>... Voici ce que çà donne :

BIEN VEILLER A CE QUE LE BON NUMERO DE RESEAU SOIT DECLARE DANS LE FICHIER /etc/exports du côté serveur !! Voir ici : Ubuntu : Procédure : Mise en place d'un partage de fichiers NFS entre 2 PC sous Ubuntu via un réseau wifi

Fignolages

Pour avoir tous les droits, côté serveur, faire aussi :

$ cd /home/user/
$ sudo chmod 777 -R *

Utilisation

  • Ensuite, c'est assez simple : les fichiers du répertoire /home/utilisateur/ du serveur embarqué sont accessibles depuis le répertoire /mnt/nfs du client fixe.
  • Après, çà s'utilise comme un répertoire classique pour copier/coller des fichier dans un sens ou dans l'autre.
  • Pour faciliter l'accès au répertoire /mnt/nfs/, il est pratique de créer un lanceur « emplacement » sur le bureau du client.
  • Sinon, on pourra aussi utiliser un logiciel comme Krusader (Logithèque Ubuntu ou Applications > Accessoires > Krusader ) qui va permettre de gérer les fichiers côté NFS et côté PC fixe à la façon "Filezilla" (logiciel de transfert FTP) avec les 2 volets PC local et PC embarqué en vis à vis.
  • Il est également possible de lancer Processing sur le PC embarqué en utilisant les programmes présent sur le PC fixe...
  • En bref, plusieurs possibilités qui permettent de travailler et de transférer des fichiers entre le PC fixe et le PC embarqué..

Dépannage

  • Vérifier que votre GLAP-Box est bien allumée et opérationnelle (faire connexion VNC pour vérifier..)
  • Désactiver le pare-feu sur le client si çà foire...
  • On peut aussi lancer Zenmap pour avoir une idée des ports ouverts sur le réseau.

Divers

  • Problème programme Processing ???????? => en fait désactiver Compiz (Système > Préférence > Apparence > Effets > Aucun )

[--

A noter qu'un fichier copié du Client vers le Serveur appartient au groupe «nogroup » : du coup, j'ai constaté un plantage dans le cas d'une exécution d'un programme Processing.

Ainsi, il faut mettre tous les fichiers de /home/utilisateur du serveur dans le groupe utilisateur, ce qui se fait par en étant positionné dans /home/utilisateur par : $ sudo chgrp -R utilisateur *

Cette manip a l'air de suffire à résoudre le problème.

Pour changer le propriétaire, on fait : $ sudo chown -R utilisateur *

--]