mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-12 20:55:31 +03:00
nixos: systemd: split off systemd-tmpfiles into separate module
This commit is contained in:
parent
0e665d1815
commit
38d043de9c
4 changed files with 103 additions and 85 deletions
|
@ -1170,6 +1170,7 @@
|
||||||
./system/boot/systemd/journald.nix
|
./system/boot/systemd/journald.nix
|
||||||
./system/boot/systemd/logind.nix
|
./system/boot/systemd/logind.nix
|
||||||
./system/boot/systemd/nspawn.nix
|
./system/boot/systemd/nspawn.nix
|
||||||
|
./system/boot/systemd/tmpfiles.nix
|
||||||
./system/boot/systemd/user.nix
|
./system/boot/systemd/user.nix
|
||||||
./system/boot/timesyncd.nix
|
./system/boot/timesyncd.nix
|
||||||
./system/boot/tmp.nix
|
./system/boot/tmp.nix
|
||||||
|
|
|
@ -146,12 +146,6 @@ let
|
||||||
"systemd-machined.service"
|
"systemd-machined.service"
|
||||||
"systemd-nspawn@.service"
|
"systemd-nspawn@.service"
|
||||||
|
|
||||||
# Temporary file creation / cleanup.
|
|
||||||
"systemd-tmpfiles-clean.service"
|
|
||||||
"systemd-tmpfiles-clean.timer"
|
|
||||||
"systemd-tmpfiles-setup.service"
|
|
||||||
"systemd-tmpfiles-setup-dev.service"
|
|
||||||
|
|
||||||
# Misc.
|
# Misc.
|
||||||
"systemd-sysctl.service"
|
"systemd-sysctl.service"
|
||||||
"dbus-org.freedesktop.timedate1.service"
|
"dbus-org.freedesktop.timedate1.service"
|
||||||
|
@ -344,37 +338,6 @@ in
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.tmpfiles.rules = mkOption {
|
|
||||||
type = types.listOf types.str;
|
|
||||||
default = [];
|
|
||||||
example = [ "d /tmp 1777 root root 10d" ];
|
|
||||||
description = ''
|
|
||||||
Rules for creation, deletion and cleaning of volatile and temporary files
|
|
||||||
automatically. See
|
|
||||||
<citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
|
|
||||||
for the exact format.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.tmpfiles.packages = mkOption {
|
|
||||||
type = types.listOf types.package;
|
|
||||||
default = [];
|
|
||||||
example = literalExpression "[ pkgs.lvm2 ]";
|
|
||||||
apply = map getLib;
|
|
||||||
description = ''
|
|
||||||
List of packages containing <command>systemd-tmpfiles</command> rules.
|
|
||||||
|
|
||||||
All files ending in .conf found in
|
|
||||||
<filename><replaceable>pkg</replaceable>/lib/tmpfiles.d</filename>
|
|
||||||
will be included.
|
|
||||||
If this folder does not exist or does not contain any files an error will be returned instead.
|
|
||||||
|
|
||||||
If a <filename>lib</filename> output is available, rules are searched there and only there.
|
|
||||||
If there is no <filename>lib</filename> output it will fall back to <filename>out</filename>
|
|
||||||
and if that does not exist either, the default output will be used.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.additionalUpstreamSystemUnits = mkOption {
|
systemd.additionalUpstreamSystemUnits = mkOption {
|
||||||
default = [ ];
|
default = [ ];
|
||||||
type = types.listOf types.str;
|
type = types.listOf types.str;
|
||||||
|
@ -540,21 +503,6 @@ in
|
||||||
${config.systemd.sleep.extraConfig}
|
${config.systemd.sleep.extraConfig}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
"tmpfiles.d".source = (pkgs.symlinkJoin {
|
|
||||||
name = "tmpfiles.d";
|
|
||||||
paths = map (p: p + "/lib/tmpfiles.d") cfg.tmpfiles.packages;
|
|
||||||
postBuild = ''
|
|
||||||
for i in $(cat $pathsPath); do
|
|
||||||
(test -d "$i" && test $(ls "$i"/*.conf | wc -l) -ge 1) || (
|
|
||||||
echo "ERROR: The path '$i' from systemd.tmpfiles.packages contains no *.conf files."
|
|
||||||
exit 1
|
|
||||||
)
|
|
||||||
done
|
|
||||||
'' + concatMapStrings (name: optionalString (hasPrefix "tmpfiles.d/" name) ''
|
|
||||||
rm -f $out/${removePrefix "tmpfiles.d/" name}
|
|
||||||
'') config.system.build.etc.passthru.targets;
|
|
||||||
}) + "/*";
|
|
||||||
|
|
||||||
"systemd/system-generators" = { source = hooks "generators" cfg.generators; };
|
"systemd/system-generators" = { source = hooks "generators" cfg.generators; };
|
||||||
"systemd/system-shutdown" = { source = hooks "shutdown" cfg.shutdown; };
|
"systemd/system-shutdown" = { source = hooks "shutdown" cfg.shutdown; };
|
||||||
});
|
});
|
||||||
|
@ -580,36 +528,6 @@ in
|
||||||
unitConfig.X-StopOnReconfiguration = true;
|
unitConfig.X-StopOnReconfiguration = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.tmpfiles.packages = [
|
|
||||||
# Default tmpfiles rules provided by systemd
|
|
||||||
(pkgs.runCommand "systemd-default-tmpfiles" {} ''
|
|
||||||
mkdir -p $out/lib/tmpfiles.d
|
|
||||||
cd $out/lib/tmpfiles.d
|
|
||||||
|
|
||||||
ln -s "${systemd}/example/tmpfiles.d/home.conf"
|
|
||||||
ln -s "${systemd}/example/tmpfiles.d/journal-nocow.conf"
|
|
||||||
ln -s "${systemd}/example/tmpfiles.d/static-nodes-permissions.conf"
|
|
||||||
ln -s "${systemd}/example/tmpfiles.d/systemd.conf"
|
|
||||||
ln -s "${systemd}/example/tmpfiles.d/systemd-nologin.conf"
|
|
||||||
ln -s "${systemd}/example/tmpfiles.d/systemd-nspawn.conf"
|
|
||||||
ln -s "${systemd}/example/tmpfiles.d/systemd-tmp.conf"
|
|
||||||
ln -s "${systemd}/example/tmpfiles.d/tmp.conf"
|
|
||||||
ln -s "${systemd}/example/tmpfiles.d/var.conf"
|
|
||||||
ln -s "${systemd}/example/tmpfiles.d/x11.conf"
|
|
||||||
'')
|
|
||||||
# User-specified tmpfiles rules
|
|
||||||
(pkgs.writeTextFile {
|
|
||||||
name = "nixos-tmpfiles.d";
|
|
||||||
destination = "/lib/tmpfiles.d/00-nixos.conf";
|
|
||||||
text = ''
|
|
||||||
# This file is created automatically and should not be modified.
|
|
||||||
# Please change the option ‘systemd.tmpfiles.rules’ instead.
|
|
||||||
|
|
||||||
${concatStringsSep "\n" cfg.tmpfiles.rules}
|
|
||||||
'';
|
|
||||||
})
|
|
||||||
];
|
|
||||||
|
|
||||||
systemd.units =
|
systemd.units =
|
||||||
mapAttrs' (n: v: nameValuePair "${n}.path" (pathToUnit n v)) cfg.paths
|
mapAttrs' (n: v: nameValuePair "${n}.path" (pathToUnit n v)) cfg.paths
|
||||||
// mapAttrs' (n: v: nameValuePair "${n}.service" (serviceToUnit n v)) cfg.services
|
// mapAttrs' (n: v: nameValuePair "${n}.service" (serviceToUnit n v)) cfg.services
|
||||||
|
|
102
nixos/modules/system/boot/systemd/tmpfiles.nix
Normal file
102
nixos/modules/system/boot/systemd/tmpfiles.nix
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
{ config, lib, pkgs, utils, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
systemd = config.systemd.package;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
systemd.tmpfiles.rules = mkOption {
|
||||||
|
type = types.listOf types.str;
|
||||||
|
default = [];
|
||||||
|
example = [ "d /tmp 1777 root root 10d" ];
|
||||||
|
description = ''
|
||||||
|
Rules for creation, deletion and cleaning of volatile and temporary files
|
||||||
|
automatically. See
|
||||||
|
<citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
|
||||||
|
for the exact format.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.tmpfiles.packages = mkOption {
|
||||||
|
type = types.listOf types.package;
|
||||||
|
default = [];
|
||||||
|
example = literalExpression "[ pkgs.lvm2 ]";
|
||||||
|
apply = map getLib;
|
||||||
|
description = ''
|
||||||
|
List of packages containing <command>systemd-tmpfiles</command> rules.
|
||||||
|
|
||||||
|
All files ending in .conf found in
|
||||||
|
<filename><replaceable>pkg</replaceable>/lib/tmpfiles.d</filename>
|
||||||
|
will be included.
|
||||||
|
If this folder does not exist or does not contain any files an error will be returned instead.
|
||||||
|
|
||||||
|
If a <filename>lib</filename> output is available, rules are searched there and only there.
|
||||||
|
If there is no <filename>lib</filename> output it will fall back to <filename>out</filename>
|
||||||
|
and if that does not exist either, the default output will be used.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
systemd.additionalUpstreamSystemUnits = [
|
||||||
|
# Temporary file creation / cleanup.
|
||||||
|
"systemd-tmpfiles-clean.service"
|
||||||
|
"systemd-tmpfiles-clean.timer"
|
||||||
|
"systemd-tmpfiles-setup.service"
|
||||||
|
"systemd-tmpfiles-setup-dev.service"
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.additionalUpstreamUserUnits = [
|
||||||
|
"systemd-tmpfiles-clean.service"
|
||||||
|
"systemd-tmpfiles-clean.timer"
|
||||||
|
"systemd-tmpfiles-setup.service"
|
||||||
|
];
|
||||||
|
|
||||||
|
environment.etc = {
|
||||||
|
"tmpfiles.d".source = (pkgs.symlinkJoin {
|
||||||
|
name = "tmpfiles.d";
|
||||||
|
paths = map (p: p + "/lib/tmpfiles.d") config.systemd.tmpfiles.packages;
|
||||||
|
postBuild = ''
|
||||||
|
for i in $(cat $pathsPath); do
|
||||||
|
(test -d "$i" && test $(ls "$i"/*.conf | wc -l) -ge 1) || (
|
||||||
|
echo "ERROR: The path '$i' from systemd.tmpfiles.packages contains no *.conf files."
|
||||||
|
exit 1
|
||||||
|
)
|
||||||
|
done
|
||||||
|
'' + concatMapStrings (name: optionalString (hasPrefix "tmpfiles.d/" name) ''
|
||||||
|
rm -f $out/${removePrefix "tmpfiles.d/" name}
|
||||||
|
'') config.system.build.etc.passthru.targets;
|
||||||
|
}) + "/*";
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.tmpfiles.packages = [
|
||||||
|
# Default tmpfiles rules provided by systemd
|
||||||
|
(pkgs.runCommand "systemd-default-tmpfiles" {} ''
|
||||||
|
mkdir -p $out/lib/tmpfiles.d
|
||||||
|
cd $out/lib/tmpfiles.d
|
||||||
|
|
||||||
|
ln -s "${systemd}/example/tmpfiles.d/home.conf"
|
||||||
|
ln -s "${systemd}/example/tmpfiles.d/journal-nocow.conf"
|
||||||
|
ln -s "${systemd}/example/tmpfiles.d/static-nodes-permissions.conf"
|
||||||
|
ln -s "${systemd}/example/tmpfiles.d/systemd.conf"
|
||||||
|
ln -s "${systemd}/example/tmpfiles.d/systemd-nologin.conf"
|
||||||
|
ln -s "${systemd}/example/tmpfiles.d/systemd-nspawn.conf"
|
||||||
|
ln -s "${systemd}/example/tmpfiles.d/systemd-tmp.conf"
|
||||||
|
ln -s "${systemd}/example/tmpfiles.d/tmp.conf"
|
||||||
|
ln -s "${systemd}/example/tmpfiles.d/var.conf"
|
||||||
|
ln -s "${systemd}/example/tmpfiles.d/x11.conf"
|
||||||
|
'')
|
||||||
|
# User-specified tmpfiles rules
|
||||||
|
(pkgs.writeTextFile {
|
||||||
|
name = "nixos-tmpfiles.d";
|
||||||
|
destination = "/lib/tmpfiles.d/00-nixos.conf";
|
||||||
|
text = ''
|
||||||
|
# This file is created automatically and should not be modified.
|
||||||
|
# Please change the option ‘systemd.tmpfiles.rules’ instead.
|
||||||
|
|
||||||
|
${concatStringsSep "\n" config.systemd.tmpfiles.rules}
|
||||||
|
'';
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
|
@ -39,9 +39,6 @@ let
|
||||||
"sockets.target"
|
"sockets.target"
|
||||||
"sound.target"
|
"sound.target"
|
||||||
"systemd-exit.service"
|
"systemd-exit.service"
|
||||||
"systemd-tmpfiles-clean.service"
|
|
||||||
"systemd-tmpfiles-clean.timer"
|
|
||||||
"systemd-tmpfiles-setup.service"
|
|
||||||
"timers.target"
|
"timers.target"
|
||||||
"xdg-desktop-autostart.target"
|
"xdg-desktop-autostart.target"
|
||||||
] ++ config.systemd.additionalUpstreamUserUnits;
|
] ++ config.systemd.additionalUpstreamUserUnits;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue