Haut de page

Configuration de NFS dans MacOS X Server


Le but de l'opération est d'obtenir un serveur de fichier pour les dossiers de départ (home) de machines MacOS X, Linux et Windows. Une contrainte de notre environnement est que toutes les machines ne sont pas sur le même réseau. C'est le cas de machines MacOS X qui se trouvent sur un réseau différent.

Schéma montage disques
Achitecture réseau

Dans cet environnement, le serveur d'administration Admin est connecté sur le réseau A (réseau Ethernet sur la carte mère). Il offre les services :

Nous allons décrire plusieurs essais de configuration de MacOS X server afin d'optenir

  1. Macintosh MacOS X en libre service avec dossiers de départ sur le serveur Admin.
  2. Macintosh destiné au portage d'Applications Linux sur MacOS X.
  3. Dossiers de départ NFS accessibles via AFP depuis un autre sous-réseau.
    1. Option avec deux logins (sans modification du client)
    2. Option avec un seul login (avec modification du client et problème de $HOME)
  4. Dossiers de départ des comptes Linux des postes fixes sur le serveur NFS MacOS X server : NFS, LDAP, authentification.
  5. Dossiers de départ des comptes Windows des postes fixes sur serveur SMB: SMB, contrôleur de domaine.
  6. Synchronisation des données des postes nomades MacOS X.
  7. Synchronisation des données des postes nomades Windows.

1) Macintosh MacOS X en libre service

C'est la partie la plus facile et elle fonctionne parfaitement.

Le serveur AdminA.lip6.fr (nom du serveur Admin sur le réseau A) publie un point de montage Invites en AFP contenant les dossiers de départ. Dans l'exemple expliqué sur la page Configuration de MacOS X Server et Client, le point de montage des comptes invités se situe sur un disque nommé D1 dans le répertoire Utilisateurs/Invites

Sur le poste client, le dossier de départ de l'utilsateur TP1 est monté à l'adresse : /Network/Servers/AdminA.lip6.fr/Volumes/D1/Utilisateurs/Invites/TP1 voici un extrait de l'arborescence des fichiers sur le poste de travail :


Différents scénarios de montage

Comme on peut le constater, c'est un peu compliqué et il est difficile de comprendre ce que sont tous ces liens Network, _Network_, automount, Server, ... Il faut dire que la machine cliente a été utilisée pour faire pas mal d'essais.

Pour éclaircir la situation, reprenons un système 10.3.9 2005-005 fraîchement installé. Voici ce qui existe :

Par contre

En supprimant AppleTalk, Rendezvous (Bonjour), SMB et SLP par l'utilitaire Format de répertoire, il ne reste plus que le lien vers Servers dans /Network.

En mettant en place la connexion LDAP sur le serveur AdminA.lip6.fr, il y a création de


2) Macintosh destiné au portage d'Applications Linux sur MacOS X

Montage AFP

Un PowerMac, sur le réseau C est connecté au serveur AdminA.lip6.fr (nom du serveur Admin sur le réseau A) via AFP. En première approche, cela semble marcher mais le montage afp ne se fait pas correctement. En effet, cela marche si la personne est connectée directement sur le serveur mais si on se connecte an ssh, le compte est monté en invité. Bien qu'il soit possible d'utiliser la commande mnthome, cela n'est pas satisfaisant car il n'y a qu'une personne à la fois qui peut monter son dossier de départ.

Pour le montage AFP, la base LDAP contient, dans cn=mounts :

Montage NFS

D'après ce que l'on peut trouver au fond des forums, pour que cela fonctionne, il faut effectuer un montage NFS et pas AFP. Effectivement, le montage NFS doit se faire en root et il va monter tous les dossiers de départ avec leurs autorisations.

Point de montage

Pour cela on modifie le point de montage pour rajouter du NFS uniquement dans le sous-réseau C.

Normalement, le fait de mettre un point de montage NFS doit activer automatiquement NFS (car on ne peut pas l'activer ni le désactiver comme les autres services ?)

Pour le montage NFS, la base LDAP contient, dans cn=mounts :

Compte utilisateur

Associer le point de montage comme dossier de départ pour l'utilisateur :

Lorsque l'on revient sur le point de montage comme dossier de départ pour l'utilisateur, on trouve maintenant trois entrées. La dernière est sélectionné.

Dans l'inspecteur (Onglet Inspector visible si on a coché Show "All Records" tab and inspector dans les Préférences de Workgroup Manager), on retrouve : /Network/Servers/AdminA.lip6.fr:/Volumes/.../Point_de_montage/login dans les champs NFSHomeDirectory et homeDirectory.

Dans cette configuration, le dossier “Départ” est introuvable car le client est sur le réseau C et le serveur sur le réseau A. Le montage NFS ne fonctionne pas à travers le routeur.
Dans l'arborescence de fichier le chemin /private/Network/Servers/AdminA.lip6.fr:/Volumes/.../Point_de_montage existe bien mais il ne contient pas les répertoires utilisateurs.
Le fichier de log /var/log/system.log contient :

automount[pid]: Can't mount AdminA.lip6.fr:/Volumes/.../Point_de_montage on /private/Network/Servers/AdminA.lip6.fr:/Volumes/.../Point_de_montage: Unknown error: -1 (-1)
automount[pid]: Attempt to mount /automount/Servers/AdminA.lip6.fr:/Volumes/.../Point_de_montage returned -1 (Unknown error: -1)
...
loginwindow[pid]: Failed to stat homedir: sleeping 1 second: chdir return -1 for /Network/Servers/AdminA.lip6.fr:/Volumes/.../Point_de_montage/login: Attempt 1
loginwindow[pid]: Failed to stat homedir: sleeping 1 second: chdir return -1 for /Network/Servers/AdminA.lip6.fr:/Volumes/.../Point_de_montage/login: Attempt 2
...

Compte utilisateur avec dossier de départ sur le même réseau

Pour que le montage NFS fonctionne, il faut que la machine Admin soit directement sur le réseau du client. Dans notre exemple le réseau C. En attendant de faire fonctionner le multi-homing sur la carte Ethernet et sur le commutateur associé, nous choisissions de rajouter une carte Ethernet connecté au câble C2. La machine a donc maintenant deux adresses IP : AdminA.lip6.fr et AdminC.lip6.fr.

Dans l'inspecteur je modifie les champs NFSHomeDirectory et homeDirectory en mettant AdminC.lip6.fr à la place de AdminA.lip6.fr.

Lorsque l'on revient sur le point de montage comme dossier de départ pour l'utilisateur, on trouve maintenant trois entrées. La dernière est sélectionné.

Le dossier de départ est correct mais les points de montage contiennent toujours AdminA et le répertoire reste donc introuvable.

Modification du point de montage dans la base LDAP

Nous allons changer AdminA.lip6.fr en AdminC.lip6.fr dans le cn=mounts. (j'ai laissé le dn inchangé)

>ldapsearch -v -x -b "cn=mounts,dc=lip6,dc=fr"

# AdminA.lip6.fr:/Volumes/Point_de_montage, mounts, lip6.fr
dn: cn=AdminA.lip6.fr:/Volumes/Point_de_montage,cn=mounts,dc=lip6,dc=fr
objectClass: mount
objectClass: top
mountDirectory: /Network/Servers/
mountType: nfs
mountOption: net
cn: AdminC.lip6.fr:/Volumes/Point_de_montage

Et cela marche parfaitement.

Truc: Si vous utilisez LDAP Browser Editor ou phpLDAPadmin, pour effectuer des modifications, il faut etre administrateur LDAP. En mettant uid=root,cn=users (issue de la ligne rootdn du fichier /etc/openldapslapd_macosxserver.conf) pour LDAP Browser sans Anonymous bind et avec append base DN dans le champs User DN. Dans certaines configurations, ce n'est pas root mais Manager.


Dossier de départ NFS accessible via AFP depuis un autre sous-réseau

Option avec deux logins (sans modification du client)

Il s'agit ici de combiner le montage NFS local à un montage AFP distant. En fonction de la localisation de la machine, il faudrait soit utiliser NFS si on est sur le sous-réseau C et AFP si on est dans les autres sous-réseaux.
Je n'ai pas trouvé de moyen simple de faire ceci. La solution proposée consiste à utiliser deux comptes différents : A-login et C-login (un associé à chaque protocole AFP et NFS) avec le même User ID et un lien symbolique d'un compte vers l'autre.

NFS et AFP avec deux comptes

Au niveau du serveur :

Lorsqu'un utilisateur doit avoir un compte visible sur les deux réseaux, on crée un compte C-login et un compte A-login. Lors de la création du compte A-login, il faut attribuer à ce compte le même User ID que le compte C-login et créer manuellement un lien symbolique dans le répertoire Mont-AFP vers le répertoire C-login de Mont-NFS.

Lorsque l'on est sur le réseau A, si on utilise le compte C-login, l'authentification fonctionne mais le dossier de départ est introuvable car la partition Mont-NFS ne peut pas être montée.

Option avec un seul login (avec modification du client et problème de $HOME)

Dans l'option précédentes, outre le double login (avec même UID) et donc double mot de passe, la création du dossier de départ sur le serveur ne marchait pas pour les utilisateurs NFS. En effet, n'ayant pas les droits root NFS, il était impossible de créer le dossier car le serveur pensait que partie NFS était sur une autre machine alors que c'était la même sur l'autre interface. Il fallait donc créer le dossier de départ dans la zone Mont-AFP puis se connecter sur le serveur (en root) pour déplacer le dossier vers Mont-NFS et faire le lien symbolique.

Dans l'option avec un seul login, tous les comptes sont sur un volume AFP donc montables partout et ne posant pas de problème de création. Il sont exportés sur le sous-réseau A. Le point de montage est afp mais le dossier est exporté en afp, smb et nfs.

Sur les clients des sous-réseaux A, B et C, le montage passe en AFP. Les dossiers de départ sont donc sur /Network/Servers/AdminA.lip6.fr:/Volumes/Point_de_montage/login.

>ldapsearch -v -x -b "cn=mounts,dc=lip6,dc=fr"

# AdminA.lip6.fr:/Volumes/Point_de_montage, mounts, lip6.fr
dn: cn=AdminA.lip6.fr:/Volumes/Point_de_montage,cn=mounts,dc=lip6,dc=fr
cn: AdminA.lip6.fr:/Volumes/Point_de_montage
objectClass: mount
objectClass: top
mountDirectory: /Network/Servers/
mountType: url
mountOption: net
mountOption: url==afp://;AUTH=NO%20USER%20AUTHENT@AdminA.lip6.fr/Point_de_montage

Par contre si on veut se connecter sur un poste en ssh, la seul solution consiste à passer en montage NFS. La solution consiste à indiquer au poste du réseau C de monter automatiquement en NFS sur l'interface C2. Pour cela rajouter une section une arborescence LDAP nommée mountsNFS par exemple.

Côté serveur: Créer l'entrée LDAP mountsNFS en duplicant la section mounts par exemple.

mountsNFS
Exemple avec LDAP Browser Editor v2.8.2

ldapsearch -v -x -b "cn=mountsNFS,dc=lip6,dc=fr"

# AdminA.lip6.fr:/Volumes/Point_de_montage, mountsNFS, lip6.fr
dn: cn=AdminA.lip6.fr:/Volumes/Point_de_montage,cn=mountsNFS,dc=lip6,dc=fr
mountDirectory: /Network/Servers/
mountOption: net
mountType: nfs
objectClass: mount
objectClass: top
cn: AdminC.lip6.fr:/Volumes/Point_de_montage

Côté client : Changer l'attribut Mounts pour utiliser cn=mountNFS.

MapMount Dans l'Application Format de répertoire, il faut changer l'attribut Mounts pour utiliser cn=mountNFS.

Lors du démarrage du poste client, il sera prêt à effectuer un automount sur /Network/Servers/AdminC.lip6.fr:/Volumes/Point_de_montage/ en NFS.

Il reste à rêgler le problème de $HOME lors d'une connexion ssh sur le client. En effet, dans la description du compte, le dossier de départ est sur le AdminA et le montage NFS est sur AdminC. Les deux points de montages AFP et NFS n'entrent donc pas en conflits mais il faut changer $HOME.

Pour cela, dans l'Application Format de répertoire, j'ai utilisé le champ LDAP displayName comme attribut NFSHomeDirectory afin d'y mettre le répertoire NFS. Pour mettre à jour ce champ, j'utilise les commandes shell suivantes :

# add /home/login to login
echo "dn: uid=login,cn=users,dc=lip6,dc=fr" > /tmp/ldap.tmp
echo "replace: displayname" >> /tmp/ldap.tmp
echo "displayname: /home/login" >> /tmp/ldap.tmp
ldapmodify -x -v -D 'uid=admin,cn=users,dc=lip6,dc=fr' -w Mot_de_passe -f /tmp/ldap.tmp
rm /tmp/ldap.tmp


Dossier de départ introuvable

Dans certains cas, en particulier lorsque la négociation Ethernet n'est pas assez rapide, il arrive que le dossier départ ne soit pas monté au démarrage de la machine. L'identification se fait bien mais une fenêtre de dialogue apparaît avec un des messages suivants :

  1. Le dossier "Départ" de l'utilisateur “login” est introuvable à son emplacement habituel.
    Le dossier "Départ" ou "Utilisateurs" peut avoir été déplacé ou supprimé. Si “Départ” se trouve sur le réseau, il se peut que le serveur soit momentanément indisponible. Si le problème persiste, contactez l'administrateur de votre système.
  2. Le dossier de départ de l'utilisateur "login" ne se trouve pas à l'emplacement habituel ou ne peut être accédé.
    Le dossier de Départ ou Utilisateurs a été déplacé ou supprimé. Si le dossier de Départ est situé sur le réseau, le serveur est peut-être temporairement indisponible. Si le problème persiste, contactez votre administrateur réseau.

Ce cas est mis en évidence sur des PowerMac G4/733 connectés à des commutateurs cisco avec négociation. En redémarrant la machine, cela marche un coup sur deux.


Le nom de l'ordinateur : HostName

Lors de la configuration de MacOS X Server (10.4), différents noms d'ordinateurs sont indiqués :


Paramètrage NFS

A voir le problème de FireWall lors des lock NFS car les ports sont dynamiques :

rpcinfo -p localhost
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 1020 status
100024 1 tcp 1015 status
100021 0 udp 1008 nlockmgr
100021 1 udp 1008 nlockmgr
100021 3 udp 1008 nlockmgr
100021 4 udp 1008 nlockmgr
100021 0 tcp 1014 nlockmgr
100021 1 tcp 1014 nlockmgr
100021 3 tcp 1014 nlockmgr
100021 4 tcp 1014 nlockmgr
100005 1 udp 989 mountd
100005 3 udp 989 mountd
100005 1 tcp 1012 mountd
100005 3 tcp 1012 mountd
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs


Performances

Voir aussi l'optimisation: Improve NFS client performance sur MacOS X Hints.


Voir aussi

(*) Les photos d'écran de la partie configuration de MacOS X server sont en anglais car il est plus facile de trouver de la documentation en anglais sur ce sujet.

2005



FutureShare

 | 

Glossaire

 |