munge: Fix installation paths

Removing `src/etc/Makefile` is overly intrusive, as the file is responsible
for installing pkg-config file.  The issue when it would try to write to
the specified out-of-store paths can be easily resolved by overriding them
to ones within `$out` during installation.

Also set `sysconfdir` path properly to allow configuring it with `environment.etc`.
There should be no problem with missing files, as nothing was installed
to `$out/etc` previously either, other than an empty `munge` directory.

`localstatedir` is used at runtime and installation creates empty directories in `$out`.
But since we do not merge those directories into running system, having them in `$out`
serves no purpose.  Creation of `StateDir` and logging is handled by systemd anyway.

`runstatedir` defaults to `$(localstatedir)/run` but that has long been
deprecated in favour of `/run`, so let’s fix that as well.

`pkgconfigdir` and `sysconfigdir` (not to be confused with the standard `sysconfdir`)
rely on FHS for proper detection and `systemdunitdir` tries to run `systemd --version`,
let’s just hardcode them.  `sysconfigdir` is mentioned in the newly installed
and currently unused `munge.service` – a file within is loaded as `EnvironmentFile`
when it exists so let’s override the path for installation.  This will again make it
so the file can serve as a template in `$out` but the service will load it from `/etc`.

The last two options are installation-only so we can directly set them to `$out` subdirectories.
This commit is contained in:
Jan Tojnar
2024-06-20 08:58:58 +02:00
parent 9b1bc3cc10
commit 2660d70e02
+18 -3
View File
@@ -33,7 +33,15 @@ stdenv.mkDerivation (finalAttrs: {
strictDeps = true;
configureFlags = [
# Load data from proper global paths
"--localstatedir=/var"
"--sysconfdir=/etc"
"--runstatedir=/run"
"--with-sysconfigdir=/etc/default"
# Install data to proper directories
"--with-pkgconfigdir=${placeholder "out"}/lib/pkgconfig"
"--with-systemdunitdir=${placeholder "out"}/lib/systemd/system"
# Cross-compilation hacks
"--with-libgcrypt-prefix=${lib.getDev libgcrypt}"
@@ -42,9 +50,16 @@ stdenv.mkDerivation (finalAttrs: {
"x_ac_cv_check_fifo_recvfd=no"
];
preAutoreconf = ''
# Remove the install-data stuff, since it tries to write to /var
substituteInPlace src/Makefile.am --replace "etc \\" "\\"
installFlags = [
"localstatedir=${placeholder "out"}/var"
"runstatedir=${placeholder "out"}/run"
"sysconfdir=${placeholder "out"}/etc"
"sysconfigdir=${placeholder "out"}/etc/default"
];
postInstall = ''
# rmdir will notify us if anything new is installed to the directories.
rmdir "$out"/{var{/{lib,log}{/munge,},},etc/munge}
'';
meta = with lib; {