FYI: If I don't load "sd_mod" explicitly, tuxonice (in the zen kernels) does not know to resume from my swap at /dev/sda2. And, we already commented this on irc, but I had to load the i8042 module to get my keyboard working.
Additionally, I don't think the ide modules are needed, if we use the pata modules - these provide access to ide discs through the scsi kernel interace. Regards, Lluís. 2009/12/15 Eelco Dolstra <[email protected]>: > Author: eelco > Date: 2009-12-15 16:38:20 +0000 (Tue, 15 Dec 2009) > New Revision: 18975 > > You can view the changes in this commit at: > https://svn.nixos.org/viewvc/nix?rev=18975&view=rev > > Modified: > nixos/trunk/modules/installer/cd-dvd/installation-cd-base.nix > nixos/trunk/modules/installer/cd-dvd/iso-image.nix > nixos/trunk/modules/system/boot/kernel.nix > nixos/trunk/modules/system/boot/stage-1-init.sh > nixos/trunk/modules/system/boot/stage-1.nix > nixos/trunk/modules/virtualisation/qemu-vm.nix > > Log: > * Added an option `boot.initrd.availableKernelModules' that specifies > modules that should be added to the initrd, but should only be > loaded on demand (e.g. by the kernel or by udev). This is > especially useful in the installation CD, where we now only load the > modules needed by the hardware. > * Enable automatic modprobing by udev in the initrd. > > > Changes: > > Modified: nixos/trunk/modules/installer/cd-dvd/installation-cd-base.nix > =================================================================== > --- nixos/trunk/modules/installer/cd-dvd/installation-cd-base.nix > 2009-12-15 15:48:29 UTC (rev 18974) > +++ nixos/trunk/modules/installer/cd-dvd/installation-cd-base.nix > 2009-12-15 16:38:20 UTC (rev 18975) > @@ -114,7 +114,7 @@ > > # The initrd has to contain any module that might be necessary for > # mounting the CD/DVD. > - boot.initrd.kernelModules = > + boot.initrd.availableKernelModules = > [ # SATA/PATA support. > "ahci" > > @@ -160,9 +160,11 @@ > "vfat" > > # And of course we need to be able to mount the CD. > - "iso9660" "loop" "squashfs" > + "iso9660" > ]; > > + boot.initrd.kernelModules = [ "loop" ]; > + > # nixos-install will do a pull from this channel to speed up the > # installation. > installer.nixpkgsURL = > http://nixos.org/releases/nixpkgs/channels/nixpkgs-unstable; > > Modified: nixos/trunk/modules/installer/cd-dvd/iso-image.nix > =================================================================== > --- nixos/trunk/modules/installer/cd-dvd/iso-image.nix 2009-12-15 15:48:29 > UTC (rev 18974) > +++ nixos/trunk/modules/installer/cd-dvd/iso-image.nix 2009-12-15 16:38:20 > UTC (rev 18975) > @@ -128,7 +128,7 @@ > (! config.boot.kernelPackages.kernel.features ? aufs) > config.boot.kernelPackages.aufs; > > - boot.initrd.kernelModules = ["aufs" "squashfs"]; > + boot.initrd.availableKernelModules = [ "aufs" "squashfs" ]; > > # Tell stage 1 of the boot to mount a tmpfs on top of the CD using > # AUFS. !!! It would be nicer to make the stage 1 init pluggable > > Modified: nixos/trunk/modules/system/boot/kernel.nix > =================================================================== > --- nixos/trunk/modules/system/boot/kernel.nix 2009-12-15 15:48:29 UTC (rev > 18974) > +++ nixos/trunk/modules/system/boot/kernel.nix 2009-12-15 16:38:20 UTC (rev > 18975) > @@ -61,13 +61,65 @@ > The set of kernel modules to be loaded in the second stage of > the boot process. Note that modules that are needed to > mount the root file system should be added to > + <option>boot.initrd.availableKernelModules</option> or > <option>boot.initrd.kernelModules</option>. > ''; > }; > > + boot.initrd.availableKernelModules = mkOption { > + default = []; > + example = [ "sata_nv" "ext3" ]; > + description = '' > + The set of kernel modules in the initial ramdisk used during the > + boot process. This set must include all modules necessary for > + mounting the root device. That is, it should include modules > + for the physical device (e.g., SCSI drivers) and for the file > + system (e.g., ext3). The set specified here is automatically > + closed under the module dependency relation, i.e., all > + dependencies of the modules list here are included > + automatically. The modules listed here are available in the > + initrd, but are only loaded on demand (e.g., the ext3 module is > + loaded automatically when an ext3 filesystem is mounted, and > + modules for PCI devices are loaded when they match the PCI ID > + of a device in your system). To force a module to be loaded, > + include it in <option>boot.initrd.kernelModules</option>. > + ''; > + }; > + > boot.initrd.kernelModules = mkOption { > default = [ > - # Note: most of these (especially the SATA/PATA modules) > + ]; > + description = "List of modules that are always loaded by the initrd."; > + }; > + > + system.modulesTree = mkOption { > + internal = true; > + default = []; > + description = '' > + Tree of kernel modules. This includes the kernel, plus modules > + built outside of the kernel. Combine these into a single tree of > + symlinks because modprobe only supports one directory. > + ''; > + merge = mergeListOption; > + # Convert the list of path to only one path. > + apply = pkgs.aggregateModules; > + }; > + > + }; > + > + > + ###### implementation > + > + config = { > + > + system.build = { inherit kernel; }; > + > + system.modulesTree = [ kernel ] ++ config.boot.extraModulePackages; > + > + boot.kernelModules = [ "loop" ]; > + > + boot.initrd.availableKernelModules = > + [ # Note: most of these (especially the SATA/PATA modules) > # shouldn't be included by default since nixos-hardware-scan > # detects them, but I'm keeping them for now for backwards > # compatibility. > @@ -100,51 +152,18 @@ > "ohci_hcd" > "usbhid" > > - # LVM. > - "dm_mod" > - > - # All-mod-config case: > + # Unix domain sockets (needed by udev). > "unix" > + > + # Misc. stuff. > "i8042" "pcips2" "serio" "atkbd" "xtkbd" > ]; > - description = '' > - The set of kernel modules in the initial ramdisk used during the > - boot process. This set must include all modules necessary for > - mounting the root device. That is, it should include modules > - for the physical device (e.g., SCSI drivers) and for the file > - system (e.g., ext3). The set specified here is automatically > - closed under the module dependency relation, i.e., all > - dependencies of the modules list here are included > - automatically. > - ''; > - }; > + > + boot.initrd.kernelModules = > + [ # For LVM. > + "dm_mod" > + ]; > > - system.modulesTree = mkOption { > - internal = true; > - default = []; > - description = '' > - Tree of kernel modules. This includes the kernel, plus modules > - built outside of the kernel. Combine these into a single tree of > - symlinks because modprobe only supports one directory. > - ''; > - merge = mergeListOption; > - # Convert the list of path to only one path. > - apply = pkgs.aggregateModules; > - }; > - > - }; > - > - > - ###### implementation > - > - config = { > - > - system.build = { inherit kernel; }; > - > - system.modulesTree = [ kernel ] ++ config.boot.extraModulePackages; > - > - boot.kernelModules = [ "loop" ]; > - > # The Linux kernel >= 2.6.27 provides firmware. > hardware.firmware = [ "${kernel}/lib/firmware" ]; > > > Modified: nixos/trunk/modules/system/boot/stage-1-init.sh > =================================================================== > --- nixos/trunk/modules/system/boot/stage-1-init.sh 2009-12-15 15:48:29 > UTC (rev 18974) > +++ nixos/trunk/modules/system/boot/stage-1-init.sh 2009-12-15 16:38:20 > UTC (rev 18975) > @@ -3,6 +3,7 @@ > targetRoot=/mnt-root > > export ld_library_pa...@extrautils@/lib > +export pa...@extrautils@/bin:@klibc@/bin > > > fail() { > @@ -43,16 +44,6 @@ > echo > > > -# Set the PATH. > -export PATH=/empty > -for i in @path@; do > - PATH=$PATH:$i/bin > - if test -e $i/sbin; then > - PATH=$PATH:$i/sbin > - fi > -done > - > - > # Mount special file systems. > mkdir -p /etc # to shut up mount > echo -n > /etc/fstab # idem > @@ -87,10 +78,11 @@ > done > > > -# Load some kernel modules. > -for i in $(cat @modulesClosure@/insmod-list); do > +# Load the required kernel modules. > +echo @extraUtils@/bin/modprobe > /proc/sys/kernel/modprobe > +for i in @kernelModules@; do > echo "loading module $(basename $i)..." > - insmod $i || true > + modprobe $i || true > done > > > @@ -107,12 +99,13 @@ > fi > > if test -e /sys/power/resume -a -e /sys/power/disk; then > - echo "@resumeDevice@" > /sys/power/resume 2> /dev/null || echo "failed to > resume..." > - echo shutdown > /sys/power/disk > + echo "@resumeDevice@" > /sys/power/resume 2> /dev/null || echo "failed > to resume..." > + echo shutdown > /sys/power/disk > fi > > > # Create device nodes in /dev. > +echo "running udev..." > export udev_config_fi...@udevconf@ > mkdir -p /dev/.udev # !!! bug in udev? > udevd --daemon > @@ -120,10 +113,10 @@ > udevadm settle > > if type -p dmsetup > /dev/null; then > - echo "starting device mapper and LVM..." > - dmsetup mknodes > - lvm vgscan --ignorelockingfailure > - lvm vgchange -ay --ignorelockingfailure > + echo "starting device mapper and LVM..." > + dmsetup mknodes > + lvm vgscan --ignorelockingfailure > + lvm vgchange -ay --ignorelockingfailure > fi > > if test -n "$debug1devices"; then fail; fi > > Modified: nixos/trunk/modules/system/boot/stage-1.nix > =================================================================== > --- nixos/trunk/modules/system/boot/stage-1.nix 2009-12-15 15:48:29 UTC (rev > 18974) > +++ nixos/trunk/modules/system/boot/stage-1.nix 2009-12-15 16:38:20 UTC (rev > 18975) > @@ -3,7 +3,7 @@ > # the modules necessary to mount the root file system, then calls the > # init in the root file system to start the second boot stage. > > -{pkgs, config, ...}: > +{ config, pkgs, ... }: > > let > > @@ -30,15 +30,6 @@ > "; > }; > > - boot.initrd.allowMissing = mkOption { > - default = true; > - description = '' > - Allow some initrd components to be missing. Useful for > - custom kernel that are changed too often to track needed > - kernelModules. > - ''; > - }; > - > boot.initrd.lvm = mkOption { > default = true; > description = " > @@ -82,6 +73,7 @@ > }; > > boot.initrd.extraUtilsCommands = mkOption { > + internal = true; > default = ""; > merge = pkgs.lib.mergeStringOption; > description = '' > @@ -110,9 +102,9 @@ > > # Determine the set of modules that we need to mount the root FS. > modulesClosure = pkgs.makeModulesClosure { > - rootModules = config.boot.initrd.kernelModules; > + rootModules = config.boot.initrd.availableKernelModules ++ > config.boot.initrd.kernelModules; > kernel = modulesTree; > - allowMissing = config.boot.initrd.allowMissing; > + allowMissing = true; > }; > > > @@ -125,7 +117,7 @@ > { buildInputs = [pkgs.nukeReferences]; > devicemapper = if config.boot.initrd.lvm then pkgs.devicemapper else > null; > lvm2 = if config.boot.initrd.lvm then pkgs.lvm2 else null; > - allowedReferences = ["out"]; # prevent accidents like glibc being > included in the initrd > + allowedReferences = [ "out" modulesClosure ]; # prevent accidents like > glibc being included in the initrd > doublePatchelf = (pkgs.stdenv.system == "armv5tel-linux"); > } > '' > @@ -179,9 +171,9 @@ > cp ${pkgs.bash}/bin/bash $out/bin > ln -s bash $out/bin/sh > > - # Copy insmod. > - cp ${pkgs.module_init_tools}/sbin/insmod $out/bin > - > + # Copy modprobe. > + cp ${pkgs.module_init_tools}/sbin/modprobe $out/bin/modprobe.real > + > ${config.boot.initrd.extraUtilsCommands} > > # Run patchelf to make the programs refer to the copied libraries. > @@ -191,12 +183,20 @@ > if ! test -L $i; then > echo "patching $i..." > patchelf --set-interpreter $out/lib/ld-linux*.so.? --set-rpath > $out/lib $i || true > - if [ "$doublePatchelf" -eq 1 ]; then > + if [ -n "$doublePatchelf" ]; then > patchelf --set-interpreter $out/lib/ld-linux*.so.? > --set-rpath $out/lib $i || true > fi > fi > done > > + # Make the modprobe wrapper that sets $MODULE_DIR. > + cat > $out/bin/modprobe <<EOF > + #! $out/bin/bash > + export MODULE_DIR=${modulesClosure}/lib/modules > + exec $out/bin/modprobe.real "\$@" > + EOF > + chmod u+x $out/bin/modprobe > + > # Make sure that the patchelf'ed binaries still work. > echo "testing patched programs..." > $out/bin/bash --version > @@ -215,7 +215,7 @@ > $out/bin/reiserfsck -V > $out/bin/mdadm --version > $out/bin/basename --version > - $out/bin/insmod --version > + $out/bin/modprobe --version > ''; # */ > > > @@ -234,6 +234,7 @@ > > cp ${pkgs.udev}/libexec/rules.d/60-cdrom_id.rules $out/ > cp ${pkgs.udev}/libexec/rules.d/60-persistent-storage.rules $out/ > + cp ${pkgs.udev}/libexec/rules.d/80-drivers.rules $out/ > > for i in $out/*.rules; do > substituteInPlace $i \ > @@ -243,7 +244,8 @@ > --replace path_id ${extraUtils}/bin/path_id \ > --replace vol_id ${extraUtils}/bin/vol_id \ > --replace cdrom_id ${extraUtils}/bin/cdrom_id \ > - --replace /sbin/blkid ${extraUtils}/bin/blkid > + --replace /sbin/blkid ${extraUtils}/bin/blkid \ > + --replace /sbin/modprobe ${extraUtils}/bin/modprobe > done > > # Remove rule preventing creation of a by-label symlink > @@ -272,12 +274,14 @@ > > isExecutable = true; > > - inherit modulesClosure udevConf extraUtils; > - > + klibc = pkgs.klibcShrunk; > + > + inherit udevConf extraUtils; > + > inherit (config.boot) isLiveCD resumeDevice; > > inherit (config.boot.initrd) checkJournalingFS > - postDeviceCommands postMountCommands; > + postDeviceCommands postMountCommands kernelModules; > > # !!! copy&pasted from upstart-jobs/filesystems.nix. > mountPoints = > @@ -287,14 +291,6 @@ > devices = map (fs: if fs.device != null then fs.device else > "/dev/disk/by-label/${fs.label}") fileSystems; > fsTypes = map (fs: fs.fsType) fileSystems; > optionss = map (fs: fs.options) fileSystems; > - > - path = [ > - # `extraUtils' comes first because it overrides the `mount' > - # command provided by klibc (which isn't capable of > - # auto-detecting FS types). > - extraUtils > - pkgs.klibcShrunk > - ]; > }; > > > > Modified: nixos/trunk/modules/virtualisation/qemu-vm.nix > =================================================================== > --- nixos/trunk/modules/virtualisation/qemu-vm.nix 2009-12-15 15:48:29 > UTC (rev 18974) > +++ nixos/trunk/modules/virtualisation/qemu-vm.nix 2009-12-15 16:38:20 > UTC (rev 18975) > @@ -71,8 +71,8 @@ > # All the modules the initrd needs to mount the host filesystem via > # CIFS. Also use paravirtualised network and block devices for > # performance. > - boot.initrd.kernelModules = > - ["cifs" "virtio_net" "virtio_pci" "virtio_blk" "virtio_balloon" > "nls_utf8"]; > + boot.initrd.availableKernelModules = > + [ "cifs" "virtio_net" "virtio_pci" "virtio_blk" "virtio_balloon" > "nls_utf8" ]; > > boot.initrd.extraUtilsCommands = > '' > > _______________________________________________ > nix-commits mailing list > [email protected] > http://mail.cs.uu.nl/mailman/listinfo/nix-commits > _______________________________________________ nix-dev mailing list [email protected] https://mail.cs.uu.nl/mailman/listinfo/nix-dev
