From 4f2d7949f03e1c198bc888f2d05f421d35c57e21 Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Mon, 9 Oct 2017 18:53:29 +0100 Subject: reinit the tree, so we can have metadata --- sys-fs/eudev/files/40-gentoo.rules | 10 ++++ sys-fs/eudev/files/eudev-exclude-MD.patch | 53 +++++++++++++++++++++ sys-fs/eudev/files/eudev-fix-disk-by-id.patch | 43 +++++++++++++++++ sys-fs/eudev/files/eudev-fix-selinux-headers.patch | 32 +++++++++++++ sys-fs/eudev/files/eudev-fix-selinux-linking.patch | 30 ++++++++++++ sys-fs/eudev/files/udev-postmount | 55 ++++++++++++++++++++++ 6 files changed, 223 insertions(+) create mode 100644 sys-fs/eudev/files/40-gentoo.rules create mode 100644 sys-fs/eudev/files/eudev-exclude-MD.patch create mode 100644 sys-fs/eudev/files/eudev-fix-disk-by-id.patch create mode 100644 sys-fs/eudev/files/eudev-fix-selinux-headers.patch create mode 100644 sys-fs/eudev/files/eudev-fix-selinux-linking.patch create mode 100644 sys-fs/eudev/files/udev-postmount (limited to 'sys-fs/eudev/files') diff --git a/sys-fs/eudev/files/40-gentoo.rules b/sys-fs/eudev/files/40-gentoo.rules new file mode 100644 index 000000000000..365c6ea0d441 --- /dev/null +++ b/sys-fs/eudev/files/40-gentoo.rules @@ -0,0 +1,10 @@ +# do not edit this file, it will be overwritten on update + +# Propably unrequired, check how it is with OSS/OSS4, then remove +SUBSYSTEM=="snd", GROUP="audio" + +# Gentoo specific usb group +SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GROUP="usb" + +# Keep this for Linux 2.6.32 support wrt #457868 +SUBSYSTEM=="mem", KERNEL=="null|zero|full|random|urandom", MODE="0666" diff --git a/sys-fs/eudev/files/eudev-exclude-MD.patch b/sys-fs/eudev/files/eudev-exclude-MD.patch new file mode 100644 index 000000000000..d56026168809 --- /dev/null +++ b/sys-fs/eudev/files/eudev-exclude-MD.patch @@ -0,0 +1,53 @@ +From 2e5b17d01347d3c3118be2b8ad63d20415dbb1f0 Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Thu, 24 Jul 2014 23:37:35 +0200 +Subject: [PATCH] udev: exclude MD from block device ownership event locking + +MD instantiates devices at open(). This is incomptible with the +locking logic, as the "change" event emitted when stopping a +device will bring it back. +--- + src/udev/udevd.c | 23 +++++++---------------- + 1 file changed, 7 insertions(+), 16 deletions(-) + +diff --git a/src/udev/udevd.c b/src/udev/udevd.c +index a45d324..db935d6 100644 +--- a/src/udev/udevd.c ++++ b/src/udev/udevd.c +@@ -285,26 +285,17 @@ static void worker_new(struct event *event) + udev_event->exec_delay = exec_delay; + + /* +- * Take a "read lock" on the device node; this establishes ++ * Take a shared lock on the device node; this establishes + * a concept of device "ownership" to serialize device +- * access. External processes holding a "write lock" will ++ * access. External processes holding an exclusive lock will + * cause udev to skip the event handling; in the case udev +- * acquired the lock, the external process will block until ++ * acquired the lock, the external process can block until + * udev has finished its event handling. + */ +- +- /* +- * since we make check - device seems unused - we try +- * ioctl to deactivate - and device is found to be opened +- * sure, you try to take a write lock +- * if you get it udev is out +- * if you can't get it, udev is busy +- * we cannot deactivate openned device (as it is in-use) +- * maybe we should just exclude dm from that thing entirely +- * IMHO this sounds like a good plan for this moment +- */ +- if (streq_ptr("block", udev_device_get_subsystem(dev)) && +- !startswith(udev_device_get_sysname(dev), "dm-")) { ++ if (!streq_ptr(udev_device_get_action(dev), "remove") && ++ streq_ptr("block", udev_device_get_subsystem(dev)) && ++ !startswith(udev_device_get_sysname(dev), "dm-") && ++ !startswith(udev_device_get_sysname(dev), "md")) { + struct udev_device *d = dev; + + if (streq_ptr("partition", udev_device_get_devtype(d))) +-- +1.8.5.5 + diff --git a/sys-fs/eudev/files/eudev-fix-disk-by-id.patch b/sys-fs/eudev/files/eudev-fix-disk-by-id.patch new file mode 100644 index 000000000000..07bc0c518c62 --- /dev/null +++ b/sys-fs/eudev/files/eudev-fix-disk-by-id.patch @@ -0,0 +1,43 @@ +diff -ruN eudev-3.2.2-orig/rules/60-persistent-storage.rules eudev-3.2.2-new/rules/60-persistent-storage.rules +--- eudev-3.2.2-orig/rules/60-persistent-storage.rules 2016-12-11 16:41:58.000000000 +0100 ++++ eudev-3.2.2-new/rules/60-persistent-storage.rules 2017-04-26 23:14:04.197109882 +0200 +@@ -83,6 +83,9 @@ + # by-id (World Wide Name) + ENV{DEVTYPE}=="disk", ENV{ID_WWN_WITH_EXTENSION}=="?*", SYMLINK+="disk/by-id/wwn-$env{ID_WWN_WITH_EXTENSION}" + ENV{DEVTYPE}=="partition", ENV{ID_WWN_WITH_EXTENSION}=="?*", SYMLINK+="disk/by-id/wwn-$env{ID_WWN_WITH_EXTENSION}-part%n" ++#(Temporary) Compatibility rule for old broken WWNs in case some uses them: ++ENV{DEVTYPE}=="disk", ENV{ID_WWN_WITH_EXTENSION_REVERSED_DO_NOT_USE}=="?*", SYMLINK+="disk/by-id/wwn-$env{ID_WWN_WITH_EXTENSION_REVERSED_DO_NOT_USE}" ++ENV{DEVTYPE}=="partition", ENV{ID_WWN_WITH_EXTENSION_REVERSED_DO_NOT_USE}=="?*", SYMLINK+="disk/by-id/wwn-$env{ID_WWN_WITH_EXTENSION_REVERSED_DO_NOT_USE}-part%n" + + # by-partlabel/by-partuuid links (partition metadata) + ENV{ID_PART_ENTRY_UUID}=="?*", SYMLINK+="disk/by-partuuid/$env{ID_PART_ENTRY_UUID}" +diff -ruN eudev-3.2.2-orig/src/ata_id/ata_id.c eudev-3.2.2-new/src/ata_id/ata_id.c +--- eudev-3.2.2-orig/src/ata_id/ata_id.c 2016-11-17 22:14:19.000000000 +0100 ++++ eudev-3.2.2-new/src/ata_id/ata_id.c 2017-04-26 23:18:51.116127146 +0200 +@@ -645,10 +645,22 @@ + * All other values are reserved. + */ + word = identify.wyde[108]; +- if ((word & 0xf000) == 0x5000) +- printf("ID_WWN=0x%1$"PRIu64"x\n" +- "ID_WWN_WITH_EXTENSION=0x%1$"PRIu64"x\n", +- identify.octa[108/4]); ++ if ((word & 0xf000) == 0x5000){ ++ uint64_t wwn; ++ ++ wwn = identify.wyde[108]; ++ wwn <<= 16; ++ wwn |= identify.wyde[109]; ++ wwn <<= 16; ++ wwn |= identify.wyde[110]; ++ wwn <<= 16; ++ wwn |= identify.wyde[111]; /* Could possibly done nicer ? */ ++ printf("ID_WWN=0x%1$" PRIx64 "\n" ++ "ID_WWN_WITH_EXTENSION=0x%1$" PRIx64 "\n", ++ wwn); ++ printf("ID_WWN_WITH_EXTENSION_REVERSED_DO_NOT_USE=0x%" PRIu64 "x\n", ++ identify.octa[108/4]); ++ } + + /* from Linux's include/linux/ata.h */ + if (identify.wyde[0] == 0x848a || diff --git a/sys-fs/eudev/files/eudev-fix-selinux-headers.patch b/sys-fs/eudev/files/eudev-fix-selinux-headers.patch new file mode 100644 index 000000000000..1d1d8dcc236f --- /dev/null +++ b/sys-fs/eudev/files/eudev-fix-selinux-headers.patch @@ -0,0 +1,32 @@ +From 361aa273d6fedda161c14b24302f009a58331693 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Amadeusz=20S=C5=82awi=C5=84ski?= +Date: Tue, 2 Sep 2014 21:20:24 +0200 +Subject: [PATCH] fix SELINUX build +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Amadeusz Sławiński +--- + src/shared/label.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/shared/label.c b/src/shared/label.c +index 3c6277a..e674241 100644 +--- a/src/shared/label.c ++++ b/src/shared/label.c +@@ -23,6 +23,11 @@ + #include + #include + ++#ifdef HAVE_SELINUX ++#include ++#include ++#endif ++ + #include "label.h" + #include "util.h" + #include "path-util.h" +-- +2.1.0 + diff --git a/sys-fs/eudev/files/eudev-fix-selinux-linking.patch b/sys-fs/eudev/files/eudev-fix-selinux-linking.patch new file mode 100644 index 000000000000..6a5e05bcaf1e --- /dev/null +++ b/sys-fs/eudev/files/eudev-fix-selinux-linking.patch @@ -0,0 +1,30 @@ +From e7f7217b9b9dbb3304116eae2b0ad90c84ede034 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Amadeusz=20S=C5=82awi=C5=84ski?= +Date: Wed, 3 Sep 2014 11:01:31 +0200 +Subject: [PATCH] link libudev against SELINUX +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Amadeusz Sławiński +--- + src/libudev/Makefile.am | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/libudev/Makefile.am b/src/libudev/Makefile.am +index 868a9fc..72e43bc 100644 +--- a/src/libudev/Makefile.am ++++ b/src/libudev/Makefile.am +@@ -54,7 +54,8 @@ libudev_la_LDFLAGS = \ + -Wl,--version-script=$(top_srcdir)/src/libudev/libudev.sym + + libudev_la_LIBADD = \ +- $(top_builddir)/src/shared/libudev_shared.la ++ $(top_builddir)/src/shared/libudev_shared.la \ ++ $(SELINUX_LIBS) + + libudev_private_la_SOURCES = \ + $(libudev_la_SOURCES) \ +-- +2.1.0 + diff --git a/sys-fs/eudev/files/udev-postmount b/sys-fs/eudev/files/udev-postmount new file mode 100644 index 000000000000..f1f94f48902a --- /dev/null +++ b/sys-fs/eudev/files/udev-postmount @@ -0,0 +1,55 @@ +#!/sbin/openrc-run +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +depend() +{ + need localmount + keyword -vserver -lxc +} + +dir_writeable() +{ + touch "$1"/.test.$$ 2>/dev/null && rm "$1"/.test.$$ +} + +# store persistent-rules that got created while booting +# when / was still read-only +store_persistent_rules() +{ + # create /etc/udev/rules.d if it does not exist and /etc/udev is writable + [ -d /etc/udev/rules.d ] || \ + dir_writeable /etc/udev && \ + mkdir -p /etc/udev/rules.d + + # only continue if rules-directory is writable + dir_writeable /etc/udev/rules.d || return 0 + + local file dest + for file in /run/udev/tmp-rules--*; do + dest=${file##*tmp-rules--} + [ "$dest" = '*' ] && break + type=${dest##70-persistent-} + type=${type%%.rules} + ebegin "Saving udev persistent ${type} rules to /etc/udev/rules.d" + cat "$file" >> /etc/udev/rules.d/"$dest" && rm -f "$file" + eend $? "Failed moving persistent rules!" + done +} + +start() +{ + # check if this system uses udev + [ -d /run/udev ] || return 0 + + # store persistent-rules that got created while booting + # when / was still read-only + store_persistent_rules +} + +stop() +{ + return 0 +} + +# vim:ts=4 -- cgit v1.2.3