SUBSYSTEM!="block", GOTO="luks_end"
ACTION!="add|change", GOTO="luks_end"
-ENV{ID_FS_TYPE}=="crypto_LUKS", RUN+="/sbin/initqueue /sbin/cryptroot-ask $env{DEVNAME} luks-$env{ID_FS_UUID}"
+ENV{ID_FS_TYPE}=="crypto_LUKS", RUN+="/sbin/initqueue --onetime /sbin/cryptroot-ask $env{DEVNAME} luks-$env{ID_FS_UUID}"
LABEL="luks_end"
SUBSYSTEM!="block", GOTO="luks_end"
ACTION!="add|change", GOTO="luks_end"
-ENV{ID_FS_TYPE}=="crypto_LUKS", RUN+="/sbin/initqueue /sbin/cryptroot-ask $env{DEVNAME} luks-$env{ID_FS_UUID}"
+ENV{ID_FS_TYPE}=="crypto_LUKS", RUN+="/sbin/initqueue --onetime /sbin/cryptroot-ask $env{DEVNAME} luks-$env{ID_FS_UUID}"
LABEL="luks_end"
--- /dev/null
+# This file causes block devices with Linux RAID (mdadm) signatures to
+# automatically cause mdadm to be run.
+# See udev(8) for syntax
+
+SUBSYSTEM!="block", GOTO="dm_end"
+ACTION!="add|change", GOTO="dm_end"
+
+ENV{ID_FS_TYPE}=="linux_raid_member", GOTO="dm_end"
+
+ENV{ID_FS_TYPE}=="*_raid_member", RUN+="/sbin/initqueue /sbin/dmraid_scan \$0"
+
+LABEL="dm_end"
-dmraid -ay -Z
-udevadm settle --timeout=30 >/dev/null 2>&1
+#!/bin/sh
+
+if udevadm settle --timeout=0 >/dev/null 2>&1; then
+ # run dmraid if udev has settled
+ dmraid -ay -Z
+ [ -e "$job" ] && rm -f "$job"
+fi
#!/bin/bash
dracut_install dmraid
-inst_hook pre-mount 10 "$moddir/dmraid.sh"
+inst "$moddir/dmraid.sh" /sbin/dmraid_scan
inst_rules 64-md-raid.rules
+inst_rules "$moddir/61-dmraid.rules"
printf 'SYMLINK=="%s", SYMLINK+="root"\n' \
${root#block:/dev/}
) >> /etc/udev/rules.d/99-mount.rules
+ (
+ printf '[ -e "%s" ] && { ln -s "%s" /dev/root; rm "$job"; }\n' \
+ "${root#block:}" "${root#block:}"
+ ) >> /initqueue/blocksymlink.sh
fi
#!/bin/sh
+dracut_install ln
inst_hook cmdline 95 "$moddir/parse-block.sh"
inst_hook pre-udev 30 "$moddir/block-genrules.sh"
inst_hook mount 99 "$moddir/mount-root.sh"
sh -i
}
-do_initqueue()
-{
- while :; do
- # bail out, if we have mounted the root filesystem
- [ -d "$NEWROOT/proc" ] && break;
-
- # check if root can be mounted
- [ -e /dev/root ] && break;
-
- if [ $UDEVVERSION -ge 143 ]; then
- udevadm settle --exit-if-exists=/initqueue/work --exit-if-exists=/dev/root
- else
- udevadm settle --timeout=30
- fi
- [ -f /initqueue/work ] || break
- rm /initqueue/work
-
- for job in /initqueue/*.job; do
- . $job
- rm -f $job
-
- # bail out, if we have mounted the root filesystem
- [ -d "$NEWROOT/proc" ] && break;
-
- # check if root can be mounted
- [ -e /dev/root ] && break;
- done
- done
-}
-
export PATH=/sbin:/bin:/usr/sbin:/usr/bin
export TERM=linux
NEWROOT="/sysroot"
# then the rest
udevadm trigger $udevtriggeropts >/dev/null 2>&1
-do_initqueue
+i=0
+while :; do
+ # bail out, if we have mounted the root filesystem
+ [ -d "$NEWROOT/proc" ] && break;
+
+ # check if root can be mounted
+ [ -e /dev/root ] && break;
+
+ if [ $UDEVVERSION -ge 143 ]; then
+ udevadm settle --exit-if-exists=/initqueue/work --exit-if-exists=/dev/root
+ else
+ udevadm settle --timeout=30
+ fi
+ unset queuetriggered
+ if [ -f /initqueue/work ]; then
+ rm /initqueue/work
+ queuetriggered="1"
+ fi
+
+ for job in /initqueue/*.sh; do
+ [ -e "$job" ] || break
+ job=$job . $job
+
+ # bail out, if we have mounted the root filesystem
+ [ -d "$NEWROOT/proc" ] && break;
+ # check if root can be mounted
+ [ -e /dev/root ] && break;
+ done
+
+ [ -n "$queuetriggered" ] && continue
+
+ if udevadm settle --timeout=0 >/dev/null 2>&1; then
+ # no more udev jobs
+ sleep 0.5
+ i=$(($i+1))
+ [ $i -gt 20 ] && getarg rdshell \
+ && { flock -s 9 ; emergency_shell; } 9>/.console_lock
+ fi
+done
+unset job
+unset queuetriggered
# pre-mount happens before we try to mount the root filesystem,
# and happens once.
source_all pre-mount
getarg 'rdbreak=mount' && emergency_shell
-do_initqueue
-
# 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.
i=0
while :; do
[ -d "$NEWROOT/proc" ] && break;
-
for f in /mount/*.sh; do
[ -f "$f" ] && . "$f"
- do_initqueue
- [ "$ROOTFS_MOUNTED" ] && break;
+ [ -d "$NEWROOT/proc" ] && break;
done
- sleep 0.5
i=$(($i+1))
- { flock -s 9 ; [ $i -gt 20 ] && emergency_shell; } 9>/.console_lock
+ [ $i -gt 20 ] && getarg rdshell \
+ && { flock -s 9 ; emergency_shell; } 9>/.console_lock
done
# pre pivot scripts are sourced just before we switch over to the new root.
#!/bin/sh
-echo "$@" > /tmp/$$.job
-mv /tmp/$$.job /initqueue/
+if [ "$1" = "--onetime" ]; then
+ onetime="yes"
+ shift
+fi
+echo "$@" > /tmp/$$.sh
+if [ -n "$onetime" ]; then
+ echo '[ -e "$job" ] && rm "$job"' >> /tmp/$$.sh
+fi
+mv /tmp/$$.sh /initqueue/
>> /initqueue/work
initdir=overlay
. $basedir/dracut-functions
dracut_install sfdisk mke2fs poweroff cp umount
- inst_simple ./create-root.sh /pre-mount/01create-root.sh
+ inst_simple ./create-root.sh /initqueue/01create-root.sh
)
# create an initramfs that will create the target root filesystem.
initdir=overlay
. $basedir/dracut-functions
dracut_install sfdisk mke2fs poweroff cp umount
- inst_simple ./create-root.sh /pre-mount/01create-root.sh
+ inst_simple ./create-root.sh /initqueue/01create-root.sh
)
# create an initramfs that will create the target root filesystem.
initdir=overlay
. $basedir/dracut-functions
dracut_install mke2fs poweroff cp umount
- inst_simple ./create-root.sh /pre-mount/01create-root.sh
+ inst_simple ./create-root.sh /initqueue/01create-root.sh
)
# create an initramfs that will create the target root filesystem.