apptainer, singularity: make LOCALSTATEDIR internal by default
Use "$out/var/lib" as LOCALSTATEDIR configuration value by default intsead of "/var/lib" as a way toward top-level-directory independent runtime. Add input argument externalLocalStateDir to optionally specify the path to external LOCALSTATEDIR if not null. Add NixOS module option programs.singularity.enableExternalLocalStateDir (default to true) to use "/var/lib" as LOCALSTATEDIR.
This commit is contained in:
parent
7ccd495465
commit
ac77669531
3 changed files with 24 additions and 3 deletions
|
@ -177,6 +177,10 @@
|
|||
|
||||
- A new option was added to the virtualisation module that enables specifying explicitly named network interfaces in QEMU VMs. The existing `virtualisation.vlans` is still supported for cases where the name of the network interface is irrelevant.
|
||||
|
||||
- Apptainer/Singularity now defaults to using `"$out/var/lib"` for the `LOCALSTATEDIR` configuration option instead of the top-level `"/var/lib"`. This change impacts the `SESSIONDIR` (container-run-time mount point) configuration, which is set to `$LOCALSTATEDIR/<apptainer or singularity>/mnt/session`. This detaches the packages from the top-level directory, rendering the NixOS module optional.
|
||||
|
||||
The default behavior of the NixOS module `programs.singularity` stays unchanged. We add a new option `programs.singularity.enableExternalSysConfDir` (default to `true`) to specify whether to set the top-level `"/var/lib"` as `LOCALSTATEDIR` or not.
|
||||
|
||||
- DocBook option documentation is no longer supported, all module documentation now uses markdown.
|
||||
|
||||
- `buildGoModule` `go-modules` attrs have been renamed to `goModules`.
|
||||
|
|
|
@ -45,6 +45,18 @@ in
|
|||
Use `lib.mkForce` to forcefully specify the overridden package.
|
||||
'';
|
||||
};
|
||||
enableExternalLocalStateDir = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
example = false;
|
||||
description = mdDoc ''
|
||||
Whether to use top-level directories as LOCALSTATEDIR
|
||||
instead of the store path ones.
|
||||
This affects the SESSIONDIR of Apptainer/Singularity.
|
||||
If set to true, the SESSIONDIR will become
|
||||
`/var/lib/''${projectName}/mnt/session`.
|
||||
'';
|
||||
};
|
||||
enableFakeroot = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
|
@ -65,7 +77,9 @@ in
|
|||
|
||||
config = mkIf cfg.enable {
|
||||
programs.singularity.packageOverriden = (cfg.package.override (
|
||||
optionalAttrs cfg.enableFakeroot {
|
||||
optionalAttrs cfg.enableExternalLocalStateDir {
|
||||
externalLocalStateDir = "/var/lib";
|
||||
} // optionalAttrs cfg.enableFakeroot {
|
||||
newuidmapPath = "/run/wrappers/bin/newuidmap";
|
||||
newgidmapPath = "/run/wrappers/bin/newgidmap";
|
||||
} // optionalAttrs cfg.enableSuid {
|
||||
|
@ -80,7 +94,7 @@ in
|
|||
group = "root";
|
||||
source = "${cfg.packageOverriden}/libexec/${cfg.packageOverriden.projectName}/bin/starter-suid.orig";
|
||||
};
|
||||
systemd.tmpfiles.rules = [
|
||||
systemd.tmpfiles.rules = mkIf cfg.enableExternalLocalStateDir [
|
||||
"d /var/lib/${cfg.packageOverriden.projectName}/mnt/session 0770 root root -"
|
||||
];
|
||||
};
|
||||
|
|
|
@ -71,6 +71,8 @@ in
|
|||
, newuidmapPath ? null
|
||||
# Path to SUID-ed newgidmap executable
|
||||
, newgidmapPath ? null
|
||||
# External LOCALSTATEDIR
|
||||
, externalLocalStateDir ? null
|
||||
# Remove the symlinks to `singularity*` when projectName != "singularity"
|
||||
, removeCompat ? false
|
||||
# Workaround #86349
|
||||
|
@ -106,6 +108,7 @@ in
|
|||
inherit
|
||||
enableSeccomp
|
||||
enableSuid
|
||||
externalLocalStateDir
|
||||
projectName
|
||||
removeCompat
|
||||
starterSuidPath
|
||||
|
@ -141,7 +144,7 @@ in
|
|||
configureScript = "./mconfig";
|
||||
|
||||
configureFlags = [
|
||||
"--localstatedir=/var/lib"
|
||||
"--localstatedir=${if externalLocalStateDir != null then externalLocalStateDir else "${placeholder "out"}/var/lib"}"
|
||||
"--runstatedir=/var/run"
|
||||
]
|
||||
++ lib.optional (!enableSeccomp) "--without-seccomp"
|
||||
|
|
Loading…
Reference in a new issue