udev-173, patch

svn path=/nixpkgs/branches/udev-173/; revision=28660
This commit is contained in:
Yury G. Kudryashov 2011-08-18 13:04:55 +00:00
parent f7a51ce2ac
commit 69f13c4922
4 changed files with 108 additions and 14 deletions

View file

@ -22,8 +22,8 @@ stdenv.mkDerivation rec {
substituteInPlace kpartx/kpartx.rules --replace /sbin/kpartx $out/sbin/kpartx
substituteInPlace kpartx/kpartx_id --replace /sbin/dmsetup ${lvm2}/sbin/dmsetup
substituteInPlace libmultipath/defaults.h --replace /lib/udev/scsi_id ${udev}/libexec/scsi_id
substituteInPlace libmultipath/hwtable.c --replace /lib/udev/scsi_id ${udev}/libexec/scsi_id
substituteInPlace libmultipath/defaults.h --replace /lib/udev/scsi_id ${udev}/lib/udev/scsi_id
substituteInPlace libmultipath/hwtable.c --replace /lib/udev/scsi_id ${udev}/lib/udev/scsi_id
'';
meta = {

View file

@ -4,11 +4,11 @@
assert stdenv ? glibc;
stdenv.mkDerivation rec {
name = "udev-172";
name = "udev-173";
src = fetchurl {
url = "mirror://kernel/linux/utils/kernel/hotplug/${name}.tar.bz2";
sha256 = "0smxggvhhilcqcsi98fmk0nngzy1x8v6ibas609zysgza74rr5dq";
sha256 = "1bxadi4bi11v8ipzj22wknv8hsb0wgdb99bx3w9w33rgl4aq78bh";
};
buildInputs = [ gperf pkgconfig glib acl libusb usbutils ];
@ -16,7 +16,8 @@ stdenv.mkDerivation rec {
configureFlags =
''
--with-pci-ids-path=${pciutils}/share/pci.ids
--disable-introspection
--enable-udev_acl --enable-edd
--disable-introspection --libexecdir=$(out)/lib/udev
--with-firmware-path=/root/test-firmware:/var/run/current-system/firmware
'';
@ -29,20 +30,22 @@ stdenv.mkDerivation rec {
# write_net_rules is broken. Also, don't store the mutable
# persistant rules in /etc/udev/rules.d but in
# /var/lib/udev/rules.d.
for i in $out/libexec/write_cd_rules $out/libexec/write_net_rules; do
for i in $out/lib/udev/write_cd_rules $out/lib/udev/write_net_rules; do
substituteInPlace $i \
--replace /lib/udev $out/libexec \
--replace /lib/udev $out/lib/udev \
--replace /etc/udev/rules.d /var/lib/udev/rules.d
done
# Don't set PATH to /bin:/sbin; won't work in NixOS.
sed -e '/PATH=/d' -i $out/libexec/rule_generator.functions
sed -e '/PATH=/d' -i $out/lib/udev/rule_generator.functions
ln -s $out/lib/ConsoleKit $out/etc/ConsoleKit
ln -sv $out/lib/ConsoleKit $out/etc/ConsoleKit
rm -rf $out/share/gtk-doc
rm -frv $out/share/gtk-doc
'';
patches = [ ./custom-rules.patch ];
meta = {
homepage = http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html;
description = "Udev manages the /dev filesystem";

View file

@ -0,0 +1,91 @@
commit c49ec33ba0f1a7f11b188913bb4895360ced67f8
Author: Yury G. Kudryashov <urkud.urkud@gmail.com>
Date: Tue Aug 16 16:28:56 2011 +0400
Upstream considers presence of rules_dir=... in udev.conf as a very special case.
In particular, they disable /dev/.udev/*. Re-enable it.
diff --git a/udev/udev-rules.c b/udev/udev-rules.c
index 6bf2726..c1ae1f3 100644
--- a/udev/udev-rules.c
+++ b/udev/udev-rules.c
@@ -1812,6 +1812,7 @@ struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names)
struct udev_list file_list;
struct udev_list_entry *file_loop;
struct token end_token;
+ char runpathrules[UTIL_PATH_SIZE];
rules = calloc(1, sizeof(struct udev_rules));
if (rules == NULL)
@@ -1854,22 +1855,21 @@ struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names)
rules->trie_nodes_cur = 1;
if (udev_get_rules_path(udev) == NULL) {
- char filename[UTIL_PATH_SIZE];
/* /lib/udev -- default/package rules */
add_matching_files(udev, &file_list, LIBEXECDIR "/rules.d", ".rules");
/* /etc/udev -- system-specific/user/admin rules */
add_matching_files(udev, &file_list, SYSCONFDIR "/udev/rules.d", ".rules");
-
- /* /run/udev -- throw-away/temporary rules */
- util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/rules.d", NULL);
- add_matching_files(udev, &file_list, filename, ".rules");
} else {
/* custom rules files location for testing */
add_matching_files(udev, &file_list, udev_get_rules_path(udev), ".rules");
}
+ /* /run/udev -- throw-away/temporary rules */
+ util_strscpyl(runpathrules, sizeof(runpathrules), udev_get_run_path(udev), "/rules.d", NULL);
+ add_matching_files(udev, &file_list, runpathrules, ".rules");
+
/* add all filenames to the string buffer */
udev_list_entry_foreach(file_loop, udev_list_get_entry(&file_list)) {
const char *filename = udev_list_entry_get_value(file_loop);
diff --git a/udev/udevd.c b/udev/udevd.c
index f1a31e7..45d10b6 100644
--- a/udev/udevd.c
+++ b/udev/udevd.c
@@ -1198,6 +1198,8 @@ int main(int argc, char *argv[])
struct epoll_event ep_ctrl, ep_inotify, ep_signal, ep_netlink, ep_worker;
struct udev_ctrl_connection *ctrl_conn = NULL;
int rc = 1;
+ char filename[UTIL_PATH_SIZE];
+ struct stat statbuf;
udev = udev_new();
if (udev == NULL)
@@ -1480,23 +1482,21 @@ int main(int argc, char *argv[])
inotify_add_watch(fd_inotify, udev_get_rules_path(udev),
IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
} else {
- char filename[UTIL_PATH_SIZE];
- struct stat statbuf;
inotify_add_watch(fd_inotify, LIBEXECDIR "/rules.d",
IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
inotify_add_watch(fd_inotify, SYSCONFDIR "/udev/rules.d",
IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
+ }
- /* watch dynamic rules directory */
- util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/rules.d", NULL);
- if (stat(filename, &statbuf) != 0) {
- util_create_path(udev, filename);
- mkdir(filename, 0755);
- }
- inotify_add_watch(fd_inotify, filename,
- IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
+ /* watch dynamic rules directory */
+ util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/rules.d", NULL);
+ if (stat(filename, &statbuf) != 0) {
+ util_create_path(udev, filename);
+ mkdir(filename, 0755);
}
+ inotify_add_watch(fd_inotify, filename,
+ IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
udev_watch_restore(udev);
/* block and listen to all signals on signalfd */

View file

@ -5848,8 +5848,8 @@ let
};
udev145 = callPackage ../os-specific/linux/udev/145.nix { };
udev172 = callPackage ../os-specific/linux/udev/172.nix { };
udev = udev172;
udev173 = callPackage ../os-specific/linux/udev/173.nix { };
udev = pkgs.udev173;
udisks = callPackage ../os-specific/linux/udisks { };