Merge pull request #65376 from abbradar/mdadm-upstream
Use upstream units for mdadm
This commit is contained in:
commit
7560e2d64f
@ -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" ])
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 {
|
||||
@ -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 {
|
||||
@ -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;
|
||||
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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";
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix {
|
||||
import ./make-test.nix ({ pkgs, ... }: {
|
||||
name = "systemd";
|
||||
|
||||
machine = { lib, ... }: {
|
||||
@ -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" ];
|
||||
@ -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');
|
||||
};
|
||||
'';
|
||||
}
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ stdenv, fetchurl, groff, system-sendmail }:
|
||||
{ stdenv, utillinux, coreutils, fetchurl, groff, system-sendmail }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "mdadm-4.1";
|
||||
@ -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; {
|
||||
|
@ -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" ];
|
||||
|
Loading…
x
Reference in New Issue
Block a user