--- trunk/udev/udev.rc 2012/04/02 13:08:49 1725 +++ trunk/udev/udev.rc 2012/06/26 17:11:31 1813 @@ -1,5 +1,5 @@ #!/bin/bash -# $Header: /root/magellan-cvs/src/udev/udev.rc,v 1.2 2010-08-18 00:57:31 niro Exp $ +# $Id$ udev_version() { @@ -8,17 +8,22 @@ if [[ -x /sbin/udev ]] then version=$(/sbin/udev -V) - # We need it without a leading '0', else bash do the wrong thing - version=${version##0} - # Older udev's will print nothing - [[ -z ${version} ]] && version=0 elif [[ -x /sbin/udevd ]] then version=$(/sbin/udevd --version) - version=${version##0} - [[ -z ${version} ]] && version=0 + elif [[ -x /lib/udev/udevd ]] + then + version=$(/lib/udev/udevd --version) + elif [[ -x /usr/lib/systemd/systemd-udevd ]] + then + version=$(/usr/lib/systemd/systemd-udev --version) fi + # We need it without a leading '0', else bash do the wrong thing + version=${version##0} + # Older udev's will print nothing + [[ -z ${version} ]] && version=0 + echo "${version}" } @@ -33,26 +38,26 @@ rc_print " Populating /dev with existing devices through uevents ..." if [[ ${RC_COLDPLUG} = yes ]] then - /sbin/udevadm trigger + udevadm trigger else # do not run any init-scripts - /sbin/udevadm control --env do_not_run_plug_service=1 + udevadm control --env do_not_run_plug_service=1 # only create device nodes - /sbin/udevadm trigger --attr-match=dev + udevadm trigger --attr-match=dev # run persistent-net stuff - /sbin/udevadm trigger --subsystem-match=net + udevadm trigger --subsystem-match=net fi evaluate_retval # loop until everything is finished rc_print " Letting udev process events ..." - /sbin/udevadm settle --timeout=60 + udevadm settle --timeout=60 evaluate_retval # unset this variable - /sbin/udevadm control --env do_not_run_plug_service= + udevadm control --env do_not_run_plug_service= rm -f /dev/.udev_populate return 0 @@ -92,6 +97,24 @@ # main function start_devicemanager() { + local udev_prefix="" + local udev_daemon="" + + # get the right daemon and prefix for newer udev/systemd-udev installations + if [ -x /sbin/udevd ] + then + udev_daemon="/sbin/udevd" + udev_prefix="" + elif [ -x /lib/udev/udevd ] + then + udev_daemon="/lib/udev/udevd" + udev_prefix="" + elif [ -x /usr/lib/systemd/systemd-udevd ] + then + udev_daemon="/usr/lib/systemd/systemd-udevd" + udev_prefix="/usr" + fi + # check if /dev/console exists outside tmpfs [ -c /dev/console ] ; need_redirect=$? @@ -109,13 +132,16 @@ evaluate_retval fi - # if a device tarball exists load it and if it is activated + # if a device tarball exists load it but only if it is activated in the config rc_print "Configurating system to use udev ..." if [[ ${RC_DEVICE_TARBALL} = yes ]] then - rc_print " Populating /dev with saved device nodes ..." - tar -jxpf /lib/udev/state/devices.tar.bz2 -C /dev - evaluate_retval + if [[ -f ${udev_prefix}/lib/udev/state/devices.tar.bz2 ]] + then + rc_print " Populating /dev with saved device nodes ..." + tar -jxpf ${udev_prefix}/lib/udev/state/devices.tar.bz2 -C /dev + evaluate_retval + fi fi # other needed device nodes with udev @@ -141,14 +167,18 @@ if [ ${need_redirect} -eq 1 ] then # we need to open fds 0 1 2 - start-stop-daemon --start --exec /sbin/udevd -- --daemon /dev/console 2>/dev/console + start-stop-daemon --start --exec "${udev_daemon}" -- --daemon /dev/console 2>/dev/console else - start-stop-daemon --start --exec /sbin/udevd -- --daemon + start-stop-daemon --start --exec "${udev_daemon}" -- --daemon fi evaluate_retval # write root_link rule - /lib/udev/write_root_link_rule + if [ -x ${udev_prefix}/lib/udev/write_root_link_rule ] + then + ${udev_prefix}/lib/udev/write_root_link_rule + fi + # populate udev device nodes populate_udev @@ -165,7 +195,21 @@ stop_devicemanager() { + local udev_daemon="" + + # get the right daemon and prefix for newer udev/systemd-udev installations + if [ -x /sbin/udevd ] + then + udev_daemon="/sbin/udevd" + elif [ -x /lib/udev/udevd ] + then + udev_daemon="/lib/udev/udevd" + elif [ -x /usr/lib/systemd/systemd-udevd ] + then + udev_daemon="/usr/lib/systemd/systemd-udevd" + fi + rc_print "Stopping udevd daemon ..." - start-stop-daemon --stop --exec /sbin/udevd + start-stop-daemon --stop --exec "${udev_daemon}" evaluate_retval }