Re: Add vendor configuration directory installation

Jason Sikes <[email protected]> Sun, 19 Feb 2023 23:29:56 -0800
Newsgroups gmane.comp.sysutils.autoconf.patches,gmane.comp.gnu.standards
Message-ID <[email protected]>
Hi All.

Here's another idea: instead of adding another parameter "adminconfdir", 
what do you think of enabling "sysconfdir" to take multiple, 
colon-separated paths? So if a user typed this:

$ ./configure --sysconfdir=A:B

Then the software package, if it supports this, could then:

1. install configuration files into the LAST directory in the pathspec, 
(in B), and

2. when reading the configuration, look for files in their given order 
(in this case: A then B).

--Jason

On 2/16/23 04:26, Jason Sikes wrote:
> I added CC to two more people who might be interested in what we are 
> discussing. I have also incorporated the suggestions you made and made 
> a second candidate patch, attached.
>
> On 2/10/23 04:00, Bruno Haible wrote:
>> Jason Sikes wrote:
>>> You are correct that the
>>> configuration files should only go in one directory when done on behalf
>>> of a distribution.
>> OK, this removes my biggest worry.
>>
>>>>     * worse, invites packages to (perhaps inadvertently) restrict 
>>>> user freedom.
>>> Restricting user freedom is certainly not the intent of this proposal.
>>> As a hacker and programmer, this is not something I am interested in 
>>> for
>>> my own personal use. If I was an admin of a system where security is
>>> important, then, yes, I would be considering this.
>> Sorry for the misunderstanding: I meant that the distro would take away
>> freedom from the admin user (by making /usr read-only). The admin user
>> can control the non-privileged user anyway; there's no change in that 
>> area.
>>
>> Anyway, you've blown away this worry.
> And again, I apologize for the confusion.
>>
>>>>     - Distributors use --prefix=/usr and don't specify 
>>>> --sysconfdir, because
>>>>       its default value $(prefix)/etc is already appropriate.
>>> My understanding of the "prefix" option is that it for building
>>> something that installs in the case that system rules prohibit
>>> installing in root.
>> The --prefix option is also meant for use by root. --prefix=/usr makes
>> sense when the /usr partition is writable. --prefix=/usr in combination
>> with "make install DESTDIR=/tmp/staging" also makes sense when the /usr
>> partition is read-only and there are some other means for transferring
>> the contents of /tmp/staging/usr to /usr. (Whether this can trigger
>> warnings by future invocations of the package manager apt / rpm / dnf 
>> / ...
>> is an independent consideration.)
>
> And I stand corrected. I just checked a few of the builds that I did 
> recently, and we indeed use "--prefix=/usr" in our configure step of 
> building an RPM.
>
> Now I know.
>
>>> Another big reason we don't use "prefix" is that we (packagers) already
>>> have macros that determine where various files should go
>> Sure, if a packager has other means to collect the artifacts, a
>> "make install" step that depends on a --prefix option is not needed.
>>
>>>>     - Packages define a configure option for the /etc directory, e.g.
>>>>         --enable-etcdir=/etc
>>>>       through Autoconf [3].
>>> Yes, and what we are proposing is that this option (by a different 
>>> name)
>>> will be included in Autoconf so that developers don't have to add it
>>> manually.
>> The proposed patch [1] does more than that. Especially the documentation
>> change suggests that it's OK for the "make install" step to install 
>> files
>> in both /usr/etc and /etc. As you clarified above, this is not what is
>> desired.
>>
>> The configure --help output and/or the documentation should state that
>>    - "make install" will install into SYSCONFDIR,
>>    - but the package will read from ETCDIR and then from SYSCONFDIR.
> You are correct. We will fix that. Our goal is to move all the 
> configuration files in packages that we provide over to /usr/etc, and 
> have programs look for configuration files in both /etc and /usr/etc.
>>> [4] "sysconfdir" and "distconfdir" are what we use in SUSE packaging to
>>> point to /etc and /usr/etc respectively. So I used them for this
>>> proposal. The problem is that their meanings are different, and their
>>> actual usage is swapped. So that was a terrible idea.
>> Yes, we can't change the meaning of "sysconfdir" (as a directory to
>> install into) or its name, so many years after it was introduced.
>>
>>> Might I suggest:
>>>
>>> * RWCONFDIR,
>>>
>>> * ALTCONFDIR, or
>>>
>>> * ADMCONFDIR?
>> ADMINCONFDIR sounds good to me. I.e. the option's name would be
>> --adminconfdir.
>
> Ha! That was what I actually originally came up with, but it didn't 
> line up with the other two options so I shortened it.
>
> I guess that's two people who vote for it.
>
>> ALTCONFDIR is too much from the perspective of the vendor. From the
>> perspective of the administrator, /etc is the primary and /usr/etc
>> is the alternate configuration directory.
>>
>> RWCONFDIR can be misunderstood because
>>    - on some systems, both /usr/etc and /etc will be writable by root,
>>    - non-privileged users cannot write in either location.
>>
>> The documentation then should make clear that
>>    - the package is then supposed to make the value of the 
>> --adminconfdir
>>      option available to the program by defining a C macro ADMINCONFDIR:
>>      E.g. in packages that use Automake:
>>        AM_CPPFLAGS += -DADMINCONFDIR=\"$(adminconfdir)\"
>>    - the package's code is then supposed to read from that location,
>>    - but the package should not install any files into $(adminconfdir).
>
>> How many packages will likely make use of this facility? Just systemd,
>> PAM, and D-BUS [1]? In my machine's /etc, I see roughly 200 
>> configurations.
>> So, are we talking about a few packages or several hundreds?
>
> We are in the process of moving all of the packages that use /etc over 
> to /usr/etc. However, lots of packages that use /etc depend on other 
> packages that also use /etc, but we can't move them all at once.
>
> --Again, thank you so much,
>
> --Jason
>
>> Bruno
>>
>>>> [0]https://0pointer.net/blog/projects/stateless.html
>>>> [1]https://lists.gnu.org/archive/html/autoconf-patches/2023-02/msg00007.html 
>>>>
>>>> [2]https://www.gnu.org/software/automake/manual/html_node/Hard_002dCoded-Install-Paths.html 
>>>>
>>>> [3]https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.71/html_node/Package-Options.html