# mark device as asked
>> /tmp/cryptroot-asked-$2
-udevsettle
-
exit 0
ENV{ID_FS_TYPE}!="*_raid_member", , GOTO="dm_end"
TEST=="/tmp/.dmraid_scan-%k", GOTO="dm_end"
-RUN+="/bin/sh -c '>/tmp/.dmraid_scan-%k; /bin/ln -fs /sbin/dmraid_scan /initqueue/dmraid_scan.sh'"
+RUN+="/sbin/initqueue --onetime --unique --settled /sbin/dmraid_scan"
+
+ACTION=="change", RUN+="/bin/sh -c '>/tmp/.dmraid_scan-%k'"
ENV{DEVTYPE}!="partition", \
RUN+="/sbin/partx -d --nr 1-1024 $env{DEVNAME}"
#!/bin/sh
-if $UDEV_QUEUE_EMPTY >/dev/null 2>&1; then
- [ -h "$job" ] && rm -f "$job"
- DM_RAIDS=$(getargs rd_DM_UUID=)
- # run dmraid if udev has settled
- info "Scanning for dmraid devices $DM_RAIDS"
- if [ -n "$DM_RAIDS" ]; then
- # only activate specified DM RAIDS
- SETS=$(dmraid -c -s)
- info "Found dmraid sets:"
- echo $SETS|vinfo
- for r in $DM_RAIDS; do
- for s in $SETS; do
- if [ "${s##$r}" != "$s" ]; then
- info "Activating $s"
- dmraid -ay $s 2>&1 | vinfo
- udevsettle
- fi
- done
+. /lib/dracut-lib.sh
+
+DM_RAIDS=$(getargs rd_DM_UUID=)
+# run dmraid if udev has settled
+info "Scanning for dmraid devices $DM_RAIDS"
+if [ -n "$DM_RAIDS" ]; then
+ # only activate specified DM RAIDS
+ SETS=$(dmraid -c -s)
+ info "Found dmraid sets:"
+ echo $SETS|vinfo
+ for r in $DM_RAIDS; do
+ for s in $SETS; do
+ if [ "${s##$r}" != "$s" ]; then
+ info "Activating $s"
+ dmraid -ay $s 2>&1 | vinfo
+ udevsettle
+ fi
done
- else
- # scan and activate all DM RAIDS
- dmraid -ay 2>&1 | vinfo
- udevsettle
- fi
+ done
+else
+ # scan and activate all DM RAIDS
+ dmraid -ay 2>&1 | vinfo
fi
-
${root#live:/dev/}
printf 'SYMLINK=="%s", SYMLINK+="live"\n' \
${root#live:/dev/}
- printf 'KERNEL=="%s", RUN+="/sbin/initqueue --onetime /sbin/dmsquash-live-root $env{DEVNAME}"\n' \
+ printf 'KERNEL=="%s", RUN+="/sbin/initqueue --onetime --unique /sbin/dmsquash-live-root $env{DEVNAME}"\n' \
${root#live:/dev/}
- printf 'SYMLINK=="%s", RUN+="/sbin/initqueue --onetime /sbin/dmsquash-live-root $env{DEVNAME}"\n' \
+ printf 'SYMLINK=="%s", RUN+="/sbin/initqueue --onetime --unique /sbin/dmsquash-live-root $env{DEVNAME}"\n' \
${root#live:/dev/}
) >> /etc/udev/rules.d/99-live-mount.rules
+++ /dev/null
-# hacky rules to try to activate lvm when we get new block devs...
-#
-# Copyright 2008, Red Hat, Inc.
-# Jeremy Katz <katzj@redhat.com>
-
-
-SUBSYSTEM!="block", GOTO="lvm_end"
-ACTION!="add|change", GOTO="lvm_end"
-KERNEL=="dm-[0-9]*", ACTION!="change", GOTO="lvm_end"
-
-ENV{ID_FS_TYPE}=="LVM2_member", \
- TEST!="/tmp/.lvm_scan-%k", \
- RUN+="/bin/sh -c '>/tmp/.lvm_scan-%k; /bin/ln -fs /sbin/lvm_scan /initqueue/lvm_scan.sh'"
-
-KERNEL!="dm-[0-9]*", GOTO="lvm_end"
-
-OPTIONS="link_priority=-100"
-ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
-ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"
-
-
-LABEL="lvm_end"
SUBSYSTEM!="block", GOTO="lvm_end"
ACTION!="add|change", GOTO="lvm_end"
KERNEL=="dm-[0-9]*", ACTION=="add", GOTO="lvm_end"
+ENV{ID_FS_TYPE}!="LVM2_member", GOTO="lvm_end"
-ENV{ID_FS_TYPE}=="LVM2_member", \
- TEST!="/tmp/.lvm_scan-%k", \
- RUN+="/bin/sh -c '>/tmp/.lvm_scan-%k; /bin/ln -fs /sbin/lvm_scan /initqueue/lvm_scan.sh'"
+TEST!="/tmp/.lvm_change-%k", \
+ RUN+="/sbin/initqueue --settled --onetime --unique /sbin/lvm_scan"
+
+ACTION=="add", RUN+="/bin/sh -c '>/tmp/.lvm_scan-%k;'"
+ACTION=="change", RUN+="/bin/sh -c '>/tmp/.lvm_change-%k;>/tmp/.lvm_scan-%k;'"
LABEL="lvm_end"
#!/bin/bash
inst lvm
-if [ -x /lib/udev/vol_id ]; then
- inst_rules "$moddir/64-lvm-vol_id.rules" 64-device-mapper.rules
-else
- inst_rules "$moddir/64-lvm.rules" 64-device-mapper.rules
-fi
+
+inst_rules "$moddir/64-lvm.rules" 64-lvm.rules
if [[ $hostonly ]]; then
[ -f /etc/lvm/lvm.conf ] && inst /etc/lvm/lvm.conf
#!/bin/sh
-if $UDEV_QUEUE_EMPTY >/dev/null 2>&1; then
- [ -h "$job" ] && rm -f "$job"
- # run lvm scan if udev has settled
+# run lvm scan if udev has settled
- VGS=$(getargs rd_LVM_VG=)
+. /lib/dracut-lib.sh
- [ -d /etc/lvm ] || mkdir -p /etc/lvm
- # build a list of devices to scan
- lvmdevs=$(
- for f in /tmp/.lvm_scan-*; do
- [ -e "$f" ] || continue
- echo -n "${f##/tmp/.lvm_scan-} "
- done
- )
+VGS=$(getargs rd_LVM_VG=)
- if [ ! -e /etc/lvm/lvm.conf ]; then
- {
- echo 'devices {';
- echo -n ' filter = [ '
- for dev in $lvmdevs; do
- printf '"a|^/dev/%s$|", ' $dev;
- done;
- echo '"r/.*/" ]';
- echo 'types = [ "blkext", 1024 , "cciss0", 1024 ]'
- echo '}';
- } > /etc/lvm/lvm.conf
- lvmwritten=1
- fi
- info "Scanning devices $lvmdevs for LVM volume groups $VGS"
- lvm vgscan 2>&1 | vinfo
- lvm vgchange -ay $VGS 2>&1 | vinfo
- [ "$lvmwritten" ] && rm -f /etc/lvm/lvm.conf
- unset lvmwritten
- udevsettle
-fi
+[ -d /etc/lvm ] || mkdir -p /etc/lvm
+# build a list of devices to scan
+lvmdevs=$(
+ for f in /tmp/.lvm_scan-*; do
+ [ -e "$f" ] || continue
+ echo -n "${f##/tmp/.lvm_scan-} "
+ done
+)
+if [ ! -e /etc/lvm/lvm.conf ]; then
+ {
+ echo 'devices {';
+ echo -n ' filter = [ '
+ for dev in $lvmdevs; do
+ printf '"a|^/dev/%s$|", ' $dev;
+ done;
+ echo '"r/.*/" ]';
+ echo 'types = [ "blkext", 1024 , "cciss0", 1024 ]'
+ echo '}';
+ } > /etc/lvm/lvm.conf
+ lvmwritten=1
+fi
+info "Scanning devices $lvmdevs for LVM volume groups $VGS"
+lvm vgscan 2>&1 | vinfo
+lvm vgchange -ay $VGS 2>&1 | vinfo
+[ "$lvmwritten" ] && rm -f /etc/lvm/lvm.conf
+unset lvmwritten
RUN+="/sbin/mdadm -I --no-degraded $env{DEVNAME}"
-RUN+="/bin/sh -c '>/tmp/.mdraid_start-%k; /bin/ln -s /sbin/mdraid_start /initqueue/mdraid_start.sh'"
-
LABEL="md_inc_end"
+#
+# Handle non-container raid arrays
+#
+ACTION=="add|change", \
+ KERNEL=="md[0-9]*|md/*", \
+ ENV{DEVTYPE}!="partition", \
+ ENV{MD_LEVEL}!="container", \
+ GOTO="do_raidstart"
+
+GOTO="end_raidstart"
+
+LABEL="do_raidstart"
+
+TEST!="/tmp/.mdraid_start-%k", \
+ RUN+="/sbin/initqueue --settled --onetime --unique /sbin/mdraid_start"
+
+ACTION=="change", \
+ RUN+="/bin/sh -c '>/tmp/.mdraid_start-%k'"
+
+LABEL="end_raidstart"
+
+#
+# Handle container raid arrays
+#
ACTION=="add|change", \
+ KERNEL=="md[0-9]*|md/*", \
ENV{DEVTYPE}!="partition", \
ENV{MD_LEVEL}=="container", \
- TEST!="/tmp/.mdcontainer_start-%k", \
- RUN+="/bin/sh -c '>/tmp/.mdcontainer_start-%k; initqueue /sbin/mdcontainer_start $env{DEVNAME}'"
+ GOTO="do_container"
+
+GOTO="end_container"
+
+LABEL="do_container"
+
+TEST!="/tmp/.mdcontainer_start-%k", \
+ RUN+="/sbin/initqueue --settled --onetime /sbin/mdcontainer_start $env{DEVNAME}"
+
+ACTION=="change", \
+ RUN+="/bin/sh -c '>/tmp/.mdcontainer_start-%k'"
+
+LABEL="end_container"
#!/bin/sh
. /lib/dracut-lib.sh
-if $UDEV_QUEUE_EMPTY >/dev/null 2>&1; then
- # run mdadm if udev has settled
- md=$1
- # and activate any containers
- mdadm -IR $md 2>&1 | vinfo
-fi
+md=$1
+# and activate any containers
+mdadm -IR $md 2>&1 | vinfo
#!/bin/sh
-if $UDEV_QUEUE_EMPTY >/dev/null 2>&1; then
- [ -h "$job" ] && rm -f "$job"
- # run mdadm if udev has settled
- info "Assembling MD RAID arrays"
- mdadm -IRs 2>&1 | vinfo
- udevsettle
-fi
+. /lib/dracut-lib.sh
+# run mdadm if udev has settled
+info "Assembling MD RAID arrays"
+mdadm -IRs 2>&1 | vinfo
(
printf '[ -e "%s" ] && { ln -s "%s" /dev/root; rm "$job"; }\n' \
"${root#block:}" "${root#block:}"
- ) >> /initqueue/blocksymlink.sh
+ ) >> /initqueue-settled/blocksymlink.sh
fi
udevadm settle --timeout=30
fi
}
+
+if [ -e /proc/cmdline ]; then
+ if getarg rdinitdebug; then
+ set -x
+ fi
+fi
+
[ -n "$queuetriggered" ] && continue
if $UDEV_QUEUE_EMPTY >/dev/null 2>&1; then
- # no more udev jobs
+ unset queuetriggered
+ for job in /initqueue-settled/*.sh; do
+ [ -e "$job" ] || break
+
+ queuetriggered="1"
+
+ job=$job . $job
+
+ # bail out, if we have mounted the root filesystem
+ [ -d "$NEWROOT/proc" ] && break 2;
+
+ # check if root can be mounted
+ [ -e /dev/root ] && break 2;
+ done
+
+ # no more udev jobs and queues empty.
sleep 0.5
i=$(($i+1))
[ $i -gt 20 ] \
#!/bin/sh
-if [ "$1" = "--onetime" ]; then
- onetime="yes"
- shift
+. /lib/dracut-lib.sh
+
+while [ $# -gt 0 ]; do
+ case "$1" in
+ --onetime)
+ onetime="yes"
+ shift;;
+ --settled)
+ settled="-settled"
+ shift;;
+ --unique)
+ unique="yes"
+ shift;;
+ *)
+ break;;
+ esac
+done
+
+if [ -z "$unique" ]; then
+ job=$$
+else
+ job=${1##*/}
fi
-echo "$@" > /tmp/$$.sh
+
+echo "$@" > /tmp/${job}.sh
if [ -n "$onetime" ]; then
- echo '[ -e "$job" ] && rm "$job"' >> /tmp/$$.sh
+ echo '[ -e "$job" ] && rm "$job"' >> /tmp/${job}.sh
fi
-mv /tmp/$$.sh /initqueue/
->> /initqueue/work
+mv -f /tmp/${job}.sh /initqueue${settled}/
+[ -z "$settled" ] && >> /initqueue/work
inst "$moddir/init" "/init"
inst "$moddir/initqueue" "/sbin/initqueue"
mkdir -p ${initdir}/initqueue
+mkdir -p ${initdir}/initqueue-settled
mkdir -p ${initdir}/tmp
# Bail out if switch_root does not exist
if which switch_root >/dev/null 2>&1; then