Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions nixos/modules/rename.nix
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ with lib;
(mkRemovedOptionModule [ "services" "mysql" "pidDir" ] "Don't wait for pidfiles, describe dependencies through systemd")
(mkRemovedOptionModule [ "services" "mysql" "rootPassword" ] "Use socket authentication or set the password outside of the nix store.")
(mkRemovedOptionModule [ "services" "zabbixServer" "dbPassword" ] "Use services.zabbixServer.database.passwordFile instead.")
(mkRemovedOptionModule [ "systemd" "generator-packages" ] "Use systemd.packages instead.")

# ZSH
(mkRenamedOptionModule [ "programs" "zsh" "enableSyntaxHighlighting" ] [ "programs" "zsh" "syntaxHighlighting" "enable" ])
Expand Down
8 changes: 3 additions & 5 deletions nixos/modules/system/boot/stage-1.nix
Original file line number Diff line number Diff line change
Expand Up @@ -217,13 +217,11 @@ let
--replace ata_id ${extraUtils}/bin/ata_id \
--replace scsi_id ${extraUtils}/bin/scsi_id \
--replace cdrom_id ${extraUtils}/bin/cdrom_id \
--replace ${pkgs.utillinux}/sbin/blkid ${extraUtils}/bin/blkid \
--replace /sbin/blkid ${extraUtils}/bin/blkid \
--replace ${pkgs.coreutils}/bin/basename ${extraUtils}/bin/basename \
--replace ${pkgs.utillinux}/bin/blkid ${extraUtils}/bin/blkid \
--replace ${pkgs.lvm2}/sbin ${extraUtils}/bin \
--replace /sbin/mdadm ${extraUtils}/bin/mdadm \
--replace ${pkgs.mdadm}/sbin ${extraUtils}/sbin \
--replace ${pkgs.bash}/bin/sh ${extraUtils}/bin/sh \
--replace /usr/bin/readlink ${extraUtils}/bin/readlink \
--replace /usr/bin/basename ${extraUtils}/bin/basename \
--replace ${udev}/bin/udevadm ${extraUtils}/bin/udevadm
done

Expand Down
38 changes: 23 additions & 15 deletions nixos/modules/system/boot/systemd.nix
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,8 @@ in
systemd.packages = mkOption {
default = [];
type = types.listOf types.package;
description = "Packages providing systemd units.";
example = literalExample "[ pkgs.systemd-cryptsetup-generator ]";
description = "Packages providing systemd units and hooks.";
};

systemd.targets = mkOption {
Expand Down Expand Up @@ -497,11 +498,14 @@ in
'';
};

systemd.generator-packages = mkOption {
default = [];
type = types.listOf types.package;
example = literalExample "[ pkgs.systemd-cryptsetup-generator ]";
description = "Packages providing systemd generators.";
systemd.shutdown = mkOption {
type = types.attrsOf types.path;
default = {};
description = ''
Definition of systemd shutdown executables.
For each <literal>NAME = VALUE</literal> pair of the attrSet, a link is generated from
<literal>/etc/systemd/system-shutdown/NAME</literal> to <literal>VALUE</literal>.
'';
};

systemd.defaultUnit = mkOption {
Expand Down Expand Up @@ -761,18 +765,21 @@ in
environment.systemPackages = [ systemd ];

environment.etc = let
# generate contents for /etc/systemd/system-generators from
# systemd.generators and systemd.generator-packages
generators = pkgs.runCommand "system-generators" {
# generate contents for /etc/systemd/system-${type} from attrset of links and packages
hooks = type: links: pkgs.runCommand "system-${type}" {
preferLocalBuild = true;
packages = cfg.generator-packages;
} ''
packages = cfg.packages;
} ''
set -e
mkdir -p $out
for package in $packages
do
ln -s $package/lib/systemd/system-generators/* $out/
done;
${concatStrings (mapAttrsToList (generator: target: "ln -s ${target} $out/${generator};\n") cfg.generators)}
for hook in $package/lib/systemd/system-${type}/*
do
ln -s $hook $out/
done
done
${concatStrings (mapAttrsToList (exec: target: "ln -s ${target} $out/${exec};\n") links)}
'';
in ({
"systemd/system".source = generateUnits "system" cfg.units upstreamSystemUnits upstreamSystemWants;
Expand Down Expand Up @@ -834,7 +841,8 @@ in
${concatStringsSep "\n" cfg.tmpfiles.rules}
'';

"systemd/system-generators" = { source = generators; };
"systemd/system-generators" = { source = hooks "generators" cfg.generators; };
"systemd/system-shutdown" = { source = hooks "shutdown" cfg.shutdown; };
});

services.dbus.enable = true;
Expand Down
1 change: 0 additions & 1 deletion nixos/modules/tasks/filesystems/nfs.nix
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ in
boot.initrd.kernelModules = mkIf inInitrd [ "nfs" ];

systemd.packages = [ pkgs.nfs-utils ];
systemd.generator-packages = [ pkgs.nfs-utils ];

environment.etc = {
"idmapd.conf".source = idmapdConfFile;
Expand Down
43 changes: 2 additions & 41 deletions nixos/modules/tasks/swraid.nix
Original file line number Diff line number Diff line change
Expand Up @@ -6,51 +6,12 @@

services.udev.packages = [ pkgs.mdadm ];

systemd.packages = [ pkgs.mdadm ];

boot.initrd.availableKernelModules = [ "md_mod" "raid0" "raid1" "raid10" "raid456" ];

boot.initrd.extraUdevRulesCommands = ''
cp -v ${pkgs.mdadm}/lib/udev/rules.d/*.rules $out/
'';

systemd.services.mdadm-shutdown = {
wantedBy = [ "final.target"];
after = [ "umount.target" ];

unitConfig = {
DefaultDependencies = false;
};

serviceConfig = {
Type = "oneshot";
ExecStart = ''${pkgs.mdadm}/bin/mdadm --wait-clean --scan'';
};
};

systemd.services."mdmon@" = {
description = "MD Metadata Monitor on /dev/%I";

unitConfig.DefaultDependencies = false;

serviceConfig = {
Type = "forking";
Environment = "IMSM_NO_PLATFORM=1";
ExecStart = ''${pkgs.mdadm}/bin/mdmon --offroot --takeover %I'';
KillMode = "none";
};
};

systemd.services."mdadm-grow-continue@" = {
description = "Manage MD Reshape on /dev/%I";

unitConfig.DefaultDependencies = false;

serviceConfig = {
ExecStart = ''${pkgs.mdadm}/bin/mdadm --grow --continue /dev/%I'';
StandardInput = "null";
StandardOutput = "null";
StandardError = "null";
KillMode = "none";
};
};

}
27 changes: 25 additions & 2 deletions nixos/tests/systemd.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import ./make-test.nix {
import ./make-test.nix ({ pkgs, ... }: {
name = "systemd";

machine = { lib, ... }: {
Expand All @@ -21,6 +21,14 @@ import ./make-test.nix {
services.journald.extraConfig = "Storage=volatile";
services.xserver.displayManager.auto.user = "alice";

systemd.shutdown.test = pkgs.writeScript "test.shutdown" ''
#!${pkgs.stdenv.shell}
PATH=${lib.makeBinPath (with pkgs; [ utillinux coreutils ])}
mount -t 9p shared -o trans=virtio,version=9p2000.L /tmp/shared
touch /tmp/shared/shutdown-test
umount /tmp/shared
'';

systemd.services.testservice1 = {
description = "Test Service 1";
wantedBy = [ "multi-user.target" ];
Expand Down Expand Up @@ -69,5 +77,20 @@ import ./make-test.nix {
# has a last mount time, because the file system wasn't checked.
$machine->fail('dumpe2fs /dev/vdb | grep -q "^Last mount time: *n/a"');
};

# Regression test for https://github.com/NixOS/nixpkgs/issues/35268
subtest "file system with x-initrd.mount is not unmounted", sub {
$machine->shutdown;
$machine->waitForUnit('multi-user.target');
# If the file system was unmounted during the shutdown the file system
# has a last mount time, because the file system wasn't checked.
$machine->fail('dumpe2fs /dev/vdb | grep -q "^Last mount time: *n/a"');
};

subtest "systemd-shutdown works", sub {
$machine->shutdown;
$machine->waitForUnit('multi-user.target');
$machine->succeed('test -e /tmp/shared/shutdown-test');
};
'';
}
})
25 changes: 18 additions & 7 deletions pkgs/os-specific/linux/mdadm/default.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{ stdenv, fetchurl, groff, system-sendmail }:
{ stdenv, utillinux, coreutils, fetchurl, groff, system-sendmail }:

stdenv.mkDerivation rec {
name = "mdadm-4.1";
Expand All @@ -8,26 +8,37 @@ stdenv.mkDerivation rec {
sha256 = "0jjgjgqijpdp7ijh8slzzjjw690kydb1jjadf0x5ilq85628hxmb";
};

# This is to avoid self-references, which causes the initrd to explode
# in size and in turn prevents mdraid systems from booting.
allowedReferences = [ stdenv.cc.libc.out system-sendmail ];

patches = [ ./no-self-references.patch ];

makeFlags = [
"NIXOS=1" "INSTALL=install" "INSTALL_BINDIR=$(out)/sbin"
"NIXOS=1" "INSTALL=install" "BINDIR=$(out)/sbin"
"SYSTEMD_DIR=$(out)/lib/systemd/system"
"MANDIR=$(out)/share/man" "RUN_DIR=/dev/.mdadm"
"STRIP="
] ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
"CROSS_COMPILE=${stdenv.cc.targetPrefix}"
];

installFlags = [ "install-systemd" ];

enableParallelBuilding = true;

nativeBuildInputs = [ groff ];

preConfigure = ''
postPatch = ''
sed -e 's@/lib/udev@''${out}/lib/udev@' \
-e 's@ -Werror @ @' \
-e 's@/usr/sbin/sendmail@${system-sendmail}@' -i Makefile
sed -i \
-e 's@/usr/bin/basename@${coreutils}/bin/basename@g' \
-e 's@BINDIR/blkid@${utillinux}/bin/blkid@g' \
*.rules
'';

# This is to avoid self-references, which causes the initrd to explode
# in size and in turn prevents mdraid systems from booting.
postFixup = ''
grep -r $out $out/bin && false || true
'';

meta = with stdenv.lib; {
Expand Down
4 changes: 2 additions & 2 deletions pkgs/os-specific/linux/systemd/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ stdenv.mkDerivation rec {
src = fetchFromGitHub {
owner = "NixOS";
repo = "systemd";
rev = "aa4c4d39d75ce52664cb28d569b1ceafda7b4c06";
sha256 = "1ax94gzbdwdcf3wgj7f9cabdkvn2zynnnli7gkbz4isidlpis86g";
rev = "5fb35fbc783516e2014115c3488134a2afb8494c";
sha256 = "0pyjvzzh8nnxv4z58n82lz1mjnzv44sylcjgkvw8sp35vx1ryxfh";
};

outputs = [ "out" "lib" "man" "dev" ];
Expand Down