nixos: tmp on tmpfs option
/tmp cleaning is done by systemd rather than stage-2-init enableEmergencyMode moved from systemd to seperate module new option to mount tmp on tmpfs new option to enable additional units shipped with systemd
This commit is contained in:
parent
1cc6dc1984
commit
63d259df32
@ -297,6 +297,7 @@
|
|||||||
./services/x11/xserver.nix
|
./services/x11/xserver.nix
|
||||||
./system/activation/activation-script.nix
|
./system/activation/activation-script.nix
|
||||||
./system/activation/top-level.nix
|
./system/activation/top-level.nix
|
||||||
|
./system/boot/emergency-mode.nix
|
||||||
./system/boot/kernel.nix
|
./system/boot/kernel.nix
|
||||||
./system/boot/kexec.nix
|
./system/boot/kexec.nix
|
||||||
./system/boot/loader/efi.nix
|
./system/boot/loader/efi.nix
|
||||||
@ -312,6 +313,7 @@
|
|||||||
./system/boot/stage-1.nix
|
./system/boot/stage-1.nix
|
||||||
./system/boot/stage-2.nix
|
./system/boot/stage-2.nix
|
||||||
./system/boot/systemd.nix
|
./system/boot/systemd.nix
|
||||||
|
./system/boot/tmp.nix
|
||||||
./system/etc/etc.nix
|
./system/etc/etc.nix
|
||||||
./system/upstart/upstart.nix
|
./system/upstart/upstart.nix
|
||||||
./tasks/cpu-freq.nix
|
./tasks/cpu-freq.nix
|
||||||
|
37
nixos/modules/system/boot/emergency-mode.nix
Normal file
37
nixos/modules/system/boot/emergency-mode.nix
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
###### interface
|
||||||
|
|
||||||
|
options = {
|
||||||
|
|
||||||
|
systemd.enableEmergencyMode = mkOption {
|
||||||
|
default = true;
|
||||||
|
type = types.bool;
|
||||||
|
description = ''
|
||||||
|
Whether to enable emergency mode, which is an
|
||||||
|
<command>sulogin</command> shell started on the console if
|
||||||
|
mounting a filesystem fails. Since some machines (like EC2
|
||||||
|
instances) have no console of any kind, emergency mode doesn't
|
||||||
|
make sense, and it's better to continue with the boot insofar
|
||||||
|
as possible.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
###### implementation
|
||||||
|
|
||||||
|
config = {
|
||||||
|
|
||||||
|
systemd.additionalUpstreamSystemUnits = optionals
|
||||||
|
config.systemd.enableEmergencyMode [
|
||||||
|
"emergency.target" "emergency.service"
|
||||||
|
];
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
@ -98,12 +98,6 @@ mkdir -m 0755 -p /etc/nixos
|
|||||||
rm -rf /var/run /var/lock
|
rm -rf /var/run /var/lock
|
||||||
rm -f /etc/{group,passwd,shadow}.lock
|
rm -f /etc/{group,passwd,shadow}.lock
|
||||||
|
|
||||||
if test -n "@cleanTmpDir@"; then
|
|
||||||
echo -n "cleaning \`/tmp'..."
|
|
||||||
find /tmp -maxdepth 1 -mindepth 1 -print0 | xargs -0r rm -rf --one-file-system
|
|
||||||
echo " done"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Also get rid of temporary GC roots.
|
# Also get rid of temporary GC roots.
|
||||||
rm -rf /nix/var/nix/gcroots/tmp /nix/var/nix/temproots
|
rm -rf /nix/var/nix/gcroots/tmp /nix/var/nix/temproots
|
||||||
|
@ -17,7 +17,7 @@ let
|
|||||||
src = ./stage-2-init.sh;
|
src = ./stage-2-init.sh;
|
||||||
shellDebug = "${pkgs.bashInteractive}/bin/bash";
|
shellDebug = "${pkgs.bashInteractive}/bin/bash";
|
||||||
isExecutable = true;
|
isExecutable = true;
|
||||||
inherit (config.boot) devShmSize runSize cleanTmpDir;
|
inherit (config.boot) devShmSize runSize;
|
||||||
inherit (config.nix) readOnlyStore;
|
inherit (config.nix) readOnlyStore;
|
||||||
inherit (config.networking) useHostResolvConf;
|
inherit (config.networking) useHostResolvConf;
|
||||||
ttyGid = config.ids.gids.tty;
|
ttyGid = config.ids.gids.tty;
|
||||||
@ -26,8 +26,7 @@ let
|
|||||||
pkgs.utillinux
|
pkgs.utillinux
|
||||||
pkgs.sysvtools
|
pkgs.sysvtools
|
||||||
pkgs.openresolv
|
pkgs.openresolv
|
||||||
] ++ (optional config.boot.cleanTmpDir pkgs.findutils)
|
] ++ optional config.nix.readOnlyStore readonlyMountpoint;
|
||||||
++ optional config.nix.readOnlyStore readonlyMountpoint;
|
|
||||||
postBootCommands = pkgs.writeText "local-cmds"
|
postBootCommands = pkgs.writeText "local-cmds"
|
||||||
''
|
''
|
||||||
${config.boot.postBootCommands}
|
${config.boot.postBootCommands}
|
||||||
@ -81,15 +80,6 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
# FIXME: should replace this with something that uses systemd-tmpfiles.
|
|
||||||
cleanTmpDir = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = false;
|
|
||||||
description = ''
|
|
||||||
Whether to delete all files in <filename>/tmp</filename> during boot.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -162,10 +162,7 @@ let
|
|||||||
"systemd-sysctl.service"
|
"systemd-sysctl.service"
|
||||||
]
|
]
|
||||||
|
|
||||||
++ optionals cfg.enableEmergencyMode [
|
++ cfg.additionalUpstreamSystemUnits;
|
||||||
"emergency.target"
|
|
||||||
"emergency.service"
|
|
||||||
];
|
|
||||||
|
|
||||||
upstreamSystemWants =
|
upstreamSystemWants =
|
||||||
[ #"basic.target.wants"
|
[ #"basic.target.wants"
|
||||||
@ -637,19 +634,6 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.enableEmergencyMode = mkOption {
|
|
||||||
default = true;
|
|
||||||
type = types.bool;
|
|
||||||
description = ''
|
|
||||||
Whether to enable emergency mode, which is an
|
|
||||||
<command>sulogin</command> shell started on the console if
|
|
||||||
mounting a filesystem fails. Since some machines (like EC2
|
|
||||||
instances) have no console of any kind, emergency mode doesn't
|
|
||||||
make sense, and it's better to continue with the boot insofar
|
|
||||||
as possible.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.tmpfiles.rules = mkOption {
|
systemd.tmpfiles.rules = mkOption {
|
||||||
type = types.listOf types.str;
|
type = types.listOf types.str;
|
||||||
default = [];
|
default = [];
|
||||||
@ -692,6 +676,15 @@ in
|
|||||||
description = "Definition of systemd per-user socket units.";
|
description = "Definition of systemd per-user socket units.";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
systemd.additionalUpstreamSystemUnits = mkOption {
|
||||||
|
default = [ ];
|
||||||
|
type = types.listOf types.str;
|
||||||
|
example = [ "debug-shell.service" "systemd-quotacheck.service" ];
|
||||||
|
description = ''
|
||||||
|
Additional units shipped with systemd that shall be enabled.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
39
nixos/modules/system/boot/tmp.nix
Normal file
39
nixos/modules/system/boot/tmp.nix
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
###### interface
|
||||||
|
|
||||||
|
options = {
|
||||||
|
|
||||||
|
boot.cleanTmpDir = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Whether to delete all files in <filename>/tmp</filename> during boot.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
boot.tmpOnTmpfs = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Whether to mount a tmpfs on <filename>/tmp</filename> during boot.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
###### implementation
|
||||||
|
|
||||||
|
config = {
|
||||||
|
|
||||||
|
systemd.additionalUpstreamSystemUnits = optional config.boot.tmpOnTmpfs "tmp.mount";
|
||||||
|
|
||||||
|
systemd.tmpfiles.rules = optional config.boot.cleanTmpDir "D! /tmp 1777 root root";
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user