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" "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" "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 [ "services" "zabbixServer" "dbPassword" ] "Use services.zabbixServer.database.passwordFile instead.")
|
||||||
|
(mkRemovedOptionModule [ "systemd" "generator-packages" ] "Use systemd.packages instead.")
|
||||||
|
|
||||||
# ZSH
|
# ZSH
|
||||||
(mkRenamedOptionModule [ "programs" "zsh" "enableSyntaxHighlighting" ] [ "programs" "zsh" "syntaxHighlighting" "enable" ])
|
(mkRenamedOptionModule [ "programs" "zsh" "enableSyntaxHighlighting" ] [ "programs" "zsh" "syntaxHighlighting" "enable" ])
|
||||||
|
@ -217,13 +217,11 @@ let
|
|||||||
--replace ata_id ${extraUtils}/bin/ata_id \
|
--replace ata_id ${extraUtils}/bin/ata_id \
|
||||||
--replace scsi_id ${extraUtils}/bin/scsi_id \
|
--replace scsi_id ${extraUtils}/bin/scsi_id \
|
||||||
--replace cdrom_id ${extraUtils}/bin/cdrom_id \
|
--replace cdrom_id ${extraUtils}/bin/cdrom_id \
|
||||||
--replace ${pkgs.utillinux}/sbin/blkid ${extraUtils}/bin/blkid \
|
--replace ${pkgs.coreutils}/bin/basename ${extraUtils}/bin/basename \
|
||||||
--replace /sbin/blkid ${extraUtils}/bin/blkid \
|
--replace ${pkgs.utillinux}/bin/blkid ${extraUtils}/bin/blkid \
|
||||||
--replace ${pkgs.lvm2}/sbin ${extraUtils}/bin \
|
--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 ${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
|
--replace ${udev}/bin/udevadm ${extraUtils}/bin/udevadm
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -427,7 +427,8 @@ in
|
|||||||
systemd.packages = mkOption {
|
systemd.packages = mkOption {
|
||||||
default = [];
|
default = [];
|
||||||
type = types.listOf types.package;
|
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.targets = mkOption {
|
||||||
@ -497,11 +498,14 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.generator-packages = mkOption {
|
systemd.shutdown = mkOption {
|
||||||
default = [];
|
type = types.attrsOf types.path;
|
||||||
type = types.listOf types.package;
|
default = {};
|
||||||
example = literalExample "[ pkgs.systemd-cryptsetup-generator ]";
|
description = ''
|
||||||
description = "Packages providing systemd generators.";
|
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 {
|
systemd.defaultUnit = mkOption {
|
||||||
@ -761,18 +765,21 @@ in
|
|||||||
environment.systemPackages = [ systemd ];
|
environment.systemPackages = [ systemd ];
|
||||||
|
|
||||||
environment.etc = let
|
environment.etc = let
|
||||||
# generate contents for /etc/systemd/system-generators from
|
# generate contents for /etc/systemd/system-${type} from attrset of links and packages
|
||||||
# systemd.generators and systemd.generator-packages
|
hooks = type: links: pkgs.runCommand "system-${type}" {
|
||||||
generators = pkgs.runCommand "system-generators" {
|
|
||||||
preferLocalBuild = true;
|
preferLocalBuild = true;
|
||||||
packages = cfg.generator-packages;
|
packages = cfg.packages;
|
||||||
} ''
|
} ''
|
||||||
|
set -e
|
||||||
mkdir -p $out
|
mkdir -p $out
|
||||||
for package in $packages
|
for package in $packages
|
||||||
do
|
do
|
||||||
ln -s $package/lib/systemd/system-generators/* $out/
|
for hook in $package/lib/systemd/system-${type}/*
|
||||||
done;
|
do
|
||||||
${concatStrings (mapAttrsToList (generator: target: "ln -s ${target} $out/${generator};\n") cfg.generators)}
|
ln -s $hook $out/
|
||||||
|
done
|
||||||
|
done
|
||||||
|
${concatStrings (mapAttrsToList (exec: target: "ln -s ${target} $out/${exec};\n") links)}
|
||||||
'';
|
'';
|
||||||
in ({
|
in ({
|
||||||
"systemd/system".source = generateUnits "system" cfg.units upstreamSystemUnits upstreamSystemWants;
|
"systemd/system".source = generateUnits "system" cfg.units upstreamSystemUnits upstreamSystemWants;
|
||||||
@ -834,7 +841,8 @@ in
|
|||||||
${concatStringsSep "\n" cfg.tmpfiles.rules}
|
${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;
|
services.dbus.enable = true;
|
||||||
|
@ -56,7 +56,6 @@ in
|
|||||||
boot.initrd.kernelModules = mkIf inInitrd [ "nfs" ];
|
boot.initrd.kernelModules = mkIf inInitrd [ "nfs" ];
|
||||||
|
|
||||||
systemd.packages = [ pkgs.nfs-utils ];
|
systemd.packages = [ pkgs.nfs-utils ];
|
||||||
systemd.generator-packages = [ pkgs.nfs-utils ];
|
|
||||||
|
|
||||||
environment.etc = {
|
environment.etc = {
|
||||||
"idmapd.conf".source = idmapdConfFile;
|
"idmapd.conf".source = idmapdConfFile;
|
||||||
|
@ -6,51 +6,12 @@
|
|||||||
|
|
||||||
services.udev.packages = [ pkgs.mdadm ];
|
services.udev.packages = [ pkgs.mdadm ];
|
||||||
|
|
||||||
|
systemd.packages = [ pkgs.mdadm ];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "md_mod" "raid0" "raid1" "raid10" "raid456" ];
|
boot.initrd.availableKernelModules = [ "md_mod" "raid0" "raid1" "raid10" "raid456" ];
|
||||||
|
|
||||||
boot.initrd.extraUdevRulesCommands = ''
|
boot.initrd.extraUdevRulesCommands = ''
|
||||||
cp -v ${pkgs.mdadm}/lib/udev/rules.d/*.rules $out/
|
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";
|
name = "systemd";
|
||||||
|
|
||||||
machine = { lib, ... }: {
|
machine = { lib, ... }: {
|
||||||
@ -21,6 +21,14 @@ import ./make-test.nix {
|
|||||||
services.journald.extraConfig = "Storage=volatile";
|
services.journald.extraConfig = "Storage=volatile";
|
||||||
services.xserver.displayManager.auto.user = "alice";
|
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 = {
|
systemd.services.testservice1 = {
|
||||||
description = "Test Service 1";
|
description = "Test Service 1";
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
@ -69,5 +77,20 @@ import ./make-test.nix {
|
|||||||
# has a last mount time, because the file system wasn't checked.
|
# has a last mount time, because the file system wasn't checked.
|
||||||
$machine->fail('dumpe2fs /dev/vdb | grep -q "^Last mount time: *n/a"');
|
$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 {
|
stdenv.mkDerivation rec {
|
||||||
name = "mdadm-4.1";
|
name = "mdadm-4.1";
|
||||||
@ -8,26 +8,37 @@ stdenv.mkDerivation rec {
|
|||||||
sha256 = "0jjgjgqijpdp7ijh8slzzjjw690kydb1jjadf0x5ilq85628hxmb";
|
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 ];
|
patches = [ ./no-self-references.patch ];
|
||||||
|
|
||||||
makeFlags = [
|
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"
|
"MANDIR=$(out)/share/man" "RUN_DIR=/dev/.mdadm"
|
||||||
"STRIP="
|
"STRIP="
|
||||||
] ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
|
] ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
|
||||||
"CROSS_COMPILE=${stdenv.cc.targetPrefix}"
|
"CROSS_COMPILE=${stdenv.cc.targetPrefix}"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
installFlags = [ "install-systemd" ];
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
nativeBuildInputs = [ groff ];
|
nativeBuildInputs = [ groff ];
|
||||||
|
|
||||||
preConfigure = ''
|
postPatch = ''
|
||||||
sed -e 's@/lib/udev@''${out}/lib/udev@' \
|
sed -e 's@/lib/udev@''${out}/lib/udev@' \
|
||||||
-e 's@ -Werror @ @' \
|
-e 's@ -Werror @ @' \
|
||||||
-e 's@/usr/sbin/sendmail@${system-sendmail}@' -i Makefile
|
-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; {
|
meta = with stdenv.lib; {
|
||||||
|
@ -24,8 +24,8 @@ stdenv.mkDerivation rec {
|
|||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "NixOS";
|
owner = "NixOS";
|
||||||
repo = "systemd";
|
repo = "systemd";
|
||||||
rev = "aa4c4d39d75ce52664cb28d569b1ceafda7b4c06";
|
rev = "5fb35fbc783516e2014115c3488134a2afb8494c";
|
||||||
sha256 = "1ax94gzbdwdcf3wgj7f9cabdkvn2zynnnli7gkbz4isidlpis86g";
|
sha256 = "0pyjvzzh8nnxv4z58n82lz1mjnzv44sylcjgkvw8sp35vx1ryxfh";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = [ "out" "lib" "man" "dev" ];
|
outputs = [ "out" "lib" "man" "dev" ];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user