diff options
author | Matthias Schwarzott <zzam@gentoo.org> | 2009-01-20 13:00:01 +0000 |
---|---|---|
committer | Matthias Schwarzott <zzam@gentoo.org> | 2009-01-20 13:00:01 +0000 |
commit | dc74ac9958105070a4e1b9aa8097d35c67e8efcc (patch) | |
tree | 549cc9949030096d4d48a466786584ba3870328c /sys-fs/udev/files | |
parent | Adding virtuals for dual-lifed modules that come with perl-5.10 (diff) | |
download | gentoo-2-dc74ac9958105070a4e1b9aa8097d35c67e8efcc.tar.gz gentoo-2-dc74ac9958105070a4e1b9aa8097d35c67e8efcc.tar.bz2 gentoo-2-dc74ac9958105070a4e1b9aa8097d35c67e8efcc.zip |
Version bumped. This raises kernel version for reliable udev usage to 2.6.20. Backported one patch. The upstream rule changes still need to be reviewed. For now keep using group uucp instead of dialout as suggested by upstream. Move init-script stuff into a subdir for FILESDIR. Small changes to shell-compat logic.
(Portage version: 2.1.6.6/cvs/Linux 2.6.27-gentoo-r1 i686)
Diffstat (limited to 'sys-fs/udev/files')
-rw-r--r-- | sys-fs/udev/files/136/shell-compat-KV.sh | 45 | ||||
-rw-r--r-- | sys-fs/udev/files/136/shell-compat-addon.sh | 43 | ||||
-rwxr-xr-x | sys-fs/udev/files/136/udev-dev-tarball.initd | 95 | ||||
-rwxr-xr-x | sys-fs/udev/files/136/udev-mount.initd | 101 | ||||
-rwxr-xr-x | sys-fs/udev/files/136/udev-postmount.initd | 23 | ||||
-rw-r--r-- | sys-fs/udev/files/136/udev-start.sh | 54 | ||||
-rw-r--r-- | sys-fs/udev/files/136/udev-stop.sh | 13 | ||||
-rw-r--r-- | sys-fs/udev/files/136/udev.confd | 27 | ||||
-rw-r--r-- | sys-fs/udev/files/136/udev.initd | 208 | ||||
-rw-r--r-- | sys-fs/udev/files/udev-136-fix-ide-cd-rule.diff | 21 |
10 files changed, 630 insertions, 0 deletions
diff --git a/sys-fs/udev/files/136/shell-compat-KV.sh b/sys-fs/udev/files/136/shell-compat-KV.sh new file mode 100644 index 000000000000..be74fe49e3d6 --- /dev/null +++ b/sys-fs/udev/files/136/shell-compat-KV.sh @@ -0,0 +1,45 @@ +# Copyright 1999-2008 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +# provides get_KV and KV_to_int as not all openrc-versions installed via ebuild have these + +cmd_exist() +{ + type "$1" >/dev/null 2>&1 +} + +# does exist in baselayout-1 +# does not exist in openrc, but is added by openrc-ebuild since some time +if ! cmd_exist KV_to_int; then + KV_to_int() { + [ -z $1 ] && return 1 + + local x=${1%%-*} + local KV_MAJOR=${x%%.*} + x=${x#*.} + local KV_MINOR=${x%%.*} + x=${x#*.} + local KV_MICRO=${x%%.*} + local KV_int=$((${KV_MAJOR} * 65536 + ${KV_MINOR} * 256 + ${KV_MICRO} )) + + # We make version 2.2.0 the minimum version we will handle as + # a sanity check ... if its less, we fail ... + [ "${KV_int}" -lt 131584 ] && return 1 + + echo "${KV_int}" + } +fi + +# same as KV_to_int +if ! cmd_exist get_KV; then + _RC_GET_KV_CACHE="" + get_KV() { + [ -z "${_RC_GET_KV_CACHE}" ] \ + && _RC_GET_KV_CACHE="$(uname -r)" + + echo "$(KV_to_int "${_RC_GET_KV_CACHE}")" + + return $? + } +fi + diff --git a/sys-fs/udev/files/136/shell-compat-addon.sh b/sys-fs/udev/files/136/shell-compat-addon.sh new file mode 100644 index 000000000000..7e684f4d58e2 --- /dev/null +++ b/sys-fs/udev/files/136/shell-compat-addon.sh @@ -0,0 +1,43 @@ +# Copyright 1999-2008 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +# functions that may not be defined, but are used by the udev-start and udev-stop addon +# used by baselayout-1 and openrc before version 0.4.0 + +cmd_exist() +{ + type "$1" >/dev/null 2>&1 +} + +# does not exist in baselayout-1, does exist in openrc +if ! cmd_exist yesno; then + yesno() { + [ -z "$1" ] && return 1 + case "$1" in + yes|Yes|YES) return 0 ;; + esac + return 1 + } +fi + +# does not exist in baselayout-1, does exist in openrc +if ! cmd_exist fstabinfo; then + fstabinfo() { + [ "$1" = "--quiet" ] && shift + local dir="$1" + + # only check RC_USE_FSTAB on baselayout-1 + yesno "${RC_USE_FSTAB}" || return 1 + + # check if entry is in /etc/fstab + local ret=$(gawk 'BEGIN { found="false"; } + $1 ~ "^#" { next } + $2 == "'$dir'" { found="true"; } + END { print found; } + ' /etc/fstab) + + "${ret}" + } +fi + + diff --git a/sys-fs/udev/files/136/udev-dev-tarball.initd b/sys-fs/udev/files/136/udev-dev-tarball.initd new file mode 100755 index 000000000000..2cdce4ff226b --- /dev/null +++ b/sys-fs/udev/files/136/udev-dev-tarball.initd @@ -0,0 +1,95 @@ +#!/sbin/runscript +# Copyright 1999-2008 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +description="Maintain a tarball of not udev managed device nodes" +[ -e /etc/conf.d/udev ] && . /etc/conf.d/udev + +rc_device_tarball=${rc_device_tarball:-${RC_DEVICE_TARBALL:-NO}} +device_tarball=/lib/udev/state/devices.tar.bz2 + +depend() { + if [ -f /etc/init.d/sysfs ]; then + need udev-mount + fi +} + +start() +{ + _start +} + +_start() { + if yesno "${rc_device_tarball}" && \ + [ -s "${device_tarball}" ] + then + ebegin "Populating /dev with saved device nodes" + tar -jxpf "${device_tarball}" -C /dev + eend $? + fi +} + +stop() { + if [ -e /dev/.devfsd ] || [ ! -e /dev/.udev ] || [ ! -z "${CDBOOT}" ] || \ + ! yesno "${rc_device_tarball}" || \ + ! touch "${device_tarball}" 2>/dev/null + then + return 0 + fi + + ebegin "Saving device nodes" + # Handle our temp files + save_tmp_base=/tmp/udev.savedevices."$$" + devices_udev="${save_tmp_base}"/devices.udev + devices_real="${save_tmp_base}"/devices.real + devices_totar="${save_tmp_base}"/devices.totar + device_tmp_tarball="${save_tmp_base}"/devices + + rm -rf "${save_tmp_base}" + mkdir "${save_tmp_base}" + touch "${devices_udev}" "${devices_real}" \ + "${devices_totar}" "${device_tmp_tarball}" + + if [ -f "${devices_udev}" -a -f "${devices_real}" -a \ + -f "${devices_totar}" -a -f "${device_tmp_tarball}" ] + then + cd /dev + # Find all devices, but ignore .udev directory + find . -xdev -type b -or -type c -or -type l | \ + cut -d/ -f2- | \ + grep -v ^\\.udev >"${devices_real}" + + # Figure out what udev created + udevadm info --export-db | sed -ne 's,^[SN]: \(.*\),\1,p' >"${devices_udev}" + # These ones we also do not want in there + for x in MAKEDEV core fd initctl pts shm stderr stdin stdout root; do + echo "${x}" >> "${devices_udev}" + done + if [ -d /lib/udev/devices ]; then + cd /lib/udev/devices + find . -xdev -type b -or -type c -or -type l | \ + cut -d/ -f2- >> "${devices_udev}" + cd /dev + fi + + fgrep -x -v -f "${devices_udev}" "${devices_real}" > "${devices_totar}" + + # Now only tarball those not created by udev if we have any + if [ -s "${devices_totar}" ]; then + # we dont want to descend into mounted filesystems (e.g. devpts) + # looking up username may involve NIS/network + # and net may be down + tar --one-file-system --numeric-owner \ + -jcpf "${device_tmp_tarball}" -T "${devices_totar}" + mv -f "${device_tmp_tarball}" "${device_tarball}" + else + rm -f "${device_tarball}" + fi + eend 0 + else + eend 1 "Could not create temporary files!" + fi + + rm -rf "${save_tmp_base}" +} + diff --git a/sys-fs/udev/files/136/udev-mount.initd b/sys-fs/udev/files/136/udev-mount.initd new file mode 100755 index 000000000000..c41fa0781a4c --- /dev/null +++ b/sys-fs/udev/files/136/udev-mount.initd @@ -0,0 +1,101 @@ +#!/sbin/runscript +# Copyright 1999-2008 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +description="Mount tmpfs on /dev" +[ -e /etc/conf.d/udev ] && . /etc/conf.d/udev + +# get_KV and KV_to_int +. /lib/udev/shell-compat-KV.sh + +# FIXME +# Instead of this script testing kernel version, udev itself should +# Maybe something like udevd --test || exit $? +check_kernel() +{ + if [ $(get_KV) -lt $(KV_to_int '%KV_MIN%') ]; then + eerror "Your kernel is too old to work with this version of udev." + eerror "Current udev only supports Linux kernel %KV_MIN% and newer." + return 1 + fi + if [ $(get_KV) -lt $(KV_to_int '%KV_MIN_RELIABLE%') ]; then + ewarn "You need at least Linux kernel %KV_MIN_RELIABLE% for reliable operation of udev." + fi + return 0 +} + + +mount_dev_directory() +{ + # No options are processed here as they should all be in /etc/fstab + ebegin "Mounting /dev" + if fstabinfo --quiet /dev; then + mount -n /dev + else + # Some devices require exec, Bug #92921 + mount -n -t tmpfs -o "exec,nosuid,mode=0755,size=10M" udev /dev + fi + eend $? +} + +seed_dev() +{ + # Seed /dev with some things that we know we need + + # creating /dev/console, /dev/tty and /dev/tty1 to be able to write + # to $CONSOLE with/without bootsplash before udevd creates it + [ -c /dev/console ] || mknod /dev/console c 5 1 + [ -c /dev/tty1 ] || mknod /dev/tty1 c 4 1 + [ -c /dev/tty ] || mknod /dev/tty c 5 0 + + # udevd will dup its stdin/stdout/stderr to /dev/null + # and we do not want a file which gets buffered in ram + [ -c /dev/null ] || mknod /dev/null c 1 3 + + # copy over any persistant things + if [ -d /lib/udev/devices ]; then + cp -RPp /lib/udev/devices/* /dev 2>/dev/null + fi + + # Not provided by sysfs but needed + ln -snf /proc/self/fd /dev/fd + ln -snf fd/0 /dev/stdin + ln -snf fd/1 /dev/stdout + ln -snf fd/2 /dev/stderr + [ -e /proc/kcore ] && ln -snf /proc/kcore /dev/core + + # Create problematic directories + mkdir -p /dev/pts /dev/shm + return 0 +} + + +start() +{ + # do not run this on too old baselayout - udev-addon is already loaded! + if [ ! -f /etc/init.d/sysfs ]; then + eerror "The $SVCNAME init-script is written for baselayout-2!" + eerror "Please do not use it with baselayout-1!". + return 1 + fi + + _start +} + +_start() +{ + check_kernel || return 1 + mount_dev_directory || return 1 + + # Selinux lovin; /selinux should be mounted by selinux-patched init + if [ -x /sbin/restorecon -a -c /selinux/null ]; then + restorecon /dev > /selinux/null + fi + + # make sure it exists + mkdir -p /dev/.udev + + seed_dev + + return 0 +} diff --git a/sys-fs/udev/files/136/udev-postmount.initd b/sys-fs/udev/files/136/udev-postmount.initd new file mode 100755 index 000000000000..a640e93de132 --- /dev/null +++ b/sys-fs/udev/files/136/udev-postmount.initd @@ -0,0 +1,23 @@ +#!/sbin/runscript +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-fs/udev/files/136/udev-postmount.initd,v 1.1 2009/01/20 13:00:01 zzam Exp $ + +depend() { + need localmount +} + +start() { + # check if this system uses udev + [ -d /dev/.udev/ ] || return 0 + + # store persistent-rules that got created while booting + # when / was still read-only + /lib/udev/move_tmp_persistent_rules.sh +} + +stop() { + : +} + +# vim:ts=4 diff --git a/sys-fs/udev/files/136/udev-start.sh b/sys-fs/udev/files/136/udev-start.sh new file mode 100644 index 000000000000..8bf098dee1b3 --- /dev/null +++ b/sys-fs/udev/files/136/udev-start.sh @@ -0,0 +1,54 @@ +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +[ -e /etc/conf.d/udev ] && . /etc/conf.d/udev + +. /lib/udev/shell-compat-addon.sh + +compat_volume_nodes() +{ + # Only do this for baselayout-1* + # This check is likely to get false positives due to some multilib stuff, + # but that should not matter, as this can only happen on old openrc versions + # no longer available as ebuilds. + if [ ! -e /lib/librc.so ]; then + + # Create nodes that udev can't + [ -x /sbin/lvm ] && \ + /sbin/lvm vgscan -P --mknodes --ignorelockingfailure &>/dev/null + # Running evms_activate on a LiveCD causes lots of headaches + [ -z "${CDBOOT}" -a -x /sbin/evms_activate ] && \ + /sbin/evms_activate -q &>/dev/null + fi +} + +start_initd() +{ + ( + . /etc/init.d/"$1" + _start + ) +} + +# mount tmpfs on /dev +start_initd udev-mount || exit 1 + +# Create a file so that our rc system knows it's still in sysinit. +# Existance means init scripts will not directly run. +# rc will remove the file when done with sysinit. +# this is no longer needed as of openrc-0.4.0 +touch /dev/.rcsysinit + +# load device tarball +start_initd udev-dev-tarball + +# run udevd +start_initd udev || exit 1 + +compat_volume_nodes + +# inject into boot runlevel +IN_HOTPLUG=1 /etc/init.d/udev-postmount start >/dev/null 2>&1 + +# udev started successfully +exit 0 diff --git a/sys-fs/udev/files/136/udev-stop.sh b/sys-fs/udev/files/136/udev-stop.sh new file mode 100644 index 000000000000..47e095607f0a --- /dev/null +++ b/sys-fs/udev/files/136/udev-stop.sh @@ -0,0 +1,13 @@ +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +# for function yesno +. /lib/udev/shell-compat-addon.sh + +# store device tarball +( + . /etc/init.d/udev-dev-tarball + stop +) + +exit 0 diff --git a/sys-fs/udev/files/136/udev.confd b/sys-fs/udev/files/136/udev.confd new file mode 100644 index 000000000000..4abfa911674d --- /dev/null +++ b/sys-fs/udev/files/136/udev.confd @@ -0,0 +1,27 @@ +# /etc/conf.d/udev: config file for udev + +# We discourage to disable persistent-net!! +# this may lead to random interface naming + +# Disable adding new rules for persistent-net +persistent_net_disable="no" + +# Set to "yes" if you want to save /dev to a tarball on shutdown +# and restore it on startup. This is useful if you have a lot of +# custom device nodes that udev does not handle/know about. +# +# As this option is fragile, we recommend you +# to create your devices in /lib/udev/devices. +# These will be copied to /dev on boot. +#rc_device_tarball="NO" + +# udev can trigger coldplug events which cause services to start and +# kernel modules to be loaded. +# Services are deferred to start in the boot runlevel. +# Set rc_coldplug="NO" if you don't want this. +# If you want module coldplugging but not coldplugging of services then you +# can disable service coldplugging in baselayout/openrc config files. +# The setting is named different in different versions. +# in /etc/rc.conf: rc_hotplug="!*" or +# in /etc/conf.d/rc: rc_plug_services="!*" +#rc_coldplug="YES" diff --git a/sys-fs/udev/files/136/udev.initd b/sys-fs/udev/files/136/udev.initd new file mode 100644 index 000000000000..1707ccea7737 --- /dev/null +++ b/sys-fs/udev/files/136/udev.initd @@ -0,0 +1,208 @@ +#!/sbin/runscript +# Copyright 1999-2008 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +description="Run udevd and create the device-nodes" + +[ -e /etc/udev/udev.conf ] && . /etc/udev/udev.conf + +rc_coldplug=${rc_coldplug:-${RC_COLDPLUG:-YES}} + +depend() +{ + if [ -f /etc/init.d/sysfs ]; then + # require new enough openrc with sysinit being extra runlevel + # on linux we just check if sysfs init-script exists + # this is to silence out ugly warnings about not-existing sysfs script + provide dev + need sysfs udev-mount udev-dev-tarball + before checkfs fsck + + # udev does not work inside vservers + keyword novserver + fi +} + +cleanup() +{ + # fail more gracely and not leave udevd running + start-stop-daemon --stop --exec /sbin/udevd + exit 1 +} + +disable_hotplug_agent() +{ + if [ -e /proc/sys/kernel/hotplug ]; then + echo "" >/proc/sys/kernel/hotplug + fi +} + +root_link() +{ + /lib/udev/write_root_link_rule +} + +persistent_net_switch() +{ + # this function disables rules files + # by creating new files with the same name + # in a temp rules directory with higher priority + local d=/dev/.udev/rules.d + if yesno "${persistent_net_disable:-no}"; then + mkdir -p "$d" + echo "# This file disables persistent-net due to /etc/conf.d/udev" \ + > "$d"/75-persistent-net-generator.rules + fi +} + +start_udevd() +{ + # load unix domain sockets if built as module, Bug #221253 + if [ -e /proc/modules ] ; then + modprobe -q unix 2>/dev/null + fi + ebegin "Starting udevd" + start-stop-daemon --start --exec /sbin/udevd -- --daemon + eend $? +} + +# populate /dev with devices already found by the kernel +populate_dev() +{ + if get_bootparam "nocoldplug" ; then + rc_coldplug="NO" + ewarn "Skipping udev coldplug as requested in kernel cmdline" + fi + + ebegin "Populating /dev with existing devices through uevents" + if yesno "${rc_coldplug}"; then + udevadm trigger + else + # Do not run any init-scripts, Bug #206518 + udevadm control --env do_not_run_plug_service=1 + + # only create device nodes + udevadm trigger --attr-match=dev + + # run persistent-net stuff, bug 191466 + udevadm trigger --subsystem-match=net + fi + eend $? + + ebegin "Waiting for uevents to be processed" + udevadm settle --timeout=60 + eend $? + + udevadm control --env do_not_run_plug_service= + return 0 +} + +display_hotplugged_services() { + local svcfile= svc= services= + for svcfile in "${RC_SVCDIR}"/hotplugged/*; do + svc="${svcfile##*/}" + [ -x "${svcfile}" ] || continue + + # do not display this - better: do only inject it later :) + [ "$svc" = "udev-postmount" ] && continue + + services="${services} ${svc}" + done + [ -n "${services}" ] && einfo "Device initiated services:${HILITE}${services}${NORMAL}" +} + +inject_postmount_initd() { + if ! mark_service_hotplugged udev-postmount; then + IN_HOTPLUG=1 /etc/init.d/udev-postmount start >/dev/null 2>&1 + fi + #einfo "Injected udev-postmount service" +} + +check_persistent_net() +{ + # check if there are problems with persistent-net + local syspath= devs= problem=false + for syspath in /sys/class/net/*_rename*; do + if [ -d "${syspath}" ]; then + devs="${devs} ${syspath##*/}" + problem=true + fi + done + + ${problem} || return 0 + + eerror "UDEV: Your system has a problem assigning persistent names" + eerror "to these network interfaces: ${devs}" + + einfo "Checking persistent-net rules:" + # the sed-expression lists all duplicate lines + # from the input, like "uniq -d" does, but uniq + # is installed into /usr/bin and not available at boot. + dups=$( + RULES_FILE='/etc/udev/rules.d/70-persistent-net.rules' + . /lib/udev/rule_generator.functions + find_all_rules 'NAME=' '.*' | \ + tr ' ' '\n' | \ + sort | \ + sed '$!N; s/^\(.*\)\n\1$/\1/; t; D' + ) + if [ -n "${dups}" ]; then + ewarn "The rules create multiple entries assigning these names:" + eindent + ewarn "${dups}" + eoutdent + else + ewarn "Found no duplicate names in persistent-net rules," + ewarn "there must be some other problem!" + fi + return 1 +} + +check_udev_works() +{ + # should exist on every system, else udev failed + if [ ! -e /dev/zero ]; then + eerror "Assuming udev failed somewhere, as /dev/zero does not exist." + return 1 + fi + return 0 +} + +start() +{ + # do not run this on old baselayout where udev-addon gets loaded + if [ ! -f /etc/init.d/sysfs ]; then + eerror "The $SVCNAME init-script is written for baselayout-2!" + eerror "Please do not use it with baselayout-1!". + return 1 + fi + + _start + + display_hotplugged_services + + inject_postmount_initd +} + +_start() +{ + root_link + persistent_net_switch + + disable_hotplug_agent + start_udevd || cleanup + populate_dev || cleanup + + check_persistent_net + + check_udev_works || cleanup + + return 0 +} + +stop() { + ebegin "Stopping udevd" + start-stop-daemon --stop --exec /sbin/udevd + eend $? +} + diff --git a/sys-fs/udev/files/udev-136-fix-ide-cd-rule.diff b/sys-fs/udev/files/udev-136-fix-ide-cd-rule.diff new file mode 100644 index 000000000000..1ceaa44cd030 --- /dev/null +++ b/sys-fs/udev/files/udev-136-fix-ide-cd-rule.diff @@ -0,0 +1,21 @@ +commit 18cff5c3b2e3591fa46107288ea2d7026a15ccf3 +Author: Kay Sievers <kay.sievers@vrfy.org> +Date: Sat Jan 10 17:44:09 2009 +0100 + + rules: fix typo in ide cd rule + + Thanks to Scott, who found that. + +diff --git a/rules/rules.d/50-udev-default.rules b/rules/rules.d/50-udev-default.rules +index 119941b..7730f0d 100644 +--- a/rules/rules.d/50-udev-default.rules ++++ b/rules/rules.d/50-udev-default.rules +@@ -68,7 +68,7 @@ KERNEL=="hd*", SUBSYSTEMS=="ide", ATTRS{media}=="floppy", OPTIONS+="all_partitio + + # cdrom + SUBSYSTEM=="block", KERNEL=="sr[0-9]*", SYMLINK+="scd%n", GROUP="cdrom" +-SUBSYSTEM=="block", KERNEL=="hd[0-9]*", SUBSYSTEMS=="ide", ATTRS{media}=="cdrom", GROUP="cdrom" ++SUBSYSTEM=="block", KERNEL=="hd*", SUBSYSTEMS=="ide", ATTRS{media}=="cdrom", GROUP="cdrom" + SUBSYSTEMS=="scsi", ATTRS{type}=="4|5", GROUP="cdrom" + KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/%k", GROUP="cdrom" + KERNEL=="pktcdvd", NAME="pktcdvd/control", GROUP="cdrom" |