Merge pull request #65376 from abbradar/mdadm-upstream

Use upstream units for mdadm

Changed files
+74 -73
nixos
modules
system
tasks
filesystems
tests
pkgs
os-specific
linux
mdadm
systemd
+1
nixos/modules/rename.nix
···
(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" ])
+3 -5
nixos/modules/system/boot/stage-1.nix
···
--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
+23 -15
nixos/modules/system/boot/systemd.nix
···
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 {
···
'';
};
-
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 {
···
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;
···
${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;
-1
nixos/modules/tasks/filesystems/nfs.nix
···
boot.initrd.kernelModules = mkIf inInitrd [ "nfs" ];
systemd.packages = [ pkgs.nfs-utils ];
-
systemd.generator-packages = [ pkgs.nfs-utils ];
environment.etc = {
"idmapd.conf".source = idmapdConfFile;
+2 -41
nixos/modules/tasks/swraid.nix
···
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";
-
};
-
};
-
}
+25 -2
nixos/tests/systemd.nix
···
-
import ./make-test.nix {
+
import ./make-test.nix ({ pkgs, ... }: {
name = "systemd";
machine = { lib, ... }: {
···
systemd.user.extraConfig = "DefaultEnvironment=\"XXX_USER=bar\"";
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";
···
# 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');
+
};
'';
-
}
+
})
+18 -7
pkgs/os-specific/linux/mdadm/default.nix
···
-
{ stdenv, fetchurl, groff, system-sendmail }:
+
{ stdenv, utillinux, coreutils, fetchurl, groff, system-sendmail }:
stdenv.mkDerivation rec {
name = "mdadm-4.1";
···
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; {
+2 -2
pkgs/os-specific/linux/systemd/default.nix
···
src = fetchFromGitHub {
owner = "NixOS";
repo = "systemd";
-
rev = "aa4c4d39d75ce52664cb28d569b1ceafda7b4c06";
-
sha256 = "1ax94gzbdwdcf3wgj7f9cabdkvn2zynnnli7gkbz4isidlpis86g";
+
rev = "5fb35fbc783516e2014115c3488134a2afb8494c";
+
sha256 = "0pyjvzzh8nnxv4z58n82lz1mjnzv44sylcjgkvw8sp35vx1ryxfh";
};
outputs = [ "out" "lib" "man" "dev" ];