From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rich Turner Date: Thu, 13 Jul 2006 22:06:23 +0000 Subject: Re: udevstart v udevtrigger Message-Id: <200607131506.24667.rich@storix.com> List-Id: References: <200607131359.39003.rich@storix.com> In-Reply-To: <200607131359.39003.rich@storix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: linux-hotplug@vger.kernel.org we use udev when we perform a bare-metal restore of a system from a backup (if the system that we created boot media from has it available). we use udev to create device nodes in our boot media environment only. once the system is rebuilt then the system's original udev support is used. our only support requirement is that the system is running kernel 2.4 or later. granted udev requires 2.6 so those systems are the only ones we are discussing. in short: we create the system installation boot media and include the following udev-related files on the media: udev udevstart udevd (only if udev is not available and there is udevstart) /etc/udev/* we use udev by running udevstart if we have udev command. or we start udevd if we do not have the udev command and then run udevstart. this is creating all necessary device nodes. i have not tested this yet, but my thoughts are to add udevtrigger to the boot media. then if there is not a udevstart command create a link udevstart->udevtrigger. that way i will not have to make changes everywhere else in the software where i do run udevstart. i guess the question is can i treat udevstart and udevtrigger as the same command? will udevtrigger provide me with the same results as udevstart? On Thursday 13 July 2006 14:29, Greg KH wrote: > On Thu, Jul 13, 2006 at 01:59:37PM -0700, Rich Turner wrote: > > i am doing some testing with SLES10_GMC and have noticed that there is no > > longer a udevstart command. or i should say that SLES10 does not include > > the udevstart command. it looks for the most part that where udevstart > > used to be used udevtrigger is now being used. > > > > i now see from the changelog that udev and udevstart programs are no > > longer part of the base install. > > > > what is the difference between udevstart and udevtrigger? > > Older kernels want to use udevstart, newer ones, with the uevent sysfs > file, can use udevtrigger, which is much simpler. > > > if i have the udev command and i run udevtrigger would i expect the same > > results as running udevstart while having the udev command (assuming that > > udevd is not running)? > > Why would you ever run these? Only the startup code needs to. > > > is there any reason that i can not use the udevtrigger command everywhere > > i used to use udevstart? my thoughts are that i will create a link > > (udevstart->udevtrigger) if i have the udevtrigger command and not the > > udevstart command. > > Yeah, it might work. For details on how to get this to work on a range > of kernel versions, you might want to look at the gentoo startup logic > for udev, which I've included below. > > hope this helps, > > greg k-h > > > -------------- > > # Copyright 1999-2005 Gentoo Foundation > # Distributed under the terms of the GNU General Public License v2 > > udev_version() { > local version=0 > > 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 > fi > > echo "${version}" > } > > # This works for 2.6.15 kernels or greater > trigger_events() { > list="" > # if you want real coldplug (with all modules being loaded for all > # devices in the system), uncomment out the next line. > #list="$list $(echo /sys/bus/*/devices/*/uevent)" > list="$list $(echo /sys/class/*/*/uevent)" > list="$list $(echo /sys/block/*/uevent /sys/block/*/*/uevent)" > for i in $list; do > case "$i" in > */device/uevent) > # skip followed device symlinks > continue > ;; > */class/mem/*|*/class/tty/*) > first="$first $i" > ;; > */block/md*) > last="$last $i" > ;; > */*) > default="$default $i" > ;; > esac > done > > # trigger the sorted events > for i in $first $default $last; do > echo "add" > "$i" > done > } > > populate_udev() { > # populate /dev with devices already found by the kernel > if [ "$(get_KV)" -gt "$(KV_to_int '2.6.14')" ] ; then > ebegin "Populating /dev with existing devices through uevents" > udevtrigger > eend 0 > else > ebegin "Populating /dev with existing devices with udevstart" > /sbin/udevstart > eend 0 > fi > > # loop until everything is finished > # there's gotta be a better way... > ebegin "Letting udev process events" > loop=0 > while test -d /dev/.udev/queue; do > sleep 0.1; > test "$loop" -gt 300 && break > loop=$(($loop + 1)) > done > #einfo "loop = $loop" > eend 0 > > return 0 > } > > seed_dev() { > # Seed /dev with some things that we know we need > ebegin "Seeding /dev with needed nodes" > > # copy over any persistant things > if [[ -d /lib/udev/devices ]] ; then > cp --preserve=all --recursive --update /lib/udev/devices/* /dev > 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,shm} > eend 0 > } > > > main() { > # Setup temporary storage for /dev > ebegin "Mounting /dev for udev" > if [[ ${RC_USE_FSTAB} = "yes" ]] ; then > mntcmd=$(get_mount_fstab /dev) > else > unset mntcmd > fi > if [[ -n ${mntcmd} ]] ; then > try mount -n ${mntcmd} > else > if egrep -qs tmpfs /proc/filesystems ; then > mntcmd="tmpfs" > else > mntcmd="ramfs" > fi > # many video drivers require exec access in /dev #92921 > try mount -n -t ${mntcmd} udev /dev -o exec,nosuid,mode55 > fi > eend $? > > # 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. > touch /dev/.rcsysinit > > # Selinux lovin; /selinux should be mounted by selinux-patched init > if [[ -x /sbin/restorecon && -c /selinux/null ]] ; then > restorecon /dev &> /selinux/null > fi > > # Actually get udev rolling > if [[ ${RC_DEVICE_TARBALL} = "yes" && \ > -s /lib/udev-state/devices.tar.bz2 ]] ; then > ebegin "Populating /dev with saved device nodes" > try tar -jxpf /lib/udev-state/devices.tar.bz2 -C /dev > eend $? > fi > > seed_dev > > # Setup hotplugging (if possible) > ebegin "Setting up proper hotplug agent" > if [[ -e /proc/sys/kernel/hotplug ]] ; then > if [ "$(get_KV)" -gt "$(KV_to_int '2.6.14')" ] ; then > einfo " Using netlink for hotplug events..." > echo "" > /proc/sys/kernel/hotplug > elif [[ $(udev_version) -ge "48" ]] ; then > einfo " Setting /sbin/udevsend as hotplug agent ..." > echo "/sbin/udevsend" > /proc/sys/kernel/hotplug > elif [[ -x /sbin/hotplug ]] ; then > einfo " Using /sbin/hotplug as hotplug agent ..." > else > einfo " Setting /sbin/udev as hotplug agent ..." > echo "/sbin/udev" > /proc/sys/kernel/hotplug > fi > fi > eend 0 > > ebegin "Starting udevd" > /sbin/udevd --daemon > eend $? > > populate_udev > > # Create nodes that udev can't > ebegin "Finalizing udev configuration" > [[ -x /sbin/dmsetup ]] && /sbin/dmsetup mknodes &>/dev/null > [[ -x /sbin/lvm ]] && \ > /sbin/lvm vgscan -P --mknodes --ignorelockingfailure &>/dev/null > # Running evms_activate on a LiveCD causes lots of headaches > [[ -z ${CDBOOT} ]] && [[ -x /sbin/evms_activate ]] && \ > /sbin/evms_activate -q &>/dev/null > eend 0 > } > > main > > > # vim:ts=4 -- Rich Turner Storix, Inc. 619-543-0200 x113 ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid0709&bid&3057&dat1642 _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net Linux-hotplug-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel