OpenBSD-Konfiguration: Client kann mit Berkeley Automounter (amd) nicht über NFS mounten

OpenBSD-Konfiguration: Client kann mit Berkeley Automounter (amd) nicht über NFS mounten

Ich versuche, meinen OpenBSD-Client (OpenBSD 4.9) dazu zu bringen, automatisch ein Linux-NFS-Dateisystem (Scientific Linux 6.1) zu mounten. Bisher bin ich mir nicht sicher, ob es richtig konfiguriert ist.

Um die Dinge aus dem Weg zu räumen, kann ich NFS manuell mounten:

# mount_nfs -T -3 192.168.15.100:/exports /mnt
# ls -la /mnt
total 52
drwxr-xr-x   7 root    wheel   4096 Oct  4 22:42 .
drwxr-xr-x  16 root    wheel    512 Nov 26 16:33 ..
drwxrwxr-x   5 _sndio  _sndio  4096 Oct 31 21:58 centos
drwxr-xr-x  15 root    wheel   4096 Nov  6 09:17 home
drwxr-xr-x   5 root    wheel   4096 Oct 31 21:27 sl
drwxr-xr-x   3 root    wheel   4096 Nov 19 16:02 sles
drwxr-xr-x  17 503     503     4096 Nov 10 17:37 users
# 

Die Konnektivität stellt meines Wissens nach also kein Problem dar.

Gemäß der Manpage ist Folgendes in /etc/amd/auto.home konfiguriert:

/defaults type:=nfs;sublink:=${key};opts:=rw,soft,intr,vers=3,proto=tcp
*         rhost:=192.168.15.100;rfs:=/exports

/etc/amd/master ist wiederum folgendermaßen konfiguriert:

# cat /etc/amd/master                                                                                                                                                                    
/exports amd.home

Beim Neustart wird „Mount“ angezeigt, aber merkwürdigerweise steht statt des Hostnamens:

amd:24490                        0         0         0   100%    /exports

So wie ich das verstehe, verhält sich amd etwas anders als FreeBSD. Trotzdem habe ich versucht, herauszufinden, ob es automatisch gemountet werden kann.

Nein:

ksh: cd: /exports/users - Resource temporarily unavailable
# cd /exports/192.168.15.100/host/users
ksh: cd: /exports/192.168.15.100/host/users - Resource temporarily unavailable

Eine Suche in Google hilft nicht viel - es scheint, dass das automatische Einhängen von NFS bei OpenBSD nicht üblich ist. Anders alsDas, Informationen sind ziemlich spärlich.

Ich kann es natürlich immer dauerhaft montieren, aber ich bin ein bisschen pingelig, was Konventionen angeht, also im Moment nicht. :)

Eine mögliche Richtung wäre Wertschätzung.

(Und falls Sie sich das fragen: Ich habe versucht, AMD auf FreeBSDs Art zu verwenden, und das hat nicht funktioniert – obwohl ich nichts gegen eine Erklärung der Unterschiede zwischen der Implementierung bei FreeBSD und der bei OpenBSD hätte.)

UPDATE: Nachdem ich die Map-Datei mehrere Male neu geschrieben hatte, konnte ich mit dieser Konfiguration tatsächlich mit dem NFS-Server kommunizieren:

/defaults type:=nfs;rhost:=kerberos.monzell.com;rfs:=/exports;\
          sublink:=${key};opts:=rw,nodev,nosuid,soft,intr,tcp,resvport
*         ${host}==${rhost};type:=nfs;fs:=${rfs};opts:=rw,nodev,nosuid,soft,intr,tcp,resvport

Aus irgendeinem Grund scheint es jedoch so, dass amd standardmäßig nur NFS Version 2 über UDP verwendet:

# tcpdump dst kerberos
tcpdump: listening on pcn0, link-type EN10MB
tcpdump: WARNING: compensating for unaligned libpcap packets
20:38:28.558385 openbsd.monzell.com.856 > kerberos.monzell.com.sunrpc: udp 100
20:38:28.559154 openbsd.monzell.com.856 > kerberos.monzell.com.892: udp 96
20:38:30.592761 openbsd.monzell.com.856 > kerberos.monzell.com.nfsd: xid 0x22000000 (NFSv2) 40 null
20:38:33.558107 arp reply openbsd.monzell.com is-at 52:54:00:52:8f:66

Ich habe verschiedene Möglichkeiten ausprobiert, um die Bereitstellung als NFSD3 zu erzwingen, beispielsweise:

/defaults type:=nfs;rhost:=kerberos.monzell.com;rfs:=/exports;\
          sublink:=${key};opts:=rw,nodev,nosuid,soft,intr,vers=3,proto=tcp,resvport
*         ${host}==${rhost};type:=nfs;fs:=${rfs};opts:=rw,nodev,nosuid,soft,intr,vers=3,proto=tcp,resvport

oder:

/defaults type:=nfs;rhost:=kerberos.monzell.com;rfs:=/exports;\
          sublink:=${key};opts:=rw,nodev,nosuid,soft,intr,vers=-3,proto=tcp,resvport
*         ${host}==${rhost};type:=nfs;fs:=${rfs};opts:=rw,nodev,nosuid,soft,intr,vers=3,proto=tcp,resvport

Noch immer nichts.

Interessanterweise wird bei OpenBSD standardmäßig Version 3 gemountet, daher bin ich mir nicht sicher, warum es in amd mit Version 3 startet. Welche Optionen wären für Automount die richtigen?

EDIT: Wie ich bereits erwähnt habe, kann ich über fstab verweisen. Als Beweis hier:

kerberos:/exports /mnt nfs rw,nodev,nosuid,tcp,soft,intr 1 1 
Filesystem        512-blocks      Used     Avail Capacity  Mounted on
/dev/wd0a             290396     89032    186848    32%    /
/dev/wd0k            3240316   1858940   1219364    60%    /home
/dev/wd0d             448956        12    426500     0%    /tmp
/dev/wd0f            1943196    903596    942444    49%    /usr
/dev/wd0g            1105820    346852    703680    33%    /usr/X11R6
/dev/wd0h            4387772    256560   3911824     6%    /usr/local
/dev/wd0j            2137436         4   2030564     0%    /usr/obj
/dev/wd0i            2137436         4   2030564     0%    /usr/src
/dev/wd0e             498940     18676    455320     4%    /var
amd:26660                  0         0         0   100%    /net
kerberos:/exports  103212280  66319088  31650312    68%    /mnt

Wie ich bereits erwähnt habe, wird OpenBSD zuerst über Version 3 gemountet. Ich weiß also nicht, warum es unter AMD nicht über Version 3 (TCP) gemountet wird, sondern über Version 2 mit UDP.

BEARBEITEN: Wie vorgeschlagen habe ich die folgenden Konfigurationen versucht:

defaults type:=nfs;fs:=${autodir}
  # autodir = -a parameter of amd call = amd_mnt in rc.conf = /tmp_mnt
  # Be careful with 'umount' and 'unmount' in the following.
remote type:=program;fs:=/mnt;\
        mount:="/sbin/mount_nfs kerberos.monzell.com:/exports/";\
        unmount:="/sbin/umount /mnt"

Das kehrte zurück

# cd /net/remote                                                                                                                                                                                 
usage:  [-23bcdilsTU] [-a maxreadahead] [-g maxgroups]
        [-I readdirsize] [-o options] [-R retrycnt] [-r readsize]
        [-t timeout] [-w writesize] [-x retrans] rhost:path node
ksh: cd: /net/remote - Operation not permitted

Dann das:

defaults type:=nfs;fs:=${autodir}
  # autodir = -a parameter of amd call = amd_mnt in rc.conf = /tmp_mnt
  # Be careful with 'umount' and 'unmount' in the following.
remote type:=program;fs:=/mnt;\
        mount:="/sbin/mount nfs kerberos.monzell.com:/exports/";\
        unmount:="/sbin/umount /mnt"

Das Ergebnis war:

# cd /net/remote                                                                                                                                                                                 
nfs: realpath kerberos.monzell.com:/exports/: No such file or directory
ksh: cd: /net/remote - Operation not permitted

Noch nichts.

Antwort1

Endlich habe ich es "herausgefunden". Ich habe eine vorhandene FreeBSD-Map-Datei wie folgt nach /etc/amd/amd.net kopiert:

/defaults       type:=host;fs:=${autodir}/${rhost}/host;rhost:=${key}
*               opts:=rw,grpid,resvport,vers=3,proto=tcp,nosuid,nodev

{autodir} ist auf das von amd verwendete Standardverzeichnis eingestellt (anscheinend /tmp_mnt, während ${rhost} der Remote-Host ist, der durch den Schlüssel angegeben wird (der nach dem Hostnamen entweder im DNS oder in der Datei /etc/hosts sucht:

192.168.15.250          qnap    qnap.monzell.com

Darüber befindet sich das Hostverzeichnis.

Dann habe ich im Stammverzeichnis ein Verzeichnis wie folgt erstellt:

/etc/amd/master:

/host amd.net

Dann erstelle ich ein Host-Verzeichnis unter root. Danach funktioniert es wie erwartet.

$ df
Filesystem   512-blocks      Used     Avail Capacity  Mounted on
/dev/wd0a        290396     89088    186792    32%    /
/dev/wd0k       3240316   1858968   1219336    60%    /home
/dev/wd0d        448956        12    426500     0%    /tmp
/dev/wd0f       1943196    903596    942444    49%    /usr
/dev/wd0g       1105820    346852    703680    33%    /usr/X11R6
/dev/wd0h       4387772    256560   3911824     6%    /usr/local
/dev/wd0j       2137436         4   2030564     0%    /usr/obj
/dev/wd0i       2137436         4   2030564     0%    /usr/src
/dev/wd0e        498940     18656    455340     4%    /var
amd:9747              0         0         0   100%    /host
qnap:/Public 1916713232 642213152 1274500080    34%    /tmp_mnt/qnap/host/Public
qnap:/pub    1916713232 642213152 1274500080    34%    /tmp_mnt/qnap/host/pub
qnap:/users  1916713232 642213152 1274500080    34%    /tmp_mnt/qnap/host/users

Es sieht so aus, als ob die meiste NFS-Kommunikation über den Host laufen muss, der sich um die Remote-Mounts über NFSv3/TCP kümmert. Alle Versuche, direkt über amd remote zu mounten, werden standardmäßig über UDP, Version 2, ausgeführt.

Verstehe amd immer noch nicht wirklich, aber ich habe es zum Laufen gebracht, das heißt, ich bin fast am Ziel. :)

Antwort2

in Bezug auf die Mount-/Unmount-Befehle vom Typ „type:=program“ erwähnt das Infodoc für amd unter OpenBSD, dass das erste Element im Argument das auszuführende Programm ist und das zweite Argument das ist, was als $0 übergeben wird.

also, wenn ich das täte,

mount:="/sbin/mount_nfs -x10 -3 -dt600 -r32768 -w32768 -o rw,tcp.intr host:/Pfad/${key} /local/${key}"

am Ende bekam ich:

Verwendung: -x10 [-23bcdilsTU] [-a maxreadahead] [-g maxgroups] [-I readdirsize] [-o Optionen] [-R retrycnt] [-r Lesegröße] [-t Timeout] [-w Schreibgröße] [-x retrans] rhost:Pfadknoten

das Einfügen von „mount_nfs“ dort vor -x10 (und ähnlich für das Unmount-Programm) löste den Syntaxfehler für mich, ich stellte jedoch fest, dass die ganze Sache mit dem „Mounten auf -a Mount_Point und anschließendes Erstellen von Symlinks“ in diesem Fall nicht automatisch gehandhabt wurde. Ich überlegte, ein Wrapper-Skript zu schreiben, entschied mich aber stattdessen für:

/Standardtyp:=nfs; jspiegel rhost:=NFS_HOST;rfs:=NFS_EXPORT_PATH/${key};opts:="rw,tcp,intr"

in meinem Fall erhalte ich auto.home über NIS und die Syntax darin ist spezifisch für die NFS-Einbindung von Linux, also führe ich einen Cronjob aus, der ein yppoll auf auto.home ausführt, und wenn der Server ein neueres hat, ziehe ich es herunter und lasse es im Grunde viel durch sed(1) laufen und spucke eine auto.home.fixed-Datei aus, die ich von AMD gelesen habe. Nicht perfekt, aber die betroffene Maschine ist nur ein YP-Client, kein Slave, also nützt mir nichts im yp/Makefile etwas.

Antwort3

Sie brauchen amd wahrscheinlich nicht. Ich mounte viele NFS-Verzeichnisse automatisch, ich habe amd nie gebraucht. Bei OpenBSD wenden Sie sich nicht an Google, sondern an die Manpages. Sehen Sie sich die Manpage fstab(5) an, die dieses Beispiel enthält:

server:/export/ports /usr/ports nfs rw,nodev,nosuid,soft,intr 0 0

Antwort4

Ich denke, Ihr Mount-Befehl in den letzten Änderungen ist falsch. Ich weiß nicht viel über BSD, aber versuchen wir es mal.

defaults type:=nfs;fs:=${autodir}
 # autodir = -a parameter of amd call = amd_mnt in rc.conf = /tmp_mnt
 # Be careful with 'umount' and 'unmount' in the following.
remote type:=program;fs:=/mnt;\
       mount:="/sbin/mount_nfs kerberos.monzell.com:/exports/";\
       unmount:="/sbin/umount /mnt"

Das kehrte zurück

# cd /net/remote                                                                                                                                                                                 
usage:  [-23bcdilsTU] [-a maxreadahead] [-g maxgroups]
        [-I readdirsize] [-o options] [-R retrycnt] [-r readsize]
        [-t timeout] [-w writesize] [-x retrans] rhost:path node
ksh: cd: /net/remote - Operation not permitted

Da die Nutzungsausgabe angezeigt wird, sind die Parameter falsch. In diesem Fall fehlt das Zielverzeichnis.

Dann dies: defaults type:=nfs;fs:=${autodir} # autodir = -a Parameter von amd call = amd_mnt in rc.conf = /tmp_mnt # Seien Sie im Folgenden vorsichtig mit „umount“ und „unmount“. remote type:=program;fs:=/mnt;\ mount:="/sbin/mount nfs kerberos.monzell.com:/exports/";\ unmount:="/sbin/umount /mnt" Das hat dies zurückgegeben:

# cd /net/remote                                                                                                                                                                                 
nfs: realpath kerberos.monzell.com:/exports/: No such file or directory
ksh: cd: /net/remote - Operation not permitted

Du hast das -tin verpasst /sbin/mount -t nfs kerberos.monzell.com:/exports/.

Ich denke, es sollte ohne Programmparameter funktionieren, also ohne den Mount-Befehl direkt zu verwenden. Aber ich weiß jetzt nicht, AMD...

verwandte Informationen