Browse Source

trigger root mount via udev rules

master
Harald Hoyer 16 years ago
parent
commit
bb040f9315
  1. 7
      modules.d/90dmsetup/check
  2. 8
      modules.d/90dmsetup/install
  3. 50
      modules.d/99base/init

7
modules.d/90dmsetup/check

@ -0,0 +1,7 @@
#!/bin/sh

[[ $dracutfunctions ]] && . $dracutfunctions

[[ -x /lib/udev/devkit-disks-dm-export ]] || exit 1

exit 0

8
modules.d/90dmsetup/install

@ -0,0 +1,8 @@
#!/bin/bash
# FIXME: would be nice if we didn't have to know which rules to grab....
# ultimately, /lib/initramfs/rules.d or somesuch which includes links/copies
# of the rules we want so that we just copy those in would be best
dracut_install /lib/udev/devkit-disks-dm-export /lib/udev/devkit-disks-part-id

inst_rules 95-devkit-disks.rules

50
modules.d/99base/init

@ -31,6 +31,8 @@ source_all() {
echo "Starting initrd..." echo "Starting initrd..."
export PATH=/sbin:/bin:/usr/sbin:/usr/bin export PATH=/sbin:/bin:/usr/sbin:/usr/bin
export TERM=linux export TERM=linux
NEWROOT="/sysroot"

trap "emergency_shell" 0 trap "emergency_shell" 0


mknod /dev/null c 1 3 mknod /dev/null c 1 3
@ -52,26 +54,66 @@ mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts >/dev/null 2>&1
getarg 'break=pre-udev' && emergency_shell getarg 'break=pre-udev' && emergency_shell
source_all pre-udev source_all pre-udev



[ "$root" ] || {
root=$(getarg root=)
case $root in
LABEL=*) root=${root#LABEL=}
root="$(echo $root |sed 's,/,\\x2f,g')"
root="/dev/disk/by-label/${root}" ;;
UUID=*) root="/dev/disk/by-uuid/${root#UUID=}" ;;
'') echo "Warning: no root specified"
root="/dev/sda1" ;;
esac
}

[ "$rflags" ] || {
if rflags="$(getarg rootflags=)"; then
getarg rw && rflags="${rflags},rw" || rflags="${rflags},ro"
else
getarg rw && rflags=rw || rflags=ro
fi
}

[ "$fstype" ] || {
fstype="$(getarg rootfstype=)" && fstype="-t ${fstype}"
}

resume=$(getarg resume=) && ! getarg noresume && [ -b "$resume" ] && {
# parsing the output of ls is Bad, but until there is a better way...
(
echo -e 'NAME=="'${resume#/dev/}'", RUN+="/bin/sh -c \047 echo %M:%m > /sys/power/resume \047 "'
echo -e 'SYMLINK=="'${resume#/dev/}'", RUN+="/bin/sh -c \047 echo %M:%m > /sys/power/resume \047 "'
) >> /lib/udev/rules.d/99-resume.rules
}

(
echo -e ' NAME=="'${root#/dev/}'", RUN+="/bin/sh -c \047 mount '$fstype' -o '$rflags' '$root' '$NEWROOT' \047 " '
echo -e ' SYMLINK=="'${root#/dev/}'", RUN+="/bin/sh -c \047 mount '$fstype' -o '$rflags' '$root' '$NEWROOT' \047 " '
) >> /lib/udev/rules.d/99-mount.rules

# start up udev and trigger cold plugs # start up udev and trigger cold plugs
udevd --daemon udevd --daemon
udevadm trigger >/dev/null 2>&1 udevadm trigger >/dev/null 2>&1
udevadm settle --timeout=30 >/dev/null 2>&1 udevadm settle --timeout=30 >/dev/null 2>&1


NEWROOT="/sysroot"
# pre-mount happens before we try to mount the root filesystem, # pre-mount happens before we try to mount the root filesystem,
# and happens once. # and happens once.
getarg 'break=pre-mount' && emergency_shell getarg 'break=pre-mount' && emergency_shell
source_all pre-mount source_all pre-mount
getarg 'break=mount' && emergency_shell getarg 'break=mount' && emergency_shell

# mount scripts actually try to mount the root filesystem, and may # mount scripts actually try to mount the root filesystem, and may
# be sourced any number of times. As soon as one suceeds, no more are sourced. # be sourced any number of times. As soon as one suceeds, no more are sourced.
i=0 i=0
while :; do while :; do
grep -q '/sysroot' /proc/mounts && break;

for f in /mount/*.sh; do for f in /mount/*.sh; do
[ -x "$f" ] && . "$f"; [ -x "$f" ] && . "$f";
[ "$ROOTFS_MOUNTED" ] && break; [ "$ROOTFS_MOUNTED" ] && break;
done done
[ "$ROOTFS_MOUNTED" ] && break;
sleep 1 sleep 1
i=$(($i+1)) i=$(($i+1))
( (

Loading…
Cancel
Save