Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 May 2023 16:48:12 -0500
From:      Mike Karels <mike@karels.net>
To:        Cy Schubert <Cy.Schubert@cschubert.com>
Cc:        Mitchell Horne <mhorne@freebsd.org>, rgrimes@freebsd.org, src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org
Subject:   Re: git: 36db6b04962a - main - hier(7): document /home/ and /usr/home/
Message-ID:  <4367FD0A-76AC-4E98-A133-E50D8CF841C7@karels.net>
In-Reply-To: <20230510151313.9E7A6111@slippy.cwsent.com>
References:  <202305101419.34AEJf1x054239@gndrsh.dnsmgr.net> <ba22a75d-06c0-371e-603e-7ded9d1dca97@freebsd.org> <20230510151313.9E7A6111@slippy.cwsent.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 10 May 2023, at 10:13, Cy Schubert wrote:

> In message <ba22a75d-06c0-371e-603e-7ded9d1dca97@freebsd.org>, Mitchell
> Horne w
> rites:
>> On 5/10/23 11:19, Rodney W. Grimes wrote:
>>>> The branch main has been updated by mhorne:
>>>>
>>>> URL: https://cgit.FreeBSD.org/src/commit/?id=36db6b04962a01ff7b21592def02d
>> 4c570dac939
>>>>
>>>> commit 36db6b04962a01ff7b21592def02d4c570dac939
>>>> Author:     Mitchell Horne <mhorne@FreeBSD.org>
>>>> AuthorDate: 2023-05-10 12:53:56 +0000
>>>> Commit:     Mitchell Horne <mhorne@FreeBSD.org>
>>>> CommitDate: 2023-05-10 13:25:17 +0000
>>>>
>>>>      hier(7): document /home/ and /usr/home/
>>>>
>>>>      Reviewed by:    imp
>>>>      MFC after:      1 week
>>>>      Sponsored by:   The FreeBSD Foundation
>>>>      Differential Revision:  https://reviews.freebsd.org/D40002
>>>> ---
>>>>   share/man/man7/hier.7 | 10 ++++++++++
>>>>   1 file changed, 10 insertions(+)
>>>>
>>>> diff --git a/share/man/man7/hier.7 b/share/man/man7/hier.7
>>>> index ff11289436a1..b6759dd6e65b 100644
>>>> --- a/share/man/man7/hier.7
>>>> +++ b/share/man/man7/hier.7
>>>> @@ -90,6 +90,10 @@ file descriptor files;
>>>>   see
>>>>   .Xr \&fd 4
>>>>   .El
>>>> +.It Pa /home/
>>>> +user HOME directories.
>>>> +This is a symlink to
>>>> +.Pa /usr/home/
>>>
>>> /usr is "contains the majority of user utilities and applications"
>>> it should not contain home directories.
>>>> I do not know when this move to usr came about it was traditionally
>> /home.
>>> I do not know why /usr/home even exists, it is not needed by
>>> anything I am aware of.  If we have a compatible link it
>>> should be, usr/home -> ../home and /home should be the
>>> directory.
>>>
>>
>> I agree that /usr/home is strange, and is unique (?) to FreeBSD.
>>
>> The oldest commit in the output of `git log --grep '/usr/home'` is:
>>
>> commit f2400d465896a8e4f6fdc57eba840cf49b25bbbd
>> Author: David Nugent <davidn@FreeBSD.org>
>> Date:   Fri Jan 3 04:42:18 1997 +0000
>>
>>      Implemented /home -> /usr/home symlink kludge.
>>      If home basedir would be created in the root partition, create
>>      it under /usr instead, and symlink /basedir -> /usr/basedir.
>>
>> Notes:
>>      svn path=/head/; revision=21242
>>
>>
>> So it has been this way for 26 years at least. I do not know what to say
>> about whether /usr "should" contain it, but it does.
>
> Usually history matters. I can understand not changing it. On the flip
> side, I cut my UNIX teeth on SunOS 4 and Solaris where /home was /home --
> albeit automounted from /export/home on localhost or some NFS server. In
> the Red Hat land at $JOB, /home is its own partition (actually an LVM
> volume). In both cases /home is not in /usr because end-users can fill
> /usr. This can be problematic operationally because it's yet another
> headache to deal with should someone fill the filesystem. Filling /usr is
> more serious than filling /home.
>
> As a point of interest, when I installed my first FreeBSD many moons ago I
> used the Solaris standard of /export/home, using amd (now automount) to
> serve my /home. I'm not advocating we do this, it's overkill, but /home
> should not live in /usr. It's a potential headache for any sysadmin.
>
> With ZFS the solution is easy. With UFS based systems there are a lot of
> other factors that go into how we install the "default" from the get-go.

The situation is a fair mess.  It took me a little while to figure out that
the kludge referenced above is in the pw(8) command, which is used as the
backend to adduser(8).  Neither /home nor /usr/home is in the base package.
adduser defaults to /home/user, and creates the parent directory (e.g. /home)
if it does not exist, but if there is no internal slash, pw moves the parent
to /usr.  In this case, it makes the symlink from  root.  zfs is different,
in that it includes a usr/home dataset already (created by bsdinstall).
In this case, creating a user with /home/user causes the symlink to be added
as a side effect.

I’m sure the kludge was originally done when root and /usr were separate
file systems by default, root was small, and there was no /home by default.
However, we now default to a single large file system (with datasets, in
the zfs case).

All of this really is a horrible kludge, and it is a house of cards.  I’m
amazed that it doesn’t break more often.  I’m tempted to remove the kludge
and change the zfs setup to create a home dataset rather than usr/home.
However, if zfs users explicitly configure a home directory under /usr/home,
this would end up in the usr dataset.  An alternative would be to remove the
code from pw to create the parent directory entirely (which seems sensible),
and create a /home directory for ufs installs.  I don’t know how well known
it is that adduser/pw will create parent directories for home directories
though.  This cleanup would change the default location for home directories
to /home, which makes more sense.  It would require documentation, e.g. in
the release notes.  The changes would only affect new installations, not
upgrades.

Thoughts?

		Mike



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4367FD0A-76AC-4E98-A133-E50D8CF841C7>