summary refs log tree commit diff
path: root/modules/services/hardware/udev.nix
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2010-01-07 22:39:35 +0000
committerEelco Dolstra <eelco.dolstra@logicblox.com>2010-01-07 22:39:35 +0000
commit6f8a3ba7c74199b245fbec0f03efcd5b81d76c0e (patch)
tree90d0bb0819748a332c620b1aeabf90434169a098 /modules/services/hardware/udev.nix
parentfa2a6f835f1447e3bc347e370b633942fb865b15 (diff)
downloadnixpkgs-6f8a3ba7c74199b245fbec0f03efcd5b81d76c0e.tar
nixpkgs-6f8a3ba7c74199b245fbec0f03efcd5b81d76c0e.tar.gz
nixpkgs-6f8a3ba7c74199b245fbec0f03efcd5b81d76c0e.tar.bz2
nixpkgs-6f8a3ba7c74199b245fbec0f03efcd5b81d76c0e.tar.lz
nixpkgs-6f8a3ba7c74199b245fbec0f03efcd5b81d76c0e.tar.xz
nixpkgs-6f8a3ba7c74199b245fbec0f03efcd5b81d76c0e.tar.zst
nixpkgs-6f8a3ba7c74199b245fbec0f03efcd5b81d76c0e.zip
* Create devicemapper/lvm device nodes from udev (using the rules
  supplied by the lvm package).  This makes the "lvm" Upstart task
  unnecessary.  Also, we now get /dev/disk/by-{label,uuid} symlinks
  for LVM logical disks.

svn path=/nixos/trunk/; revision=19300
Diffstat (limited to 'modules/services/hardware/udev.nix')
-rw-r--r--modules/services/hardware/udev.nix26
1 files changed, 16 insertions, 10 deletions
diff --git a/modules/services/hardware/udev.nix b/modules/services/hardware/udev.nix
index 798b9a4e381..af653f59c88 100644
--- a/modules/services/hardware/udev.nix
+++ b/modules/services/hardware/udev.nix
@@ -44,12 +44,21 @@ let
       # called by 50-firmware.rules works properly.
       echo 'ENV{FIRMWARE_DIRS}="${toString config.hardware.firmware}"' >> $out/00-path.rules
       
-      # Fix some paths in the standard udev rules.
+      # Add the udev rules from other packages.
+      for i in ${toString cfg.packages}; do
+        for j in $i/*/udev/rules.d/*; do
+          ln -s $j $out/$(basename $j)
+        done
+      done
+
+      # Fix some paths in the standard udev rules.  Hacky.
       for i in $out/*.rules; do
         substituteInPlace $i \
           --replace /sbin/modprobe ${modprobe}/sbin/modprobe \
           --replace /sbin/blkid ${pkgs.utillinux}/sbin/blkid \
-          --replace /sbin/mdadm ${pkgs.mdadm}/sbin/madm
+          --replace /sbin/mdadm ${pkgs.mdadm}/sbin/madm \
+          --replace '$env{DM_SBIN_PATH}/blkid' ${pkgs.utillinux}/sbin/blkid \
+          --replace 'ENV{DM_SBIN_PATH}="/sbin"' 'ENV{DM_SBIN_PATH}="${pkgs.lvm2}/sbin"'
       done
 
       # If auto-configuration is disabled, then remove
@@ -57,13 +66,6 @@ let
       # automatically calling modprobe.
       ${if !config.boot.hardwareScan then "rm $out/80-drivers.rules" else ""}
 
-      # Add the udev rules from other packages.
-      for i in ${toString cfg.packages}; do
-        for j in $i/*/udev/rules.d/*; do
-          ln -s $j $out/$(basename $j)
-        done
-      done
-
       # Use the persistent device rules (naming for CD/DVD and
       # network devices) stored in 
       # /var/lib/udev/rules.d/70-persistent-{cd,net}.rules.  These are
@@ -186,8 +188,12 @@ in
           ''
             # Let udev create device nodes for all modules that have already
             # been loaded into the kernel (or for which support is built into
-            # the kernel).
+            # the kernel).  The `STARTUP' variable is needed to force
+            # the LVM rules to create device nodes.  See
+            # http://www.mail-archive.com/fedora-devel-list@redhat.com/msg10261.html
+            ${udev}/sbin/udevadm control --env=STARTUP=1
             ${udev}/sbin/udevadm trigger
+            ${udev}/sbin/udevadm control --env=STARTUP=
             ${udev}/sbin/udevadm settle # wait for udev to finish
 
             initctl emit -n new-devices