diff options
author | Marc Weber <marco-oweber@gmx.de> | 2009-03-06 12:26:48 +0000 |
---|---|---|
committer | Marc Weber <marco-oweber@gmx.de> | 2009-03-06 12:26:48 +0000 |
commit | e0240ddf3dfce71132f9d479d98dc39e88532a54 (patch) | |
tree | d57d4c11ec22ef1ea2b383244e4f560763c65311 /upstart-jobs/udev.nix | |
parent | d0733953e1f61f0d59beaf459ad3773413d7b767 (diff) | |
download | nixpkgs-e0240ddf3dfce71132f9d479d98dc39e88532a54.tar nixpkgs-e0240ddf3dfce71132f9d479d98dc39e88532a54.tar.gz nixpkgs-e0240ddf3dfce71132f9d479d98dc39e88532a54.tar.bz2 nixpkgs-e0240ddf3dfce71132f9d479d98dc39e88532a54.tar.lz nixpkgs-e0240ddf3dfce71132f9d479d98dc39e88532a54.tar.xz nixpkgs-e0240ddf3dfce71132f9d479d98dc39e88532a54.tar.zst nixpkgs-e0240ddf3dfce71132f9d479d98dc39e88532a54.zip |
Convert "udev"
svn path=/nixos/branches/fix-style/; revision=14385
Diffstat (limited to 'upstart-jobs/udev.nix')
-rw-r--r-- | upstart-jobs/udev.nix | 163 |
1 files changed, 110 insertions, 53 deletions
diff --git a/upstart-jobs/udev.nix b/upstart-jobs/udev.nix index 4662adde222..4765f29176e 100644 --- a/upstart-jobs/udev.nix +++ b/upstart-jobs/udev.nix @@ -1,18 +1,66 @@ -{ stdenv, writeText, substituteAll, cleanSource, udev, procps, firmwareDirs, modprobe -, extraUdevPkgs ? [] -, config -}: +{pkgs, config, ...}: +###### interface let + inherit (pkgs.lib) mkOption mkIf; + + options = { + services = { + udev = { + + addFirmware = mkOption { + default = []; + example = ["/mnt/big-storage/firmware/"]; + description = " + To specify firmware that is not too spread to ensure + a package, or have an interactive process of extraction + and cannot be redistributed. + "; + merge = pkgs.lib.mergeListOption; + }; + + addUdevPkgs = mkOption { + default = []; + description = " + List of packages containing udev rules. + "; + merge = pkgs.lib.mergeListOption; + }; + + sndMode = mkOption { + default = "0600"; + example = "0666"; + description = " + Permissions for /dev/snd/*, in case you have multiple + logged in users or if the devices belong to root for + some reason. + "; + }; + }; + }; + }; +in + +###### implementation + +let + + inherit (pkgs) substituteAll stdenv writeText udev procps; cfg = config.services.udev; + firmwareLoader = substituteAll { src = ./udev-firmware-loader.sh; path = "${stdenv.coreutils}/bin"; isExecutable = true; inherit firmwareDirs; }; + + firmwareDirs = config.services.udev.addFirmware; + extraUdevPkgs = config.services.udev.addUdevPkgs; + + modprobe = config.system.sbin.modprobe; nixRules = writeText "90-nix.rules" '' @@ -86,55 +134,64 @@ let in { - name = "udev"; - - job = '' - start on startup - stop on shutdown - - env UDEV_CONFIG_FILE=${conf} - start script - echo "" > /proc/sys/kernel/hotplug + require = [ + options + ]; - # Get rid of possible old udev processes. - ${procps}/bin/pkill -u root "^udevd$" || true - - # Do the loading of additional stage 2 kernel modules. - # Maybe this isn't the best place... - for i in ${toString config.boot.kernelModules}; do - echo "Loading kernel module $i..." - ${modprobe}/sbin/modprobe $i || true - done - - # Start udev. - ${udev}/sbin/udevd --daemon - - # 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). - if ! test -e ${devicesCreated}; then - ${udev}/sbin/udevadm trigger - ${udev}/sbin/udevadm settle # wait for udev to finish - touch ${devicesCreated} - fi - - # Kill udev, let Upstart restart and monitor it. (This is nasty, - # but we have to run `udevadm trigger' first. Maybe we can use - # Upstart's `binary' keyword, but it isn't implemented yet.) - if ! ${procps}/bin/pkill -u root "^udevd$"; then - echo "couldn't stop udevd" - fi - - while ${procps}/bin/pgrep -u root "^udevd$"; do - sleep 1 - done - - initctl emit new-devices - end script - - respawn ${udev}/sbin/udevd - ''; - - passthru = {inherit udevRules;}; + services = { + extraJobs = [{ + name = "udev"; + + job = '' + start on startup + stop on shutdown + + env UDEV_CONFIG_FILE=${conf} + + start script + echo "" > /proc/sys/kernel/hotplug + + # Get rid of possible old udev processes. + ${procps}/bin/pkill -u root "^udevd$" || true + + # Do the loading of additional stage 2 kernel modules. + # Maybe this isn't the best place... + for i in ${toString config.boot.kernelModules}; do + echo "Loading kernel module $i..." + ${modprobe}/sbin/modprobe $i || true + done + + # Start udev. + ${udev}/sbin/udevd --daemon + + # 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). + if ! test -e ${devicesCreated}; then + ${udev}/sbin/udevadm trigger + ${udev}/sbin/udevadm settle # wait for udev to finish + touch ${devicesCreated} + fi + + # Kill udev, let Upstart restart and monitor it. (This is nasty, + # but we have to run `udevadm trigger' first. Maybe we can use + # Upstart's `binary' keyword, but it isn't implemented yet.) + if ! ${procps}/bin/pkill -u root "^udevd$"; then + echo "couldn't stop udevd" + fi + + while ${procps}/bin/pgrep -u root "^udevd$"; do + sleep 1 + done + + initctl emit new-devices + end script + + respawn ${udev}/sbin/udevd + ''; + + passthru = {inherit udevRules;}; + }]; + }; } |