Configuração do OpenBSD: Cliente incapaz de montar via NFS usando o Berkeley Automounter (amd)

2

O que eu estou tentando fazer é fazer com que meu cliente openBSD (OpenBSD 4.9) monte automaticamente um sistema de arquivos Linux NFS (Scientific Linux 6.1). Até agora, não tenho certeza se está configurado corretamente.

Para tirar as coisas do caminho, consigo montar o nfs manualmente:

# 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
# 

Portanto, conectividade não é um problema, tanto quanto eu posso dizer.

Como na página man, o seguinte está configurado em /etc/amd/auto.home:

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

Por sua vez, / etc / amd / master é configurado como tal:

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

Após a reinicialização, posso ver o mount, mas curiosamente, em vez do hostname:

amd:24490                        0         0         0   100%    /exports

Pelo que entendi, o amd age um pouco diferente do FreeBSD. Ainda assim, eu tentei ver se eu poderia automountount.

Não:

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

Uma pesquisa no google não ajuda muito - parece que automontar o NFS com o OpenBSD não é algo que normalmente é feito. Além de isso , as informações são bastante escassas.

Eu posso, claro, sempre montar é permanentemente, mas eu costumo ser um pouco anal em convenção, então não por agora. :)

Alguma direção seria apreciação.

(E, caso você esteja se perguntando, tentei usar o amds no FreeBSD e isso não deu certo - embora eu não me importaria de explicar a diferença entre como o FreeBSD implementa e como o OpenBSD o implementa)

UPDATE: Depois de reescrever o arquivo do mapa várias vezes, cheguei a me comunicar com o servidor NFS com essa configuração:

/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

No entanto, por algum motivo, parece que o amd usará como padrão somente o NFS versão 2 em relação ao udp:

# 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

Eu tentei várias opções de forçá-lo a tentar montar como nfsv3 como:

/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

ou:

/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

Nada ainda.

Curioso o suficiente, o OpenBSD monta o padrão para a versão 3, então não tenho certeza por que ele iria começar com a versão 3 em amd. Quais seriam as opções corretas para passar ao automount?

EDIT: Como eu indiquei, posso apontar via fstab. Para prova, aqui está:

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

Como eu notei, o OpenBSD é montado primeiro pela versão 3, então eu não sei porque, sob o amd, ele não seria montado via versão 3 (tcp) e seria montado via versão 2 com o udp.

EDIT: Como sugerido, tentei as seguintes configurações:

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"

que retornou

# 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

Então isso:

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"

Que retornou isso:

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

Nada ainda.

    
por Rilindo 26.11.2011 / 22:52

6 respostas

1

Finalmente "descobri" isso. O que eu fiz foi copiar um arquivo de mapeamento existente do FreeBSD para /etc/amd/amd.net da seguinte forma:

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

{autodir} é definido como o diretório padrão usado por amd (que é aparentemente / tmp_mnt, enquanto $ {rhost} é o host remoto conforme especificado pela chave (que procura o nome do host no DNS ou em / etc) / arquivo hosts:

192.168.15.250          qnap    qnap.monzell.com

Além disso, está o diretório do host.

Então eu criei um diretório na raiz como:

/ etc / amd / master:

/host amd.net

Em seguida, crio um diretório de host na raiz. Depois, funciona como esperado.

$ 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

Parece que a maioria dos NFS de comunicação precisa ser através do host, que cuida da montagem remota via NFSv3 / TCP. Qualquer tentativa de montar remotamente via amd diretamente será o padrão para o udp, versão 2.

Ainda não entendi muito bem, mas eu consegui trabalhar, o que significa que eu estou principalmente lá. :)

    
por 11.12.2011 / 02:12
1

em relação ao tipo: = programa mount / unmount commands, o infodoc para amd no OpenBSD menciona que o primeiro elemento no argumento é o programa a ser executado, e o segundo arg é o que é passado como $ 0.

então, se eu fiz

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

acabei ficando:

usage: -x10 [-23bcdilsTU] [-a maxreadahead] [-g maxgroups] [-I readdirsize] [-o options] [-R retrycnt] [-r readsize] [-t timeout] [-w writesize] [-x retrans] rhost:path node

colocando 'mount_nfs' lá na frente do -x10 (e similar para o prog de desmontagem) resolveu o erro de sintaxe para mim, no entanto eu encontrei o todo "montar a -a mount_point e depois fazer symlinks" coisa não era automaticamente manipulado neste caso. Eu debati escrever um script wrapper, mas acabou indo com:

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

no meu caso, estou recebendo o auto.home via NIS, e a sintaxe nele é específica para o nfs mount do linux, então estou fazendo um cronjob que faz um yppoll no auto.home, e se o servidor tiver um mais recente, eu puxo para baixo e, basicamente, executá-lo através sed (1) muito e cuspir um arquivo auto.home.fixed que eu tenho lido e. não perfeito, mas a máquina em questão é apenas um cliente YP, não um escravo, então nada no yp / Makefile vai me fazer nenhum bem.

    
por 02.07.2014 / 03:19
0

Você provavelmente não precisa da AMD. Eu monto muitos diretórios do NFS, nunca precisei de amd. Com o OpenBSD, você não liga para o Google, você vira para as man pages. Veja a man page fstab (5), que tem este exemplo:

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

    
por 27.11.2011 / 00:24
0

Meu entendimento é que o amd e o fstab não precisam ser tratados como alternativas, e o amd deve ser colocado na parte superior da configuração do fstab depois que você tiver o fstab funcionando corretamente. Esta página explica como unidades de CD e disquetes automount usando amd. Relaciona-se a uma versão mais antiga do OpenBSD, mas é esperançoso ainda relevante.

Eu não entendo completamente sua configuração, e não configurei o NFS no OpenBSD, mas parece que você está tentando colocar a configuração que é melhor colocada no fstab na amd. Comece tudo a funcionar no fstab primeiro, depois configure o amd para usar o que você fez no fstab.

Espero que ajude.

    
por 01.12.2011 / 11:06
0

Acho que seu comando de montagem nas últimas edições está errado. Não sei muito sobre o BSD, mas vamos tentar.

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"

That returned

# 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

Como ele fornece a saída de uso, os parâmetros estão errados. Nesse caso, o diretório de destino está ausente.

Then this: 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" Which returned this:

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

Você perdeu a -t em /sbin/mount -t nfs kerberos.monzell.com:/exports/ .

Eu acho que deve funcionar sem o parâmetro do programa, ou seja, sem usar o comando mount diretamente. Mas eu não tenho agora ...

    
por 06.12.2011 / 21:26
-2

Novamente: com o OpenBSD, você não usa o Google, você acessa as man pages.

Então, leia a man page como um mestre zen.

Ou, como mencionado na página man amd, use: 'info amd'

A página man menciona o registro em log, avise-nos se você receber mensagens relacionadas a amd ou nfs e não tenha medo de compartilhá-las conosco.

Além disso, verifique / tmp_mnt e / a

No entanto, novamente na página man: "Uma imaginação estranha é mais útil para obter vantagem total de todos os recursos".

    
por 30.11.2011 / 14:38