diff options
Diffstat (limited to 'nixpkgs/nixos/modules/system/boot/coredump.nix')
-rw-r--r-- | nixpkgs/nixos/modules/system/boot/coredump.nix | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/nixpkgs/nixos/modules/system/boot/coredump.nix b/nixpkgs/nixos/modules/system/boot/coredump.nix new file mode 100644 index 000000000000..30f367da7666 --- /dev/null +++ b/nixpkgs/nixos/modules/system/boot/coredump.nix @@ -0,0 +1,66 @@ +{ config, lib, pkgs, ... }: + +with lib; + +{ + + options = { + + systemd.coredump = { + + enable = mkOption { + default = false; + type = types.bool; + description = '' + Enables storing core dumps in systemd. + Note that this alone is not enough to enable core dumps. The maximum + file size for core dumps must be specified in limits.conf as well. See + <option>security.pam.loginLimits</option> and the limits.conf(5) + man page (these specify the core dump limits for user login sessions) + and <option>systemd.extraConfig</option> (where e.g. + <literal>DefaultLimitCORE=1000000</literal> can be specified to set + the core dump limit for systemd system-level services). + ''; + }; + + extraConfig = mkOption { + default = ""; + type = types.lines; + example = "Storage=journal"; + description = '' + Extra config options for systemd-coredump. See coredump.conf(5) man page + for available options. + ''; + }; + }; + + }; + + config = mkMerge [ + (mkIf config.systemd.coredump.enable { + + systemd.additionalUpstreamSystemUnits = [ "systemd-coredump.socket" "systemd-coredump@.service" ]; + + environment.etc."systemd/coredump.conf".text = + '' + [Coredump] + ${config.systemd.coredump.extraConfig} + ''; + + # Have the kernel pass core dumps to systemd's coredump helper binary. + # From systemd's 50-coredump.conf file. See: + # <https://github.com/systemd/systemd/blob/v218/sysctl.d/50-coredump.conf.in> + boot.kernel.sysctl."kernel.core_pattern" = "|${pkgs.systemd}/lib/systemd/systemd-coredump %P %u %g %s %t %c %e"; + }) + + (mkIf (!config.systemd.coredump.enable) { + boot.kernel.sysctl."kernel.core_pattern" = mkDefault "core"; + + systemd.extraConfig = + '' + DefaultLimitCORE=0:infinity + ''; + }) + ]; + +} |