From 9adad8612b082bcbae30c81678a04b79a44079a4 Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Mon, 15 Aug 2016 19:05:52 -0400 Subject: Revert "Merge branch 'modprobe-fix' of git://github.com/abbradar/nixpkgs" Was meant to go into staging, sorry This reverts commit 57b2d1e9b0dcdd1d25bd2d450174764b9417ffc1, reversing changes made to 760b2b9048ea775c319cb348d74447a20dea513e. --- nixos/modules/system/boot/kernel.nix | 5 ++++ nixos/modules/system/boot/modprobe.nix | 41 +++++++++++++++++++++++++++++-- nixos/modules/system/boot/stage-2-init.sh | 1 + 3 files changed, 45 insertions(+), 2 deletions(-) (limited to 'nixos/modules/system/boot') diff --git a/nixos/modules/system/boot/kernel.nix b/nixos/modules/system/boot/kernel.nix index 0f342f44fe76..a6bbca9b30bb 100644 --- a/nixos/modules/system/boot/kernel.nix +++ b/nixos/modules/system/boot/kernel.nix @@ -228,6 +228,7 @@ in systemd.services."systemd-modules-load" = { wantedBy = [ "multi-user.target" ]; restartTriggers = [ kernelModulesConf ]; + environment.MODULE_DIR = "/run/booted-system/kernel-modules/lib/modules"; serviceConfig = { # Ignore failed module loads. Typically some of the # modules in ‘boot.kernelModules’ are "nice to have but @@ -237,6 +238,10 @@ in }; }; + systemd.services.kmod-static-nodes = + { environment.MODULE_DIR = "/run/booted-system/kernel-modules/lib/modules"; + }; + lib.kernelConfig = { isYes = option: { assertion = config: config.isYes option; diff --git a/nixos/modules/system/boot/modprobe.nix b/nixos/modules/system/boot/modprobe.nix index b915a98d5375..9bb10eac9880 100644 --- a/nixos/modules/system/boot/modprobe.nix +++ b/nixos/modules/system/boot/modprobe.nix @@ -8,6 +8,41 @@ with lib; options = { + system.sbin.modprobe = mkOption { + internal = true; + default = pkgs.stdenv.mkDerivation { + name = "modprobe"; + buildCommand = '' + mkdir -p $out/bin + for i in ${pkgs.kmod}/sbin/*; do + name=$(basename $i) + echo "$text" > $out/bin/$name + echo 'exec '$i' "$@"' >> $out/bin/$name + chmod +x $out/bin/$name + done + ln -s bin $out/sbin + ''; + text = + '' + #! ${pkgs.stdenv.shell} + export MODULE_DIR=/run/current-system/kernel-modules/lib/modules + + # Fall back to the kernel modules used at boot time if the + # modules in the current configuration don't match the + # running kernel. + if [ ! -d "$MODULE_DIR/$(${pkgs.coreutils}/bin/uname -r)" ]; then + MODULE_DIR=/run/booted-system/kernel-modules/lib/modules/ + fi + + ''; + meta.priority = 4; + }; + description = '' + Wrapper around modprobe that sets the path to the modules + tree. + ''; + }; + boot.blacklistedKernelModules = mkOption { type = types.listOf types.str; default = []; @@ -52,7 +87,7 @@ with lib; ''; environment.etc."modprobe.d/debian.conf".source = pkgs.kmod-debian-aliases; - environment.systemPackages = [ pkgs.kmod ]; + environment.systemPackages = [ config.system.sbin.modprobe pkgs.kmod ]; system.activationScripts.modprobe = '' @@ -60,9 +95,11 @@ with lib; # in the right location in the Nix store for kernel modules). # We need this when the kernel (or some module) auto-loads a # module. - echo ${pkgs.kmod}/bin/modprobe > /proc/sys/kernel/modprobe + echo ${config.system.sbin.modprobe}/sbin/modprobe > /proc/sys/kernel/modprobe ''; + environment.sessionVariables.MODULE_DIR = "/run/current-system/kernel-modules/lib/modules"; + }; } diff --git a/nixos/modules/system/boot/stage-2-init.sh b/nixos/modules/system/boot/stage-2-init.sh index c5a14f0766d5..4a7f073ea8ad 100644 --- a/nixos/modules/system/boot/stage-2-init.sh +++ b/nixos/modules/system/boot/stage-2-init.sh @@ -207,5 +207,6 @@ exec {logOutFd}>&- {logErrFd}>&- # Start systemd. echo "starting systemd..." PATH=/run/current-system/systemd/lib/systemd \ + MODULE_DIR=/run/booted-system/kernel-modules/lib/modules \ LOCALE_ARCHIVE=/run/current-system/sw/lib/locale/locale-archive \ exec systemd -- cgit 1.4.1