* documentation issues
@ 2005-12-01 20:28 Chuck Lever
2005-12-01 20:34 ` Chris Shoemaker
2005-12-01 21:34 ` Junio C Hamano
0 siblings, 2 replies; 15+ messages in thread
From: Chuck Lever @ 2005-12-01 20:28 UTC (permalink / raw)
To: git
[-- Attachment #1: Type: text/plain, Size: 393 bytes --]
i'd fix these myself, but i don't know what the right answers are.
in the man page for git-diff-index (posted here):
http://www.kernel.org/pub/software/scm/git/docs/git-diff-tree.html
there are several references to "git-diff-tree" where it seems like
"git-diff-index" is really meant.
also, git-diff-index supports a "-r" option, but that doesn't seem to be
documented on this page.
[-- Attachment #2: cel.vcf --]
[-- Type: text/x-vcard, Size: 445 bytes --]
begin:vcard
fn:Chuck Lever
n:Lever;Charles
org:Network Appliance, Incorporated;Open Source NFS Client Development
adr:535 West William Street, Suite 3100;;Center for Information Technology Integration;Ann Arbor;MI;48103-4943;USA
email;internet:cel@citi.umich.edu
title:Member of Technical Staff
tel;work:+1 734 763 4415
tel;fax:+1 734 763 4434
tel;home:+1 734 668 1089
x-mozilla-html:FALSE
url:http://www.monkey.org/~cel/
version:2.1
end:vcard
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: documentation issues
2005-12-01 20:28 documentation issues Chuck Lever
@ 2005-12-01 20:34 ` Chris Shoemaker
2005-12-01 21:34 ` Junio C Hamano
1 sibling, 0 replies; 15+ messages in thread
From: Chris Shoemaker @ 2005-12-01 20:34 UTC (permalink / raw)
To: Chuck Lever; +Cc: git
On Thu, Dec 01, 2005 at 03:28:53PM -0500, Chuck Lever wrote:
> also, git-diff-index supports a "-r" option, but that doesn't seem to be
> documented on this page.
I think it is "supported" in the sense that git-diff-index won't
complain about "-r" argument, but it doesn't actually do anything, so
it shouldn't be documented.
-chris
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: documentation issues
2005-12-01 20:28 documentation issues Chuck Lever
2005-12-01 20:34 ` Chris Shoemaker
@ 2005-12-01 21:34 ` Junio C Hamano
2005-12-01 21:54 ` Chris Shoemaker
2005-12-01 22:06 ` Chuck Lever
1 sibling, 2 replies; 15+ messages in thread
From: Junio C Hamano @ 2005-12-01 21:34 UTC (permalink / raw)
To: cel; +Cc: git
Chuck Lever <cel@citi.umich.edu> writes:
> in the man page for git-diff-index (posted here):
>
> http://www.kernel.org/pub/software/scm/git/docs/git-diff-tree.html
You mean git-diff-index.html, not diff-tree.html, I suppose.
> there are several references to "git-diff-tree" where it seems like
> "git-diff-index" is really meant.
Non-cached Mode
---------------
The "non-cached" mode takes a different approach, and is potentially
the more useful of the two in that what it does can't be emulated with
a "git-write-tree" + "git-diff-tree". Thus that's the default mode.
...
The non-cached version asks the question:
show me the differences between HEAD and the currently checked out
tree - index contents _and_ files that aren't up-to-date
which is obviously a very useful question too, since that tells you what
you *could* commit. Again, the output matches the "git-diff-tree -r"
output to a tee, but with a twist.
Linus does mean diff-tree here.
We had diff-files and diff-tree back then, but diff-index came
much later under the name diff-cache. He is explaining what
git-diff-index does in terms of git-diff-tree in this paragraph.
He could have said:
You *could* emulate it with first copying the index file
into a temporary file, git-update-index all the modified
paths in the working tree into that temporary index file and
git-write-tree that, and then run git-diff-tree.
but that is not practical.
> also, git-diff-index supports a "-r" option, but that doesn't seem to be
> documented on this page.
What Chris Shoemaker said is right.
But we could do this instead if you want. I am neutral myself.
-- >8 --
[PATCH] Documentation: mention -r for all commands from the diff family.
We did not mention 'git-diff-index' and friends take '-r' but
silently ignore it, because they always operate on the whole tree.
Signed-off-by: Junio C Hamano <junkio@cox.net>
---
diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt
index 6b496ed..7299903 100644
--- a/Documentation/diff-options.txt
+++ b/Documentation/diff-options.txt
@@ -58,5 +58,11 @@
Swap two inputs; that is, show differences from index or
on-disk file to tree contents.
+-r::
+ Recurse into sub-trees. Note that this makes difference
+ only with `git-diff-tree`. Other commands in the `git-diff-\*`
+ family always operate on the whole project tree and this
+ option is a no-op to them.
+
For more detailed explanation on these common options, see also
link:diffcore.html[diffcore documentation].
diff --git a/Documentation/git-diff-tree.txt b/Documentation/git-diff-tree.txt
index 9a2947e..8f66119 100644
--- a/Documentation/git-diff-tree.txt
+++ b/Documentation/git-diff-tree.txt
@@ -33,9 +33,6 @@ include::diff-options.txt[]
Note that this parameter does not provide any wildcard or regexp
features.
--r::
- recurse into sub-trees
-
-t::
show tree entry itself as well as subtrees. Implies -r.
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: documentation issues
2005-12-01 21:34 ` Junio C Hamano
@ 2005-12-01 21:54 ` Chris Shoemaker
2005-12-01 22:06 ` Chuck Lever
1 sibling, 0 replies; 15+ messages in thread
From: Chris Shoemaker @ 2005-12-01 21:54 UTC (permalink / raw)
To: Junio C Hamano; +Cc: cel, git
On Thu, Dec 01, 2005 at 01:34:55PM -0800, Junio C Hamano wrote:
> > also, git-diff-index supports a "-r" option, but that doesn't seem to be
> > documented on this page.
>
> What Chris Shoemaker said is right.
>
> But we could do this instead if you want. I am neutral myself.
I think it is more clear without this, since we imply elsewhere that
diff-* accepts the options in diff-options.txt. Documenting "-r" in
the only place it applies (diff-tree) means we don't need exceptions
anywhere else.
Incidentally, I think it would make more sense if diff-tree defaulted
to recursive behavior and required a flag to produce non-recursive
behavior, but I realize that's impractical now, and only of minor
benefit.
-chris
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: documentation issues
2005-12-01 21:34 ` Junio C Hamano
2005-12-01 21:54 ` Chris Shoemaker
@ 2005-12-01 22:06 ` Chuck Lever
1 sibling, 0 replies; 15+ messages in thread
From: Chuck Lever @ 2005-12-01 22:06 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
[-- Attachment #1: Type: text/plain, Size: 358 bytes --]
Junio C Hamano wrote:
>>also, git-diff-index supports a "-r" option, but that doesn't seem to be
>>documented on this page.
>
>
> What Chris Shoemaker said is right.
>
> But we could do this instead if you want. I am neutral myself.
thanks for clarifying.
StGIT does use "git-diff-index -r" in git.__tree_status(). i think it
can be safely removed.
[-- Attachment #2: cel.vcf --]
[-- Type: text/x-vcard, Size: 445 bytes --]
begin:vcard
fn:Chuck Lever
n:Lever;Charles
org:Network Appliance, Incorporated;Open Source NFS Client Development
adr:535 West William Street, Suite 3100;;Center for Information Technology Integration;Ann Arbor;MI;48103-4943;USA
email;internet:cel@citi.umich.edu
title:Member of Technical Staff
tel;work:+1 734 763 4415
tel;fax:+1 734 763 4434
tel;home:+1 734 668 1089
x-mozilla-html:FALSE
url:http://www.monkey.org/~cel/
version:2.1
end:vcard
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Documentation Issues
@ 2011-11-28 22:34 Tom King
2011-11-30 9:02 ` bernhard.guillon
0 siblings, 1 reply; 15+ messages in thread
From: Tom King @ 2011-11-28 22:34 UTC (permalink / raw)
To: openembedded-devel
on 11/26/11:
Bernhard Guillon Bernhard.Guillon at opensimpad.org
>Hi,
>today I wanted to create a Template:We-move-to-oe-core (something like
>this artikle is a stub) to mark all pages which needs a change and inform
>new users about the move to oe-core. I created an account but I am unable
>to edit anything. I even cannot edit my user page.>>
>
>Best regards,
>Bernhard
You now have access
Tom
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Documentation Issues
2011-11-28 22:34 Documentation Issues Tom King
@ 2011-11-30 9:02 ` bernhard.guillon
0 siblings, 0 replies; 15+ messages in thread
From: bernhard.guillon @ 2011-11-30 9:02 UTC (permalink / raw)
To: openembedded-devel
----- Original Message -----
From: ka6sox@gmail.com
To: openembedded-devel@lists.openembedded.org
Date: 28.11.2011 23:34:56
Subject: Re: [oe] [OE] Documentation Issues
> on 11/26/11:
>
> Bernhard Guillon Bernhard.Guillon at opensimpad.org
>
> >Hi,
> >today I wanted to create a Template:We-move-to-oe-core (something like
> >this artikle is a stub) to mark all pages which needs a change and inform
> >new users about the move to oe-core. I created an account but I am unable
> >to edit anything. I even cannot edit my user page.>>
> >
> >Best regards,
> >Bernhard
>
> You now have access
Hi,
thanks but I think you approved the wrong Bernhard :)
My username at the wiki is "Mr-nice" because Bernhard was allready taken.
Best regards,
Bernhard
^ permalink raw reply [flat|nested] 15+ messages in thread
* documentation issues
@ 2016-07-05 21:17 Xen
2016-07-06 0:57 ` Ian Kent
0 siblings, 1 reply; 15+ messages in thread
From: Xen @ 2016-07-05 21:17 UTC (permalink / raw)
To: autofs
Hi,
a few things.
A user attempting to use autofs for the first time will assume that
autofs will mount mount poins that already exist. Nowhere is it stated
that mount points will only get created when accessed (through a "direct
path").
Such a user (such as me) trying to use this thing (even with a tutorial
on Ubuntu site) will be flabbergasted that nothing happens; he/she
expects mount entries to appear, but nothing happens.
This renders the "nobrowse" default dysfunctional for a desktop user,
who expects to see something before going there. It only works for
automated systems, really.
Further, you will only become aware of "browse" after having been able
to use the system, because otherwise you won't go reading entire manuals
just to see what is wrong.
So in my case someone explained to me that the mount points would only
get created when accessed, at which point I finally was able to have
some result.
So I say two things:
- browse only works for static maps, and what person with a static map
is going to run into performance issues when mount points are created in
advance? Can we please remove this from the default config? (turning it
off).
- browse being turned off by default combined with a complete lack of
mention that you need to access these "nonexistent" directory paths /
components before you will be able to see them, turns autofs into a
complete mystery for someone who is not privy to the details yet.
Further I would say that on a desktop OS, the most likely use case is
going to be this:
- have several shares in your home network
- want to access them through a GUI
- prefer automounting since mounting at boot can be problematic
- need to see them before you can access them in a GUI
- only alternative is "bookmarks" or "places" that work regardless of
the things not being visible/listed in the directory.
Then I will also say,
that there is no documentation on the format of the map files other than
auto.master. The documentation for map files is this:
cat /etc/auto.misc.
That is the documentation.
After you've figured out that e.g. auto.smb wants the servername as the
key ($1) the documentation becomes this:
/etc/auto.smb <servername>
>> watch results pour out.
But auto.smb doesn't mention that it wants the servername as the key.
Of course, it does mention that:
# You'll be able to access Windows and Samba shares in your network
# under /cifs/host.domain/share
But at this point you still don't know that the "host.domain" part will
be invisible until you access it.
I'm sorry if I sound abrasive but I was doing freaking straces and even
kernel traces before realizing how this was supposed to work. There is
just no documentation on it. The most important thing is missing. Is not
mentioned.
I wasted so much time trying to figure out how this was supposed to
work... in the game of Zelda 1 I believe in some dungeon there is a wall
somewhere that you can walk through. You need to go through that wall to
get ahead in the game, but there is no visual indication that you can go
through. It is a secret.
Well. So is this :P.
How is anyone supposed to know that automounting a "mount point" does
not require a mount point to exist in advance?????
I had even (previously, for something else) been reading kernel source
code in namei.c or whatever and came across autofs in e.g. lookup_slow
or something. Even then it never dawned to me that the typical use case
would be for some mount point to not exist yet.
So you start this thing and you cannot write to the mount point any
longer so you know it is getting managed.
But nothing ever shows. I even .... well let's not say that here :P.
;-) I had done "touch a" and the file was not created; however I had put
some command in auto.smb that would output $1 to some file. So the file
said "a" but it never occured to me that this was the result of my
"touch a" command ;-). Stupid!.
So I would plead for just two things for other people:
a) get rid of the browse_mode = no, in the configuration file, for
static mounts
b) say something about mounts not being created automatically in the man
page for auto.master, if nothing else. If you also do (a), this only
applies now to programmatic mounts.
=============================================================
You could also do nothing but change the default auto.master:
-------------------------------------------------------------
# This is the sample auto.master file installed on your system.
# This map contains entries for mount points that are to be managed
# by autofs.
#
# Each of these mount points will be mounted with the required map
# file as the parameter to the autofs filesystem module that will
# manage this mount point for you in one of its threads.
# Each entry mentions a mount point that must already exist on your
# system, as well as a map file to be loaded onto that mount point.
# Its format is as follows:
# <mount-point> [map-type[,format]:]<map> [options]
# where <mount-point> indicates a directory on your filesystem and
# <map> indicates the map file to be used for it.
# For further details see the man page for auto.master(5).
# Example:
#
# /misc /etc/auto.misc browse
#
# This will create entries from /etc/auto.misc under /misc. The browse
# option guarantees that its entries will be created straight away as
# sub-directories to /misc.
# Without the browse option, they would only be created after being
# accessed, e.g. by direct reference. The browse option is only
# applicable to static map files.
#
#
# /net -hosts
#
# This mounts all accessible NFS shares from hosts in your network
# under /net/<hostname>/ when you first access that path.
# NOTE: mounts done from a hosts map will be mounted with the
# "nosuid" and "nodev" options unless the "suid" and "dev"
# options are explicitly given.
#
#
# Include *.autofs from /etc/auto.master.d/ and the included files
# must conform to the format of this file.
+dir:/etc/auto.master.d
# Include another central master map if it can be found using
# nsswitch sources. Note that duplicate entries will be discarded
# as keys must be unique and the keys from this file will take
# precedence. That means you can only specify each mount point once.
+auto.master
# Note that map files can be scripts that take the accessed path as a
# parameter. E.g. the following would mount all Samba shares from a
# certain host under /cifs/<hostname>/* when /cifs/<hostname> was
# accessed:
# /cifs program:/etc/auto.smb
#
# See /etc/auto.smb for more documentation.
-------------------------------------------------------------
I mean you could rewrite more documentation but this is the simplest I
could do right here right now.
I think that would clarify a lot for everyone but of course perhaps you
would want to rewrite more so the central documentation is also up to
date, but please see this as a more modest attempt for making it more
accessible to a new user.
Regards,
Bart Schouten.
--
To unsubscribe from this list: send the line "unsubscribe autofs" in
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: documentation issues
2016-07-05 21:17 documentation issues Xen
@ 2016-07-06 0:57 ` Ian Kent
2016-07-06 4:47 ` Xen
0 siblings, 1 reply; 15+ messages in thread
From: Ian Kent @ 2016-07-06 0:57 UTC (permalink / raw)
To: Xen, autofs
On Tue, 2016-07-05 at 23:17 +0200, Xen wrote:
> Hi,
>
> a few things.
>
> A user attempting to use autofs for the first time will assume that
> autofs will mount mount poins that already exist. Nowhere is it stated
> that mount points will only get created when accessed (through a "direct
> path").
Umm, "direct path" is an unfortunate choice here as you are talking about autofs
indirect mount maps.
Direct mount maps create a mount trigger for each map entry and so show up as
mount points in the file system.
There are reasons for it being this way.
>
> Such a user (such as me) trying to use this thing (even with a tutorial
> on Ubuntu site) will be flabbergasted that nothing happens; he/she
> expects mount entries to appear, but nothing happens.
>
> This renders the "nobrowse" default dysfunctional for a desktop user,
> who expects to see something before going there. It only works for
> automated systems, really.
Your assuming that autofs primary usage is targeted at the desktop.
It's often not the best use case for that.
There are other more suitable automount alternatives for GUI desktops.
>
> Further, you will only become aware of "browse" after having been able
> to use the system, because otherwise you won't go reading entire manuals
> just to see what is wrong.
>
> So in my case someone explained to me that the mount points would only
> get created when accessed, at which point I finally was able to have
> some result.
>
>
> So I say two things:
>
> - browse only works for static maps, and what person with a static map
> is going to run into performance issues when mount points are created in
> advance? Can we please remove this from the default config? (turning it
> off).
Well, quite a lot of current users actually.
Consider what can happen with a few hundred or a few thousand entries in an
indirect map.
Even though the browse option was added it has a specific set of problems.
First the kernel does not know if you are just listing a directory or actually
need to mount something.
So at the moment, certain types of system call (the module can't know the exact
system call either) don't cause a call back to perform a mount but often user
space will later make a system call that will cause a mount to occur anyway.
That leads to sometimes seeing directories that are those of the autofs file
system not those of the mounted file system, so they have completely different
attributes to those after an automount has been done, a problem in itself.
And, it can often lead to a mount storm, mounting everything in the directory.
OK for a few dozen mounts in a map but really bad for anything with more than a
few hundred entries.
Another reason for the default is that, because of this, historically there was
no "browse" option and this maintains what is (should be) expected.
>
> - browse being turned off by default combined with a complete lack of
> mention that you need to access these "nonexistent" directory paths /
> components before you will be able to see them, turns autofs into a
> complete mystery for someone who is not privy to the details yet.
It's been a long time for me so I probably have forgotten what it's like for
someone starting out.
And so, how would I know where in the man pages to put that so it gets noticed
by new users, perhaps from your perspective, you could point out a few key
places where it should be added, or better still send a patch.
>
>
> Further I would say that on a desktop OS, the most likely use case is
> going to be this:
>
> - have several shares in your home network
> - want to access them through a GUI
> - prefer automounting since mounting at boot can be problematic
> - need to see them before you can access them in a GUI
> - only alternative is "bookmarks" or "places" that work regardless of
> the things not being visible/listed in the directory.
Either use a different automounting mechanism or use a direct mount map.
That would satisfy all these needs, all be it with the map entries always being
mounted on access.
The limitation of these is you can't have a direct map path that is within
another automounted path, if you need to do that you need to use a more
complicated setup.
>
> Then I will also say,
>
> that there is no documentation on the format of the map files other than
> auto.master. The documentation for map files is this:
That's not quite right.
Man page autofs(5) has a bit of information on both the Sun and amd format maps.
>
> cat /etc/auto.misc.
>
> That is the documentation.
>
> After you've figured out that e.g. auto.smb wants the servername as the
> key ($1) the documentation becomes this:
>
> /etc/auto.smb <servername>
>
> > > watch results pour out.
>
> But auto.smb doesn't mention that it wants the servername as the key.
>
> Of course, it does mention that:
>
> # You'll be able to access Windows and Samba shares in your network
> # under /cifs/host.domain/share
>
> But at this point you still don't know that the "host.domain" part will
> be invisible until you access it.
By definition a program map can't know what keys may be passed to it.
And, yes, even autofs(5) doesn't say explicitly that a program map doesn't know
what keys may be passed to it, perhaps that should be ammended.
>
> I'm sorry if I sound abrasive but I was doing freaking straces and even
> kernel traces before realizing how this was supposed to work. There is
> just no documentation on it. The most important thing is missing. Is not
> mentioned.
>
> I wasted so much time trying to figure out how this was supposed to
> work... in the game of Zelda 1 I believe in some dungeon there is a wall
> somewhere that you can walk through. You need to go through that wall to
> get ahead in the game, but there is no visual indication that you can go
> through. It is a secret.
>
> Well. So is this :P.
>
> How is anyone supposed to know that automounting a "mount point" does
> not require a mount point to exist in advance?????
>
> I had even (previously, for something else) been reading kernel source
> code in namei.c or whatever and came across autofs in e.g. lookup_slow
> or something. Even then it never dawned to me that the typical use case
> would be for some mount point to not exist yet.
>
> So you start this thing and you cannot write to the mount point any
> longer so you know it is getting managed.
>
> But nothing ever shows. I even .... well let's not say that here :P.
>
> ;-) I had done "touch a" and the file was not created; however I had put
> some command in auto.smb that would output $1 to some file. So the file
> said "a" but it never occured to me that this was the result of my
> "touch a" command ;-). Stupid!.
>
> So I would plead for just two things for other people:
>
> a) get rid of the browse_mode = no, in the configuration file, for
> static mounts
No, that has it's own set of problems which people need to be aware of before
choosing to use the "browse" option.
> b) say something about mounts not being created automatically in the man
> page for auto.master, if nothing else. If you also do (a), this only
> applies now to programmatic mounts.
auto.master(5) isn't the place for that, autofs(5) is better and, as I say, make
some suggestions of provide a patch.
>
> =============================================================
>
> You could also do nothing but change the default auto.master:
> -------------------------------------------------------------
>
> # This is the sample auto.master file installed on your system.
> # This map contains entries for mount points that are to be managed
> # by autofs.
> #
> # Each of these mount points will be mounted with the required map
> # file as the parameter to the autofs filesystem module that will
> # manage this mount point for you in one of its threads.
>
> # Each entry mentions a mount point that must already exist on your
> # system, as well as a map file to be loaded onto that mount point.
> # Its format is as follows:
>
>
> # <mount-point> [map-type[,format]:]<map> [options]
>
> # where <mount-point> indicates a directory on your filesystem and
> # <map> indicates the map file to be used for it.
>
> # For further details see the man page for auto.master(5).
>
> # Example:
> #
> # /misc /etc/auto.misc browse
> #
> # This will create entries from /etc/auto.misc under /misc. The browse
> # option guarantees that its entries will be created straight away as
> # sub-directories to /misc.
>
> # Without the browse option, they would only be created after being
> # accessed, e.g. by direct reference. The browse option is only
> # applicable to static map files.
> #
> #
> # /net -hosts
> #
> # This mounts all accessible NFS shares from hosts in your network
> # under /net/<hostname>/ when you first access that path.
>
>
> # NOTE: mounts done from a hosts map will be mounted with the
> # "nosuid" and "nodev" options unless the "suid" and "dev"
> # options are explicitly given.
> #
> #
> # Include *.autofs from /etc/auto.master.d/ and the included files
> # must conform to the format of this file.
>
> +dir:/etc/auto.master.d
>
> # Include another central master map if it can be found using
> # nsswitch sources. Note that duplicate entries will be discarded
> # as keys must be unique and the keys from this file will take
> # precedence. That means you can only specify each mount point once.
>
> +auto.master
>
> # Note that map files can be scripts that take the accessed path as a
> # parameter. E.g. the following would mount all Samba shares from a
> # certain host under /cifs/<hostname>/* when /cifs/<hostname> was
> # accessed:
>
> # /cifs program:/etc/auto.smb
> #
> # See /etc/auto.smb for more documentation.
>
> -------------------------------------------------------------
I'll have a look at doing this but beware, often distributions use there own
default master map which I have no control over.
>
> I mean you could rewrite more documentation but this is the simplest I
> could do right here right now.
>
> I think that would clarify a lot for everyone but of course perhaps you
> would want to rewrite more so the central documentation is also up to
> date, but please see this as a more modest attempt for making it more
> accessible to a new user.
Yes, adding the fact that mount point directories aren't pre created for
indirect maps somewhere in auto.master(5) and in a couple of places in autofs(5)
is a good idea. You are right it's something that can catch the unaware.
Ian
--
To unsubscribe from this list: send the line "unsubscribe autofs" in
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: documentation issues
2016-07-06 0:57 ` Ian Kent
@ 2016-07-06 4:47 ` Xen
2016-07-06 12:48 ` Ian Kent
0 siblings, 1 reply; 15+ messages in thread
From: Xen @ 2016-07-06 4:47 UTC (permalink / raw)
To: Autofs
Ian Kent schreef op 06-07-2016 2:57:
> On Tue, 2016-07-05 at 23:17 +0200, Xen wrote:
>> Hi,
>>
>> a few things.
>>
>> A user attempting to use autofs for the first time will assume that
>> autofs will mount mount poins that already exist. Nowhere is it stated
>> that mount points will only get created when accessed (through a
>> "direct
>> path").
>
> Umm, "direct path" is an unfortunate choice here as you are talking
> about autofs
> indirect mount maps.
>
> Direct mount maps create a mount trigger for each map entry and so show
> up as
> mount points in the file system.
>
> There are reasons for it being this way.
So you are berating me for choice of words ;-).
The only difference between direct and indirect seems to be that with
direct the share is mounted "directly" on top of the specified mount
point (actually, none is specified, it is mounted on the key returned
from the map) and as a result it is not possible to have lazy
initialization (unless you merged e.g. the root filesystem with an
overlay filesystem) and so you are required to create this mountpoint,
whereas with "indirect" you control the mount point itself and can
choose whether to create the subdirectories or not (if you can acquire a
list). "Directly" seems to mean "directly on the filesystem" whereas
"indirectly" seems to mean: inside our own little enclave.
And always as a subdirectory of that. Not even technically necessary,
you could even have a "indirect map" that triggered mounting I guess,
don't know. I guess not.
>
>>
>> Such a user (such as me) trying to use this thing (even with a
>> tutorial
>> on Ubuntu site) will be flabbergasted that nothing happens; he/she
>> expects mount entries to appear, but nothing happens.
>>
>> This renders the "nobrowse" default dysfunctional for a desktop user,
>> who expects to see something before going there. It only works for
>> automated systems, really.
>
> Your assuming that autofs primary usage is targeted at the desktop.
> It's often not the best use case for that.
>
> There are other more suitable automount alternatives for GUI desktops.
Linus Torvalds says he developed Linux as a desktop OS. And how
chagrined he is that it didn't succeed in just that. Well, now we know
the reason for that ;-).
I know there are probably alternatives; but they are mostly useless for
someone who wants to do it on his own. Desktop environments often do not
even have mount operations on directories (even) when they are described
in fstab. There is no other way that I know of to automatically mount
e.g. samba shares, unless you navigate directly to it (and then they end
up in some weird location in the filesystem, if at all). There is
usually also no "user based" fstab; where you can describe mounts
specifically for your user, that are then mounted through e.g. fuse, or
something else that can do suid. Perhaps you mean udisks or udisksd or
udisksctl but I'm not even sure that supports network-filesystems, they
are certainly not shown in udisksctl status.
Dolphin can not actually mount a share to some fixed location, the Nemo
I am using doesn't even succeed in browsing the network. For me there
are only two solutions that I see, either fstab or autofs. Once you know
how to do it, running /etc/auto.smb <host> quickly returns a list of
shares (if you've set the credentials file) that you can then edit to
become a static map with the browse option.
I do not see what is better suited currently to auto-mounting
samba-shares. Anything that would work well, would work from both the
shell and the GUI, in that the systems have to be linked, and ideally
what the GUI does is stored in state files that work equally well from
the shell. Any persistent mount would have to be stored somewhere on
disk. Then the link would need to be automounted, OR mounted through
e.g. libpam-mount. There is nothing wrong with mounting upon logon. And
that allows for specific user-dependent stuff. (An automount depending
on what user first accesses it, is problematic). (As for Samba). So
perhaps logon-mounts are better suited (just restore the mount from the
previous session, in that sense) because the $UID problem is hard to
solve for autofs, you must either duplicate all entries, and hardcore
the UIDs you need, for every user, or I don't know what, prevent other
users (including root) from accessing the share you need. You'd
basically need map files in auto.master.d for every user, including a
map file for each person to specify the shares, if you want browsable,
or a modified version of auto.smb that mounts individual shares when
accessed. (In the latter case you'd have no browse map).
But this script doesn't know what it is being called on, so now you need
a variable I guess for each of those .d/ files, so that their entries
would be something like:
/media/<user>/nas /etc/auto-short.smb -Duser=<user> which would then be
used for the samba $UID.
If there is a better way to do this, I don't know. I see no alternatives
other than libpam-mount and of course some GUI could do it, but then
you'd really just have a form of duplicated functionality between autofs
and it.
>> - browse only works for static maps, and what person with a static map
>> is going to run into performance issues when mount points are created
>> in
>> advance? Can we please remove this from the default config? (turning
>> it
>> off).
>
> Well, quite a lot of current users actually.
>
> Consider what can happen with a few hundred or a few thousand entries
> in an
> indirect map.
Alright, but what indirect maps can cause browse tables to be shown?
Only static maps, right? A programmatic map can only return a single
entry. I have not looked into the other ones, but I suppose LDAP is more
like a programmatic map than anything else.
So then consider that we only use a static map here. An actual file with
thousands of entries? Of course it can happen. But what would be the
point of that still (as opposed to LDAP or programmatic).
> Even though the browse option was added it has a specific set of
> problems.
>
> First the kernel does not know if you are just listing a directory or
> actually
> need to mount something.
Do you mean the directory containing the (indirect) entries (e.g. the
managed directory) or one of those entries themselves?
> So at the moment, certain types of system call (the module can't know
> the exact
> system call either) don't cause a call back to perform a mount but
> often user
> space will later make a system call that will cause a mount to occur
> anyway.
>
> That leads to sometimes seeing directories that are those of the autofs
> file
> system not those of the mounted file system, so they have completely
> different
> attributes to those after an automount has been done, a problem in
> itself.
Oh... such as ownership etc.
The typical "I mount this, and now suddenly it is not root.root but
xen.staff".
> And, it can often lead to a mount storm, mounting everything in the
> directory.
But how can that happen? If I do; "for f in *; ls $f; done" sure.
>
> OK for a few dozen mounts in a map but really bad for anything with
> more than a
> few hundred entries.
After thinking a little I came up with what could perhaps be some
default use case. You have terminals mounting home directories. On the
"terminal machine" you may have just a single user. Through LDAP you
find the home directory. There is obviously no sense for all users in
the LDAP system to now have precreated mount points. The only thing that
could make sense is to have an "invisible" user directory that now gets
mounted.
I can see no reason to have hundreds of mount points in a directory
unless they cannot conform to a specific pattern. If they follow a
pattern, it is likely that only a few of them need to be mounted at any
time. In that case being able to browse it seems nonsensical. An
aggregate of hundreds of different mounts at the same time seems very
weird. Weird to have a diverse set of unique names to begin with. As if
all of them were manually added in some way. If they aren't manually
added, but automatically, then why have a static list? Would you not be
better off putting that in a database? And if you'd have so many, we'd
assume they could be different users, or different websites, etc. We
also assume not all of them are going to be needed, just a subset. But
so now you have a system on which this list is statically created but
dynamically updated. This list sits on the disk of the local system. But
you're not querying a database (could be just as easy) that could also
store this list and return the entries one by one when needed. The
static file is the database.
Seems an improper use case but yeah. I don't know how you can have a
static list that is huge while not choosing to use a database to manage
it. Because a static map; now you need routines to update it, delete
entries from it.
Maybe I'm missing something here.
> Another reason for the default is that, because of this, historically
> there was
> no "browse" option and this maintains what is (should be) expected.
Yeah I thought so, because of the comments near the timeout value.
However that is a reason to never change anything ever. Someone
mistakenly choosing "browse" will very quickly find out.
If this person really has hundreds of items in his list, he will notice
within a second that they are all visible. If this person really has
hundreds to thousands of items, he or she may also be expected to know
the ins and outs of the system, and to be aware of the browse option, or
be able to find out. This is not going to be a novice user.
On the other hand, anyone new to the system will have modest goals.
However those modest goals are frustrated and refuted because the system
is geared towards that professional that already knows everything, and
for whom adding nobrowse, or changing the config file, would probably be
a nobrainer. The new user however may be flabbergasted that it either
does not work, or not the way she feels it should work (making a list,
and then not seeing it in action).
>> - browse being turned off by default combined with a complete lack of
>> mention that you need to access these "nonexistent" directory paths /
>> components before you will be able to see them, turns autofs into a
>> complete mystery for someone who is not privy to the details yet.
>
> It's been a long time for me so I probably have forgotten what it's
> like for
> someone starting out.
>
> And so, how would I know where in the man pages to put that so it gets
> noticed
> by new users, perhaps from your perspective, you could point out a few
> key
> places where it should be added, or better still send a patch.
This happens a lot, it is no ones fault. I guess people who knows the
ins and outs of something usually jump smack in the middle, and forget
to mention what the system is really like from the outside. A fish
doesn't notice the water, we don't notice the air.
We are too much immersed in it.
I think there are 3-4 things I would explain.
First the auto.master file on my system mentions man autofs as a place
for seeing the format of the (sub)map files. However there is nothing in
there. So that part is missing, but in a sense the contents of auto.misc
is already somewhat sufficient for that, but still annoying that there
is no man page.
The second part is that it is often hard to understand what is meant by
"key". In the master file, key means the mount point that supposedly
already exists in the filesystem. In the sub-maps, key means the
subdirectory but also the component of the path getting accessed by the
user. Both types of files are called map files, and both kind of keys
are called keys. This is aggravated by the fact that there is no man
page for the sub-maps, that I know of . Auto.smb then speaks of a key,
but it doesn't say what it is. Of course after a while you realize it is
to be the host, but then you don't know how it knows about this host.
Since at that point you don't realize that this is input from the
filesystem (e.g. a stat operation) on "hidden directories" you are
really clueless as to where this information is coming from ;-).
You don't imagine that every freaking access of a directory or path
component in the managed directory is going to result in network access.
You could do a "for f in `seq 1 10000000`; do vdir $f; done" and have
fun.
(Don't know if that would still be the case for "browse" maps).
So this hidden directory, secret door thing is really the most confusing
of all.
It's somewhat similar to something I might like to do, but still you
don't really expect it ;-).
So the 3-4 things are:
create a man page or section for the format of the sub-maps
indicate more clearly that programmatic maps in principle return a
single entry
indicate that programmatic maps currently require access of a path
component and that this path component (user action) is the key to the
script.
indicate that this is true for "no browse" on "static maps" as well, and
that directories are only created when they are accessed.
And that no-browse is the configured default.
Currently the documentation for the master map and for (indirect)
sub-maps is really in auto.master and auto.misc.
Reading config files is usually a lot more pleasant than man pages ;-)
so that's not such a huge problem, but you can't learn anything from a
very limited set of examples either ;-).
For instance: direct map won't work if not prefixed with /, but will
also not give error if not. Indirect map (I think) won't work if
prefixed with /, but will also not give error if not.
I could say more but my thumb is hurting (infected) so I gotta quit
this.
I don't mind writing documentation. But I'm not familiar yet with man
pages and their technical structure and all.
I'll have to see. Thank you for the interest in any case :).
>>
>>
>> Further I would say that on a desktop OS, the most likely use case is
>> going to be this:
>>
>> - have several shares in your home network
>> - want to access them through a GUI
>> - prefer automounting since mounting at boot can be problematic
>> - need to see them before you can access them in a GUI
>> - only alternative is "bookmarks" or "places" that work regardless of
>> the things not being visible/listed in the directory.
>
> Either use a different automounting mechanism or use a direct mount
> map.
>
> That would satisfy all these needs, all be it with the map entries
> always being
> mounted on access.
>
> The limitation of these is you can't have a direct map path that is
> within
> another automounted path, if you need to do that you need to use a more
> complicated setup.
I think that limitation indicates why using relative paths is so much
more pleasant. A map file using relative files can be "moved around". A
map file using absolute paths cannot.
Could you not make a direct map out of the key of the master file, and
the keys of the sub-maps?
If there is really a need for huge static map files (I haven't studied
LDAP) in principle all you need is a syntax to differentiate between the
two, right.
/- ( /this/is/my/abs/path )
or
/this/is/my/abs ( -/path )
could be identical
normally ( /bla/bla ) indicates an absolute path and can only be used in
a direct map, from what I've seen. You *could* cause it to turn this
"indirect map" into a direct one.
ie. ( bla/bla ) == indirect
( /bla/bla ) == direct.
A direct map is always a static file right? But then it doesn't matter
what part of the path is specified in what file.
Or
( bla/bla ) == indirect
( -/bla/bla ) == direct
So you get:
/start/of/the (-/path )
or
/start/of/the/- ( path )
Then any path in the master file ending with /- would be a direct path.
And would cause the (static) map file to be treated as direct.
>
>>
>> Then I will also say,
>>
>> that there is no documentation on the format of the map files other
>> than
>> auto.master. The documentation for map files is this:
>
> That's not quite right.
>
> Man page autofs(5) has a bit of information on both the Sun and amd
> format maps.
Oh I am sorry. I think many users are not versed in the numbers for the
man pages. I for one do not notice the difference and I almost never use
one of those numbers. Sorry, I seriously missed that.
I only noticed just now because autofs(8) references autofs(5), and I'm
like ....huh?
Okay, allright. Missed that.
Seriously bad system if you ask me, but okay.
So I guess you can have direct maps with LDAP etc. too.
I guess the wildcard also solves the many-user problem.
Well, but only for the sub-map. You couldn't get autofs to manage
/media, so it needs to be /media/user/<aggregate> in which user can't
suddenly be a wildcard unless you use a direct map. You could expand
that to include the master file though:
/media/*/nas /etc/nas-shares.map
And then in /etc/nas-shares.map:
share1 -fstype=xxx,uid=& ://nas/share1
share2 -fstype=xxx,uid=& ://nas/share2
I can't see whether LDAP supports browse, I assume it must, since it
supports direct.
> By definition a program map can't know what keys may be passed to it.
> And, yes, even autofs(5) doesn't say explicitly that a program map
> doesn't know
> what keys may be passed to it, perhaps that should be ammended.
In principle even a program map could read all of the available keys
from whatever database it consults, and return all of them; or return
something only (as it does now, perhaps) when a given key matches (is
found).
If you wanted that you would need the program script to e.g. support a
wildcard as parameter. Meaning, all scripts must then check for "*" to
be passed to it, in order to return the full list that they can acquire
(if even possible) or at least return an error of some kind to say that
they don't support it.
You'd need a parameter for it, and any script would need to be aware of
that parameter.
That's either gonna be a wildcard or something given on $2, in that case
every existing script would already be compatible with it, since it
simply disregards $2.
So, for instance, if $2 is "browse" the script may choose to return a
browse map, or list of shares, with whatever options are available (it
could even return the UID/USER of the share given options, so that the
created directory would have the same UID as the to be mounted share!)
-- meaning it might simply return ALL entries it could possibly return
in the default format, which is the meaning of the wildcard, and the
program (autofs daemon or module(?)) would be able to generate the
appropriate directory entries based on that. So in that case you're
probably going to be rid of the problem of the non-matching state of
pre- and post-mount of directories.
>> a) get rid of the browse_mode = no, in the configuration file, for
>> static mounts
>
> No, that has it's own set of problems which people need to be aware of
> before
> choosing to use the "browse" option.
Not everyone.
I have like 5 mounts in this share. 5 shares in this mount. I have not
noticed issues to begin with. Maybe there are issues like checking
permissions on the directory prior to mounting it, and then being wrong
about that once it is mounted. But still, that doesn't seem to happen.
Actually, something funny is going on. 2 of the 8 shares that are
'automatically' loaded are not accessible. "No such file or directory".
No, that's nothing but a permission error. Still I am allowed to see
them but not use them. For a static file no issue; just delete them.
I don't really see what I need to be aware of prior to using browse?
If it is the most sensible "novice" use case, why not allow it by
default? It things go mayhem people can turn it off, or you could even
turn it off when the number of mounts in a map exceeds 20 or 30 or 50.
It's an arbitrary number, but what if I am wrong about LDAP.
What about you mean it is turned off by default for LDAP, but you do not
consider static files with that?
What about it does function for ldap. What about we just need a separate
default for LDAP and its like, than we do for static?
Are you seriously considering static files, or do you mean LDAP, yp,
hisplus, and hesoid?
For anyone using an actual database, I concur.
For static, I just disagree. That is the start case for anyone.
>
>> b) say something about mounts not being created automatically in the
>> man
>> page for auto.master, if nothing else. If you also do (a), this only
>> applies now to programmatic mounts.
>
> auto.master(5) isn't the place for that, autofs(5) is better and, as I
> say, make
> some suggestions of provide a patch.
autofs(8) is loaded before autofs(5). It's a good document, autofs(5),
but most people may not even notice it. Personally I would probably
choose to call them:
autofs.master(5) and autofs.map(5). But then, I also consider
auto.master a very nondescript name.
In this way no one can ever get confused, so you might just rename
autofs(5) to autofs.map(5).
Or even auto.map(5) if that is necessary, but I wouldn't do that.
> I'll have a look at doing this but beware, often distributions use
> there own
> default master map which I have no control over.
I have no clue what mine does, this is Debian, and then Ubuntu, and then
Kubuntu ;-) but it is just the Debian package still.
You don't have to follow my example or suggestion, maybe there is a
better improvement than this, it was just an example, I guess. Or I
could guess.
That was just a thing I was able to change without editing man files
;-).
I will look into providing a patch, but I hope you can rename autofs(5)
to autofs.map(5) before doing anything like that. I don't feel like
improving a system I know myself haven't had access to, in that sense. I
don't mean you have to do that straight away, but if that is a possible
direction to go, or change to make, then I could supply a patch or
anything based on the system that would result from that, seeing that
autofs(5) is already pretty good in that sense.
>> I mean you could rewrite more documentation but this is the simplest I
>> could do right here right now.
>>
>> I think that would clarify a lot for everyone but of course perhaps
>> you
>> would want to rewrite more so the central documentation is also up to
>> date, but please see this as a more modest attempt for making it more
>> accessible to a new user.
>
> Yes, adding the fact that mount point directories aren't pre created
> for
> indirect maps somewhere in auto.master(5) and in a couple of places in
> autofs(5)
> is a good idea. You are right it's something that can catch the
> unaware.
That would also make the difference between direct and indirect more
clear. (I still don't know exactly what is the entire difference).
That's also something I could change: how a direct map is explained in
auto.master(5). But then, I didn't have access to autofs(5) to explain
it to me better ;-).
Anyway, I think it is a good project, I didn't know autofs would be so
good when it comes down to it.
It's usually documentation that puts you off ;-).
I often feel like I have to find the door in some invisible wall.
This time it was extreme because I couldn't for the life of me
understand what a "key" would be in the sub-map file.
Regards, Bart.
--
To unsubscribe from this list: send the line "unsubscribe autofs" in
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: documentation issues
2016-07-06 4:47 ` Xen
@ 2016-07-06 12:48 ` Ian Kent
2016-07-06 12:53 ` Erwan Loaec
2016-07-10 17:07 ` Xen
0 siblings, 2 replies; 15+ messages in thread
From: Ian Kent @ 2016-07-06 12:48 UTC (permalink / raw)
To: Xen, Autofs
On Wed, 2016-07-06 at 06:47 +0200, Xen wrote:
> Ian Kent schreef op 06-07-2016 2:57:
> > On Tue, 2016-07-05 at 23:17 +0200, Xen wrote:
> > > Hi,
> > >
> > > a few things.
> > >
> > > A user attempting to use autofs for the first time will assume that
> > > autofs will mount mount poins that already exist. Nowhere is it stated
> > > that mount points will only get created when accessed (through a
> > > "direct
> > > path").
> >
> > Umm, "direct path" is an unfortunate choice here as you are talking
> > about autofs
> > indirect mount maps.
> >
> > Direct mount maps create a mount trigger for each map entry and so show
> > up as
> > mount points in the file system.
> >
> > There are reasons for it being this way.
>
> So you are berating me for choice of words ;-).
No, I'm trying to establish a common naming convention so both of us can avoid
possible confusion later.
There are a bunch of conventions used (at least I use) that have specific
meaning to me in relation to autofs. If I don't jump on those early there is
often confusion about what I'm trying to say and there can be misunderstandings
even when I do.
>
> The only difference between direct and indirect seems to be that with
> direct the share is mounted "directly" on top of the specified mount
> point (actually, none is specified, it is mounted on the key returned
> from the map) and as a result it is not possible to have lazy
> initialization (unless you merged e.g. the root filesystem with an
> overlay filesystem) and so you are required to create this mountpoint,
> whereas with "indirect" you control the mount point itself and can
> choose whether to create the subdirectories or not (if you can acquire a
> list). "Directly" seems to mean "directly on the filesystem" whereas
> "indirectly" seems to mean: inside our own little enclave.
Yes, that's about it.
But I don't understand your use of "lazy initialization".
Yes, autofs will create a mount point path for each entry in a direct mount map.
And yes, there will be an autofs file system mounted on each path to act as a
trigger to cause the corresponding file system to be mounted during a kernel
path walk (ie. when accessed).
So I don't quite understand what your concern is.
Sure, if you have hundreds or thousands of these there can be a performance
problem but that's not what you were trying to do I thought.
It sounded to me like these were a good fit for your case .....
>
> And always as a subdirectory of that. Not even technically necessary,
> you could even have a "indirect map" that triggered mounting I guess,
> don't know. I guess not.
>
>
>
> >
> > >
> > > Such a user (such as me) trying to use this thing (even with a
> > > tutorial
> > > on Ubuntu site) will be flabbergasted that nothing happens; he/she
> > > expects mount entries to appear, but nothing happens.
> > >
> > > This renders the "nobrowse" default dysfunctional for a desktop user,
> > > who expects to see something before going there. It only works for
> > > automated systems, really.
> >
> > Your assuming that autofs primary usage is targeted at the desktop.
> > It's often not the best use case for that.
> >
> > There are other more suitable automount alternatives for GUI desktops.
>
> Linus Torvalds says he developed Linux as a desktop OS. And how
> chagrined he is that it didn't succeed in just that. Well, now we know
> the reason for that ;-).
>
> I know there are probably alternatives; but they are mostly useless for
> someone who wants to do it on his own. Desktop environments often do not
> even have mount operations on directories (even) when they are described
> in fstab. There is no other way that I know of to automatically mount
> e.g. samba shares, unless you navigate directly to it (and then they end
> up in some weird location in the filesystem, if at all). There is
> usually also no "user based" fstab; where you can describe mounts
> specifically for your user, that are then mounted through e.g. fuse, or
> something else that can do suid. Perhaps you mean udisks or udisksd or
> udisksctl but I'm not even sure that supports network-filesystems, they
> are certainly not shown in udisksctl status.
>
> Dolphin can not actually mount a share to some fixed location, the Nemo
> I am using doesn't even succeed in browsing the network. For me there
> are only two solutions that I see, either fstab or autofs. Once you know
> how to do it, running /etc/auto.smb <host> quickly returns a list of
> shares (if you've set the credentials file) that you can then edit to
> become a static map with the browse option.
>
> I do not see what is better suited currently to auto-mounting
> samba-shares. Anything that would work well, would work from both the
> shell and the GUI, in that the systems have to be linked, and ideally
> what the GUI does is stored in state files that work equally well from
> the shell. Any persistent mount would have to be stored somewhere on
> disk. Then the link would need to be automounted, OR mounted through
> e.g. libpam-mount. There is nothing wrong with mounting upon logon. And
> that allows for specific user-dependent stuff. (An automount depending
> on what user first accesses it, is problematic). (As for Samba). So
> perhaps logon-mounts are better suited (just restore the mount from the
> previous session, in that sense) because the $UID problem is hard to
> solve for autofs, you must either duplicate all entries, and hardcore
> the UIDs you need, for every user, or I don't know what, prevent other
> users (including root) from accessing the share you need. You'd
> basically need map files in auto.master.d for every user, including a
> map file for each person to specify the shares, if you want browsable,
> or a modified version of auto.smb that mounts individual shares when
> accessed. (In the latter case you'd have no browse map).
>
> But this script doesn't know what it is being called on, so now you need
> a variable I guess for each of those .d/ files, so that their entries
> would be something like:
>
> /media/<user>/nas /etc/auto-short.smb -Duser=<user> which would then be
> used for the samba $UID.
>
> If there is a better way to do this, I don't know. I see no alternatives
> other than libpam-mount and of course some GUI could do it, but then
> you'd really just have a form of duplicated functionality between autofs
> and it.
>
>
> > > - browse only works for static maps, and what person with a static map
> > > is going to run into performance issues when mount points are created
> > > in
> > > advance? Can we please remove this from the default config? (turning
> > > it
> > > off).
> >
> > Well, quite a lot of current users actually.
> >
> > Consider what can happen with a few hundred or a few thousand entries
> > in an
> > indirect map.
>
> Alright, but what indirect maps can cause browse tables to be shown?
> Only static maps, right? A programmatic map can only return a single
> entry. I have not looked into the other ones, but I suppose LDAP is more
> like a programmatic map than anything else.
Of course, yes, program maps can never know in advance what key may be passed to
them.
The problem is usually seen with user applications, cron jobs that scan
directories, GUI file management utilities etc.
It's has been quite a problem over time.
LDAP is a map source, like a file, or nis etc.
Maps stored in LDAP behave much the same as maps stored in files.
>
> So then consider that we only use a static map here. An actual file with
> thousands of entries? Of course it can happen. But what would be the
> point of that still (as opposed to LDAP or programmatic).
People do seem to like program maps but plenty of people use static or semi
-static maps, ie. a bunch of entries followed by the wildcard map key "*"
usually with some macro or "&" substution.
Similarly, what might match the wildcard map entry can't be known in advance.
>
>
> > Even though the browse option was added it has a specific set of
> > problems.
> >
> > First the kernel does not know if you are just listing a directory or
> > actually
> > need to mount something.
>
> Do you mean the directory containing the (indirect) entries (e.g. the
> managed directory) or one of those entries themselves?
It's hard enough for me to understand VFS path walking sufficiently without
having to describe it too.
All I can say is there is a problem determining whether a call back to the
deamon is needed or not at the times the kernel module is called. That can
sometimes result in all entries in the autofs managed mount point directory
being mounted.
Another aspect of this problem is that the same system call may need to have the
directory trigger a mount while not so at other times it's called and there's no
way to tell what the usage is within in the kernel.
So sometimes people get caught because they want their stat(2) call to return
the mounted file system results but not to cause a mount at other times when it
might lead to a mount storm.
These people are usually quite passionate as well insisting that it be fixed and
sometimes refuse to accept it is a problem.
Usuall all I can say to them is don't use the "browse" option.....
It is a difficult problem and I'm inevitably caught in the middle between the
"browse" and "nobrowse" camps.
Not all cases of accessing such a directory will see this problem either but
user space seems to have a habit of using system calls that don't trigger a
mount together with others that do.
Causing the so called mount storm.
Having said that though, with a lot of work, I could probably do something about
it.
TBH I've avoided it because it is difficult, perhaps in version 6.
It would require not pre-creating mount point directories and adding a readdir
implementation to the kernel to fill in the names (map keys) that aren't already
mounted. But that means significantly more (in terms of quantity of)
communication between the daemon and the kernel module.
That means re-writing the user space <-> kernel space communications completely
in an incompatible manner to what is used now, not to mention significant
changes to the user space code itself.
A big job really.
>
> > So at the moment, certain types of system call (the module can't know
> > the exact
> > system call either) don't cause a call back to perform a mount but
> > often user
> > space will later make a system call that will cause a mount to occur
> > anyway.
> >
> > That leads to sometimes seeing directories that are those of the autofs
> > file
> > system not those of the mounted file system, so they have completely
> > different
> > attributes to those after an automount has been done, a problem in
> > itself.
>
> Oh... such as ownership etc.
>
> The typical "I mount this, and now suddenly it is not root.root but
> xen.staff".
>
> > And, it can often lead to a mount storm, mounting everything in the
> > directory.
>
> But how can that happen? If I do; "for f in *; ls $f; done" sure.
It happens, from what I've seen, quite a bit.
Perhaps you would be surprised.
>
>
> >
> > OK for a few dozen mounts in a map but really bad for anything with
> > more than a
> > few hundred entries.
>
> After thinking a little I came up with what could perhaps be some
> default use case. You have terminals mounting home directories. On the
> "terminal machine" you may have just a single user. Through LDAP you
> find the home directory. There is obviously no sense for all users in
> the LDAP system to now have precreated mount points. The only thing that
> could make sense is to have an "invisible" user directory that now gets
> mounted.
Yes, you would need to be using the default "nobrowse", or a limited set of keys
with a wildcard entry.
>
> I can see no reason to have hundreds of mount points in a directory
> unless they cannot conform to a specific pattern. If they follow a
> pattern, it is likely that only a few of them need to be mounted at any
> time. In that case being able to browse it seems nonsensical. An
> aggregate of hundreds of different mounts at the same time seems very
> weird. Weird to have a diverse set of unique names to begin with. As if
> all of them were manually added in some way. If they aren't manually
> added, but automatically, then why have a static list? Would you not be
> better off putting that in a database? And if you'd have so many, we'd
> assume they could be different users, or different websites, etc. We
> also assume not all of them are going to be needed, just a subset. But
> so now you have a system on which this list is statically created but
> dynamically updated. This list sits on the disk of the local system. But
> you're not querying a database (could be just as easy) that could also
> store this list and return the entries one by one when needed. The
> static file is the database.
>
> Seems an improper use case but yeah. I don't know how you can have a
> static list that is huge while not choosing to use a database to manage
> it. Because a static map; now you need routines to update it, delete
> entries from it.
Yes, but network sources such as NIS and LDAP are treated much the same as a
file map.
Checking if a file map has been updated since a key was last used is easier with
a file map and straight forward with a NIS map but can't sensibly be done for an
LDAP map.
>
> Maybe I'm missing something here.
>
>
> > Another reason for the default is that, because of this, historically
> > there was
> > no "browse" option and this maintains what is (should be) expected.
>
> Yeah I thought so, because of the comments near the timeout value.
> However that is a reason to never change anything ever. Someone
> mistakenly choosing "browse" will very quickly find out.
And wouldn't itself be sufficient but for the problems I'm attempting to
describe above.
>
> If this person really has hundreds of items in his list, he will notice
> within a second that they are all visible. If this person really has
> hundreds to thousands of items, he or she may also be expected to know
> the ins and outs of the system, and to be aware of the browse option, or
> be able to find out. This is not going to be a novice user.
>
> On the other hand, anyone new to the system will have modest goals.
> However those modest goals are frustrated and refuted because the system
> is geared towards that professional that already knows everything, and
> for whom adding nobrowse, or changing the config file, would probably be
> a nobrainer. The new user however may be flabbergasted that it either
> does not work, or not the way she feels it should work (making a list,
> and then not seeing it in action).
>
>
>
> > > - browse being turned off by default combined with a complete lack of
> > > mention that you need to access these "nonexistent" directory paths /
> > > components before you will be able to see them, turns autofs into a
> > > complete mystery for someone who is not privy to the details yet.
> >
> > It's been a long time for me so I probably have forgotten what it's
> > like for
> > someone starting out.
> >
> > And so, how would I know where in the man pages to put that so it gets
> > noticed
> > by new users, perhaps from your perspective, you could point out a few
> > key
> > places where it should be added, or better still send a patch.
>
> This happens a lot, it is no ones fault. I guess people who knows the
> ins and outs of something usually jump smack in the middle, and forget
> to mention what the system is really like from the outside. A fish
> doesn't notice the water, we don't notice the air.
>
> We are too much immersed in it.
>
> I think there are 3-4 things I would explain.
>
> First the auto.master file on my system mentions man autofs as a place
> for seeing the format of the (sub)map files. However there is nothing in
> there. So that part is missing, but in a sense the contents of auto.misc
> is already somewhat sufficient for that, but still annoying that there
> is no man page.
That doesn't sound right, there might be a problem with your distribution
package.
[raven@pluto autofs-dev.git]$ wc -l man/autofs.5
611 man/autofs.5
[raven@pluto autofs-dev.git]$ wc -l man/autofs.8.in
81 man/autofs.8.in
The first of these describes the Sun and amd map format map entries, not a
particularly good job of it I admit, but that is where the changes you recommend
should go.
The second describes the service start and stop, etc.
>
> The second part is that it is often hard to understand what is meant by
> "key". In the master file, key means the mount point that supposedly
> already exists in the filesystem. In the sub-maps, key means the
> subdirectory but also the component of the path getting accessed by the
> user. Both types of files are called map files, and both kind of keys
> are called keys. This is aggravated by the fact that there is no man
> page for the sub-maps, that I know of . Auto.smb then speaks of a key,
> but it doesn't say what it is. Of course after a while you realize it is
> to be the host, but then you don't know how it knows about this host.
> Since at that point you don't realize that this is input from the
> filesystem (e.g. a stat operation) on "hidden directories" you are
> really clueless as to where this information is coming from ;-).
Sure, and that probably needs to be spelled out in autofs(5).
I know people do get confused by this distinction.
>
> You don't imagine that every freaking access of a directory or path
> component in the managed directory is going to result in network access.
>
> You could do a "for f in `seq 1 10000000`; do vdir $f; done" and have
> fun.
>
> (Don't know if that would still be the case for "browse" maps).
>
> So this hidden directory, secret door thing is really the most confusing
> of all.
>
> It's somewhat similar to something I might like to do, but still you
> don't really expect it ;-).
>
> So the 3-4 things are:
>
> create a man page or section for the format of the sub-maps
Already exists, needs work.
Lets call these mount maps (not the best but the convention used) as opposed to
the master map.
> indicate more clearly that programmatic maps in principle return a
> single entry
Maybe but isn't this in autofs(5) already close:
Executable Maps
A map can be marked as executable. A program map will be called
with the key as an argument. It may return no lines of output
if there's an error, or one or more lines containing a map entry
(with \ quoting line breaks). The map entry corresponds to what
would normally follow a map key.
> indicate that programmatic maps currently require access of a path
> component and that this path component (user action) is the key to the
> script.
But that is the case for all maps:
Isn't this near the top of autofs(5) sufficient:
key [-options] location
key
For indirect mounts this is the part of the path
name between the mount point and the path into
the filesystem when it is mounted. Usually you
can think about the key as a sub-directory name
below the autofs managed mount point.
For direct mounts this is the full path of each
mount point. This map is always associated with
the /- mount point in the master map.
> indicate that this is true for "no browse" on "static maps" as well, and
> that directories are only created when they are accessed.
That seems to be missing from the man page.
> And that no-browse is the configured default.
Not sure about that either.
This (from auto.master(5)) says that I have made "browse" the internal program
default way back when version 5 was first developed but I install a
configuration that turns it off because of (because of the above problems, which
are not spelled out in the man page):
[no]browse
This is an autofs specific option that is a pseudo mount
option and so is given without a leading dash. Use of the
browse option pre-creates mount point directories for
indirect mount maps so the map keys can be seen in a
directory listing without being mounted. Use of this
option can cause performance problem if the indirect
map is large so it should be used with caution. The
internal program default is to enable browse mode for
indirect mounts but the default installed configuration
overrides this by setting BROWSE_MODE to "no" because
of the potential performance problem.
Don't forget that distributions can, and often do, install their own version of
auto.master and possibly the autofs configuration.
And looking at the man pages shows that I have missed changing some of the
configuration option names from the recent configuration file changes, something
else that needs to be done.
>
> Currently the documentation for the master map and for (indirect)
> sub-maps is really in auto.master and auto.misc.
>
> Reading config files is usually a lot more pleasant than man pages ;-)
> so that's not such a huge problem, but you can't learn anything from a
> very limited set of examples either ;-).
>
> For instance: direct map won't work if not prefixed with /, but will
> also not give error if not. Indirect map (I think) won't work if
> prefixed with /, but will also not give error if not.
>
> I could say more but my thumb is hurting (infected) so I gotta quit
> this.
>
> I don't mind writing documentation. But I'm not familiar yet with man
> pages and their technical structure and all.
>
> I'll have to see. Thank you for the interest in any case :).
>
>
> > >
> > >
> > > Further I would say that on a desktop OS, the most likely use case is
> > > going to be this:
> > >
> > > - have several shares in your home network
> > > - want to access them through a GUI
> > > - prefer automounting since mounting at boot can be problematic
> > > - need to see them before you can access them in a GUI
> > > - only alternative is "bookmarks" or "places" that work regardless of
> > > the things not being visible/listed in the directory.
> >
> > Either use a different automounting mechanism or use a direct mount
> > map.
> >
> > That would satisfy all these needs, all be it with the map entries
> > always being
> > mounted on access.
> >
> > The limitation of these is you can't have a direct map path that is
> > within
> > another automounted path, if you need to do that you need to use a more
> > complicated setup.
>
> I think that limitation indicates why using relative paths is so much
> more pleasant. A map file using relative files can be "moved around". A
> map file using absolute paths cannot.
>
> Could you not make a direct map out of the key of the master file, and
> the keys of the sub-maps?
Can't really do that.
The closest thing to that would be multi-mount map entries, again from
autofs(5):
Multiple Mounts
A multi-mount map can be used to name multiple filesystems
to mount. It takes the form:
key [ -options ] \
[[/] location \
[/relative-mount-point [ -options ] location...]...
This may extend over multiple lines, quoting the line-breaks with
`\´. If present, the per-mountpoint mount-options are appended
to the default mount-options. This behaviour may be overridden
by the append_options configuration setting.
> If there is really a need for huge static map files (I haven't studied
> LDAP) in principle all you need is a syntax to differentiate between the
> two, right.
>
> /- ( /this/is/my/abs/path )
>
> or
>
> /this/is/my/abs ( -/path )
>
> could be identical
Not really, the master map key "/-" is required to specify the direct mount maps
that are to be used, anything else is an indirect mount, and "/-" is only valid
within the master map (although I can't remember if I explicitly check for it
within mount maps).
>
> normally ( /bla/bla ) indicates an absolute path and can only be used in
> a direct map, from what I've seen. You *could* cause it to turn this
> "indirect map" into a direct one.
>
> ie. ( bla/bla ) == indirect
> ( /bla/bla ) == direct.
In the Sun map format maps indirect mount map keys are a single path component
only.
The situation is different if using amd format maps but I could work out how
direct mount maps could be usefully used so that mount type has not been
implemented. Even on Solaris where they are supposed to be fully supported I
could make sense of them.
>
> A direct map is always a static file right? But then it doesn't matter
> what part of the path is specified in what file.
>
> Or
>
> ( bla/bla ) == indirect
> ( -/bla/bla ) == direct
>
> So you get:
>
> /start/of/the (-/path )
>
> or
>
> /start/of/the/- ( path )
>
> Then any path in the master file ending with /- would be a direct path.
>
> And would cause the (static) map file to be treated as direct.
Nope, that is unlikely to work and would lead to a lot of problems.
One example might be with:
/start/of/the/-/path
people will ask where have the directories below /start/of/the/ gone and the
answer will be they have been covered by the autofs file system mount.
Next it would be but I should be able to see these, surely that's easy to fix.
At hat point I would probably leave the conversation.
In any case a similar thing, but more explicit and I think easier to follow and
maintain are the autofs multi-mount map entries, what I think you called
relative path above.
It isn't clear but that syntax should function within both direct and indirect
mount maps.
The problem with all this is that substitution cannot be used in the key.
The reason for that is same as why the amd regex key matching has not been
implemented.
A linear map scan would be needed for every lookup in order to match what has
been sent to us from the kernel. And as much as you might feel that wouldn't be
a problem because maps are generally small I can assure you it would make like
really unpleasant for me!
>
>
>
> >
> > >
> > > Then I will also say,
> > >
> > > that there is no documentation on the format of the map files other
> > > than
> > > auto.master. The documentation for map files is this:
> >
> > That's not quite right.
> >
> > Man page autofs(5) has a bit of information on both the Sun and amd
> > format maps.
>
> Oh I am sorry. I think many users are not versed in the numbers for the
> man pages. I for one do not notice the difference and I almost never use
> one of those numbers. Sorry, I seriously missed that.
>
> I only noticed just now because autofs(8) references autofs(5), and I'm
> like ....huh?
Yeah, that's what we have ....
>
> Okay, allright. Missed that.
>
> Seriously bad system if you ask me, but okay.
>
> So I guess you can have direct maps with LDAP etc. too.
>
> I guess the wildcard also solves the many-user problem.
>
> Well, but only for the sub-map. You couldn't get autofs to manage
> /media, so it needs to be /media/user/<aggregate> in which user can't
> suddenly be a wildcard unless you use a direct map. You could expand
> that to include the master file though:
>
> /media/*/nas /etc/nas-shares.map
Can't do that, each /media/*/nas needs to be mounted at program start so that
automounts can be done?
Chicken before the egg problem there.
You might be able to achieve something sensible with a wildcard and offset
mounts (the relative paths above) and macro and & substution.
It is a bit difficult though.
>
> And then in /etc/nas-shares.map:
>
> share1 -fstype=xxx,uid=& ://nas/share1
> share2 -fstype=xxx,uid=& ://nas/share2
>
> I can't see whether LDAP supports browse, I assume it must, since it
> supports direct.
Yep, same as file maps except remote maps cannot use plus map inclusion, like
the
+auto.master
you might see in default installed master maps.
>
>
>
>
> > By definition a program map can't know what keys may be passed to it.
> > And, yes, even autofs(5) doesn't say explicitly that a program map
> > doesn't know
> > what keys may be passed to it, perhaps that should be ammended.
>
> In principle even a program map could read all of the available keys
> from whatever database it consults, and return all of them; or return
> something only (as it does now, perhaps) when a given key matches (is
> found).
I've thought of that too.
But I've resisted because I'm concerned about confusing existing program maps
people have in unpleasant ways.
But that suggestion has been made before and .....
>
> If you wanted that you would need the program script to e.g. support a
> wildcard as parameter. Meaning, all scripts must then check for "*" to
> be passed to it, in order to return the full list that they can acquire
> (if even possible) or at least return an error of some kind to say that
> they don't support it.
>
> You'd need a parameter for it, and any script would need to be aware of
> that parameter.
>
> That's either gonna be a wildcard or something given on $2, in that case
> every existing script would already be compatible with it, since it
> simply disregards $2.
That's not a bad thought, but what would $1 be so that older scripts wouldn't
choke on it.
>
> So, for instance, if $2 is "browse" the script may choose to return a
> browse map, or list of shares, with whatever options are available (it
> could even return the UID/USER of the share given options, so that the
> created directory would have the same UID as the to be mounted share!)
> -- meaning it might simply return ALL entries it could possibly return
> in the default format, which is the meaning of the wildcard, and the
> program (autofs daemon or module(?)) would be able to generate the
> appropriate directory entries based on that. So in that case you're
> probably going to be rid of the problem of the non-matching state of
> pre- and post-mount of directories.
which pretty much defeats the only possible solution I can think of for "browse"
option mounts ...
>
>
> > > a) get rid of the browse_mode = no, in the configuration file, for
> > > static mounts
> >
> > No, that has it's own set of problems which people need to be aware of
> > before
> > choosing to use the "browse" option.
>
> Not everyone.
>
> I have like 5 mounts in this share. 5 shares in this mount. I have not
> noticed issues to begin with. Maybe there are issues like checking
> permissions on the directory prior to mounting it, and then being wrong
> about that once it is mounted. But still, that doesn't seem to happen.
> Actually, something funny is going on. 2 of the 8 shares that are
> 'automatically' loaded are not accessible. "No such file or directory".
>
> No, that's nothing but a permission error. Still I am allowed to see
> them but not use them. For a static file no issue; just delete them.
>
> I don't really see what I need to be aware of prior to using browse?
>
> If it is the most sensible "novice" use case, why not allow it by
> default? It things go mayhem people can turn it off, or you could even
> turn it off when the number of mounts in a map exceeds 20 or 30 or 50.
> It's an arbitrary number, but what if I am wrong about LDAP.
>
> What about you mean it is turned off by default for LDAP, but you do not
> consider static files with that?
>
> What about it does function for ldap. What about we just need a separate
> default for LDAP and its like, than we do for static?
>
> Are you seriously considering static files, or do you mean LDAP, yp,
> hisplus, and hesoid?
>
> For anyone using an actual database, I concur.
>
> For static, I just disagree. That is the start case for anyone.
Like I said, I wanted to have the default as "browse" but got hit with too many
complaints and was only willing to change the package installed default
configuration to satisfy them.
I'm not going to try that again.
>
>
>
> >
> > > b) say something about mounts not being created automatically in the
> > > man
> > > page for auto.master, if nothing else. If you also do (a), this only
> > > applies now to programmatic mounts.
> >
> > auto.master(5) isn't the place for that, autofs(5) is better and, as I
> > say, make
> > some suggestions of provide a patch.
>
> autofs(8) is loaded before autofs(5). It's a good document, autofs(5),
> but most people may not even notice it. Personally I would probably
> choose to call them:
>
> autofs.master(5) and autofs.map(5). But then, I also consider
> auto.master a very nondescript name.
>
> In this way no one can ever get confused, so you might just rename
> autofs(5) to autofs.map(5).
Yeah maybe ...
>
> Or even auto.map(5) if that is necessary, but I wouldn't do that.
>
>
> > I'll have a look at doing this but beware, often distributions use
> > there own
> > default master map which I have no control over.
>
> I have no clue what mine does, this is Debian, and then Ubuntu, and then
> Kubuntu ;-) but it is just the Debian package still.
>
> You don't have to follow my example or suggestion, maybe there is a
> better improvement than this, it was just an example, I guess. Or I
> could guess.
>
> That was just a thing I was able to change without editing man files
> ;-).
>
> I will look into providing a patch, but I hope you can rename autofs(5)
> to autofs.map(5) before doing anything like that. I don't feel like
> improving a system I know myself haven't had access to, in that sense. I
> don't mean you have to do that straight away, but if that is a possible
> direction to go, or change to make, then I could supply a patch or
> anything based on the system that would result from that, seeing that
> autofs(5) is already pretty good in that sense.
At some point I'll need to return to this and make a list.
Unfortunately that time isn't now.
>
> > > I mean you could rewrite more documentation but this is the simplest I
> > > could do right here right now.
> > >
> > > I think that would clarify a lot for everyone but of course perhaps
> > > you
> > > would want to rewrite more so the central documentation is also up to
> > > date, but please see this as a more modest attempt for making it more
> > > accessible to a new user.
> >
> > Yes, adding the fact that mount point directories aren't pre created
> > for
> > indirect maps somewhere in auto.master(5) and in a couple of places in
> > autofs(5)
> > is a good idea. You are right it's something that can catch the
> > unaware.
>
> That would also make the difference between direct and indirect more
> clear. (I still don't know exactly what is the entire difference).
>
> That's also something I could change: how a direct map is explained in
> auto.master(5). But then, I didn't have access to autofs(5) to explain
> it to me better ;-).
>
> Anyway, I think it is a good project, I didn't know autofs would be so
> good when it comes down to it.
>
> It's usually documentation that puts you off ;-).
>
> I often feel like I have to find the door in some invisible wall.
>
> This time it was extreme because I couldn't for the life of me
> understand what a "key" would be in the sub-map file.
>
> Regards, Bart.
> --
> To unsubscribe from this list: send the line "unsubscribe autofs" in
--
To unsubscribe from this list: send the line "unsubscribe autofs" in
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: documentation issues
2016-07-06 12:48 ` Ian Kent
@ 2016-07-06 12:53 ` Erwan Loaec
2016-07-10 17:07 ` Xen
1 sibling, 0 replies; 15+ messages in thread
From: Erwan Loaec @ 2016-07-06 12:53 UTC (permalink / raw)
To: Ian Kent, Xen, Autofs
unsubscribe autof
Le 06/07/2016 à 14:48, Ian Kent a écrit :
> On Wed, 2016-07-06 at 06:47 +0200, Xen wrote:
>> Ian Kent schreef op 06-07-2016 2:57:
>>> On Tue, 2016-07-05 at 23:17 +0200, Xen wrote:
>>>> Hi,
>>>>
>>>> a few things.
>>>>
>>>> A user attempting to use autofs for the first time will assume that
>>>> autofs will mount mount poins that already exist. Nowhere is it stated
>>>> that mount points will only get created when accessed (through a
>>>> "direct
>>>> path").
>>> Umm, "direct path" is an unfortunate choice here as you are talking
>>> about autofs
>>> indirect mount maps.
>>>
>>> Direct mount maps create a mount trigger for each map entry and so show
>>> up as
>>> mount points in the file system.
>>>
>>> There are reasons for it being this way.
>> So you are berating me for choice of words ;-).
> No, I'm trying to establish a common naming convention so both of us can avoid
> possible confusion later.
>
> There are a bunch of conventions used (at least I use) that have specific
> meaning to me in relation to autofs. If I don't jump on those early there is
> often confusion about what I'm trying to say and there can be misunderstandings
> even when I do.
>
>> The only difference between direct and indirect seems to be that with
>> direct the share is mounted "directly" on top of the specified mount
>> point (actually, none is specified, it is mounted on the key returned
>> from the map) and as a result it is not possible to have lazy
>> initialization (unless you merged e.g. the root filesystem with an
>> overlay filesystem) and so you are required to create this mountpoint,
>> whereas with "indirect" you control the mount point itself and can
>> choose whether to create the subdirectories or not (if you can acquire a
>> list). "Directly" seems to mean "directly on the filesystem" whereas
>> "indirectly" seems to mean: inside our own little enclave.
> Yes, that's about it.
>
> But I don't understand your use of "lazy initialization".
>
> Yes, autofs will create a mount point path for each entry in a direct mount map.
> And yes, there will be an autofs file system mounted on each path to act as a
> trigger to cause the corresponding file system to be mounted during a kernel
> path walk (ie. when accessed).
>
> So I don't quite understand what your concern is.
> Sure, if you have hundreds or thousands of these there can be a performance
> problem but that's not what you were trying to do I thought.
>
> It sounded to me like these were a good fit for your case .....
>
>> And always as a subdirectory of that. Not even technically necessary,
>> you could even have a "indirect map" that triggered mounting I guess,
>> don't know. I guess not.
>>
>>
>>
>>>> Such a user (such as me) trying to use this thing (even with a
>>>> tutorial
>>>> on Ubuntu site) will be flabbergasted that nothing happens; he/she
>>>> expects mount entries to appear, but nothing happens.
>>>>
>>>> This renders the "nobrowse" default dysfunctional for a desktop user,
>>>> who expects to see something before going there. It only works for
>>>> automated systems, really.
>>> Your assuming that autofs primary usage is targeted at the desktop.
>>> It's often not the best use case for that.
>>>
>>> There are other more suitable automount alternatives for GUI desktops.
>> Linus Torvalds says he developed Linux as a desktop OS. And how
>> chagrined he is that it didn't succeed in just that. Well, now we know
>> the reason for that ;-).
>>
>> I know there are probably alternatives; but they are mostly useless for
>> someone who wants to do it on his own. Desktop environments often do not
>> even have mount operations on directories (even) when they are described
>> in fstab. There is no other way that I know of to automatically mount
>> e.g. samba shares, unless you navigate directly to it (and then they end
>> up in some weird location in the filesystem, if at all). There is
>> usually also no "user based" fstab; where you can describe mounts
>> specifically for your user, that are then mounted through e.g. fuse, or
>> something else that can do suid. Perhaps you mean udisks or udisksd or
>> udisksctl but I'm not even sure that supports network-filesystems, they
>> are certainly not shown in udisksctl status.
>>
>> Dolphin can not actually mount a share to some fixed location, the Nemo
>> I am using doesn't even succeed in browsing the network. For me there
>> are only two solutions that I see, either fstab or autofs. Once you know
>> how to do it, running /etc/auto.smb <host> quickly returns a list of
>> shares (if you've set the credentials file) that you can then edit to
>> become a static map with the browse option.
>>
>> I do not see what is better suited currently to auto-mounting
>> samba-shares. Anything that would work well, would work from both the
>> shell and the GUI, in that the systems have to be linked, and ideally
>> what the GUI does is stored in state files that work equally well from
>> the shell. Any persistent mount would have to be stored somewhere on
>> disk. Then the link would need to be automounted, OR mounted through
>> e.g. libpam-mount. There is nothing wrong with mounting upon logon. And
>> that allows for specific user-dependent stuff. (An automount depending
>> on what user first accesses it, is problematic). (As for Samba). So
>> perhaps logon-mounts are better suited (just restore the mount from the
>> previous session, in that sense) because the $UID problem is hard to
>> solve for autofs, you must either duplicate all entries, and hardcore
>> the UIDs you need, for every user, or I don't know what, prevent other
>> users (including root) from accessing the share you need. You'd
>> basically need map files in auto.master.d for every user, including a
>> map file for each person to specify the shares, if you want browsable,
>> or a modified version of auto.smb that mounts individual shares when
>> accessed. (In the latter case you'd have no browse map).
>>
>> But this script doesn't know what it is being called on, so now you need
>> a variable I guess for each of those .d/ files, so that their entries
>> would be something like:
>>
>> /media/<user>/nas /etc/auto-short.smb -Duser=<user> which would then be
>> used for the samba $UID.
>>
>> If there is a better way to do this, I don't know. I see no alternatives
>> other than libpam-mount and of course some GUI could do it, but then
>> you'd really just have a form of duplicated functionality between autofs
>> and it.
>>
>>
>>>> - browse only works for static maps, and what person with a static map
>>>> is going to run into performance issues when mount points are created
>>>> in
>>>> advance? Can we please remove this from the default config? (turning
>>>> it
>>>> off).
>>> Well, quite a lot of current users actually.
>>>
>>> Consider what can happen with a few hundred or a few thousand entries
>>> in an
>>> indirect map.
>> Alright, but what indirect maps can cause browse tables to be shown?
>> Only static maps, right? A programmatic map can only return a single
>> entry. I have not looked into the other ones, but I suppose LDAP is more
>> like a programmatic map than anything else.
> Of course, yes, program maps can never know in advance what key may be passed to
> them.
>
> The problem is usually seen with user applications, cron jobs that scan
> directories, GUI file management utilities etc.
>
> It's has been quite a problem over time.
>
> LDAP is a map source, like a file, or nis etc.
>
> Maps stored in LDAP behave much the same as maps stored in files.
>
>> So then consider that we only use a static map here. An actual file with
>> thousands of entries? Of course it can happen. But what would be the
>> point of that still (as opposed to LDAP or programmatic).
> People do seem to like program maps but plenty of people use static or semi
> -static maps, ie. a bunch of entries followed by the wildcard map key "*"
> usually with some macro or "&" substution.
>
> Similarly, what might match the wildcard map entry can't be known in advance.
>
>>
>>> Even though the browse option was added it has a specific set of
>>> problems.
>>>
>>> First the kernel does not know if you are just listing a directory or
>>> actually
>>> need to mount something.
>> Do you mean the directory containing the (indirect) entries (e.g. the
>> managed directory) or one of those entries themselves?
> It's hard enough for me to understand VFS path walking sufficiently without
> having to describe it too.
>
> All I can say is there is a problem determining whether a call back to the
> deamon is needed or not at the times the kernel module is called. That can
> sometimes result in all entries in the autofs managed mount point directory
> being mounted.
>
> Another aspect of this problem is that the same system call may need to have the
> directory trigger a mount while not so at other times it's called and there's no
> way to tell what the usage is within in the kernel.
>
> So sometimes people get caught because they want their stat(2) call to return
> the mounted file system results but not to cause a mount at other times when it
> might lead to a mount storm.
>
> These people are usually quite passionate as well insisting that it be fixed and
> sometimes refuse to accept it is a problem.
>
> Usuall all I can say to them is don't use the "browse" option.....
>
> It is a difficult problem and I'm inevitably caught in the middle between the
> "browse" and "nobrowse" camps.
>
> Not all cases of accessing such a directory will see this problem either but
> user space seems to have a habit of using system calls that don't trigger a
> mount together with others that do.
>
> Causing the so called mount storm.
>
> Having said that though, with a lot of work, I could probably do something about
> it.
>
> TBH I've avoided it because it is difficult, perhaps in version 6.
>
> It would require not pre-creating mount point directories and adding a readdir
> implementation to the kernel to fill in the names (map keys) that aren't already
> mounted. But that means significantly more (in terms of quantity of)
> communication between the daemon and the kernel module.
>
> That means re-writing the user space <-> kernel space communications completely
> in an incompatible manner to what is used now, not to mention significant
> changes to the user space code itself.
>
> A big job really.
>
>>> So at the moment, certain types of system call (the module can't know
>>> the exact
>>> system call either) don't cause a call back to perform a mount but
>>> often user
>>> space will later make a system call that will cause a mount to occur
>>> anyway.
>>>
>>> That leads to sometimes seeing directories that are those of the autofs
>>> file
>>> system not those of the mounted file system, so they have completely
>>> different
>>> attributes to those after an automount has been done, a problem in
>>> itself.
>> Oh... such as ownership etc.
>>
>> The typical "I mount this, and now suddenly it is not root.root but
>> xen.staff".
>>
>>> And, it can often lead to a mount storm, mounting everything in the
>>> directory.
>> But how can that happen? If I do; "for f in *; ls $f; done" sure.
> It happens, from what I've seen, quite a bit.
> Perhaps you would be surprised.
>
>>
>>> OK for a few dozen mounts in a map but really bad for anything with
>>> more than a
>>> few hundred entries.
>> After thinking a little I came up with what could perhaps be some
>> default use case. You have terminals mounting home directories. On the
>> "terminal machine" you may have just a single user. Through LDAP you
>> find the home directory. There is obviously no sense for all users in
>> the LDAP system to now have precreated mount points. The only thing that
>> could make sense is to have an "invisible" user directory that now gets
>> mounted.
> Yes, you would need to be using the default "nobrowse", or a limited set of keys
> with a wildcard entry.
>
>> I can see no reason to have hundreds of mount points in a directory
>> unless they cannot conform to a specific pattern. If they follow a
>> pattern, it is likely that only a few of them need to be mounted at any
>> time. In that case being able to browse it seems nonsensical. An
>> aggregate of hundreds of different mounts at the same time seems very
>> weird. Weird to have a diverse set of unique names to begin with. As if
>> all of them were manually added in some way. If they aren't manually
>> added, but automatically, then why have a static list? Would you not be
>> better off putting that in a database? And if you'd have so many, we'd
>> assume they could be different users, or different websites, etc. We
>> also assume not all of them are going to be needed, just a subset. But
>> so now you have a system on which this list is statically created but
>> dynamically updated. This list sits on the disk of the local system. But
>> you're not querying a database (could be just as easy) that could also
>> store this list and return the entries one by one when needed. The
>> static file is the database.
>>
>> Seems an improper use case but yeah. I don't know how you can have a
>> static list that is huge while not choosing to use a database to manage
>> it. Because a static map; now you need routines to update it, delete
>> entries from it.
> Yes, but network sources such as NIS and LDAP are treated much the same as a
> file map.
>
> Checking if a file map has been updated since a key was last used is easier with
> a file map and straight forward with a NIS map but can't sensibly be done for an
> LDAP map.
>
>> Maybe I'm missing something here.
>>
>>
>>> Another reason for the default is that, because of this, historically
>>> there was
>>> no "browse" option and this maintains what is (should be) expected.
>> Yeah I thought so, because of the comments near the timeout value.
>> However that is a reason to never change anything ever. Someone
>> mistakenly choosing "browse" will very quickly find out.
> And wouldn't itself be sufficient but for the problems I'm attempting to
> describe above.
>
>> If this person really has hundreds of items in his list, he will notice
>> within a second that they are all visible. If this person really has
>> hundreds to thousands of items, he or she may also be expected to know
>> the ins and outs of the system, and to be aware of the browse option, or
>> be able to find out. This is not going to be a novice user.
>>
>> On the other hand, anyone new to the system will have modest goals.
>> However those modest goals are frustrated and refuted because the system
>> is geared towards that professional that already knows everything, and
>> for whom adding nobrowse, or changing the config file, would probably be
>> a nobrainer. The new user however may be flabbergasted that it either
>> does not work, or not the way she feels it should work (making a list,
>> and then not seeing it in action).
>>
>>
>>
>>>> - browse being turned off by default combined with a complete lack of
>>>> mention that you need to access these "nonexistent" directory paths /
>>>> components before you will be able to see them, turns autofs into a
>>>> complete mystery for someone who is not privy to the details yet.
>>> It's been a long time for me so I probably have forgotten what it's
>>> like for
>>> someone starting out.
>>>
>>> And so, how would I know where in the man pages to put that so it gets
>>> noticed
>>> by new users, perhaps from your perspective, you could point out a few
>>> key
>>> places where it should be added, or better still send a patch.
>> This happens a lot, it is no ones fault. I guess people who knows the
>> ins and outs of something usually jump smack in the middle, and forget
>> to mention what the system is really like from the outside. A fish
>> doesn't notice the water, we don't notice the air.
>>
>> We are too much immersed in it.
>>
>> I think there are 3-4 things I would explain.
>>
>> First the auto.master file on my system mentions man autofs as a place
>> for seeing the format of the (sub)map files. However there is nothing in
>> there. So that part is missing, but in a sense the contents of auto.misc
>> is already somewhat sufficient for that, but still annoying that there
>> is no man page.
> That doesn't sound right, there might be a problem with your distribution
> package.
>
> [raven@pluto autofs-dev.git]$ wc -l man/autofs.5
> 611 man/autofs.5
> [raven@pluto autofs-dev.git]$ wc -l man/autofs.8.in
> 81 man/autofs.8.in
>
> The first of these describes the Sun and amd map format map entries, not a
> particularly good job of it I admit, but that is where the changes you recommend
> should go.
>
> The second describes the service start and stop, etc.
>
>> The second part is that it is often hard to understand what is meant by
>> "key". In the master file, key means the mount point that supposedly
>> already exists in the filesystem. In the sub-maps, key means the
>> subdirectory but also the component of the path getting accessed by the
>> user. Both types of files are called map files, and both kind of keys
>> are called keys. This is aggravated by the fact that there is no man
>> page for the sub-maps, that I know of . Auto.smb then speaks of a key,
>> but it doesn't say what it is. Of course after a while you realize it is
>> to be the host, but then you don't know how it knows about this host.
>> Since at that point you don't realize that this is input from the
>> filesystem (e.g. a stat operation) on "hidden directories" you are
>> really clueless as to where this information is coming from ;-).
> Sure, and that probably needs to be spelled out in autofs(5).
> I know people do get confused by this distinction.
>
>> You don't imagine that every freaking access of a directory or path
>> component in the managed directory is going to result in network access.
>>
>> You could do a "for f in `seq 1 10000000`; do vdir $f; done" and have
>> fun.
>>
>> (Don't know if that would still be the case for "browse" maps).
>>
>> So this hidden directory, secret door thing is really the most confusing
>> of all.
>>
>> It's somewhat similar to something I might like to do, but still you
>> don't really expect it ;-).
>>
>> So the 3-4 things are:
>>
>> create a man page or section for the format of the sub-maps
> Already exists, needs work.
> Lets call these mount maps (not the best but the convention used) as opposed to
> the master map.
>
>> indicate more clearly that programmatic maps in principle return a
>> single entry
> Maybe but isn't this in autofs(5) already close:
>
> Executable Maps
> A map can be marked as executable. A program map will be called
> with the key as an argument. It may return no lines of output
> if there's an error, or one or more lines containing a map entry
> (with \ quoting line breaks). The map entry corresponds to what
> would normally follow a map key.
>
>> indicate that programmatic maps currently require access of a path
>> component and that this path component (user action) is the key to the
>> script.
> But that is the case for all maps:
>
> Isn't this near the top of autofs(5) sufficient:
>
> key [-options] location
>
> key
> For indirect mounts this is the part of the path
> name between the mount point and the path into
> the filesystem when it is mounted. Usually you
> can think about the key as a sub-directory name
> below the autofs managed mount point.
>
> For direct mounts this is the full path of each
> mount point. This map is always associated with
> the /- mount point in the master map.
>
>
>> indicate that this is true for "no browse" on "static maps" as well, and
>> that directories are only created when they are accessed.
> That seems to be missing from the man page.
>
>> And that no-browse is the configured default.
> Not sure about that either.
>
> This (from auto.master(5)) says that I have made "browse" the internal program
> default way back when version 5 was first developed but I install a
> configuration that turns it off because of (because of the above problems, which
> are not spelled out in the man page):
>
> [no]browse
> This is an autofs specific option that is a pseudo mount
> option and so is given without a leading dash. Use of the
> browse option pre-creates mount point directories for
> indirect mount maps so the map keys can be seen in a
> directory listing without being mounted. Use of this
> option can cause performance problem if the indirect
> map is large so it should be used with caution. The
> internal program default is to enable browse mode for
> indirect mounts but the default installed configuration
> overrides this by setting BROWSE_MODE to "no" because
> of the potential performance problem.
>
> Don't forget that distributions can, and often do, install their own version of
> auto.master and possibly the autofs configuration.
>
> And looking at the man pages shows that I have missed changing some of the
> configuration option names from the recent configuration file changes, something
> else that needs to be done.
>
>> Currently the documentation for the master map and for (indirect)
>> sub-maps is really in auto.master and auto.misc.
>>
>> Reading config files is usually a lot more pleasant than man pages ;-)
>> so that's not such a huge problem, but you can't learn anything from a
>> very limited set of examples either ;-).
>>
>> For instance: direct map won't work if not prefixed with /, but will
>> also not give error if not. Indirect map (I think) won't work if
>> prefixed with /, but will also not give error if not.
>>
>> I could say more but my thumb is hurting (infected) so I gotta quit
>> this.
>>
>> I don't mind writing documentation. But I'm not familiar yet with man
>> pages and their technical structure and all.
>>
>> I'll have to see. Thank you for the interest in any case :).
>>
>>
>>>>
>>>> Further I would say that on a desktop OS, the most likely use case is
>>>> going to be this:
>>>>
>>>> - have several shares in your home network
>>>> - want to access them through a GUI
>>>> - prefer automounting since mounting at boot can be problematic
>>>> - need to see them before you can access them in a GUI
>>>> - only alternative is "bookmarks" or "places" that work regardless of
>>>> the things not being visible/listed in the directory.
>>> Either use a different automounting mechanism or use a direct mount
>>> map.
>>>
>>> That would satisfy all these needs, all be it with the map entries
>>> always being
>>> mounted on access.
>>>
>>> The limitation of these is you can't have a direct map path that is
>>> within
>>> another automounted path, if you need to do that you need to use a more
>>> complicated setup.
>> I think that limitation indicates why using relative paths is so much
>> more pleasant. A map file using relative files can be "moved around". A
>> map file using absolute paths cannot.
>>
>> Could you not make a direct map out of the key of the master file, and
>> the keys of the sub-maps?
> Can't really do that.
>
> The closest thing to that would be multi-mount map entries, again from
> autofs(5):
>
> Multiple Mounts
> A multi-mount map can be used to name multiple filesystems
> to mount. It takes the form:
>
> key [ -options ] \
> [[/] location \
> [/relative-mount-point [ -options ] location...]...
>
> This may extend over multiple lines, quoting the line-breaks with
> `\´. If present, the per-mountpoint mount-options are appended
> to the default mount-options. This behaviour may be overridden
> by the append_options configuration setting.
>
>
>> If there is really a need for huge static map files (I haven't studied
>> LDAP) in principle all you need is a syntax to differentiate between the
>> two, right.
>>
>> /- ( /this/is/my/abs/path )
>>
>> or
>>
>> /this/is/my/abs ( -/path )
>>
>> could be identical
> Not really, the master map key "/-" is required to specify the direct mount maps
> that are to be used, anything else is an indirect mount, and "/-" is only valid
> within the master map (although I can't remember if I explicitly check for it
> within mount maps).
>
>> normally ( /bla/bla ) indicates an absolute path and can only be used in
>> a direct map, from what I've seen. You *could* cause it to turn this
>> "indirect map" into a direct one.
>>
>> ie. ( bla/bla ) == indirect
>> ( /bla/bla ) == direct.
> In the Sun map format maps indirect mount map keys are a single path component
> only.
>
> The situation is different if using amd format maps but I could work out how
> direct mount maps could be usefully used so that mount type has not been
> implemented. Even on Solaris where they are supposed to be fully supported I
> could make sense of them.
>
>> A direct map is always a static file right? But then it doesn't matter
>> what part of the path is specified in what file.
>>
>> Or
>>
>> ( bla/bla ) == indirect
>> ( -/bla/bla ) == direct
>>
>> So you get:
>>
>> /start/of/the (-/path )
>>
>> or
>>
>> /start/of/the/- ( path )
>>
>> Then any path in the master file ending with /- would be a direct path.
>>
>> And would cause the (static) map file to be treated as direct.
> Nope, that is unlikely to work and would lead to a lot of problems.
>
> One example might be with:
>
> /start/of/the/-/path
>
> people will ask where have the directories below /start/of/the/ gone and the
> answer will be they have been covered by the autofs file system mount.
>
> Next it would be but I should be able to see these, surely that's easy to fix.
>
> At hat point I would probably leave the conversation.
>
> In any case a similar thing, but more explicit and I think easier to follow and
> maintain are the autofs multi-mount map entries, what I think you called
> relative path above.
>
> It isn't clear but that syntax should function within both direct and indirect
> mount maps.
>
> The problem with all this is that substitution cannot be used in the key.
>
> The reason for that is same as why the amd regex key matching has not been
> implemented.
>
> A linear map scan would be needed for every lookup in order to match what has
> been sent to us from the kernel. And as much as you might feel that wouldn't be
> a problem because maps are generally small I can assure you it would make like
> really unpleasant for me!
>
>>
>>
>>>> Then I will also say,
>>>>
>>>> that there is no documentation on the format of the map files other
>>>> than
>>>> auto.master. The documentation for map files is this:
>>> That's not quite right.
>>>
>>> Man page autofs(5) has a bit of information on both the Sun and amd
>>> format maps.
>> Oh I am sorry. I think many users are not versed in the numbers for the
>> man pages. I for one do not notice the difference and I almost never use
>> one of those numbers. Sorry, I seriously missed that.
>>
>> I only noticed just now because autofs(8) references autofs(5), and I'm
>> like ....huh?
> Yeah, that's what we have ....
>
>> Okay, allright. Missed that.
>>
>> Seriously bad system if you ask me, but okay.
>>
>> So I guess you can have direct maps with LDAP etc. too.
>>
>> I guess the wildcard also solves the many-user problem.
>>
>> Well, but only for the sub-map. You couldn't get autofs to manage
>> /media, so it needs to be /media/user/<aggregate> in which user can't
>> suddenly be a wildcard unless you use a direct map. You could expand
>> that to include the master file though:
>>
>> /media/*/nas /etc/nas-shares.map
> Can't do that, each /media/*/nas needs to be mounted at program start so that
> automounts can be done?
>
> Chicken before the egg problem there.
>
> You might be able to achieve something sensible with a wildcard and offset
> mounts (the relative paths above) and macro and & substution.
>
> It is a bit difficult though.
>
>> And then in /etc/nas-shares.map:
>>
>> share1 -fstype=xxx,uid=& ://nas/share1
>> share2 -fstype=xxx,uid=& ://nas/share2
>>
>> I can't see whether LDAP supports browse, I assume it must, since it
>> supports direct.
> Yep, same as file maps except remote maps cannot use plus map inclusion, like
> the
> +auto.master
> you might see in default installed master maps.
>
>>
>>
>>
>>> By definition a program map can't know what keys may be passed to it.
>>> And, yes, even autofs(5) doesn't say explicitly that a program map
>>> doesn't know
>>> what keys may be passed to it, perhaps that should be ammended.
>> In principle even a program map could read all of the available keys
>> from whatever database it consults, and return all of them; or return
>> something only (as it does now, perhaps) when a given key matches (is
>> found).
> I've thought of that too.
>
> But I've resisted because I'm concerned about confusing existing program maps
> people have in unpleasant ways.
>
> But that suggestion has been made before and .....
>
>> If you wanted that you would need the program script to e.g. support a
>> wildcard as parameter. Meaning, all scripts must then check for "*" to
>> be passed to it, in order to return the full list that they can acquire
>> (if even possible) or at least return an error of some kind to say that
>> they don't support it.
>>
>> You'd need a parameter for it, and any script would need to be aware of
>> that parameter.
>>
>> That's either gonna be a wildcard or something given on $2, in that case
>> every existing script would already be compatible with it, since it
>> simply disregards $2.
> That's not a bad thought, but what would $1 be so that older scripts wouldn't
> choke on it.
>
>> So, for instance, if $2 is "browse" the script may choose to return a
>> browse map, or list of shares, with whatever options are available (it
>> could even return the UID/USER of the share given options, so that the
>> created directory would have the same UID as the to be mounted share!)
>> -- meaning it might simply return ALL entries it could possibly return
>> in the default format, which is the meaning of the wildcard, and the
>> program (autofs daemon or module(?)) would be able to generate the
>> appropriate directory entries based on that. So in that case you're
>> probably going to be rid of the problem of the non-matching state of
>> pre- and post-mount of directories.
> which pretty much defeats the only possible solution I can think of for "browse"
> option mounts ...
>
>>
>>>> a) get rid of the browse_mode = no, in the configuration file, for
>>>> static mounts
>>> No, that has it's own set of problems which people need to be aware of
>>> before
>>> choosing to use the "browse" option.
>> Not everyone.
>>
>> I have like 5 mounts in this share. 5 shares in this mount. I have not
>> noticed issues to begin with. Maybe there are issues like checking
>> permissions on the directory prior to mounting it, and then being wrong
>> about that once it is mounted. But still, that doesn't seem to happen.
>> Actually, something funny is going on. 2 of the 8 shares that are
>> 'automatically' loaded are not accessible. "No such file or directory".
>>
>> No, that's nothing but a permission error. Still I am allowed to see
>> them but not use them. For a static file no issue; just delete them.
>>
>> I don't really see what I need to be aware of prior to using browse?
>>
>> If it is the most sensible "novice" use case, why not allow it by
>> default? It things go mayhem people can turn it off, or you could even
>> turn it off when the number of mounts in a map exceeds 20 or 30 or 50.
>> It's an arbitrary number, but what if I am wrong about LDAP.
>>
>> What about you mean it is turned off by default for LDAP, but you do not
>> consider static files with that?
>>
>> What about it does function for ldap. What about we just need a separate
>> default for LDAP and its like, than we do for static?
>>
>> Are you seriously considering static files, or do you mean LDAP, yp,
>> hisplus, and hesoid?
>>
>> For anyone using an actual database, I concur.
>>
>> For static, I just disagree. That is the start case for anyone.
> Like I said, I wanted to have the default as "browse" but got hit with too many
> complaints and was only willing to change the package installed default
> configuration to satisfy them.
>
> I'm not going to try that again.
>
>>
>>
>>>> b) say something about mounts not being created automatically in the
>>>> man
>>>> page for auto.master, if nothing else. If you also do (a), this only
>>>> applies now to programmatic mounts.
>>> auto.master(5) isn't the place for that, autofs(5) is better and, as I
>>> say, make
>>> some suggestions of provide a patch.
>> autofs(8) is loaded before autofs(5). It's a good document, autofs(5),
>> but most people may not even notice it. Personally I would probably
>> choose to call them:
>>
>> autofs.master(5) and autofs.map(5). But then, I also consider
>> auto.master a very nondescript name.
>>
>> In this way no one can ever get confused, so you might just rename
>> autofs(5) to autofs.map(5).
> Yeah maybe ...
>
>> Or even auto.map(5) if that is necessary, but I wouldn't do that.
>>
>>
>>> I'll have a look at doing this but beware, often distributions use
>>> there own
>>> default master map which I have no control over.
>> I have no clue what mine does, this is Debian, and then Ubuntu, and then
>> Kubuntu ;-) but it is just the Debian package still.
>>
>> You don't have to follow my example or suggestion, maybe there is a
>> better improvement than this, it was just an example, I guess. Or I
>> could guess.
>>
>> That was just a thing I was able to change without editing man files
>> ;-).
>>
>> I will look into providing a patch, but I hope you can rename autofs(5)
>> to autofs.map(5) before doing anything like that. I don't feel like
>> improving a system I know myself haven't had access to, in that sense. I
>> don't mean you have to do that straight away, but if that is a possible
>> direction to go, or change to make, then I could supply a patch or
>> anything based on the system that would result from that, seeing that
>> autofs(5) is already pretty good in that sense.
> At some point I'll need to return to this and make a list.
> Unfortunately that time isn't now.
>
>>>> I mean you could rewrite more documentation but this is the simplest I
>>>> could do right here right now.
>>>>
>>>> I think that would clarify a lot for everyone but of course perhaps
>>>> you
>>>> would want to rewrite more so the central documentation is also up to
>>>> date, but please see this as a more modest attempt for making it more
>>>> accessible to a new user.
>>> Yes, adding the fact that mount point directories aren't pre created
>>> for
>>> indirect maps somewhere in auto.master(5) and in a couple of places in
>>> autofs(5)
>>> is a good idea. You are right it's something that can catch the
>>> unaware.
>> That would also make the difference between direct and indirect more
>> clear. (I still don't know exactly what is the entire difference).
>>
>> That's also something I could change: how a direct map is explained in
>> auto.master(5). But then, I didn't have access to autofs(5) to explain
>> it to me better ;-).
>>
>> Anyway, I think it is a good project, I didn't know autofs would be so
>> good when it comes down to it.
>>
>> It's usually documentation that puts you off ;-).
>>
>> I often feel like I have to find the door in some invisible wall.
>>
>> This time it was extreme because I couldn't for the life of me
>> understand what a "key" would be in the sub-map file.
>>
>> Regards, Bart.
>> --
>> To unsubscribe from this list: send the line "unsubscribe autofs" in
> --
> To unsubscribe from this list: send the line "unsubscribe autofs" in
--
To unsubscribe from this list: send the line "unsubscribe autofs" in
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: documentation issues
2016-07-06 12:48 ` Ian Kent
2016-07-06 12:53 ` Erwan Loaec
@ 2016-07-10 17:07 ` Xen
2016-07-11 14:09 ` Ian Kent
1 sibling, 1 reply; 15+ messages in thread
From: Xen @ 2016-07-10 17:07 UTC (permalink / raw)
To: Autofs
Ian Kent schreef op 06-07-2016 14:48:
> But I don't understand your use of "lazy initialization".
I meant creating the mount point only when it was accessed.
> So I don't quite understand what your concern is.
> Sure, if you have hundreds or thousands of these there can be a
> performance
> problem but that's not what you were trying to do I thought.
I'm not sure either at this point but I'm too hungry to read back on
what I had written before :p.
> Of course, yes, program maps can never know in advance what key may be
> passed to
> them.
>
> The problem is usually seen with user applications, cron jobs that scan
> directories, GUI file management utilities etc.
>
> It's has been quite a problem over time.
Yes that is my concern. I do not like the idea of invisible access
points at all, unless I was doing it for security, but in that sense you
can't really hide anything in a Linux system. Invisible mount points
only make sense when you have LOTS of them and you only need few at a
time.
> LDAP is a map source, like a file, or nis etc.
>
> Maps stored in LDAP behave much the same as maps stored in files.
Right so you can browse them if you want.
>
>>
>> So then consider that we only use a static map here. An actual file
>> with
>> thousands of entries? Of course it can happen. But what would be the
>> point of that still (as opposed to LDAP or programmatic).
>
> People do seem to like program maps but plenty of people use static or
> semi
> -static maps, ie. a bunch of entries followed by the wildcard map key
> "*"
> usually with some macro or "&" substution.
>
> Similarly, what might match the wildcard map entry can't be known in
> advance.
Right. That makes it programmatic; the (server) response will determine
if anything was actually there. On the other hand a wildcard (in a
direct map at least) may determine existing (or match existing)
filesystem components that you could read in advance. And you need to,
in a direct map. But direct maps are mounted anyway (or the mountpoint
is created, I mean). So it currently only applies to indirect maps where
the wildcard is the final component, and it then behaves like a
programmatic thing where it only actually gets mounted (and created) if
e.g. the server reponds with a share.
> It's hard enough for me to understand VFS path walking sufficiently
> without
> having to describe it too.
I don't know. I studied it in some detail, I just don't understand the
RCU algorithm. At least, I have studied path_lookupat and the entire
procedure leading up to lookup_fast and lookup_slow. I'd have to check
my printouts to say more. But let's just say I'm aware of any
(recursive) operation involving symlinks, where intermediate symlinks
get expanded before the original path is being continued, etc. I am also
aware of the presence of autofs code, particularly in the function that
specifies one or two other mount things.
I believe that is called by lookup_slow....
> All I can say is there is a problem determining whether a call back to
> the
> deamon is needed or not at the times the kernel module is called. That
> can
> sometimes result in all entries in the autofs managed mount point
> directory
> being mounted.
So the mount point is accessed but the module doesn't know if anything
really needs to happen at that point. And stat operations or anything
else all use the same path lookup. Of course I don't know what happens
pre-mount and post-mount to the directory itself. If post-mount the
directory is really on another filesystem, the "mnt" value will change.
And it will return another dentry for that other mount. I remember
"path" being mnt+dentry.
>
> Another aspect of this problem is that the same system call may need to
> have the
> directory trigger a mount while not so at other times it's called and
> there's no
> way to tell what the usage is within in the kernel.
So you are getting called by lookup_slow or something of the kind near
it, but you're not sure why. But these lookups are being done for each
individual path componenent. However a "cd" to the directory should
mount it, but a mere "stat" may not. Is that the case? Seems odd that it
would be difficult, but I believe you on your word.
Maybe "cd" shouldn't mount it until the contents is accessed, but I
don't know.
>
> So sometimes people get caught because they want their stat(2) call to
> return
> the mounted file system results but not to cause a mount at other times
> when it
> might lead to a mount storm.
Hmm. It seems like the first desire is a problem. At least, I don't know
how directory lookup is done. I don't know if this information is the
result of a stat call or something else. I do remember seeing code for
dentry-moving but it was confusing.
For sure you want "ls /directory/" to return the mounted contents. But
I'm not sure if its possible for your module to differentiate. Ls -d
"/directory/" should perhaps not cause mounting. I can see quickly
though that "ls" causes an "open" call but "ls -d" does not.
But then, "open" will not access any path components beyond the
directory itself. So if your module is only called by path_lookup it is
going to be impossible to know what for.
Particularly if an "ls" does not actually access path componenets
(beyond the directory itself) there would be no way to know what is
being asked.
> Usuall all I can say to them is don't use the "browse" option.....
:).
> It is a difficult problem and I'm inevitably caught in the middle
> between the
> "browse" and "nobrowse" camps.
You appear to be very conscientious about it.
> Not all cases of accessing such a directory will see this problem
> either but
> user space seems to have a habit of using system calls that don't
> trigger a
> mount together with others that do.
such as that "ls" vs "ls -d"?
> Causing the so called mount storm.
Still seems odd but I believe you, but. I guess what it could mean is
"ls" not only trying to list every share (browse) but also to perform
calls on those shares (path componenents retrieved) that might require
additional information. For example, if I am not content just knowing
the shares, but also want to know the number of files in them.... which
definitely some programs or user agents would do. Then I'm in trouble
because this requires mounting. Then, if that is the case, a simple
"list /nas/" might result in the subfolders (/nas/media, /nas/backup,
etc.) to also be queried and you have what you call a mount-storm.
But this is the result of user space convention and behaviour. Surely
people cannot request browse while at the same time wanting to deny
actions on the returned results when these actions stem completely from
userspace?
If some user agent or GUI is trying to list the number of files in each
directory (which at this point means a share) then that's not something
autofs could ever deal with. And I don't think it is a problem autofs
needs to solve.
If I am at all correct about this and I see what you mean right now,
this "GUI" behaviour would then simply be incompatible with unmounted
folders *that-might-need-to-get-mounted-but-not-always* and this GUI
would need to be aware to not do that thing.
>
> Having said that though, with a lot of work, I could probably do
> something about
> it.
>
> TBH I've avoided it because it is difficult, perhaps in version 6.
>
> It would require not pre-creating mount point directories and adding a
> readdir
> implementation to the kernel to fill in the names (map keys) that
> aren't already
> mounted. But that means significantly more (in terms of quantity of)
> communication between the daemon and the kernel module.
>
> That means re-writing the user space <-> kernel space communications
> completely
> in an incompatible manner to what is used now, not to mention
> significant
> changes to the user space code itself.
>
> A big job really.
And not a big joy perhaps.
So basically you are going to not precreate, but still hijack kernel
calls to return the listings for the directories that do not yet exist
(the listing of those directories).
Which means those directories could be shown, but not opened, or
something of the kind. Then, the user agent .. well I don't know what
difference it makes actually if the mount storm is the result of
userspace calls that directly cause it. So I guess I'm mistaken here and
the issue is even more complex.... :(.
I don't know how a readdir on the "top" directory could /directly/
causes a mountstorm on the listed entries. But then, I don't know much
;-).
> It happens, from what I've seen, quite a bit.
> Perhaps you would be surprised.
Illuminate me :P. What is the most common cause of it?
> Yes, but network sources such as NIS and LDAP are treated much the same
> as a
> file map.
Yes, I didn't realize at the start. I have always found LDAP to be a
rather incomprehensible thing to work with. Without hands-on experience
it is hard to get a good grasp of how it works. Or even how to organise
it (if you do create one) as there seem to be standards for everything.
> Checking if a file map has been updated since a key was last used is
> easier with
> a file map and straight forward with a NIS map but can't sensibly be
> done for an
> LDAP map.
Right.
>
>>
>> Maybe I'm missing something here.
>>
>>
>> > Another reason for the default is that, because of this, historically
>> > there was
>> > no "browse" option and this maintains what is (should be) expected.
>>
>> Yeah I thought so, because of the comments near the timeout value.
>> However that is a reason to never change anything ever. Someone
>> mistakenly choosing "browse" will very quickly find out.
>
> And wouldn't itself be sufficient but for the problems I'm attempting
> to
> describe above.
You mean the mountstorm problems are reasons to keep the default at
no-browse?
It still seems at this point that this is only relevant for LDAP/NIS
entries.
>> First the auto.master file on my system mentions man autofs as a place
>> for seeing the format of the (sub)map files. However there is nothing
>> in
>> there. So that part is missing, but in a sense the contents of
>> auto.misc
>> is already somewhat sufficient for that, but still annoying that there
>> is no man page.
>
> That doesn't sound right, there might be a problem with your
> distribution
> package.
No, as I say later this is incomprehension on my part ;-). Or merely the
fact that needing to use "number" for accessing "sections" of the
"manual" is so rare (if you are not a developer accessing library
functions and/or kernel functions) that a regular user will almost NEVER
use a section number in daily operation.
Most configuration files are called "openvpn.conf" or something of the
kind, and hence their manual page is also called that, and you don't
need to do "man 5 openvpn.conf", because "man openvpn.conf" is
sufficient.
Using numbers would be superfluous in 99% of cases, or even more than
that. As opposed to perhaps requesting help on function calls, such as
mount() as opposed to /bin/mount.
So as a developer you may be used to it. But a regular user is not.
Anyone who does not do C programming, is not.
So, my mistake, I guess.
>>
>> You don't imagine that every freaking access of a directory or path
>> component in the managed directory is going to result in network
>> access.
>>
>> You could do a "for f in `seq 1 10000000`; do vdir $f; done" and have
>> fun.
>>
>> (Don't know if that would still be the case for "browse" maps).
>>
>> So this hidden directory, secret door thing is really the most
>> confusing
>> of all.
>>
>> It's somewhat similar to something I might like to do, but still you
>> don't really expect it ;-).
>>
>> So the 3-4 things are:
>>
>> create a man page or section for the format of the sub-maps
>
> Already exists, needs work.
> Lets call these mount maps (not the best but the convention used) as
> opposed to
> the master map.
Alright. Still confusing though.
>
>> indicate more clearly that programmatic maps in principle return a
>> single entry
>
> Maybe but isn't this in autofs(5) already close:
>
> Executable Maps
> A map can be marked as executable. A program map will be called
> with the key as an argument. It may return no lines of output
> if there's an error, or one or more lines containing a map entry
> (with \ quoting line breaks). The map entry corresponds to what
> would normally follow a map key.
I guess.. it's just that you read over "a map entry" as meaning "only a
single map entry" since just before it says "one or more lines". So it
is something you only notice if you reread it in detail. After finding
out that it doesn't work ;-).
> Isn't this near the top of autofs(5) sufficient:
>
> key [-options] location
>
> key
> For indirect mounts this is the part of the path
> name between the mount point and the path into
> the filesystem when it is mounted. Usually you
> can think about the key as a sub-directory name
> below the autofs managed mount point.
>
> For direct mounts this is the full path of each
> mount point. This map is always associated with
> the /- mount point in the master map.
Yes it is, particularly because it mentions that it is a sub-directory
name.
Then, I begin to wonder what "usually" means. See, from the looks of it
it is completely identical to sub-directory name, because:
- they key is going to be directly used as the name of the subdirectory
- programmatically, the script does not even have any say about the key,
it cannot even return a key, does not determine the key. The only thing
that can ever happen is that the key as given is turned into a
subdirectory (when valid).
I mean the logical abstraction between "key" and "value" may make sense
from a purely abstract logical point of view ;-). But it has no bearing
on actual domain-specific termininology, it is just a computer science
term so to speak.
What it actually comes down to is:
- mount point for the actual share, or
- subdirectory created as mountpoint for the actual share(s).
Where "value" would mean:
- path to the mount (share), or
- network path to the share that gets mounted on the subdirectory (the
key).
the "mount" utility calls these source and target, respectively (source
for the path, target for the mount point). Otherwise it calls them
"device" and "mountpoint".
So although "key" also has meaning with regards to "database lookup" I
don't see how it is ever not directly used as the mountpoint itself. And
this is what creates the confusion because with the "browse" option it
is not just going to be a "lookup key".
Further there is no difference between "subdirectory mount point" and
"lookup key", where these are fundamentally separate concepts, and could
even imply, in principle, that the actual directory to use is *also*
retrieved by the key.
So conceptually the idea that "key" instantly means "subdirectory
mount-point" is confusing.
In fact it is odd to begin with, from the perspective of a user, that
"auto.smb" mounts the entire share list of the requested "host" or "key"
in one go under the location that was accessed.
This is not the most common scenario (well, maybe if you are in some big
network). This is not most common not only because it mounts /all/ the
shares at once(!) but also because generally people want to have some
level of control over the directory it ends up in, and what is the host
for some server (hostname) might not be where you actually want to mount
it.
So I suggest that even this auto.smb is a bit of a weird entity. I have
used it to generate a map list for me that I then adjusted and used as a
static map file.
I know it does the same as that -net or -host thing. It's just that for
a desktop user (again, you say that is not the target audience, but
still) what you really want is a fixed location the user chooses (in
auto.master) and then a browseable list of shares. Apparently this list
needs to be static. What I envisioned before would be a parameter to a
script that causes it to output a list of shares rather than the share
entries themselves, or just the complete list of it.
This would give it "browse" capability. If you had that, you would need
to be able to pass a parameter to the script as the key, but this is
rather obscure.
What it comes down to is that this is what I would envision for myself:
Auto.master:
/cifs /etc/auto.smb diskstation <-- diskstation is
the key
Now the program/daemon/whatever passes diskstation as key to the script.
It also passes a wildcard parameter such as "*". The script now returns
a list of shares for "diskstation". Subsequently when the daemon needs
to mount, it calls the script with diskstation and the requested mount
point/share. Alternatively, the returned output from the first call must
be complete and is saved by the daemon. It is then used in place of a
static map (the script is now nothing but a static map generator).
Personally I prefer the former: the script has two modes: list and
return entry, and it therefore has two parameters: one to identify what
to list, and the second to determine what entry to return from what was
listed.
Otherwise, without the parameter, you'd need to hardcode it in the
script and duplicate the script for every host, etc.
In fact as a user you may not even want all shares to be present on your
local system. So you might equally well decide to use a static map. So
perhaps you will use "smb.auto list" or "smb.auto list diskstation" or
"smb.auto diskstation *" manually. And perhaps it generates all of the
mappings for you that you can then prune and save.
Perhaps, in absense of the key (the entry, or wildcard) a call such as
"smb.auto diskstation" should simply generate the share list, whereas
"smb.auto diskstation media" generates the key for only that entry.
So you see me use a term like "entry" to determine what you today call a
"key" and the word "key" to determine what you today call a "entry" ;-).
"entry" means "element of pre-existing list", "key" means "value to use
for a lookup operation in a database".
"key" can also mean "that what you need to mount or access something".
so if you combine the two, you have like three things:
- subdirectory (mount point)
- key to use for database lookup
- entry in the list of shares
but you can only solve it if you differentiate between "lookup
operation" and "element of a list".
a lookup operation may /return/ a list, which is why I said:
"diskstation" (hostname) is a key
list of shares is the result of that lookup operation based on that key
entry is an element of that list you can mount.
This applies to a form of browse scenario. If you have invisible
mounpoint, you get:
"diskstation" (hostname) is a key that is going to be a direct
subdirectory
the list of shares it returns is going to be a subdirectory list to that
first subdirectory
this will contain the actual shares, so you get top/key/entries.
And you see we basically have the same thing except that this is one
level deeper in our hierarchy.
In my desired use case, you get:
top/entry
But in the current implementation of e.g. smb.auto, you get:
top/key/entry
So it is clear diskstation (hostname) IS a key, except that in the
current case or scenario this key is ALSO used as the direct descendent
of the toplevel directory used for the configuration in auto.master.
Which gives rise to the idea that maybe "key" and "subdirectory mount
point" should not be equivalent or identical. Not necessarily identical.
In fact, smb.auto DOES produce a browsable list. It is just /beneath/
the subdirectory for its "key" (the hostname) and mounts ALL of the
shares at once.
So you now already have that mountstorm (it just gets mounted by
default) it's just a level deeper.
You now don't have a mountstorm on the level of hosts, but you have a
mountstorm on the level of shares (per host) but it is still the same
thing.
So the design specifies that keys must become mountpoints in the
"sub-top-level" directory (the directory managed by autofs for indirect
mounts).
Whereas perhaps conceptually you would need to differentiate between
key, and an entry used for mounting, and the difference is that this
entry used for mounting can be an element of the list returned by the
key.
So you get key -> list -> entries. In the case of current auto.smb, what
happens is:
key -> (subdirectory) -> list (itself an entry) -> entries.
Or in other words:
key -> list -> entries, but mounted beneath top/key, as key is used as
an extra directory in between.
Current auto.smb:
<managed mount point> / <key> / entries / contents of shares
My preference:
<managed mount point> / entries / contents of shares
And why? Only because I want to specify mount points for specific hosts
manually.
So the question becomes how you can combine such things.
The requirement becomes for the script to return the mount point. A
static list does return mount points. A script does not, the mount point
is specified as the "key" given to it. So if you want the script to
determine the mount point the way a static list does, you need it to
return, in essence, a static list.
Even if your static list is not browseable, so too can a returned
"dynamic list" also be not browseable. But at this point your script can
return a mount point of its own. That is again problematic if the key is
derived from filesystem access.
So you see how hard this is to reconcile.
If we insist in accessing hidden shares and deriving keys from user
action or filesystem action, or filesystem access, then keys are
predetermined the moment the system is actually called. The script or
database can only return whether something is gonna be there or not.
Then the only way to reconcile it is (in my case) for the key to be not
the only argument to the script, but I give the script my argument I
define in auto.master:
/cifs /etc/auto.smb diskstation
Now my script knows that e.g. $1 is gonna be the filesystem requested
path, and $2 is gonna be the custom parameter I determined in advance.
I don't need to use the key by itself ($1) to do the lookup. My real key
is $2. But I will use the second key ($1) to return a share for the host
determined by the first key ($2).
In essence what happens with auto.smb is that the key ($1) is used as
the host (first key) and smb.auto will itself derive and load the list
of shares, and then instantly mount that (it retrieves all of the second
keys and instantly uses that and mounts everything).
autofs allows for this second list of keys to be instantly used and
utilized.
But it's not the common use case because you are now fixed to that
location the user accesses and of course you could use that location
(the key) ($1) to look up a host in a different way, that is perfectly
possible. If your script marries "diskstation" to "ds" or "ds" to
"diskstation" then you could automount /cifs/ds and it would request
shares from host "diskstation".
But you're still stuck with that intermediate level, that extra level of
subdirectories.
It's not possible currently to use the "first key" to determine the host
and then get the "second keys" ($1) to determine the entries. Well,
actually it is, but not in a browseable fashion:
/cifs /etc/auto.smb -Dhost=diskstation
I believe this could work. You pass your real "primary" key as that
variable, and your script returns shares based on that key, but with the
"filesystem key" ($1) as the name of the share to return.
Still, rather convoluted at this point, and not possible to browse this
list.
Because it doesn't return a list. Using $2 to pass that variable
wouldn't really be different.
But the script is only called when an entry is accessed (through the
filesystem) and as such is never called without a secondary key.
The current auto.smb doesn't have secondary keys, it loads and mounts
all of them instantly and automatically, and there is no "automount" for
the secondary level.
Well, there is, it just mounts all of it in one go.
So how do you skip the intermediate level?
- call the script on purpose to generate a 'static list' instead of just
for entries alone.
- use the static list to precreate directories (mount points), or
- use the static list to return readdir information, or to filter
requests for directories, or don't use the static list at all and just
keep it the same.
So we also see here that the static list *could* be used for the thing
you described above, that alternative readdir implementation.
Although it's a bit of a hack, I'm sure.
You could specify some interval for invalidating the list. At which
point it is renewed by another "get list" call to the script.
So in essence I am really advocating "return list" functionality for
scripts here.
And there is no easy way to implement that while staying compatible with
current scripts because you would need to: call the script with an empty
parameter (that will never return an entry) or with a wildcard (that
will probably never return an entry) and in essence, that might just as
well mean, that if you want to take this approach:
- use the wildcard as the "list" operation, scripts that do not know
about the wildcard will simply return zero entries.
- use the extra parameter as $2, in other words: allow for additional
parameters in auto.master in that form of:
/cifs /etc/auto.smb diskstation random
But there are already recognised options. So what we have today (-D) I
guess already works, it is just a bit obscure, and it seems to be the
equivalent of what you would do.
Then an alternative auto.smb (I called it auto-short.smb) would:
- be called as:
/cifs /etc/auto.smb -Dhost=diskstation
- return a list of shares when called with "host=diskstation
/etc/auto.smb *"
- alternatively you could have it be called with: "/etc/auto.smb *
diskstation"
- make sure the shell doesn't expand that * ;-).
- autofs calls this list operation each time auto.master is reread.
- autofs calls this list operation each time some invalidation timeout
occurs
- not really any other way to trigger it.
- the static list being returned (really a dynamic list now) can be used
for readdir, or even access filtering (it contains all the valid keys).
Now when you have something like this, you can:
- call the filesystem component you use to access the actual shares, the
"entry" or simply "share" or "directory". But "key" becomes more
comprehensible now as well. "key" now corresponds to "entries in the
returned list". Each "entry in the returned list" is now a "mapping
between key (directory) and value (device-path). I realize "mount point"
might confuse with the mountpoint defined in the master file.
"submount" would be ugly. "subdir" is most convenient. "subkey" is
illustrative. "entry" describes the entire thing, not just the key. But
in essence we are just talking about a mount-point here.
Nevertheless in principle the "first key" given should not even need to
be the mount point in fact. It is a key to a lookup-table.
If you wanted to do it right I think you would need to do away with
hidden (or principally unknown) mount points, and basically always work
with static lists (or dynamically returned lists) and/or give every
script a first parameter $1 that is a key that you actually use for it.
Then the second paramter $2 would be the key that the filesystem has
actually given you for accessing a path.
In this way "access path" becomes secondary.
Perhaps a script in this way still cannot control the mount point (name)
but at least now it provides it in advance. Of course there are
situations in which you cannot know it in advance or in which it is
irrelevant to know it in advance.
You can imagine a list to be much too big to actually retrieve it. In
itself a sign of a bad system, I think. If it was that big, you would
need hierarchy to make it smaller.
So I don't know if there is ever any real need for obscurity, and for
hosts to be accessed while not being able to list them in advance.
I conjecture that this use case in itself would be odd, that you create
auto-mounts for an unspecified number of hosts you don't really know
about in advance.
It makes for zero-configuration, true. You don't have to keep a list
anywhere or even arrange for it to be generated.
On the other hand if a list could not be had, the script would just
return nothing and the daemon will assume no-browse
no-information-in-advance lookups the way it does today.
Basically if you keep the current $1 and use it to pass a wildcard, no
script is likely to ever break on that (it will just return nothing).
Then $2 can be your primary key. Not every script needs it.
But complete zero-configuration is to me an odd thing: a magical
directory that will mount every host given to it including all of its
shares, does not seem sensible to me in the sense that you would at
/least/ want some configuration for every system right?
One size fits all: the same system for every computer, just place it
somewhere in your filesystem and you have access to everything and
everything.
No, normally you would want to tailor it because you do not have access
to an infinite amount of hosts and the /cifs/host/share structure
therefore makes not much sense.
/device/share may make more sense, perhaps added with
/hosts/hosts-meeting-a-certain-pattern/share
You already have a pretty big system if you use the latter. Anyway.
I think I should conclude this :p.
What seems sensible to me at least is to add something that doesn't
break compability by using a wildcard * for scripts that will return a
certain format of list (or just all shares it can find in the regular
format) with a $2 parameter designating something such as a "host" or
perhaps even "department".
In this way you solve the issue that the current auto.smb requires the
"hostname" to be first key given to it because there is no other way to
pass a key. Then the actual keys can be passed as "second parameter" in
this sense that they still become $1, but at least now you can specify
your host to it in advance instead of guessing it on the wind ;-).
So if I have to say anything I would say that I recommend this
structure:
- $1 remains the filesystem key
- $2 becomes the additional key a user may specify in auto.master
- $1 as * will designate the request for a list lookup
- the list can in the future be used for readdir implementation, and
currently for precreated mountpoints in case "browse" is used.
>> indicate that this is true for "no browse" on "static maps" as well,
>> and
>> that directories are only created when they are accessed.
>
> That seems to be missing from the man page.
>
>> And that no-browse is the configured default.
>
> Not sure about that either.
>
> This (from auto.master(5)) says that I have made "browse" the internal
> program
> default way back when version 5 was first developed but I install a
> configuration that turns it off because of (because of the above
> problems, which
> are not spelled out in the man page):
>
> [no]browse
> This is an autofs specific option that is a pseudo mount
> option and so is given without a leading dash. Use of the
> browse option pre-creates mount point directories for
> indirect mount maps so the map keys can be seen in a
> directory listing without being mounted. Use of this
> option can cause performance problem if the indirect
> map is large so it should be used with caution. The
> internal program default is to enable browse mode for
> indirect mounts but the default installed configuration
> overrides this by setting BROWSE_MODE to "no" because
> of the potential performance problem.
I know, but if you, as a user, do not understand what the hell it is
doing in the first place, and you have no time for extensive manual
reading in advance (like me) you will never get to that option because
you still don't understand the basics, and the more advanced stuff (like
that) that will be too hard to understand.
That information is too difficult to comprehend (or digest) when you are
someone who still doesn't understand how it works.
>> I think that limitation indicates why using relative paths is so much
>> more pleasant. A map file using relative files can be "moved around".
>> A
>> map file using absolute paths cannot.
>>
>> Could you not make a direct map out of the key of the master file, and
>> the keys of the sub-maps?
>
> Can't really do that.
It's not that I saw it as necessary, I just still think the difference
and distinction between "direct" and "indirect" is rather I dunno, weird
I guess ;-).
> The closest thing to that would be multi-mount map entries, again from
> autofs(5):
>
> Multiple Mounts
> A multi-mount map can be used to name multiple filesystems
> to mount. It takes the form:
>
> key [ -options ] \
> [[/] location \
> [/relative-mount-point [ -options ] location...]...
>
> This may extend over multiple lines, quoting the line-breaks
> with
> `\´. If present, the per-mountpoint mount-options are appended
> to the default mount-options. This behaviour may be overridden
> by the append_options configuration setting.
Something I am already using (almost) and I believe this is what
auto.smb uses by default too. It's just that I use it to mount parts of
the same share. (Samba smbd often has issues with file-system boundaries
so I create a share out of each filesystem and share them individually,
then mount them as above).
>>
>> normally ( /bla/bla ) indicates an absolute path and can only be used
>> in
>> a direct map, from what I've seen. You *could* cause it to turn this
>> "indirect map" into a direct one.
>>
>> ie. ( bla/bla ) == indirect
>> ( /bla/bla ) == direct.
>
> In the Sun map format maps indirect mount map keys are a single path
> component
> only.
>
> The situation is different if using amd format maps but I could work
> out how
> direct mount maps could be usefully used so that mount type has not
> been
> implemented. Even on Solaris where they are supposed to be fully
> supported I
> could make sense of them.
>
>> /start/of/the/- ( path )
>>
>> Then any path in the master file ending with /- would be a direct
>> path.
>>
>> And would cause the (static) map file to be treated as direct.
>
> Nope, that is unlikely to work and would lead to a lot of problems.
>
> One example might be with:
>
> /start/of/the/-/path
>
> people will ask where have the directories below /start/of/the/ gone
> and the
> answer will be they have been covered by the autofs file system mount.
But that's no different from a regular mount on that location.
> Next it would be but I should be able to see these, surely that's easy
> to fix.
>
> At hat point I would probably leave the conversation.
:-). Haha. But come on, you can't take that seriously, the same thing
happens with a regular mount, even a bind mount does that. It's
absolutely not possible to reveal the contents of some subtree when
another filesystem had mounted on top of it, except by remounting the
entire subtree elsewhere.
(I am trying out some gimmick that requires me to mount the root device
under something like /run/mount/rootfsclone, because I am bind mounting
on top of something that I still want to be accessible. The only way to
make it accessible is to mount the entire rootfs somewhere else. I
basically need a persistent location for individual devices without
anything mounted on top of them; ie. a pure one-file-system mount tree.
Then you have those individual mount-trees (filesystem trees) and THEN
you have the complete FHS that you normally use.
That seems like the only sensible way to approach a lot of issues.
Having a /mounts/ with every (custom) mounted device present there.
Recently the number of incomprensible mounts reported by "mount" has
grown so big that the entire tool has become unusable, mostly due to
cgroups. And tmpfs's, and debugfs's, and what not.
I now find I need to create a wrapper for mount so that "mount" stays at
least usable to the user. Such that every subdirectory of /sys, and
every subdirectory of /run, and every subdirectory of /dev/, is actually
hidden from display. And from /proc as well. And the same applies to DF.
(I really need to find a way to better save and redistribute these
modifications).
>
> In any case a similar thing, but more explicit and I think easier to
> follow and
> maintain are the autofs multi-mount map entries, what I think you
> called
> relative path above.
>
> It isn't clear but that syntax should function within both direct and
> indirect
> mount maps.
>
> The problem with all this is that substitution cannot be used in the
> key.
>
> The reason for that is same as why the amd regex key matching has not
> been
> implemented.
>
> A linear map scan would be needed for every lookup in order to match
> what has
> been sent to us from the kernel. And as much as you might feel that
> wouldn't be
> a problem because maps are generally small I can assure you it would
> make life
> really unpleasant for me!
:). You have lost of enemies; if you don't do things right :P. LOL.
I am not thinking about this now, but I guess you mean that my proposed
solution of saving those static lists (or dynamic lists) would actually
help this :p.
Actually what you are saying is that even doing lookups on those lists I
proposed would be quite annoying.
However currently this lookup is already done on the server (if it is
some database) or in the static map (if they are not browseable). Right?
Databases are generally better at lookup than small-scale applications.
Now you need hash-tables etc. Anyway, I can't think about it right now.
>> I only noticed just now because autofs(8) references autofs(5), and
>> I'm
>> like ....huh?
>
> Yeah, that's what we have ....
>> /media/*/nas /etc/nas-shares.map
>
> Can't do that, each /media/*/nas needs to be mounted at program start
> so that
> automounts can be done?
Actually the shell easily expands such a pattern to all matching trees?
e.g. if you create /usr/local/doc, and then do
"ls /usr/*/doc/" you will get the output of:
/usr/local/doc /usr/share/doc
So with that output, you mount all of them, all the while knowing that
the middle component (here) is a wildcard. Then the daemon knows about
this wildcard and can use it while processing /etc/nas-shares.map for
each of them; but they are all individual mounts at that point.
e.g. /media/me/nas and /media/pamela/nas are now individual autofs
mounts.
but their "/etc/nas-shares.map" is called with a different wildcard.
I mean that either /media/me/nas will already exist (precreated by the
user) or your program creates it (I think it already does that).
Actually it cannot create it DUH, so the user will need to precreate
them.
I know /media is usually seen as a managed directory but this is
annoying in the first place. Such an important name (/media) and I
cannot do anything with it because it is already taken. At the same time
accessing it from your home directory is usually quite annoying. So in
order to make sense of it I must precreate /media/xen and
/media/dannielle and prevent the daemon (that /media thing) from wiping
them.... buh.
The funny thing is that /media/xen is not even owned by xen.
The subfolders are, but the thing itself isn't (how stupid?).
So in this case perhaps not as convenient, but in the general case if I
precreate:
/mytree/me/nas
/mytree/quinty/nas
etc.
Then the daemon could read
/mytree/*/nas
on program start and see all the shares that match. All the directories
that match.
Then it knows that "me" and "quinty" are wildcard entries for their
respective mounts.
>>
>>
>>
>>
>> > By definition a program map can't know what keys may be passed to it.
>> > And, yes, even autofs(5) doesn't say explicitly that a program map
>> > doesn't know
>> > what keys may be passed to it, perhaps that should be ammended.
>>
>> In principle even a program map could read all of the available keys
>> from whatever database it consults, and return all of them; or return
>> something only (as it does now, perhaps) when a given key matches (is
>> found).
>
> I've thought of that too.
>
> But I've resisted because I'm concerned about confusing existing
> program maps
> people have in unpleasant ways.
At some point you need to be willing to break previous compability.
I understand that Linux is usually a running-upgrade system and even if
people do upgrade entire distributions they want the system to keep
functioning as normal without changing anything.
But e.g. the Debian update program can tell you stuff like "This package
does something different now, and you need to ensure it can either
handle or ignore the wildcard".
on every package installation.
> That's not a bad thought, but what would $1 be so that older scripts
> wouldn't
> choke on it.
I had suggested * because there is no hostname called *.
But scripts may very well mount local filesystems as well. And they
might very well use a shell to do stuff like "[ -d $key ]" or "[ -d
"$key" ]" and....
And as always, stuff breaks a lot when people don't use "$key". If
people's scripts are badly written then [ -d $key ] will malfunction.
In order to cover that you would have to use something like "_", no one
is going to use _ as an actual filename.
>
>>
>> So, for instance, if $2 is "browse" the script may choose to return a
>> browse map, or list of shares, with whatever options are available (it
>> could even return the UID/USER of the share given options, so that the
>> created directory would have the same UID as the to be mounted share!)
>> -- meaning it might simply return ALL entries it could possibly return
>> in the default format, which is the meaning of the wildcard, and the
>> program (autofs daemon or module(?)) would be able to generate the
>> appropriate directory entries based on that. So in that case you're
>> probably going to be rid of the problem of the non-matching state of
>> pre- and post-mount of directories.
>
> which pretty much defeats the only possible solution I can think of for
> "browse"
> option mounts ...
You mean the one suggested above. But if you make an alternative readdir
having a list available won't bug you right?
I mean, having mount information available in advance cannot be a
problem, only a help.
> Like I said, I wanted to have the default as "browse" but got hit with
> too many
> complaints and was only willing to change the package installed default
> configuration to satisfy them.
>
> I'm not going to try that again.
"Design by committee" they call it ;-).
Someone told me that OpenSUSE has had "browse" as the default for at
least 5 years.
You did think about making a distinction between static and LDAP/NIS
maps? I'm not sure I am not crossing my bounds here now ;-). Seeing that
I already suggested it.
>> In this way no one can ever get confused, so you might just rename
>> autofs(5) to autofs.map(5).
>
> Yeah maybe ...
>
>> I will look into providing a patch, but I hope you can rename
>> autofs(5)
>> to autofs.map(5) before doing anything like that. I don't feel like
>> improving a system I know myself haven't had access to, in that sense.
>> I
>> don't mean you have to do that straight away, but if that is a
>> possible
>> direction to go, or change to make, then I could supply a patch or
>> anything based on the system that would result from that, seeing that
>> autofs(5) is already pretty good in that sense.
>
> At some point I'll need to return to this and make a list.
> Unfortunately that time isn't now.
Here is just my short summarize:
- suggested compromise between browse and nobrowse by only making browse
for static lists the default to please new people unaware of what will
happen
- suggested perhaps using _ as the wildcard key, not using that "browse"
flag as $2, but allowing a different "primary" key as $2 if the script
wants it.
- suggested changing autofs(5) to autofs.map(5) such that users will be
able to find it.
And the rest is up to you, I think you don't need anyone rewriting it
for you now, but I could still try my hand if that was necessary. I just
think using better terminology is dependent on the first two suggestions
here, particularly perhaps the second, and otherwise you'll have to
explain current terminology better and create some way to separate "key"
in auto.master from "key" in "autofs.map" ;-).
However if scripts could accept an additional "key" and the default
operation or capability would for them to be able to return a "list"
then it would become more clear that the additional "key" would be the
index to retrieve that list, and that the entries resulting from that
may have their own "keys" but these "keys" are then used for the
individual "mount points".
So then you have reason to call the entry keys "entry keys" and the
other ones "lookup keys" for instance. Then, static maps use "entry
keys" but scripts have "lookup keys" as their 2nd parameter. The script
then has "entry key" as the first, and "lookup key" as the second
parameter. Then, entry key is equivalent to subdirectory, and lookup key
is often going to be equivalent to e.g. hostname.
A script without list functionality only accepts "entry keys" but may
very well use them as lookup keys as well.
A database also uses them as equivalent. But at least now you have
something of a model to conceptually separate them. Since browse already
functions for e.g. LDAP, in many cases you will not use a lookup key for
that, simply because (a) /etc/autofs_ldap_auth.conf already contains
such paramters and (b) the other parameters are specified in the
mapname-format for LDAP.
So what we call "lookup key" would already be encoded in the LDAP URL
but such a thing is not possible for scripts.
So you could call scripts the exception to the rule in not having this.
Of course it exists,: the "-D" parameters.
(I think? Haven't tested it yet).
So I don't know.
For a database the entry key is always going to be a lookup key to the
database.
Entry keys can also result from a list fetch.
So they can result from filesystem access or from some list retrieval.
But if "browse" becomes more normal and standard, you would see that it
becomes easier to talk about this "entries from the list you get when
quering the database/script for it".
Then the gap between "entries from the list" and "subdirectories
created" is smaller than the gap between "filesystem access" and
"subdirectories created".
Meaning: key (database designator) -> list -> entries (database entries)
is conceptually easier to grasp than key (filesystem access) -> entry
(database entry).
Or key (filesystem access) -> database lookup -> entry.
Simply because it is hard to understand that user action (filesystem
lookup) is the input to the entire system and is actually the keys being
used.
Even if it's not always to be used, having a level in between that ties
"key" to "pre-existing shares" or "pre-existing entries" becomes easier.
When a user thinks of "key" they think about either existing shares or
existing hosts.
Then conceptually it is logical to assume that the script or database
can give back this list. And that either this list is precreated on the
harddrive, or at least that it is used to match the "keys" against, for
instance.
(By harddrive I mean filesystem (hierarchy)).
This is why I think standard operation for at least smaller lists should
be a form of browse or at least a form of list retrieval, if you are
going to have dynamically generated lists in any case.
Then, it conforms more to a sense of what a general computer user is
going to have of the idea of auto-mounting mount-points. It (he/she)
thinks those mount-points are already going to exist, prior to being
automounted.
This in turn makes it easier to explain that the key is really a
subdirectory, and that there can be another key if needed to specify the
host, or something of the kind.
Then, the most common use case for a new or general computer user
wanting to try this is going to be met, because that use case is going
to involve auto-mounting network-shares of which there is a limited
number.
And it will involve something like
/nas/media
/nas/backup
/nas/home
etc.
Now I'm not sure if it covers the entire use. But at least you'd also
have a script that can generate a static map for you that you can then
use in place of the scripts, if you want to prune the mounts that are
actually visible to you.
Apart from the distributions themselves there is not really any software
in the Linux world that is tailored to either the desktop user, or the
server user, but not both, is there?
Apart from the desktop environments.
Anyway this was a long read and write, I guess, for both of us :P.
Time to get some food again or at least some water :p.
See ya.
--
To unsubscribe from this list: send the line "unsubscribe autofs" in
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: documentation issues
2016-07-10 17:07 ` Xen
@ 2016-07-11 14:09 ` Ian Kent
2016-07-13 2:17 ` Marion, Mike
0 siblings, 1 reply; 15+ messages in thread
From: Ian Kent @ 2016-07-11 14:09 UTC (permalink / raw)
To: Xen, Autofs
On Sun, 2016-07-10 at 19:07 +0200, Xen wrote:
> Ian Kent schreef op 06-07-2016 14:48:
>
> > But I don't understand your use of "lazy initialization".
>
> I meant creating the mount point only when it was accessed.
>
> > So I don't quite understand what your concern is.
> > Sure, if you have hundreds or thousands of these there can be a
> > performance
> > problem but that's not what you were trying to do I thought.
>
> I'm not sure either at this point but I'm too hungry to read back on
> what I had written before :p.
>
> > Of course, yes, program maps can never know in advance what key may be
> > passed to
> > them.
> >
> > The problem is usually seen with user applications, cron jobs that scan
> > directories, GUI file management utilities etc.
> >
> > It's has been quite a problem over time.
>
> Yes that is my concern. I do not like the idea of invisible access
> points at all, unless I was doing it for security, but in that sense you
> can't really hide anything in a Linux system. Invisible mount points
> only make sense when you have LOTS of them and you only need few at a
> time.
And that is a fairly common case.
Don't forget the implications of scanning these directories during expire.
It doesn't take much to increase the overhead of that.
Like I said before, the amount of work to do this is huge.
What is needed is a re-write of the user space <-> kernel space communication
essentially to add readdir functionality.
So that listing a directory would show the possible map mount points without the
need to create the mount point directories.
That is still open to excessive unnecessary mounting but not nearly as much as
pre-created directories.
>
>
> > LDAP is a map source, like a file, or nis etc.
> >
> > Maps stored in LDAP behave much the same as maps stored in files.
>
> Right so you can browse them if you want.
Yep.
>
>
> >
> > >
> > > So then consider that we only use a static map here. An actual file
> > > with
> > > thousands of entries? Of course it can happen. But what would be the
> > > point of that still (as opposed to LDAP or programmatic).
> >
> > People do seem to like program maps but plenty of people use static or
> > semi
> > -static maps, ie. a bunch of entries followed by the wildcard map key
> > "*"
> > usually with some macro or "&" substution.
> >
> > Similarly, what might match the wildcard map entry can't be known in
> > advance.
>
> Right. That makes it programmatic; the (server) response will determine
> if anything was actually there. On the other hand a wildcard (in a
> direct map at least) may determine existing (or match existing)
> filesystem components that you could read in advance. And you need to,
> in a direct map. But direct maps are mounted anyway (or the mountpoint
> is created, I mean). So it currently only applies to indirect maps where
> the wildcard is the final component, and it then behaves like a
> programmatic thing where it only actually gets mounted (and created) if
> e.g. the server reponds with a share.
A matter of terminology really, I don't see them as programmatic myself.
But also direct mount maps cannot contain a wildcard entry.
They must be distinct and known at the time the map is read because each entry
is used to mount an autofs file system to act as a trigger for the actual mount.
That's why they can't be nested in any way since that could cover other direct
mounts below the nesting point when a mount is triggered.
>
>
> > It's hard enough for me to understand VFS path walking sufficiently
> > without
> > having to describe it too.
>
> I don't know. I studied it in some detail, I just don't understand the
> RCU algorithm. At least, I have studied path_lookupat and the entire
> procedure leading up to lookup_fast and lookup_slow. I'd have to check
> my printouts to say more. But let's just say I'm aware of any
> (recursive) operation involving symlinks, where intermediate symlinks
> get expanded before the original path is being continued, etc. I am also
> aware of the presence of autofs code, particularly in the function that
> specifies one or two other mount things.
>
> I believe that is called by lookup_slow....
Yeah, while there are no locks held when following a mount point (where
automounting might be done) during the path walk you can't do most of the
remainder of the path walking code lockless or rather without taking references
to the struct path, you might see the terms ref-walk and I think rcu-walk in the
code, that's the main difference between lookup_slow() and lookup_fast() IIRC.
The name rcu-walk I think is possibly not the best naming.
It implies a lockless and reference-less path walk which is much faster for
certain work loads. But if the underlying structures are in danger of changing
in ways that can't be properly handled by the read-copy-update (RCU) mechanism
the path walk needs to revert to a ref-count(ed) walk which also allows locking.
That really just means taking a reference to the struct path (and the ability to
take a lock on certain other structures when needed) so it can't go away from
under you while you are using it, starting over when you hit such a case.
>
>
>
> > All I can say is there is a problem determining whether a call back to
> > the
> > deamon is needed or not at the times the kernel module is called. That
> > can
> > sometimes result in all entries in the autofs managed mount point
> > directory
> > being mounted.
>
> So the mount point is accessed but the module doesn't know if anything
> really needs to happen at that point. And stat operations or anything
> else all use the same path lookup. Of course I don't know what happens
> pre-mount and post-mount to the directory itself. If post-mount the
> directory is really on another filesystem, the "mnt" value will change.
> And it will return another dentry for that other mount. I remember
> "path" being mnt+dentry.
Actually the main automounting function of the module will be called back with
essentially the path component only.
Most of the logic to decide if a mount should be done has now been taken into
the VFS mount following logic.
And all it has are the lookup flags, like LOOKUP_DIRECTORY, LOOKUP_CREATE, etc.
Essentially all that's known is the class of lookup, directory, create, continue
or other, which is a loose division of the related system calls, where continue
means an intermediate path component.
The directory, create and continue classes trigger automounts, other classes
usually don't (which are generally stat type system calls et. al.).
>
> >
> > Another aspect of this problem is that the same system call may need to
> > have the
> > directory trigger a mount while not so at other times it's called and
> > there's no
> > way to tell what the usage is within in the kernel.
>
> So you are getting called by lookup_slow or something of the kind near
> it, but you're not sure why. But these lookups are being done for each
> individual path componenent. However a "cd" to the directory should
> mount it, but a mere "stat" may not. Is that the case? Seems odd that it
> would be difficult, but I believe you on your word.
>
> Maybe "cd" shouldn't mount it until the contents is accessed, but I
> don't know.
Yeah, but "cd" isn't a system call it's a bunch of code that makes system calls
which must result in a mount because this directory is to be set in the VFS as a
process working directory, it must be fully resolved at that point.
>
>
> >
> > So sometimes people get caught because they want their stat(2) call to
> > return
> > the mounted file system results but not to cause a mount at other times
> > when it
> > might lead to a mount storm.
>
> Hmm. It seems like the first desire is a problem. At least, I don't know
> how directory lookup is done. I don't know if this information is the
> result of a stat call or something else. I do remember seeing code for
> dentry-moving but it was confusing.
>
> For sure you want "ls /directory/" to return the mounted contents. But
> I'm not sure if its possible for your module to differentiate. Ls -d
> "/directory/" should perhaps not cause mounting. I can see quickly
> though that "ls" causes an "open" call but "ls -d" does not.
>
> But then, "open" will not access any path components beyond the
> directory itself. So if your module is only called by path_lookup it is
> going to be impossible to know what for.
>
> Particularly if an "ls" does not actually access path componenets
> (beyond the directory itself) there would be no way to know what is
> being asked.
There's one other thing to be aware of in all this.
Adding a "/" to the end of a path tells the kernel path walk this must resolve
to a directory so the LOOKUP_DIRECTORY flag will be set and automounting will
occur in that case.
That is about all the control available in user space and TBH not a big change
to code if you really need stat to return the actual mounted file system
information, given that non-directories can't be mount points and so aren't a
problem.
>
>
> > Usuall all I can say to them is don't use the "browse" option.....
>
> :).
>
>
> > It is a difficult problem and I'm inevitably caught in the middle
> > between the
> > "browse" and "nobrowse" camps.
>
> You appear to be very conscientious about it.
>
>
> > Not all cases of accessing such a directory will see this problem
> > either but
> > user space seems to have a habit of using system calls that don't
> > trigger a
> > mount together with others that do.
>
> such as that "ls" vs "ls -d"?
Can't remember the difference between these two codewise but, for example, doing
a stat(2) call then an opendir(3) and not being able to handle the fact that
this changes from a directory that doesn't have a mount on it to one that does
between the two system calls.
Which has caused find(1) to get very confused (in the somewhat distant past now
though), ;)
>
>
> > Causing the so called mount storm.
>
> Still seems odd but I believe you, but. I guess what it could mean is
> "ls" not only trying to list every share (browse) but also to perform
> calls on those shares (path componenents retrieved) that might require
> additional information. For example, if I am not content just knowing
> the shares, but also want to know the number of files in them.... which
> definitely some programs or user agents would do. Then I'm in trouble
> because this requires mounting. Then, if that is the case, a simple
>
> "list /nas/" might result in the subfolders (/nas/media, /nas/backup,
> etc.) to also be queried and you have what you call a mount-storm.
>
> But this is the result of user space convention and behaviour. Surely
> people cannot request browse while at the same time wanting to deny
> actions on the returned results when these actions stem completely from
> userspace?
>
> If some user agent or GUI is trying to list the number of files in each
> directory (which at this point means a share) then that's not something
> autofs could ever deal with. And I don't think it is a problem autofs
> needs to solve.
>
> If I am at all correct about this and I see what you mean right now,
> this "GUI" behaviour would then simply be incompatible with unmounted
> folders *that-might-need-to-get-mounted-but-not-always* and this GUI
> would need to be aware to not do that thing.
That's about right, and isn't a problem until someone with a largish map set for
browse decides to access it with a GUI, then the complains start, ;)
But it isn't an unreasonable expectation it's just problematic to make it work
the way we would like.
>
>
>
>
> >
> > Having said that though, with a lot of work, I could probably do
> > something about
> > it.
> >
> > TBH I've avoided it because it is difficult, perhaps in version 6.
> >
> > It would require not pre-creating mount point directories and adding a
> > readdir
> > implementation to the kernel to fill in the names (map keys) that
> > aren't already
> > mounted. But that means significantly more (in terms of quantity of)
> > communication between the daemon and the kernel module.
> >
> > That means re-writing the user space <-> kernel space communications
> > completely
> > in an incompatible manner to what is used now, not to mention
> > significant
> > changes to the user space code itself.
> >
> > A big job really.
>
> And not a big joy perhaps.
>
> So basically you are going to not precreate, but still hijack kernel
> calls to return the listings for the directories that do not yet exist
> (the listing of those directories).
Yes, similar to what the NFS READDIR or READDIR_PLUS RPC methods do.
It's not a new idea by any stretch.
>
> Which means those directories could be shown, but not opened, or
> something of the kind. Then, the user agent .. well I don't know what
> difference it makes actually if the mount storm is the result of
> userspace calls that directly cause it. So I guess I'm mistaken here and
> the issue is even more complex.... :(.
>
> I don't know how a readdir on the "top" directory could /directly/
> causes a mountstorm on the listed entries. But then, I don't know much
> ;-).
It's usually not actually the readdir that causes the problems it's associated
calls done by code surrounding the readdir that generally it.
I mean if stat(2) was to cause a mount to occur then there would be a lot of
mount storms reading directories.
Implementing an in kernel readdir won't get rid of the possibility of everything
in a directory being mounted on access but it would go a fair way to avoiding
cases where you didn't want or need everything mounted upon listing a directory.
Just how effect it would be has been something I've thought about many times,
still not sure of the actual answer.
>
>
> > It happens, from what I've seen, quite a bit.
> > Perhaps you would be surprised.
>
> Illuminate me :P. What is the most common cause of it?
GUI applications.
Cron jobs scanning directories and causing so many mounts they cripple the
system.
The point of the statement was more about number of people that happen to have
large maps than anything.
> > Yes, but network sources such as NIS and LDAP are treated much the same
> > as a
> > file map.
>
> Yes, I didn't realize at the start. I have always found LDAP to be a
> rather incomprehensible thing to work with. Without hands-on experience
> it is hard to get a good grasp of how it works. Or even how to organise
> it (if you do create one) as there seem to be standards for everything.
You think just checking it out looks incomprehensible, the autofs LDAP lookup
module code is very verbose (incomprehensible really) and quite hard to work
with.
I'd be much happier if LDAP never existed.
>
>
> > Checking if a file map has been updated since a key was last used is
> > easier with
> > a file map and straight forward with a NIS map but can't sensibly be
> > done for an
> > LDAP map.
>
> Right.
>
> >
> > >
> > > Maybe I'm missing something here.
> > >
> > >
> > > > Another reason for the default is that, because of this, historically
> > > > there was
> > > > no "browse" option and this maintains what is (should be) expected.
> > >
> > > Yeah I thought so, because of the comments near the timeout value.
> > > However that is a reason to never change anything ever. Someone
> > > mistakenly choosing "browse" will very quickly find out.
> >
> > And wouldn't itself be sufficient but for the problems I'm attempting
> > to
> > describe above.
>
> You mean the mountstorm problems are reasons to keep the default at
> no-browse?
>
> It still seems at this point that this is only relevant for LDAP/NIS
> entries.
>
>
>
> > > First the auto.master file on my system mentions man autofs as a place
> > > for seeing the format of the (sub)map files. However there is nothing
> > > in
> > > there. So that part is missing, but in a sense the contents of
> > > auto.misc
> > > is already somewhat sufficient for that, but still annoying that there
> > > is no man page.
> >
> > That doesn't sound right, there might be a problem with your
> > distribution
> > package.
>
> No, as I say later this is incomprehension on my part ;-). Or merely the
> fact that needing to use "number" for accessing "sections" of the
> "manual" is so rare (if you are not a developer accessing library
> functions and/or kernel functions) that a regular user will almost NEVER
> use a section number in daily operation.
LOL, I got that later, yes.
>
> Most configuration files are called "openvpn.conf" or something of the
> kind, and hence their manual page is also called that, and you don't
> need to do "man 5 openvpn.conf", because "man openvpn.conf" is
> sufficient.
>
> Using numbers would be superfluous in 99% of cases, or even more than
> that. As opposed to perhaps requesting help on function calls, such as
> mount() as opposed to /bin/mount.
>
> So as a developer you may be used to it. But a regular user is not.
> Anyone who does not do C programming, is not.
Yeah, maybe, but you still need to account for the case when there are two
things of the same name, one configuration oriented and one system orientated,
one belonging in section 5 and one belonging section 8.
In the autofs case autofs.conf(5) has it's own man page for configuration and
autofs(8) for startup information and autofs(5) for mount map information.
Actually seems mostly sensible to me, since while mount maps are configuration
in a sense they don't quite fit with the actual application configuration of
autofs.conf(5).
>
> So, my mistake, I guess.
>
> > >
> > > You don't imagine that every freaking access of a directory or path
> > > component in the managed directory is going to result in network
> > > access.
> > >
> > > You could do a "for f in `seq 1 10000000`; do vdir $f; done" and have
> > > fun.
> > >
> > > (Don't know if that would still be the case for "browse" maps).
> > >
> > > So this hidden directory, secret door thing is really the most
> > > confusing
> > > of all.
> > >
> > > It's somewhat similar to something I might like to do, but still you
> > > don't really expect it ;-).
> > >
> > > So the 3-4 things are:
> > >
> > > create a man page or section for the format of the sub-maps
> >
> > Already exists, needs work.
> > Lets call these mount maps (not the best but the convention used) as
> > opposed to
> > the master map.
>
> Alright. Still confusing though.
>
> >
> > > indicate more clearly that programmatic maps in principle return a
> > > single entry
> >
> > Maybe but isn't this in autofs(5) already close:
> >
> > Executable Maps
> > A map can be marked as executable. A program map will be called
> > with the key as an argument. It may return no lines of output
> > if there's an error, or one or more lines containing a map entry
> > (with \ quoting line breaks). The map entry corresponds to what
> > would normally follow a map key.
>
> I guess.. it's just that you read over "a map entry" as meaning "only a
> single map entry" since just before it says "one or more lines". So it
> is something you only notice if you reread it in detail. After finding
> out that it doesn't work ;-).
>
>
>
> > Isn't this near the top of autofs(5) sufficient:
> >
> > key [-options] location
> >
> > key
> > For indirect mounts this is the part of the path
> > name between the mount point and the path into
> > the filesystem when it is mounted. Usually you
> > can think about the key as a sub-directory name
> > below the autofs managed mount point.
> >
> > For direct mounts this is the full path of each
> > mount point. This map is always associated with
> > the /- mount point in the master map.
>
> Yes it is, particularly because it mentions that it is a sub-directory
> name.
>
> Then, I begin to wonder what "usually" means. See, from the looks of it
> it is completely identical to sub-directory name, because:
>
> - they key is going to be directly used as the name of the subdirectory
> - programmatically, the script does not even have any say about the key,
> it cannot even return a key, does not determine the key. The only thing
> that can ever happen is that the key as given is turned into a
> subdirectory (when valid).
Yeah, I get what your saying and it makes sense.
But it could be a wildcard ....
>
> I mean the logical abstraction between "key" and "value" may make sense
> from a purely abstract logical point of view ;-). But it has no bearing
> on actual domain-specific termininology, it is just a computer science
> term so to speak.
>
> What it actually comes down to is:
>
> - mount point for the actual share, or
> - subdirectory created as mountpoint for the actual share(s).
>
> Where "value" would mean:
>
> - path to the mount (share), or
> - network path to the share that gets mounted on the subdirectory (the
> key).
>
> the "mount" utility calls these source and target, respectively (source
> for the path, target for the mount point). Otherwise it calls them
> "device" and "mountpoint".
>
> So although "key" also has meaning with regards to "database lookup" I
> don't see how it is ever not directly used as the mountpoint itself. And
> this is what creates the confusion because with the "browse" option it
> is not just going to be a "lookup key".
From automount(8)s POV it is always a lookup key that it wants to match to a
mount location.
>
> Further there is no difference between "subdirectory mount point" and
> "lookup key", where these are fundamentally separate concepts, and could
> even imply, in principle, that the actual directory to use is *also*
> retrieved by the key.
>
> So conceptually the idea that "key" instantly means "subdirectory
> mount-point" is confusing.
>
> In fact it is odd to begin with, from the perspective of a user, that
> "auto.smb" mounts the entire share list of the requested "host" or "key"
> in one go under the location that was accessed.
Yeah but I'm not going to get to excited about an example program map that gets
installed by the package.
>
> This is not the most common scenario (well, maybe if you are in some big
> network). This is not most common not only because it mounts /all/ the
> shares at once(!) but also because generally people want to have some
> level of control over the directory it ends up in, and what is the host
> for some server (hostname) might not be where you actually want to mount
> it.
Sure it is a bit of a hurdle but the autofs internal hosts map works that way
and has been an expected automount feature for a long time.
I agree that doesn't cater for new users and I don't find creating and
maintaining web presences at all pleasant, quite the opposite, so a wiki for
this sort of information is probably not going to happen any time soon.
>
> So I suggest that even this auto.smb is a bit of a weird entity. I have
> used it to generate a map list for me that I then adjusted and used as a
> static map file.
>
> I know it does the same as that -net or -host thing. It's just that for
> a desktop user (again, you say that is not the target audience, but
> still) what you really want is a fixed location the user chooses (in
> auto.master) and then a browseable list of shares. Apparently this list
> needs to be static. What I envisioned before would be a parameter to a
> script that causes it to output a list of shares rather than the share
> entries themselves, or just the complete list of it.
>
> This would give it "browse" capability. If you had that, you would need
> to be able to pass a parameter to the script as the key, but this is
> rather obscure.
>
> What it comes down to is that this is what I would envision for myself:
>
> Auto.master:
>
> /cifs /etc/auto.smb diskstation <-- diskstation is
> the key
>
> Now the program/daemon/whatever passes diskstation as key to the script.
> It also passes a wildcard parameter such as "*". The script now returns
> a list of shares for "diskstation". Subsequently when the daemon needs
> to mount, it calls the script with diskstation and the requested mount
> point/share. Alternatively, the returned output from the first call must
> be complete and is saved by the daemon. It is then used in place of a
> static map (the script is now nothing but a static map generator).
>
> Personally I prefer the former: the script has two modes: list and
> return entry, and it therefore has two parameters: one to identify what
> to list, and the second to determine what entry to return from what was
> listed.
I have thought about it a number of times.
It is necessary to remember that whatever is done must be backward compatible
for existing users program maps.
One though was similar to your suggestion above, where diskstation would be
introduced as a mount option, understood to be a program map parameter by
automount(8) for certain lookup operations like the lookup module readmap entry
point.
That's about the closest I've come to something that should work.
Still I haven't actually implemented it.
There's still a lot of detail about this approach that is unclear though, such
as what should the parameter be, how many would be needed, where to store it
internally, etc.
>
> Otherwise, without the parameter, you'd need to hardcode it in the
> script and duplicate the script for every host, etc.
>
> In fact as a user you may not even want all shares to be present on your
> local system. So you might equally well decide to use a static map. So
> perhaps you will use "smb.auto list" or "smb.auto list diskstation" or
> "smb.auto diskstation *" manually. And perhaps it generates all of the
> mappings for you that you can then prune and save.
>
> Perhaps, in absense of the key (the entry, or wildcard) a call such as
> "smb.auto diskstation" should simply generate the share list, whereas
> "smb.auto diskstation media" generates the key for only that entry.
>
> So you see me use a term like "entry" to determine what you today call a
> "key" and the word "key" to determine what you today call a "entry" ;-).
>
> "entry" means "element of pre-existing list", "key" means "value to use
> for a lookup operation in a database".
>
> "key" can also mean "that what you need to mount or access something".
>
>
>
> so if you combine the two, you have like three things:
>
> - subdirectory (mount point)
> - key to use for database lookup
> - entry in the list of shares
>
> but you can only solve it if you differentiate between "lookup
> operation" and "element of a list".
>
> a lookup operation may /return/ a list, which is why I said:
>
> "diskstation" (hostname) is a key
> list of shares is the result of that lookup operation based on that key
> entry is an element of that list you can mount.
>
> This applies to a form of browse scenario. If you have invisible
> mounpoint, you get:
>
> "diskstation" (hostname) is a key that is going to be a direct
> subdirectory
> the list of shares it returns is going to be a subdirectory list to that
> first subdirectory
> this will contain the actual shares, so you get top/key/entries.
>
> And you see we basically have the same thing except that this is one
> level deeper in our hierarchy.
>
> In my desired use case, you get:
>
> top/entry
>
> But in the current implementation of e.g. smb.auto, you get:
>
> top/key/entry
>
> So it is clear diskstation (hostname) IS a key, except that in the
> current case or scenario this key is ALSO used as the direct descendent
> of the toplevel directory used for the configuration in auto.master.
>
> Which gives rise to the idea that maybe "key" and "subdirectory mount
> point" should not be equivalent or identical. Not necessarily identical.
>
>
> In fact, smb.auto DOES produce a browsable list. It is just /beneath/
> the subdirectory for its "key" (the hostname) and mounts ALL of the
> shares at once.
Actually it doesn't actually mount the shares.
It mounts autofs trigger mounts that will cause the actual share to be mounted
on access.
>
> So you now already have that mountstorm (it just gets mounted by
> default) it's just a level deeper.
>
> You now don't have a mountstorm on the level of hosts, but you have a
> mountstorm on the level of shares (per host) but it is still the same
> thing.
>
> So the design specifies that keys must become mountpoints in the
> "sub-top-level" directory (the directory managed by autofs for indirect
> mounts).
>
> Whereas perhaps conceptually you would need to differentiate between
> key, and an entry used for mounting, and the difference is that this
> entry used for mounting can be an element of the list returned by the
> key.
>
> So you get key -> list -> entries. In the case of current auto.smb, what
> happens is:
>
> key -> (subdirectory) -> list (itself an entry) -> entries.
>
> Or in other words:
>
> key -> list -> entries, but mounted beneath top/key, as key is used as
> an extra directory in between.
>
> Current auto.smb:
>
> <managed mount point> / <key> / entries / contents of shares
>
> My preference:
>
> <managed mount point> / entries / contents of shares
>
> And why? Only because I want to specify mount points for specific hosts
> manually.
auto.smb is an example program map.
Your free to implement your own program map any way you wish.
The thing that gets passed to the program map is a string that represents the
trailing path component of a path the kernel believes needs something done to
it, be it symlink it somewhere, bind mount it somewhere or lookup a location and
mount that on it etc.
You must adhere to that restriction because that's how automounts are triggered.
>
>
>
> So the question becomes how you can combine such things.
>
>
> The requirement becomes for the script to return the mount point. A
> static list does return mount points. A script does not, the mount point
> is specified as the "key" given to it. So if you want the script to
> determine the mount point the way a static list does, you need it to
> return, in essence, a static list.
>
> Even if your static list is not browseable, so too can a returned
> "dynamic list" also be not browseable. But at this point your script can
> return a mount point of its own. That is again problematic if the key is
> derived from filesystem access.
>
> So you see how hard this is to reconcile.
>
> If we insist in accessing hidden shares and deriving keys from user
> action or filesystem action, or filesystem access, then keys are
> predetermined the moment the system is actually called. The script or
> database can only return whether something is gonna be there or not.
>
> Then the only way to reconcile it is (in my case) for the key to be not
> the only argument to the script, but I give the script my argument I
> define in auto.master:
>
> /cifs /etc/auto.smb diskstation
>
> Now my script knows that e.g. $1 is gonna be the filesystem requested
> path, and $2 is gonna be the custom parameter I determined in advance.
>
> I don't need to use the key by itself ($1) to do the lookup. My real key
> is $2. But I will use the second key ($1) to return a share for the host
> determined by the first key ($2).
>
> In essence what happens with auto.smb is that the key ($1) is used as
> the host (first key) and smb.auto will itself derive and load the list
> of shares, and then instantly mount that (it retrieves all of the second
> keys and instantly uses that and mounts everything).
>
> autofs allows for this second list of keys to be instantly used and
> utilized.
One other consideration is the lazy mounting (and umounting) of these multi
-level mount trees that autofs manages.
It's very easy to get that wrong and end up with an inoperable mount point that
cannot be recovered.
At the moment automount(8) will do that for you and occasionally gets confused
itself.
To do what is wanted here it would be necessary have a way to tell automount(8)
leave the mountpoint alone.
>
> But it's not the common use case because you are now fixed to that
> location the user accesses and of course you could use that location
> (the key) ($1) to look up a host in a different way, that is perfectly
> possible. If your script marries "diskstation" to "ds" or "ds" to
> "diskstation" then you could automount /cifs/ds and it would request
> shares from host "diskstation".
>
> But you're still stuck with that intermediate level, that extra level of
> subdirectories.
>
> It's not possible currently to use the "first key" to determine the host
> and then get the "second keys" ($1) to determine the entries. Well,
> actually it is, but not in a browseable fashion:
>
> /cifs /etc/auto.smb -Dhost=diskstation
>
>
> I believe this could work. You pass your real "primary" key as that
> variable, and your script returns shares based on that key, but with the
> "filesystem key" ($1) as the name of the share to return.
>
> Still, rather convoluted at this point, and not possible to browse this
> list.
>
> Because it doesn't return a list. Using $2 to pass that variable
> wouldn't really be different.
>
> But the script is only called when an entry is accessed (through the
> filesystem) and as such is never called without a secondary key.
>
> The current auto.smb doesn't have secondary keys, it loads and mounts
> all of them instantly and automatically, and there is no "automount" for
> the secondary level.
>
> Well, there is, it just mounts all of it in one go.
>
> So how do you skip the intermediate level?
>
> - call the script on purpose to generate a 'static list' instead of just
> for entries alone.
>
> - use the static list to precreate directories (mount points), or
>
> - use the static list to return readdir information, or to filter
> requests for directories, or don't use the static list at all and just
> keep it the same.
>
>
> So we also see here that the static list *could* be used for the thing
> you described above, that alternative readdir implementation.
>
> Although it's a bit of a hack, I'm sure.
>
> You could specify some interval for invalidating the list. At which
> point it is renewed by another "get list" call to the script.
>
>
> So in essence I am really advocating "return list" functionality for
> scripts here.
>
> And there is no easy way to implement that while staying compatible with
> current scripts because you would need to: call the script with an empty
> parameter (that will never return an entry) or with a wildcard (that
> will probably never return an entry) and in essence, that might just as
> well mean, that if you want to take this approach:
Umm .. I think the other possibility is that if you pass an empty string to an
old program map you might cause it to crash.
> - use the wildcard as the "list" operation, scripts that do not know
> about the wildcard will simply return zero entries.
> - use the extra parameter as $2, in other words: allow for additional
> parameters in auto.master in that form of:
>
> /cifs /etc/auto.smb diskstation random
>
> But there are already recognised options. So what we have today (-D) I
> guess already works, it is just a bit obscure, and it seems to be the
> equivalent of what you would do.
>
> Then an alternative auto.smb (I called it auto-short.smb) would:
>
> - be called as:
>
> /cifs /etc/auto.smb -Dhost=diskstation
>
> - return a list of shares when called with "host=diskstation
> /etc/auto.smb *"
> - alternatively you could have it be called with: "/etc/auto.smb *
> diskstation"
>
> - make sure the shell doesn't expand that * ;-).
>
> - autofs calls this list operation each time auto.master is reread.
>
> - autofs calls this list operation each time some invalidation timeout
> occurs
>
> - not really any other way to trigger it.
>
> - the static list being returned (really a dynamic list now) can be used
> for readdir, or even access filtering (it contains all the valid keys).
>
>
> Now when you have something like this, you can:
>
> - call the filesystem component you use to access the actual shares, the
> "entry" or simply "share" or "directory". But "key" becomes more
> comprehensible now as well. "key" now corresponds to "entries in the
> returned list". Each "entry in the returned list" is now a "mapping
> between key (directory) and value (device-path). I realize "mount point"
> might confuse with the mountpoint defined in the master file.
>
> "submount" would be ugly. "subdir" is most convenient. "subkey" is
> illustrative. "entry" describes the entire thing, not just the key. But
> in essence we are just talking about a mount-point here.
>
> Nevertheless in principle the "first key" given should not even need to
> be the mount point in fact. It is a key to a lookup-table.
>
> If you wanted to do it right I think you would need to do away with
> hidden (or principally unknown) mount points, and basically always work
> with static lists (or dynamically returned lists) and/or give every
> script a first parameter $1 that is a key that you actually use for it.
>
> Then the second paramter $2 would be the key that the filesystem has
> actually given you for accessing a path.
>
> In this way "access path" becomes secondary.
>
> Perhaps a script in this way still cannot control the mount point (name)
> but at least now it provides it in advance. Of course there are
> situations in which you cannot know it in advance or in which it is
> irrelevant to know it in advance.
>
> You can imagine a list to be much too big to actually retrieve it. In
> itself a sign of a bad system, I think. If it was that big, you would
> need hierarchy to make it smaller.
>
> So I don't know if there is ever any real need for obscurity, and for
> hosts to be accessed while not being able to list them in advance.
>
> I conjecture that this use case in itself would be odd, that you create
> auto-mounts for an unspecified number of hosts you don't really know
> about in advance.
>
> It makes for zero-configuration, true. You don't have to keep a list
> anywhere or even arrange for it to be generated.
>
> On the other hand if a list could not be had, the script would just
> return nothing and the daemon will assume no-browse
> no-information-in-advance lookups the way it does today.
>
> Basically if you keep the current $1 and use it to pass a wildcard, no
> script is likely to ever break on that (it will just return nothing).
> Then $2 can be your primary key. Not every script needs it.
>
> But complete zero-configuration is to me an odd thing: a magical
> directory that will mount every host given to it including all of its
> shares, does not seem sensible to me in the sense that you would at
> /least/ want some configuration for every system right?
>
> One size fits all: the same system for every computer, just place it
> somewhere in your filesystem and you have access to everything and
> everything.
>
> No, normally you would want to tailor it because you do not have access
> to an infinite amount of hosts and the /cifs/host/share structure
> therefore makes not much sense.
>
> /device/share may make more sense, perhaps added with
> /hosts/hosts-meeting-a-certain-pattern/share
>
> You already have a pretty big system if you use the latter. Anyway.
>
> I think I should conclude this :p.
>
>
>
> What seems sensible to me at least is to add something that doesn't
> break compability by using a wildcard * for scripts that will return a
> certain format of list (or just all shares it can find in the regular
> format) with a $2 parameter designating something such as a "host" or
> perhaps even "department".
>
> In this way you solve the issue that the current auto.smb requires the
> "hostname" to be first key given to it because there is no other way to
> pass a key. Then the actual keys can be passed as "second parameter" in
> this sense that they still become $1, but at least now you can specify
> your host to it in advance instead of guessing it on the wind ;-).
>
> So if I have to say anything I would say that I recommend this
> structure:
>
> - $1 remains the filesystem key
> - $2 becomes the additional key a user may specify in auto.master
> - $1 as * will designate the request for a list lookup
> - the list can in the future be used for readdir implementation, and
> currently for precreated mountpoints in case "browse" is used.
>
>
>
>
>
> > > indicate that this is true for "no browse" on "static maps" as well,
> > > and
> > > that directories are only created when they are accessed.
> >
> > That seems to be missing from the man page.
> >
> > > And that no-browse is the configured default.
> >
> > Not sure about that either.
> >
> > This (from auto.master(5)) says that I have made "browse" the internal
> > program
> > default way back when version 5 was first developed but I install a
> > configuration that turns it off because of (because of the above
> > problems, which
> > are not spelled out in the man page):
> >
> > [no]browse
> > This is an autofs specific option that is a pseudo mount
> > option and so is given without a leading dash. Use of the
> > browse option pre-creates mount point directories for
> > indirect mount maps so the map keys can be seen in a
> > directory listing without being mounted. Use of this
> > option can cause performance problem if the indirect
> > map is large so it should be used with caution. The
> > internal program default is to enable browse mode for
> > indirect mounts but the default installed configuration
> > overrides this by setting BROWSE_MODE to "no" because
> > of the potential performance problem.
>
> I know, but if you, as a user, do not understand what the hell it is
> doing in the first place, and you have no time for extensive manual
> reading in advance (like me) you will never get to that option because
> you still don't understand the basics, and the more advanced stuff (like
> that) that will be too hard to understand.
>
> That information is too difficult to comprehend (or digest) when you are
> someone who still doesn't understand how it works.
>
>
>
> > > I think that limitation indicates why using relative paths is so much
> > > more pleasant. A map file using relative files can be "moved around".
> > > A
> > > map file using absolute paths cannot.
> > >
> > > Could you not make a direct map out of the key of the master file, and
> > > the keys of the sub-maps?
> >
> > Can't really do that.
>
> It's not that I saw it as necessary, I just still think the difference
> and distinction between "direct" and "indirect" is rather I dunno, weird
> I guess ;-).
>
>
>
> > The closest thing to that would be multi-mount map entries, again from
> > autofs(5):
> >
> > Multiple Mounts
> > A multi-mount map can be used to name multiple filesystems
> > to mount. It takes the form:
> >
> > key [ -options ] \
> > [[/] location \
> > [/relative-mount-point [ -options ] location...]...
> >
> > This may extend over multiple lines, quoting the line-breaks
> > with
> > `\´. If present, the per-mountpoint mount-options are appended
> > to the default mount-options. This behaviour may be overridden
> > by the append_options configuration setting.
>
> Something I am already using (almost) and I believe this is what
> auto.smb uses by default too. It's just that I use it to mount parts of
> the same share. (Samba smbd often has issues with file-system boundaries
> so I create a share out of each filesystem and share them individually,
> then mount them as above).
It does, yes.
>
>
>
> > >
> > > normally ( /bla/bla ) indicates an absolute path and can only be used
> > > in
> > > a direct map, from what I've seen. You *could* cause it to turn this
> > > "indirect map" into a direct one.
> > >
> > > ie. ( bla/bla ) == indirect
> > > ( /bla/bla ) == direct.
> >
> > In the Sun map format maps indirect mount map keys are a single path
> > component
> > only.
> >
> > The situation is different if using amd format maps but I could work
> > out how
> > direct mount maps could be usefully used so that mount type has not
> > been
> > implemented. Even on Solaris where they are supposed to be fully
> > supported I
> > could make sense of them.
> >
>
>
>
> > > /start/of/the/- ( path )
> > >
> > > Then any path in the master file ending with /- would be a direct
> > > path.
> > >
> > > And would cause the (static) map file to be treated as direct.
> >
> > Nope, that is unlikely to work and would lead to a lot of problems.
> >
> > One example might be with:
> >
> > /start/of/the/-/path
> >
> > people will ask where have the directories below /start/of/the/ gone
> > and the
> > answer will be they have been covered by the autofs file system mount.
>
> But that's no different from a regular mount on that location.
>
>
> > Next it would be but I should be able to see these, surely that's easy
> > to fix.
> >
> > At hat point I would probably leave the conversation.
>
> :-). Haha. But come on, you can't take that seriously, the same thing
> happens with a regular mount, even a bind mount does that. It's
> absolutely not possible to reveal the contents of some subtree when
> another filesystem had mounted on top of it, except by remounting the
> entire subtree elsewhere.
>
> (I am trying out some gimmick that requires me to mount the root device
> under something like /run/mount/rootfsclone, because I am bind mounting
> on top of something that I still want to be accessible. The only way to
> make it accessible is to mount the entire rootfs somewhere else. I
> basically need a persistent location for individual devices without
> anything mounted on top of them; ie. a pure one-file-system mount tree.
>
> Then you have those individual mount-trees (filesystem trees) and THEN
> you have the complete FHS that you normally use.
>
> That seems like the only sensible way to approach a lot of issues.
> Having a /mounts/ with every (custom) mounted device present there.
>
> Recently the number of incomprensible mounts reported by "mount" has
> grown so big that the entire tool has become unusable, mostly due to
> cgroups. And tmpfs's, and debugfs's, and what not.
>
> I now find I need to create a wrapper for mount so that "mount" stays at
> least usable to the user. Such that every subdirectory of /sys, and
> every subdirectory of /run, and every subdirectory of /dev/, is actually
> hidden from display. And from /proc as well. And the same applies to DF.
>
> (I really need to find a way to better save and redistribute these
> modifications).
Oddly enough, a pseudo mount option like "hidden", visible in the /proc files
but left out by utilities like mount, df etc. is what could be done, and should
be done, IMHO, but no-one wants to do it!
>
>
>
>
>
>
> >
> > In any case a similar thing, but more explicit and I think easier to
> > follow and
> > maintain are the autofs multi-mount map entries, what I think you
> > called
> > relative path above.
> >
> > It isn't clear but that syntax should function within both direct and
> > indirect
> > mount maps.
> >
> > The problem with all this is that substitution cannot be used in the
> > key.
> >
> > The reason for that is same as why the amd regex key matching has not
> > been
> > implemented.
> >
> > A linear map scan would be needed for every lookup in order to match
> > what has
> > been sent to us from the kernel. And as much as you might feel that
> > wouldn't be
> > a problem because maps are generally small I can assure you it would
> > make life
> > really unpleasant for me!
>
> :). You have lost of enemies; if you don't do things right :P. LOL.
>
> I am not thinking about this now, but I guess you mean that my proposed
> solution of saving those static lists (or dynamic lists) would actually
> help this :p.
>
> Actually what you are saying is that even doing lookups on those lists I
> proposed would be quite annoying.
>
> However currently this lookup is already done on the server (if it is
> some database) or in the static map (if they are not browseable). Right?
And in the locally cached map and quite frequently queried as part of the expire
processing.
Direct maps and maps that have the browse option must be read completely at
startup and are always present in local storage.
>
> Databases are generally better at lookup than small-scale applications.
> Now you need hash-tables etc. Anyway, I can't think about it right now.
>
>
>
> > > I only noticed just now because autofs(8) references autofs(5), and
> > > I'm
> > > like ....huh?
> >
> > Yeah, that's what we have ....
>
>
>
>
> > > /media/*/nas /etc/nas-shares.map
> >
> > Can't do that, each /media/*/nas needs to be mounted at program start
> > so that
> > automounts can be done?
>
> Actually the shell easily expands such a pattern to all matching trees?
>
> e.g. if you create /usr/local/doc, and then do
>
> "ls /usr/*/doc/" you will get the output of:
>
> /usr/local/doc /usr/share/doc
automount is not a shell and doesn't have code to expand such things and an
indirect mount may have a single map associated with the given mount point path.
Way back it was possible to associate multiple maps with a given mount point
path but that functionality was removed because it was not a feature of the Sun
automount system which autofs seeks to implement.
>
> So with that output, you mount all of them, all the while knowing that
> the middle component (here) is a wildcard. Then the daemon knows about
> this wildcard and can use it while processing /etc/nas-shares.map for
> each of them; but they are all individual mounts at that point.
>
> e.g. /media/me/nas and /media/pamela/nas are now individual autofs
> mounts.
>
> but their "/etc/nas-shares.map" is called with a different wildcard.
>
>
> I mean that either /media/me/nas will already exist (precreated by the
> user) or your program creates it (I think it already does that).
This is so far from what autofs is meant to implement I can't see it not
interfering with what it is supposed to be doing.
>
> Actually it cannot create it DUH, so the user will need to precreate
> them.
>
>
> I know /media is usually seen as a managed directory but this is
> annoying in the first place. Such an important name (/media) and I
> cannot do anything with it because it is already taken. At the same time
> accessing it from your home directory is usually quite annoying. So in
> order to make sense of it I must precreate /media/xen and
> /media/dannielle and prevent the daemon (that /media thing) from wiping
> them.... buh.
>
> The funny thing is that /media/xen is not even owned by xen.
>
> The subfolders are, but the thing itself isn't (how stupid?).
>
> So in this case perhaps not as convenient, but in the general case if I
> precreate:
>
> /mytree/me/nas
> /mytree/quinty/nas
>
> etc.
>
> Then the daemon could read
>
> /mytree/*/nas
>
> on program start and see all the shares that match. All the directories
> that match.
>
> Then it knows that "me" and "quinty" are wildcard entries for their
> respective mounts.
>
>
>
>
> > >
> > >
> > >
> > >
> > > > By definition a program map can't know what keys may be passed to it.
> > > > And, yes, even autofs(5) doesn't say explicitly that a program map
> > > > doesn't know
> > > > what keys may be passed to it, perhaps that should be ammended.
> > >
> > > In principle even a program map could read all of the available keys
> > > from whatever database it consults, and return all of them; or return
> > > something only (as it does now, perhaps) when a given key matches (is
> > > found).
> >
> > I've thought of that too.
> >
> > But I've resisted because I'm concerned about confusing existing
> > program maps
> > people have in unpleasant ways.
>
> At some point you need to be willing to break previous compability.
>
> I understand that Linux is usually a running-upgrade system and even if
> people do upgrade entire distributions they want the system to keep
> functioning as normal without changing anything.
>
> But e.g. the Debian update program can tell you stuff like "This package
> does something different now, and you need to ensure it can either
> handle or ignore the wildcard".
>
> on every package installation.
>
>
>
> > That's not a bad thought, but what would $1 be so that older scripts
> > wouldn't
> > choke on it.
>
> I had suggested * because there is no hostname called *.
>
> But scripts may very well mount local filesystems as well. And they
> might very well use a shell to do stuff like "[ -d $key ]" or "[ -d
> "$key" ]" and....
>
> And as always, stuff breaks a lot when people don't use "$key". If
> people's scripts are badly written then [ -d $key ] will malfunction.
>
> In order to cover that you would have to use something like "_", no one
> is going to use _ as an actual filename.
>
>
>
>
>
> >
> > >
> > > So, for instance, if $2 is "browse" the script may choose to return a
> > > browse map, or list of shares, with whatever options are available (it
> > > could even return the UID/USER of the share given options, so that the
> > > created directory would have the same UID as the to be mounted share!)
> > > -- meaning it might simply return ALL entries it could possibly return
> > > in the default format, which is the meaning of the wildcard, and the
> > > program (autofs daemon or module(?)) would be able to generate the
> > > appropriate directory entries based on that. So in that case you're
> > > probably going to be rid of the problem of the non-matching state of
> > > pre- and post-mount of directories.
> >
> > which pretty much defeats the only possible solution I can think of for
> > "browse"
> > option mounts ...
>
> You mean the one suggested above. But if you make an alternative readdir
> having a list available won't bug you right?
>
> I mean, having mount information available in advance cannot be a
> problem, only a help.
>
>
>
>
> > Like I said, I wanted to have the default as "browse" but got hit with
> > too many
> > complaints and was only willing to change the package installed default
> > configuration to satisfy them.
> >
> > I'm not going to try that again.
>
> "Design by committee" they call it ;-).
>
> Someone told me that OpenSUSE has had "browse" as the default for at
> least 5 years.
>
> You did think about making a distinction between static and LDAP/NIS
> maps? I'm not sure I am not crossing my bounds here now ;-). Seeing that
> I already suggested it.
>
>
>
>
>
> > > In this way no one can ever get confused, so you might just rename
> > > autofs(5) to autofs.map(5).
> >
> > Yeah maybe ...
> >
>
> > > I will look into providing a patch, but I hope you can rename
> > > autofs(5)
> > > to autofs.map(5) before doing anything like that. I don't feel like
> > > improving a system I know myself haven't had access to, in that sense.
> > > I
> > > don't mean you have to do that straight away, but if that is a
> > > possible
> > > direction to go, or change to make, then I could supply a patch or
> > > anything based on the system that would result from that, seeing that
> > > autofs(5) is already pretty good in that sense.
> >
> > At some point I'll need to return to this and make a list.
> > Unfortunately that time isn't now.
>
>
> Here is just my short summarize:
>
>
> - suggested compromise between browse and nobrowse by only making browse
> for static lists the default to please new people unaware of what will
> happen
>
> - suggested perhaps using _ as the wildcard key, not using that "browse"
> flag as $2, but allowing a different "primary" key as $2 if the script
> wants it.
>
> - suggested changing autofs(5) to autofs.map(5) such that users will be
> able to find it.
>
> And the rest is up to you, I think you don't need anyone rewriting it
> for you now, but I could still try my hand if that was necessary. I just
> think using better terminology is dependent on the first two suggestions
> here, particularly perhaps the second, and otherwise you'll have to
> explain current terminology better and create some way to separate "key"
> in auto.master from "key" in "autofs.map" ;-).
>
> However if scripts could accept an additional "key" and the default
> operation or capability would for them to be able to return a "list"
> then it would become more clear that the additional "key" would be the
> index to retrieve that list, and that the entries resulting from that
> may have their own "keys" but these "keys" are then used for the
> individual "mount points".
>
> So then you have reason to call the entry keys "entry keys" and the
> other ones "lookup keys" for instance. Then, static maps use "entry
> keys" but scripts have "lookup keys" as their 2nd parameter. The script
> then has "entry key" as the first, and "lookup key" as the second
> parameter. Then, entry key is equivalent to subdirectory, and lookup key
> is often going to be equivalent to e.g. hostname.
>
> A script without list functionality only accepts "entry keys" but may
> very well use them as lookup keys as well.
>
> A database also uses them as equivalent. But at least now you have
> something of a model to conceptually separate them. Since browse already
> functions for e.g. LDAP, in many cases you will not use a lookup key for
> that, simply because (a) /etc/autofs_ldap_auth.conf already contains
> such paramters and (b) the other parameters are specified in the
> mapname-format for LDAP.
>
> So what we call "lookup key" would already be encoded in the LDAP URL
> but such a thing is not possible for scripts.
>
> So you could call scripts the exception to the rule in not having this.
> Of course it exists,: the "-D" parameters.
>
> (I think? Haven't tested it yet).
>
> So I don't know.
>
>
>
>
> For a database the entry key is always going to be a lookup key to the
> database.
> Entry keys can also result from a list fetch.
>
> So they can result from filesystem access or from some list retrieval.
>
> But if "browse" becomes more normal and standard, you would see that it
> becomes easier to talk about this "entries from the list you get when
> quering the database/script for it".
>
> Then the gap between "entries from the list" and "subdirectories
> created" is smaller than the gap between "filesystem access" and
> "subdirectories created".
>
> Meaning: key (database designator) -> list -> entries (database entries)
> is conceptually easier to grasp than key (filesystem access) -> entry
> (database entry).
>
> Or key (filesystem access) -> database lookup -> entry.
>
> Simply because it is hard to understand that user action (filesystem
> lookup) is the input to the entire system and is actually the keys being
> used.
>
> Even if it's not always to be used, having a level in between that ties
> "key" to "pre-existing shares" or "pre-existing entries" becomes easier.
> When a user thinks of "key" they think about either existing shares or
> existing hosts.
>
> Then conceptually it is logical to assume that the script or database
> can give back this list. And that either this list is precreated on the
> harddrive, or at least that it is used to match the "keys" against, for
> instance.
>
> (By harddrive I mean filesystem (hierarchy)).
>
> This is why I think standard operation for at least smaller lists should
> be a form of browse or at least a form of list retrieval, if you are
> going to have dynamically generated lists in any case.
>
> Then, it conforms more to a sense of what a general computer user is
> going to have of the idea of auto-mounting mount-points. It (he/she)
> thinks those mount-points are already going to exist, prior to being
> automounted.
>
> This in turn makes it easier to explain that the key is really a
> subdirectory, and that there can be another key if needed to specify the
> host, or something of the kind.
>
> Then, the most common use case for a new or general computer user
> wanting to try this is going to be met, because that use case is going
> to involve auto-mounting network-shares of which there is a limited
> number.
>
> And it will involve something like
>
> /nas/media
> /nas/backup
> /nas/home
>
> etc.
>
> Now I'm not sure if it covers the entire use. But at least you'd also
> have a script that can generate a static map for you that you can then
> use in place of the scripts, if you want to prune the mounts that are
> actually visible to you.
>
> Apart from the distributions themselves there is not really any software
> in the Linux world that is tailored to either the desktop user, or the
> server user, but not both, is there?
>
> Apart from the desktop environments.
>
> Anyway this was a long read and write, I guess, for both of us :P.
>
> Time to get some food again or at least some water :p.
>
> See ya.
>
>
>
>
>
>
>
>
>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe autofs" in
--
To unsubscribe from this list: send the line "unsubscribe autofs" in
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: documentation issues
2016-07-11 14:09 ` Ian Kent
@ 2016-07-13 2:17 ` Marion, Mike
0 siblings, 0 replies; 15+ messages in thread
From: Marion, Mike @ 2016-07-13 2:17 UTC (permalink / raw)
To: Ian Kent; +Cc: Autofs
On Mon, Jul 11, 2016 at 10:09:50PM +0800, Ian Kent wrote:
> What is needed is a re-write of the user space <-> kernel space communication
> essentially to add readdir functionality.
>
> So that listing a directory would show the possible map mount points without the
> need to create the mount point directories.
Oh my god.. we need this!
We have huge direct maps here and with the changing of /etc/mtab to a
link to /proc/self/mounts things have gotten horrible. We've worked
with suse to help speed up the start of autofs (it was taking 6+ hours
to simply start the first time due to how automount reads the mtab file,
stats paths, does the mkdir, etc). But things like mkinitrd running
with our huge maps loaded can take 20-30 min due to all the parsing
different steps do for various filesystem checks. I've learned to stop
automount and do a full umount -t autofs -a before running something
like a zypper update with a kernel upgrade.
--
Mike Marion-Unix SysAdmin/Sr. Staff IT Engineer-http://www.qualcomm.com
Brian: "So enlighten us, what's your idea of the perfect man?"
Helen: "Oh, I don't know... Solid, sensitive and dependable, but with a sense of
whimsy, a love of music and children. A sense of commitment but a respect for my
independence; adventurous yet a homebody... I really hadn't thought about it that
much." Joe: "Sounds great Helen, but Kermit is a frog." => Wings--
To unsubscribe from this list: send the line "unsubscribe autofs" in
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2016-07-13 2:17 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-05 21:17 documentation issues Xen
2016-07-06 0:57 ` Ian Kent
2016-07-06 4:47 ` Xen
2016-07-06 12:48 ` Ian Kent
2016-07-06 12:53 ` Erwan Loaec
2016-07-10 17:07 ` Xen
2016-07-11 14:09 ` Ian Kent
2016-07-13 2:17 ` Marion, Mike
-- strict thread matches above, loose matches on Subject: below --
2011-11-28 22:34 Documentation Issues Tom King
2011-11-30 9:02 ` bernhard.guillon
2005-12-01 20:28 documentation issues Chuck Lever
2005-12-01 20:34 ` Chris Shoemaker
2005-12-01 21:34 ` Junio C Hamano
2005-12-01 21:54 ` Chris Shoemaker
2005-12-01 22:06 ` Chuck Lever
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.