Bug 26797 - Неправильно разбираются параметры монтирования NFS
Summary: Неправильно разбираются параметры монтирования NFS
Status: REOPENED
Alias: None
Product: Sisyphus
Classification: Development
Component: autofs (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Sergey Bolshakov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-01-10 13:01 MSK by Fr. Br. George
Modified: 2015-02-12 23:20 MSK (History)
5 users (show)

See Also:


Attachments
Кратко опишите вложение. (393 bytes, patch)
2012-01-10 13:02 MSK, Fr. Br. George
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Fr. Br. George 2012-01-10 13:01:13 MSK
/etc/auto.avahi неправильно обрабатывает параметры монтирования NFS, если в них содержится "=", например:

=;n/a;n/a;space;Network File System;office.altlinux.ru;altair.office.altlinux.ru;10.1.0.2;2049;"options=ro,noexec,nosuid,nodev,nolock,hard,intr,vers=3" "path=/space"

превращается в
-o sec=sys,3 вместо -osec=sys,ro,noexec,nosuid,nodev,nolock,hard,intr,vers=3

В результате монтирование не происходит из-за некорректного параметра "3".
Comment 1 Fr. Br. George 2012-01-10 13:02:22 MSK
Created attachment 5286 [details]
Кратко опишите вложение.

(дополнительно) Добавьте комментарий для этого вложения.
Comment 2 Sergey Bolshakov 2012-01-10 14:09:04 MSK
собственно, auto.avahi -- моя самодеятельность, никаких устоявшихся практик,
а тем более формальных документов насчёт того, как именно должны быть
представлены опции монтирования в описании зоны, нет.
я предполагал, что vers *не* входит в options, а указывается отдельно,
что-то вроде:
--- %< ---
share._nfs._tcp                 SRV     0       0       2049    host
                                TXT     vers=4 options=ro path=/share
--- %< ---
впрочем, в общем случае замечание верно.
Comment 3 Fr. Br. George 2012-04-03 13:36:09 MSK
Перестало работать в p6 (или и не работало) :(. Патчик-то можно приложить, аль некошерен?
Comment 4 Sergey Bolshakov 2012-04-03 13:47:31 MSK
что мешает указать vers= отдельнолежащей опцией ?
Comment 5 Fr. Br. George 2012-04-20 11:22:39 MSK
Отсутствие прав root. Это имеет отношение к проблеме?
Comment 6 Anton V. Boyarshinov 2012-11-13 14:26:22 MSK
А что-таки мешает приложить патч?
Comment 7 Sergey Bolshakov 2012-11-13 14:29:55 MSK
правило, которое гласит, что в options содержатся только флаги (опции без значения). опции со значением указываются отдельно.
Comment 8 Sergey Bolshakov 2012-11-13 14:30:35 MSK
.
Comment 9 Anton V. Boyarshinov 2012-11-14 11:56:02 MSK
(В ответ на комментарий №7)
> правило, которое гласит, что в options содержатся только флаги (опции без
> значения). опции со значением указываются отдельно.

А где содержится это правило?
Comment 10 Dmitry V. Levin 2012-11-16 18:55:09 MSK
(In reply to comment #4)
> что мешает указать vers= отдельнолежащей опцией ?

Какие еще из нижеперечисленных опций предлагается указывать отдельно?
$ man mount |colcrt |grep =value
       uid=value and gid=value
       ownmask=value and othmask=value
       uid=value and gid=value
       setuid=value and setgid=value
       mode=value
       reserved=value
       root=value
       bs=value
       uid=value and gid=value
       mode=value
       ptmxmode=value
              ptmxmode=value specifies a more useful mode for the ptmx node and  is  highly  recommended  when  the
       uid=value and gid=value
       umask=value
       dmask=value
       fmask=value
       allow utime=value
       check=value
       codepage=value
       iocharset=value
       uid=value and gid=value
       umask=value
       uid=value and gid=value
       mode=value
       iocharset=value
       resize=value
       uid=value, gid=value and umask=value
       uid=value and gid=value
       ufstype=value
       onerror=value
       ihashsize=value
       logbufs=value
       logbsize=value
       sunit=value and swidth=value

Давайте быстро исправим ошибку вместо того, чтобы искать пути ее объезда.
Тем более что правильный патч уже давно готов.
Comment 11 Sergey Bolshakov 2012-11-16 19:14:54 MSK
указывать отдельно предлагается vers= path= и sec=, поскольку любые другие
опции со значением игнорируются, о чём кстати выдаётся предупреждение.
это не ошибка, это бай дизайн.
Comment 12 Dmitry V. Levin 2012-11-16 19:32:17 MSK
(In reply to comment #11)
> указывать отдельно предлагается vers= path= и sec=, поскольку любые другие
> опции со значением игнорируются, о чём кстати выдаётся предупреждение.

Однако vers= в options= не игнорируется, и никаких предупреждений о том, что все плохо, при использовании vers= в options= не выдается.

> это не ошибка, это бай дизайн.

В таком случае это неправильный бай дизайн, который надо зафиксить.
Comment 13 Sergey Bolshakov 2012-11-16 19:48:11 MSK
о том, что всё плохо, недвусмысленно намекается:
"В результате монтирование не происходит"
бай дизайном я вполне удовлетворён, дополнительная
диагностика о недопустимости foo=bar в options воспоследует.
Comment 14 Dmitry V. Levin 2012-11-16 20:55:52 MSK
(In reply to comment #13)
> бай дизайном я вполне удовлетворён, дополнительная
> диагностика о недопустимости foo=bar в options воспоследует.

В чем причина недопустимости foo=bar в options?
На соображения безопасности это не похоже.  Что же это тогда?
Comment 15 Sergey Bolshakov 2012-11-16 21:05:42 MSK
в том, что, каламбурчик-с, options are optional, тогда как комбинация vers/path нужна.
И собственно, ввиду отсутствия каких-либо документов, регламентирующих
размещение в записи TXT параметров монтирования nfs, люди делятся на
тех, кто написал скриптъ, и тех, кто уберёт лишние запятые из зоны.
Comment 16 Dmitry V. Levin 2012-11-16 21:25:48 MSK
(In reply to comment #15)
> в том, что, каламбурчик-с, options are optional, тогда как комбинация vers/path
> нужна.
> И собственно, ввиду отсутствия каких-либо документов, регламентирующих
> размещение в записи TXT параметров монтирования nfs, люди делятся на
> тех, кто написал скриптъ, и тех, кто уберёт лишние запятые из зоны.

Как насчет символа "=" в значении path=?
Как насчет других опций со значениями, которые почему-то оказались хуже опций без значений?
Будем и дальше отрицать здравый смысл, ссылаясь на отсутствие стандарта?

Допустим, я хочу передать одну из нижеперечисленных опций:
$ man nfs |colcrt |grep '^[[:space:]]*[^[:space:]=]\+='
       timeo=n        The  time  in  deciseconds (tenths of a second) the NFS client waits for a response before it
       retrans=n      The  number  of  times  the  NFS client retries a request before it attempts further recovery
       rsize=n        The maximum number of bytes in each network READ request that the NFS client can receive when
       wsize=n        The maximum number of bytes per network WRITE request that the NFS client can send when writ‐
       acregmin=n     The  minimum time (in seconds) that the NFS client caches attributes of a regular file before
       acregmax=n     The  maximum time (in seconds) that the NFS client caches attributes of a regular file before
       acdirmin=n     The  minimum time (in seconds) that the NFS client caches attributes of a directory before it
       acdirmax=n     The  maximum time (in seconds) that the NFS client caches attributes of a directory before it
       actimeo=n      Using  actimeo  sets all of acregmin, acregmax, acdirmin, and acdirmax to the same value.  If
       retry=n        The number of minutes that the mount(8) command retries an NFS mount operation in  the  fore‐
       sec=mode       The RPCGSS security flavor to use for accessing files on this mount point.  If the sec option
       lookupcache=mode
       proto=netid    The  transport  protocol name and protocol family the NFS client uses to transmit requests to
       port=n         The  numeric  value  of  the  server's  NFS service port.  If the server's NFS service is not
       mountport=n    The numeric value of the server's mountd port.  If the server's mountd service is not  avail‐
       mountproto=netid
       mounthost=name The  hostname of the host running mountd.  If this option is not specified, the mount(8) com‐
       mountvers=n    The RPC version number used to contact the server's mountd.  If this option is not specified,
       namlen=n       The maximum length of a pathname component on this mount.  If this option is  not  specified,
       nfsvers=n      The NFS protocol version number used to contact the server's NFS service.  If the server does
       vers=n         This option is an alternative to the nfsvers option.  It is included for  compatibility  with
       proto=netid    The  transport  protocol name and protocol family the NFS client uses to transmit requests to
       port=n         The  numeric  value  of  the  server's  NFS service port.  If the server's NFS service is not
       clientaddr=n.n.n.n

Мне в этом случае следует переписать скрипт /etc/auto.avahi?
Comment 17 Sergey Bolshakov 2012-11-16 21:50:41 MSK
(В ответ на комментарий №16)
> (In reply to comment #15)
> > в том, что, каламбурчик-с, options are optional, тогда как комбинация vers/path
> > нужна.
> > И собственно, ввиду отсутствия каких-либо документов, регламентирующих
> > размещение в записи TXT параметров монтирования nfs, люди делятся на
> > тех, кто написал скриптъ, и тех, кто уберёт лишние запятые из зоны.
> 
> Как насчет символа "=" в значении path=?
> Как насчет других опций со значениями, которые почему-то оказались хуже опций
> без значений?
> Будем и дальше отрицать здравый смысл, ссылаясь на отсутствие стандарта?

Предложенный патч этих проблем не решает.
К тому же, *мой* здравый смысл подсказывает мне
избегать решений кажущихся проблем.

> Мне в этом случае следует переписать скрипт /etc/auto.avahi?

С такими запросами это явно необходимо. милости прошу.
Comment 18 Fr. Br. George 2015-02-12 18:48:50 MSK
Новые nfs-utils актуализировали эту багу в ещё одном месте:

@@ -46,6 +46,7 @@ discover_nfs() {
        case "$vers,$path" in
            ,|4,) printf -- '-fstype=nfs4 %s %s:/' $options $addr ;;
            4,*) printf -- '-fstype=nfs4 %s %s:%s' $options $addr $path ;;
+           3,*) printf -- '%s %s:%s' $options,vers=3 $addr $path ;;
            *,*) printf -- '%s %s:%s' $options $addr $path ;;
        esac
        break

Суть в том, что mount без параметров теперь v4.2 (а не v3), и обработать ни vers=3, ни -onfsversion=3 auto.avahi не может.

> > Мне в этом случае следует переписать скрипт /etc/auto.avahi?
> С такими запросами это явно необходимо. милости прошу.

Давайте, давайте уже ACL кому-нибудь дадим? Тем более, что переписывать-то две строки надо всего.
Comment 19 Sergey Bolshakov 2015-02-12 23:20:26 MSK
mount без параметров v4 последние несколько лет,
сборка с 4.2 в качестве дефолта опубликована не была.