Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add NixOS modules search logic into libkmod #17738

Merged
merged 6 commits into from Aug 15, 2016
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion nixos/modules/config/zram.nix
Expand Up @@ -8,7 +8,7 @@ let

devices = map (nr: "zram${toString nr}") (range 0 (cfg.numDevices - 1));

modprobe = "${config.system.sbin.modprobe}/sbin/modprobe";
modprobe = "${pkgs.kmod}/bin/modprobe";

in

Expand Down
1 change: 0 additions & 1 deletion nixos/modules/hardware/video/bumblebee.nix
Expand Up @@ -75,7 +75,6 @@ in
serviceConfig = {
ExecStart = "${bumblebee}/bin/bumblebeed --use-syslog -g ${cfg.group} --driver ${cfg.driver}";
};
environment.MODULE_DIR="/run/current-system/kernel-modules/lib/modules/";
};
};
}
1 change: 0 additions & 1 deletion nixos/modules/hardware/video/webcam/facetimehd.nix
Expand Up @@ -36,7 +36,6 @@ in

# and load it back on resume
powerManagement.resumeCommands = ''
export MODULE_DIR=/run/current-system/kernel-modules/lib/modules
${pkgs.kmod}/bin/modprobe -v facetimehd
'';

Expand Down
4 changes: 0 additions & 4 deletions nixos/modules/services/hardware/tlp.nix
Expand Up @@ -72,8 +72,6 @@ in
ExecStart = "${tlp}/bin/tlp init start";
ExecStop = "${tlp}/bin/tlp init stop";
};

environment.MODULE_DIR="/run/current-system/kernel-modules/lib/modules/";
};

tlp-sleep = {
Expand All @@ -92,8 +90,6 @@ in
ExecStart = "${tlp}/bin/tlp suspend";
ExecStop = "${tlp}/bin/tlp resume";
};

environment.MODULE_DIR="/run/current-system/kernel-modules/lib/modules/";
};
};

Expand Down
5 changes: 2 additions & 3 deletions nixos/modules/services/hardware/udev.nix
Expand Up @@ -58,7 +58,7 @@ let
# Fix some paths in the standard udev rules. Hacky.
for i in $out/*.rules; do
substituteInPlace $i \
--replace \"/sbin/modprobe \"${config.system.sbin.modprobe}/sbin/modprobe \
--replace \"/sbin/modprobe \"${pkgs.kmod}/bin/modprobe \
--replace \"/sbin/mdadm \"${pkgs.mdadm}/sbin/mdadm \
--replace \"/sbin/blkid \"${pkgs.utillinux}/sbin/blkid \
--replace \"/bin/mount \"${pkgs.utillinux}/bin/mount \
Expand Down Expand Up @@ -316,8 +316,7 @@ in
'';

systemd.services.systemd-udevd =
{ environment.MODULE_DIR = "/run/booted-system/kernel-modules/lib/modules";
restartTriggers = cfg.packages;
{ restartTriggers = cfg.packages;
};

};
Expand Down
Expand Up @@ -80,7 +80,7 @@ in
preStart = ''
mkdir -p -m 0755 /afs
mkdir -m 0700 -p ${cfg.cacheDirectory}
${pkgs.kmod}/sbin/insmod ${openafsPkgs}/lib/openafs/libafs-*.ko || true
${pkgs.kmod}/bin/insmod ${openafsPkgs}/lib/openafs/libafs-*.ko || true
${openafsPkgs}/sbin/afsd -confdir ${afsConfig} -cachedir ${cfg.cacheDirectory} ${if cfg.sparse then "-dynroot-sparse" else "-dynroot"} -fakestat -afsdb
${openafsPkgs}/bin/fs setcrypt ${if cfg.crypt then "on" else "off"}
'';
Expand Down
2 changes: 1 addition & 1 deletion nixos/modules/services/networking/fan.nix
Expand Up @@ -5,7 +5,7 @@ with lib;
let

cfg = config.networking.fan;
modprobe = "${config.system.sbin.modprobe}/sbin/modprobe";
modprobe = "${pkgs.kmod}/bin/modprobe";

in

Expand Down
2 changes: 1 addition & 1 deletion nixos/modules/services/networking/strongswan.nix
Expand Up @@ -118,7 +118,7 @@ in
systemd.services.strongswan = {
description = "strongSwan IPSec Service";
wantedBy = [ "multi-user.target" ];
path = with pkgs; [ config.system.sbin.modprobe iproute iptables utillinux ]; # XXX Linux
path = with pkgs; [ kmod iproute iptables utillinux ]; # XXX Linux
wants = [ "keys.target" ];
after = [ "network.target" "keys.target" ];
environment = {
Expand Down
5 changes: 0 additions & 5 deletions nixos/modules/system/boot/kernel.nix
Expand Up @@ -228,7 +228,6 @@ 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
Expand All @@ -238,10 +237,6 @@ 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;
Expand Down
41 changes: 2 additions & 39 deletions nixos/modules/system/boot/modprobe.nix
Expand Up @@ -8,41 +8,6 @@ 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 = [];
Expand Down Expand Up @@ -87,19 +52,17 @@ with lib;
'';
environment.etc."modprobe.d/debian.conf".source = pkgs.kmod-debian-aliases;

environment.systemPackages = [ config.system.sbin.modprobe pkgs.kmod ];
environment.systemPackages = [ pkgs.kmod ];

system.activationScripts.modprobe =
''
# Allow the kernel to find our wrapped modprobe (which searches
# 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 ${config.system.sbin.modprobe}/sbin/modprobe > /proc/sys/kernel/modprobe
echo ${pkgs.kmod}/bin/modprobe > /proc/sys/kernel/modprobe
'';

environment.sessionVariables.MODULE_DIR = "/run/current-system/kernel-modules/lib/modules";

};

}
1 change: 0 additions & 1 deletion nixos/modules/system/boot/stage-2-init.sh
Expand Up @@ -207,6 +207,5 @@ 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
2 changes: 1 addition & 1 deletion nixos/modules/tasks/cpu-freq.nix
Expand Up @@ -38,7 +38,7 @@ in
description = "CPU Frequency Governor Setup";
after = [ "systemd-modules-load.service" ];
wantedBy = [ "multi-user.target" ];
path = [ cpupower config.system.sbin.modprobe ];
path = [ cpupower pkgs.kmod ];
unitConfig.ConditionVirtualization = false;
serviceConfig = {
Type = "oneshot";
Expand Down
3 changes: 1 addition & 2 deletions nixos/modules/virtualisation/docker.nix
Expand Up @@ -95,8 +95,7 @@ in
LimitNPROC = 1048576;
} // proxy_env;

path = [ config.system.sbin.modprobe ] ++ (optional (cfg.storageDriver == "zfs") pkgs.zfs);
environment.MODULE_DIR = "/run/current-system/kernel-modules/lib/modules";
path = [ pkgs.kmod ] ++ (optional (cfg.storageDriver == "zfs") pkgs.zfs);

postStart = if cfg.socketActivation then "" else cfg.postStart;

Expand Down
26 changes: 13 additions & 13 deletions nixos/modules/virtualisation/qemu-vm.nix
Expand Up @@ -135,13 +135,13 @@ let
}
''
# Create a /boot EFI partition with 40M
${pkgs.gptfdisk}/sbin/sgdisk -G /dev/vda
${pkgs.gptfdisk}/sbin/sgdisk -a 1 -n 1:34:2047 -c 1:"BIOS Boot Partition" -t 1:ef02 /dev/vda
${pkgs.gptfdisk}/sbin/sgdisk -a 512 -N 2 -c 2:"EFI System" -t 2:ef00 /dev/vda
${pkgs.gptfdisk}/sbin/sgdisk -A 1:set:1 /dev/vda
${pkgs.gptfdisk}/sbin/sgdisk -A 2:set:2 /dev/vda
${pkgs.gptfdisk}/sbin/sgdisk -h 2 /dev/vda
${pkgs.gptfdisk}/sbin/sgdisk -C /dev/vda
${pkgs.gptfdisk}/bin/sgdisk -G /dev/vda
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Have you verified that gptfdisk and all the other packages here have linked sbin and bin?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, all is well.

${pkgs.gptfdisk}/bin/sgdisk -a 1 -n 1:34:2047 -c 1:"BIOS Boot Partition" -t 1:ef02 /dev/vda
${pkgs.gptfdisk}/bin/sgdisk -a 512 -N 2 -c 2:"EFI System" -t 2:ef00 /dev/vda
${pkgs.gptfdisk}/bin/sgdisk -A 1:set:1 /dev/vda
${pkgs.gptfdisk}/bin/sgdisk -A 2:set:2 /dev/vda
${pkgs.gptfdisk}/bin/sgdisk -h 2 /dev/vda
${pkgs.gptfdisk}/bin/sgdisk -C /dev/vda
${pkgs.utillinux}/bin/sfdisk /dev/vda -A 2
. /sys/class/block/vda2/uevent
mknod /dev/vda2 b $MAJOR $MINOR
Expand All @@ -151,11 +151,11 @@ let
${pkgs.mtools}/bin/mlabel -i /dev/vda2 ::boot

# Mount /boot; load necessary modules first.
${pkgs.kmod}/sbin/insmod ${pkgs.linux}/lib/modules/*/kernel/fs/nls/nls_cp437.ko.xz || true
${pkgs.kmod}/sbin/insmod ${pkgs.linux}/lib/modules/*/kernel/fs/nls/nls_iso8859-1.ko.xz || true
${pkgs.kmod}/sbin/insmod ${pkgs.linux}/lib/modules/*/kernel/fs/fat/fat.ko.xz || true
${pkgs.kmod}/sbin/insmod ${pkgs.linux}/lib/modules/*/kernel/fs/fat/vfat.ko.xz || true
${pkgs.kmod}/sbin/insmod ${pkgs.linux}/lib/modules/*/kernel/fs/efivarfs/efivarfs.ko.xz || true
${pkgs.kmod}/bin/insmod ${pkgs.linux}/lib/modules/*/kernel/fs/nls/nls_cp437.ko.xz || true
${pkgs.kmod}/bin/insmod ${pkgs.linux}/lib/modules/*/kernel/fs/nls/nls_iso8859-1.ko.xz || true
${pkgs.kmod}/bin/insmod ${pkgs.linux}/lib/modules/*/kernel/fs/fat/fat.ko.xz || true
${pkgs.kmod}/bin/insmod ${pkgs.linux}/lib/modules/*/kernel/fs/fat/vfat.ko.xz || true
${pkgs.kmod}/bin/insmod ${pkgs.linux}/lib/modules/*/kernel/fs/efivarfs/efivarfs.ko.xz || true
mkdir /boot
mount /dev/vda2 /boot

Expand Down Expand Up @@ -370,7 +370,7 @@ in
boot.initrd.extraUtilsCommands =
''
# We need mke2fs in the initrd.
copy_bin_and_libs ${pkgs.e2fsprogs}/sbin/mke2fs
copy_bin_and_libs ${pkgs.e2fsprogs}/bin/mke2fs
'';

boot.initrd.postDeviceCommands =
Expand Down
2 changes: 1 addition & 1 deletion pkgs/development/tools/misc/lttng-tools/default.nix
Expand Up @@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
buildInputs = [ popt libuuid liburcu lttng-ust libxml2 ];

prePatch = ''
sed -e "s|/sbin/modprobe|${kmod}/sbin/modprobe|g" \
sed -e "s|/sbin/modprobe|${kmod}/bin/modprobe|g" \
-i src/bin/lttng-sessiond/modprobe.c
'';

Expand Down
4 changes: 2 additions & 2 deletions pkgs/os-specific/linux/kernel/manual-config.nix
Expand Up @@ -93,7 +93,7 @@ let
echo "stripping FHS paths in \`$mf'..."
sed -i "$mf" -e 's|/usr/bin/||g ; s|/bin/||g ; s|/sbin/||g'
done
sed -i Makefile -e 's|= depmod|= ${kmod}/sbin/depmod|'
sed -i Makefile -e 's|= depmod|= ${kmod}/bin/depmod|'
'';

configurePhase = ''
Expand Down Expand Up @@ -188,7 +188,7 @@ let
find -empty -type d -delete

# Remove reference to kmod
sed -i Makefile -e 's|= ${kmod}/sbin/depmod|= depmod|'
sed -i Makefile -e 's|= ${kmod}/bin/depmod|= depmod|'
'' else optionalString installsFirmware ''
make firmware_install $makeFlags "''${makeFlagsArray[@]}" \
$installFlags "''${installFlagsArray[@]}"
Expand Down
2 changes: 1 addition & 1 deletion pkgs/os-specific/linux/kmod/aggregator.nix
Expand Up @@ -21,7 +21,7 @@ buildEnv {
# kernel version number, otherwise depmod will use `uname -r'.
if test -w $out/lib/modules/$kernelVersion; then
rm -f $out/lib/modules/$kernelVersion/modules.*
${kmod}/sbin/depmod -b $out -a $kernelVersion
${kmod}/bin/depmod -b $out -a $kernelVersion
fi
'';
}
30 changes: 21 additions & 9 deletions pkgs/os-specific/linux/kmod/default.nix
@@ -1,25 +1,37 @@
{ stdenv, fetchurl, xz, zlib, pkgconfig, libxslt }:
{ stdenv, lib, fetchurl, autoreconfHook, xz, zlib, pkgconfig, libxslt }:

stdenv.mkDerivation rec {
name = "kmod-22";
let
systems = [ "current-system" "booted-system" ];
modulesDirs = lib.concatMapStringsSep ":" (x: "/run/${x}/kernel-modules/lib/modules") systems;

in stdenv.mkDerivation rec {
name = "kmod-${version}";
version = "22";

src = fetchurl {
url = "mirror://kernel/linux/utils/kernel/kmod/${name}.tar.xz";
sha256 = "10lzfkmnpq6a43a3gkx7x633njh216w0bjwz31rv8a1jlgg1sfxs";
};

buildInputs = [ pkgconfig libxslt xz /* zlib */ ];
nativeBuildInputs = [ autoreconfHook pkgconfig libxslt ];
buildInputs = [ xz /* zlib */ ];

configureFlags = [ "--sysconfdir=/etc" "--with-xz" /* "--with-zlib" */ ];
configureFlags = [
"--sysconfdir=/etc"
"--with-xz"
"--with-modulesdirs=${modulesDirs}"
# "--with-zlib"
];

patches = [ ./module-dir.patch ];

postInstall = ''
ln -s kmod $out/bin/lsmod
mkdir -p $out/sbin
for prog in rmmod insmod modinfo modprobe depmod; do
ln -sv $out/bin/kmod $out/sbin/$prog
for prog in rmmod insmod lsmod modinfo modprobe depmod; do
ln -sv $out/bin/kmod $out/bin/$prog
done

# Backwards compatibility
ln -s bin $out/sbin
'';

meta = {
Expand Down