ci: use /dev/disk/by-id

Due to parallel probing of the linux kernel `/dev/sd*` can't be used to
reliably address a hard disk. This can be seen by the many spurious
failures of the dracut CI, where `mdadm` failed with error 524 or tests
failed due to the success marker message written to the wrong disk.

* don't rely on `/dev/sd*` but use disk ids and `/dev/disk/by-id/ata-disk_<name>`

* specify the exact qemu machine architecture `-M q35` needed for the
  disk ids. A later patch will move this to `run-qemu`, when all tests are converted

* due to `-M q35` the interface names have changed from
  `ens2` -> `enp0s1` and `ens3` -> `enp0s2`
master
Harald Hoyer 2021-04-20 16:16:14 +02:00 committed by Harald Hoyer
parent 5912f4fbc0
commit b80ee08093
81 changed files with 920 additions and 842 deletions

View File

@ -1,8 +0,0 @@
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"

View File

@ -1,24 +1,22 @@
#!/bin/sh #!/bin/sh

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"
done done
rm -f -- /etc/lvm/lvm.conf rm -f -- /etc/lvm/lvm.conf
udevadm control --reload udevadm control --reload
set -e
# save a partition at the beginning for future flagging purposes
sfdisk /dev/sda << EOF
,1M
,
EOF

udevadm settle udevadm settle
mkfs.ext3 -L ' rdinit=/bin/sh' /dev/sda2
set -ex

mkfs.ext3 -L ' rdinit=/bin/sh' /dev/disk/by-id/ata-disk_root
mkdir -p /root mkdir -p /root
mount /dev/sda2 /root mount /dev/disk/by-id/ata-disk_root /root
cp -a -t /root /source/* cp -a -t /root /source/*
mkdir -p /root/run mkdir -p /root/run
umount /root umount /root
echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/sda1 echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
sync
poweroff -f poweroff -f

View File

@ -7,7 +7,8 @@ export PATH=/sbin:/bin:/usr/sbin:/usr/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1 exec > /dev/console 2>&1


echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/sdb echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker

export TERM=linux export TERM=linux
export PS1='initramfs-test:\w\$ ' export PS1='initramfs-test:\w\$ '
[ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab [ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab
@ -20,5 +21,4 @@ if getargbool 0 rd.shell; then
fi fi
echo "Powering down." echo "Powering down."
mount -n -o remount,ro / mount -n -o remount,ro /
sync
poweroff -f poweroff -f

View File

@ -8,21 +8,23 @@ KVERSION=${KVERSION-$(uname -r)}
# DEBUGFAIL="rd.shell rd.break" # DEBUGFAIL="rd.shell rd.break"


test_run() { test_run() {
dd if=/dev/zero of="$TESTDIR"/result bs=1M count=1 dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/root.img root

"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/root.ext3 \ "${disk_args[@]}" \
-drive format=raw,index=1,media=disk,file="$TESTDIR"/result \
-watchdog i6300esb -watchdog-action poweroff \ -watchdog i6300esb -watchdog-action poweroff \
-append "panic=1 systemd.crash_reboot \"root=LABEL= rdinit=/bin/sh\" rw systemd.log_level=debug systemd.log_target=console rd.retry=3 rd.debug console=ttyS0,115200n81 rd.shell=0 $DEBUGFAIL" \ -append "panic=1 systemd.crash_reboot \"root=LABEL= rdinit=/bin/sh\" rw systemd.log_level=debug systemd.log_target=console rd.retry=3 rd.debug console=ttyS0,115200n81 rd.shell=0 $DEBUGFAIL" \
-initrd "$TESTDIR"/initramfs.testing || return 1 -initrd "$TESTDIR"/initramfs.testing || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/result || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/marker.img
} }


test_setup() { test_setup() {
rm -f -- "$TESTDIR"/root.ext3
# Create the blank file to use as a root filesystem
dd if=/dev/zero of="$TESTDIR"/root.ext3 bs=1M count=80

kernel=$KVERSION kernel=$KVERSION
# Create what will eventually be our root filesystem onto an overlay # Create what will eventually be our root filesystem onto an overlay
( (
@ -72,7 +74,6 @@ test_setup() {
inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd
inst_hook initqueue 01 ./create-root.sh inst_hook initqueue 01 ./create-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh inst_hook initqueue/finished 01 ./finished-false.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -85,13 +86,22 @@ test_setup() {
--no-hostonly-cmdline -N \ --no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
rm -rf -- "$TESTDIR"/overlay rm -rf -- "$TESTDIR"/overlay
# Invoke KVM and/or QEMU to actually create the target filesystem.


dd if=/dev/zero of="$TESTDIR"/root.img bs=1MiB count=80
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/root.img root

# Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/root.ext3 \ "${disk_args[@]}" \
-append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/root.ext3 || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1
rm -- "$TESTDIR"/marker.img


( (
# shellcheck disable=SC2031 # shellcheck disable=SC2031
@ -101,7 +111,6 @@ test_setup() {
inst_multiple poweroff shutdown dd inst_multiple poweroff shutdown dd
inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )
"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
-a "debug watchdog" \ -a "debug watchdog" \

View File

@ -1,8 +0,0 @@
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"

View File

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

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"
@ -6,18 +9,13 @@ done
rm -f -- /etc/lvm/lvm.conf rm -f -- /etc/lvm/lvm.conf
udevadm control --reload udevadm control --reload
set -e set -e
# save a partition at the beginning for future flagging purposes
sfdisk /dev/sda << EOF
,1M
,
EOF


udevadm settle udevadm settle
mkfs.ext3 -L dracut /dev/sda2 mkfs.ext3 -L dracut /dev/disk/by-id/ata-disk_root
mkdir -p /root mkdir -p /root
mount /dev/sda2 /root mount /dev/disk/by-id/ata-disk_root /root
cp -a -t /root /source/* cp -a -t /root /source/*
mkdir -p /root/run mkdir -p /root/run
umount /root umount /root
echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/sda1 echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
poweroff -f poweroff -f

View File

@ -1,11 +1,14 @@
#!/bin/sh #!/bin/sh
: > /dev/watchdog

. /lib/dracut-lib.sh . /lib/dracut-lib.sh


export PATH=/sbin:/bin:/usr/sbin:/usr/bin export PATH=/sbin:/bin:/usr/sbin:/usr/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1 exec > /dev/console 2>&1


echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/sda1 echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker

export TERM=linux export TERM=linux
export PS1='initramfs-test:\w\$ ' export PS1='initramfs-test:\w\$ '
[ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab [ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab
@ -18,5 +21,4 @@ if getargbool 0 rd.shell; then
fi fi
echo "Powering down." echo "Powering down."
mount -n -o remount,ro / mount -n -o remount,ro /
sync
poweroff -f poweroff -f

View File

@ -7,18 +7,22 @@ KVERSION="${KVERSION-$(uname -r)}"
# Uncomment this to debug failures # Uncomment this to debug failures
#DEBUGFAIL="rd.shell=1 rd.break=pre-mount" #DEBUGFAIL="rd.shell=1 rd.break=pre-mount"
test_run() { test_run() {
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/root.img root

"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/root.ext3 \ "${disk_args[@]}" \
-append "panic=1 systemd.crash_reboot root=LABEL=dracut rw loglevel=77 systemd.log_level=debug systemd.log_target=console rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 init=/sbin/init rd.shell=0 $DEBUGFAIL" \ -append "panic=1 systemd.crash_reboot root=LABEL=dracut rw loglevel=77 systemd.log_level=debug systemd.log_target=console rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 init=/sbin/init rd.shell=0 $DEBUGFAIL" \
-initrd "$TESTDIR"/initramfs.testing -initrd "$TESTDIR"/initramfs.testing || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/root.ext3 || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/marker.img
} }


test_setup() { test_setup() {
rm -f -- "$TESTDIR"/root.ext3
# Create the blank file to use as a root filesystem
dd if=/dev/zero of="$TESTDIR"/root.ext3 bs=1M count=80

kernel=$KVERSION kernel=$KVERSION
# Create what will eventually be our root filesystem onto an overlay # Create what will eventually be our root filesystem onto an overlay
( (
@ -69,7 +73,6 @@ test_setup() {
inst_multiple sfdisk mkfs.ext3 poweroff cp umount dd inst_multiple sfdisk mkfs.ext3 poweroff cp umount dd
inst_hook initqueue 01 ./create-root.sh inst_hook initqueue 01 ./create-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh inst_hook initqueue/finished 01 ./finished-false.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -82,13 +85,22 @@ test_setup() {
--no-hostonly-cmdline -N \ --no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
rm -rf -- "$TESTDIR"/overlay rm -rf -- "$TESTDIR"/overlay
# Invoke KVM and/or QEMU to actually create the target filesystem.


dd if=/dev/zero of="$TESTDIR"/root.img bs=1MiB count=80
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/root.img root

# Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/root.ext3 \ "${disk_args[@]}" \
-append "root=/dev/fakeroot rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/fakeroot rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/root.ext3 || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1
rm -- "$TESTDIR"/marker.img


( (
# shellcheck disable=SC2031 # shellcheck disable=SC2031
@ -99,7 +111,6 @@ test_setup() {
inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook pre-pivot 000 ./systemd-analyze.sh inst_hook pre-pivot 000 ./systemd-analyze.sh
inst_hook emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )
"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
-a "debug systemd" \ -a "debug systemd" \

View File

@ -1,8 +0,0 @@
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"

View File

@ -1,44 +1,33 @@
#!/bin/sh #!/bin/sh

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
set -x
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"
done done
rm -f -- /etc/lvm/lvm.conf rm -f -- /etc/lvm/lvm.conf
udevadm control --reload udevadm control --reload
udevadm settle
set -e set -e
# save a partition at the beginning for future flagging purposes
sfdisk /dev/sda << EOF
,1M
,
EOF

sfdisk /dev/sdb << EOF
,1M
,
EOF


udevadm settle udevadm settle
modprobe btrfs modprobe btrfs
mkfs.btrfs -L dracut /dev/sda2 mkfs.btrfs -L dracut /dev/disk/by-id/ata-disk_root
mkfs.btrfs -L dracutusr /dev/sdb2 mkfs.btrfs -L dracutusr /dev/disk/by-id/ata-disk_usr
btrfs device scan /dev/sda2 btrfs device scan /dev/disk/by-id/ata-disk_root
btrfs device scan /dev/sdb2 btrfs device scan /dev/disk/by-id/ata-disk_usr
mkdir -p /root mkdir -p /root
mount -t btrfs /dev/sda2 /root mount -t btrfs /dev/disk/by-id/ata-disk_root /root
[ -d /root/usr ] || mkdir -p /root/usr [ -d /root/usr ] || mkdir -p /root/usr
mount -t btrfs /dev/sdb2 /root/usr mount -t btrfs /dev/disk/by-id/ata-disk_usr /root/usr
btrfs subvolume create /root/usr/usr btrfs subvolume create /root/usr/usr
umount /root/usr umount /root/usr
mount -t btrfs -o subvol=usr /dev/sdb2 /root/usr mount -t btrfs -o subvol=usr /dev/disk/by-id/ata-disk_usr /root/usr
cp -a -t /root /source/* cp -a -t /root /source/*
mkdir -p /root/run mkdir -p /root/run
btrfs filesystem sync /root/usr btrfs filesystem sync /root/usr
btrfs filesystem sync /root btrfs filesystem sync /root
umount /root/usr umount /root/usr
umount /root umount /root
echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/sda1 echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
udevadm settle
sync
poweroff -f poweroff -f

View File

@ -1,2 +1,2 @@
/dev/sda2 / btrfs defaults 0 0 /dev/disk/by-id/ata-disk_root / btrfs defaults 0 0
/dev/sdb2 /usr btrfs subvol=usr,ro 0 0 /dev/disk/by-id/ata-disk_usr /usr btrfs subvol=usr,ro 0 0

View File

@ -1,5 +1,4 @@
#!/bin/sh #!/bin/sh

: > /dev/watchdog : > /dev/watchdog


. /lib/dracut-lib.sh . /lib/dracut-lib.sh
@ -8,9 +7,8 @@ export PATH=/sbin:/bin:/usr/sbin:/usr/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1 exec > /dev/console 2>&1


if ismounted /usr; then echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/sdc
fi
export TERM=linux export TERM=linux
export PS1='initramfs-test:\w\$ ' export PS1='initramfs-test:\w\$ '
[ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab [ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab
@ -23,5 +21,4 @@ if getargbool 0 rd.shell; then
fi fi
echo "Powering down." echo "Powering down."
mount -n -o remount,ro / mount -n -o remount,ro /
sync
poweroff -f poweroff -f

View File

@ -15,16 +15,21 @@ client_run() {


echo "CLIENT TEST START: $test_name" echo "CLIENT TEST START: $test_name"


dd if=/dev/zero of="$TESTDIR"/result bs=1M count=1 dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/root.btrfs root
qemu_add_drive_args disk_index disk_args "$TESTDIR"/usr.btrfs usr

"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/root.btrfs \ "${disk_args[@]}" \
-drive format=raw,index=1,media=disk,file="$TESTDIR"/usr.btrfs \
-drive format=raw,index=2,media=disk,file="$TESTDIR"/result \
-watchdog i6300esb -watchdog-action poweroff \ -watchdog i6300esb -watchdog-action poweroff \
-append "panic=1 systemd.crash_reboot root=LABEL=dracut $client_opts loglevel=7 rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.debug rd.shell=0 $DEBUGFAIL" \ -append "panic=1 systemd.crash_reboot root=LABEL=dracut $client_opts loglevel=7 rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.debug rd.shell=0 $DEBUGFAIL" \
-initrd "$TESTDIR"/initramfs.testing -initrd "$TESTDIR"/initramfs.testing || return 1


if ! grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/result; then if ! grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/marker.img; then
echo "CLIENT TEST END: $test_name [FAILED]" echo "CLIENT TEST END: $test_name [FAILED]"
return 1 return 1
fi fi
@ -40,12 +45,6 @@ test_run() {
} }


test_setup() { test_setup() {
rm -f -- "$TESTDIR"/root.btrfs
rm -f -- "$TESTDIR"/usr.btrfs
# Create the blank file to use as a root filesystem
dd if=/dev/zero of="$TESTDIR"/root.btrfs bs=1M count=160
dd if=/dev/zero of="$TESTDIR"/usr.btrfs bs=1M count=160

kernel=$KVERSION kernel=$KVERSION
# Create what will eventually be our root filesystem onto an overlay # Create what will eventually be our root filesystem onto an overlay
( (
@ -77,7 +76,7 @@ test_setup() {
ln -s dracut-util "${initdir}/usr/bin/dracut-getarg" ln -s dracut-util "${initdir}/usr/bin/dracut-getarg"
ln -s dracut-util "${initdir}/usr/bin/dracut-getargs" ln -s dracut-util "${initdir}/usr/bin/dracut-getargs"


inst_multiple grep inst_multiple grep df
inst_simple ./fstab /etc/fstab inst_simple ./fstab /etc/fstab
inst_simple /etc/os-release inst_simple /etc/os-release
inst ./test-init.sh /sbin/init inst ./test-init.sh /sbin/init
@ -96,7 +95,6 @@ test_setup() {
inst_multiple sfdisk mkfs.btrfs btrfs poweroff cp umount sync dd inst_multiple sfdisk mkfs.btrfs btrfs poweroff cp umount sync dd
inst_hook initqueue 01 ./create-root.sh inst_hook initqueue 01 ./create-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh inst_hook initqueue/finished 01 ./finished-false.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -109,20 +107,26 @@ test_setup() {
--nohardlink \ --nohardlink \
--no-hostonly-cmdline -N \ --no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1

# Invoke KVM and/or QEMU to actually create the target filesystem.

# echo $TESTDIR/overlay
# echo $TESTDIR/initramfs.makeroot
#exit 1
rm -rf -- "$TESTDIR"/overlay rm -rf -- "$TESTDIR"/overlay


# Create the blank file to use as a root filesystem
dd if=/dev/zero of="$TESTDIR"/root.btrfs bs=1MiB count=160
dd if=/dev/zero of="$TESTDIR"/usr.btrfs bs=1MiB count=160
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/root.btrfs root
qemu_add_drive_args disk_index disk_args "$TESTDIR"/usr.btrfs usr

# Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/root.btrfs \ "${disk_args[@]}" \
-drive format=raw,index=1,media=disk,file="$TESTDIR"/usr.btrfs \
-append "root=/dev/dracut/root rw rootfstype=btrfs quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/dracut/root rw rootfstype=btrfs quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1
if ! grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/root.btrfs; then
if ! grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img; then
echo "Could not create root filesystem" echo "Could not create root filesystem"
return 1 return 1
fi fi
@ -135,7 +139,6 @@ test_setup() {
inst_multiple poweroff shutdown dd inst_multiple poweroff shutdown dd
inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )
"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
-a "debug watchdog" \ -a "debug watchdog" \

View File

@ -1,8 +0,0 @@
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"

View File

@ -1,44 +1,33 @@
#!/bin/sh #!/bin/sh

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
set -x
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"
done done
rm -f -- /etc/lvm/lvm.conf rm -f -- /etc/lvm/lvm.conf
modprobe btrfs
udevadm control --reload udevadm control --reload
udevadm settle
set -e set -e
# save a partition at the beginning for future flagging purposes
sfdisk /dev/sda << EOF
,1M
,
EOF

sfdisk /dev/sdb << EOF
,1M
,
EOF


udevadm settle udevadm settle

modprobe btrfs
mkfs.btrfs -L dracut /dev/sda2 mkfs.btrfs -L dracut /dev/disk/by-id/ata-disk_root
mkfs.btrfs -L dracutusr /dev/sdb2 mkfs.btrfs -L dracutusr /dev/disk/by-id/ata-disk_usr
btrfs device scan /dev/sda2 btrfs device scan /dev/disk/by-id/ata-disk_root
btrfs device scan /dev/sdb2 btrfs device scan /dev/disk/by-id/ata-disk_usr
mkdir -p /root mkdir -p /root
mount -t btrfs /dev/sda2 /root mount -t btrfs /dev/disk/by-id/ata-disk_root /root
[ -d /root/usr ] || mkdir -p /root/usr [ -d /root/usr ] || mkdir -p /root/usr
mount -t btrfs /dev/sdb2 /root/usr mount -t btrfs /dev/disk/by-id/ata-disk_usr /root/usr
btrfs subvolume create /root/usr/usr btrfs subvolume create /root/usr/usr
umount /root/usr umount /root/usr
mount -t btrfs -o subvol=usr /dev/sdb2 /root/usr mount -t btrfs -o subvol=usr /dev/disk/by-id/ata-disk_usr /root/usr
cp -a -t /root /source/* cp -a -t /root /source/*
mkdir -p /root/run mkdir -p /root/run
btrfs filesystem sync /root/usr btrfs filesystem sync /root/usr
btrfs filesystem sync /root btrfs filesystem sync /root
umount /root/usr umount /root/usr
umount /root umount /root
echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/sdc echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
sync
poweroff -f poweroff -f

View File

@ -1,2 +1,2 @@
LABEL=dracut / btrfs subvol=root 0 0 /dev/disk/by-id/ata-disk_root / btrfs defaults 0 0
LABEL=dracutusr /usr btrfs subvol=usr,ro 0 0 /dev/disk/by-id/ata-disk_usr /usr btrfs subvol=usr,ro 0 0

View File

@ -21,7 +21,7 @@ else
echo "**************************FAILED**************************" echo "**************************FAILED**************************"


else else
echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/sdc echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
echo "All OK" echo "All OK"
fi fi
fi fi
@ -33,11 +33,9 @@ export PS1='initramfs-test:\w\$ '
stty sane stty sane
echo "made it to the rootfs!" echo "made it to the rootfs!"
if getargbool 0 rd.shell; then if getargbool 0 rd.shell; then
# while sleep 1; do sleep 1;done
strstr "$(setsid --help)" "control" && CTTY="-c" strstr "$(setsid --help)" "control" && CTTY="-c"
setsid $CTTY sh -i setsid $CTTY sh -i
fi fi
sync
systemctl poweroff
echo "Powering down." echo "Powering down."
systemctl --no-block poweroff
exit 0 exit 0

View File

@ -17,15 +17,20 @@ client_run() {


echo "CLIENT TEST START: $test_name" echo "CLIENT TEST START: $test_name"


dd if=/dev/zero of="$TESTDIR"/result bs=1M count=1 dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
"$testdir"/run-qemu \ declare -a disk_args=()
-drive format=raw,index=0,media=disk,file="$TESTDIR"/root.btrfs \ # shellcheck disable=SC2034
-drive format=raw,index=1,media=disk,file="$TESTDIR"/usr.btrfs \ declare -i disk_index=0
-drive format=raw,index=2,media=disk,file="$TESTDIR"/result \ qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
-append "panic=1 systemd.crash_reboot root=LABEL=dracut $client_opts rd.retry=3 console=ttyS0,115200n81 selinux=0 $DEBUGOUT rd.shell=0 $DEBUGFAIL" \ qemu_add_drive_args disk_index disk_args "$TESTDIR"/root.btrfs root
-initrd "$TESTDIR"/initramfs.testing qemu_add_drive_args disk_index disk_args "$TESTDIR"/usr.btrfs usr


if ! grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/result; then "$testdir"/run-qemu \
"${disk_args[@]}" \
-append "panic=1 systemd.crash_reboot root=LABEL=dracut $client_opts rd.retry=3 console=ttyS0,115200n81 selinux=0 $DEBUGOUT rd.shell=0 $DEBUGFAIL" \
-initrd "$TESTDIR"/initramfs.testing || return 1

if ! grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/marker.img; then
echo "CLIENT TEST END: $test_name [FAILED]" echo "CLIENT TEST END: $test_name [FAILED]"
return 1 return 1
fi fi
@ -41,11 +46,9 @@ test_run() {
} }


test_setup() { test_setup() {
rm -f -- "$TESTDIR"/root.btrfs # shellcheck disable=SC2064
rm -f -- "$TESTDIR"/usr.btrfs trap "$(shopt -p nullglob globstar)" RETURN
# Create the blank file to use as a root filesystem shopt -q -s nullglob globstar
dd if=/dev/zero of="$TESTDIR"/root.btrfs bs=1M count=320
dd if=/dev/zero of="$TESTDIR"/usr.btrfs bs=1M count=320


export kernel=$KVERSION export kernel=$KVERSION
# Create what will eventually be our root filesystem onto an overlay # Create what will eventually be our root filesystem onto an overlay
@ -69,7 +72,7 @@ test_setup() {


inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \ inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
mount dmesg mkdir cp ping dd \ mount dmesg mkdir cp ping dd \
umount strace less setsid tree systemctl reset sync umount strace less setsid systemctl reset sync


for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
[ -f ${_terminfodir}/l/linux ] && break [ -f ${_terminfodir}/l/linux ] && break
@ -81,9 +84,7 @@ test_setup() {
inst /lib/systemd/system/systemd-remount-fs.service inst /lib/systemd/system/systemd-remount-fs.service
inst /lib/systemd/systemd-remount-fs inst /lib/systemd/systemd-remount-fs
inst /lib/systemd/system/systemd-journal-flush.service inst /lib/systemd/system/systemd-journal-flush.service
inst /etc/sysconfig/init
inst /lib/systemd/system/slices.target inst /lib/systemd/system/slices.target
inst /lib/systemd/system/system.slice
inst_multiple -o /lib/systemd/system/dracut* inst_multiple -o /lib/systemd/system/dracut*


inst_simple "${basedir}/modules.d/99base/dracut-lib.sh" "/lib/dracut-lib.sh" inst_simple "${basedir}/modules.d/99base/dracut-lib.sh" "/lib/dracut-lib.sh"
@ -150,28 +151,26 @@ EOF


# install basic tools needed # install basic tools needed
inst_multiple sh bash setsid loadkeys setfont \ inst_multiple sh bash setsid loadkeys setfont \
login sushell sulogin gzip sleep echo mount umount login sulogin gzip sleep echo mount umount
inst_multiple modprobe inst_multiple modprobe


# install libnss_files for login # install libnss_files for login
inst_libdir_file "libnss_files*" inst_libdir_file "libnss_files*"


# install dbus and pam # install dbus and pam
find \ inst_multiple -o \
/etc/dbus-1 \ /etc/dbus-1/** \
/etc/pam.d \ /etc/pam.d/** \
/etc/security \ /etc/security/** \
/lib64/security \ /lib64/security/** \
/lib/security -xtype f \ /lib/security/**
| while read -r file || [ -n "$file" ]; do
inst_multiple -o "$file"
done


# install dbus socket and service file # install dbus socket and service file
inst /usr/lib/systemd/system/dbus.socket inst_multiple -o \
inst /usr/lib/systemd/system/dbus.service /usr/lib/systemd/system/dbus.socket \
inst /usr/lib/systemd/system/dbus-broker.service /usr/lib/systemd/system/dbus.service \
inst /usr/lib/systemd/system/dbus-daemon.service /usr/lib/systemd/system/dbus-broker.service \
/usr/lib/systemd/system/dbus-daemon.service


( (
echo "FONT=eurlatgr" echo "FONT=eurlatgr"
@ -240,7 +239,6 @@ EOF
inst_multiple sfdisk mkfs.btrfs btrfs poweroff cp umount sync dd inst_multiple sfdisk mkfs.btrfs btrfs poweroff cp umount sync dd
inst_hook initqueue 01 ./create-root.sh inst_hook initqueue 01 ./create-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh inst_hook initqueue/finished 01 ./finished-false.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -253,18 +251,26 @@ EOF
--nohardlink \ --nohardlink \
--no-hostonly-cmdline -N \ --no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1

# Invoke KVM and/or QEMU to actually create the target filesystem.
rm -rf -- "$TESTDIR"/overlay rm -rf -- "$TESTDIR"/overlay


dd if=/dev/zero of="$TESTDIR"/result bs=1M count=1 # Create the blank file to use as a root filesystem
dd if=/dev/zero of="$TESTDIR"/root.btrfs bs=1MiB count=160
dd if=/dev/zero of="$TESTDIR"/usr.btrfs bs=1MiB count=160
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/root.btrfs root
qemu_add_drive_args disk_index disk_args "$TESTDIR"/usr.btrfs usr

# Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/root.btrfs \ "${disk_args[@]}" \
-drive format=raw,index=1,media=disk,file="$TESTDIR"/usr.btrfs \
-drive format=raw,index=2,media=disk,file="$TESTDIR"/result \
-append "root=/dev/fakeroot rw rootfstype=btrfs quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/fakeroot rw rootfstype=btrfs quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1
if ! grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/result; then
if ! grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img; then
echo "Could not create root filesystem" echo "Could not create root filesystem"
return 1 return 1
fi fi
@ -277,7 +283,6 @@ EOF
inst_multiple poweroff shutdown dd inst_multiple poweroff shutdown dd
inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


[ -e /etc/machine-id ] && EXTRA_MACHINE="/etc/machine-id" [ -e /etc/machine-id ] && EXTRA_MACHINE="/etc/machine-id"

View File

@ -1,8 +0,0 @@
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"

View File

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

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"
@ -6,40 +9,39 @@ done
rm -f -- /etc/lvm/lvm.conf rm -f -- /etc/lvm/lvm.conf
udevadm control --reload udevadm control --reload
udevadm settle udevadm settle
# save a partition at the beginning for future flagging purposes set -ex
sfdisk /dev/sda << EOF mdadm --create /dev/md0 --run --auto=yes --level=5 --raid-devices=3 /dev/disk/by-id/ata-disk_raid[123]
,4M
,41M
,41M
,41M
EOF
udevadm settle
mdadm --create /dev/md0 --run --auto=yes --level=5 --raid-devices=3 /dev/sda2 /dev/sda3 /dev/sda4
# wait for the array to finish initailizing, otherwise this sometimes fails # wait for the array to finish initailizing, otherwise this sometimes fails
# randomly. # randomly.
mdadm -W /dev/md0 mdadm -W /dev/md0 || :
set -e
printf test > keyfile printf test > keyfile
cryptsetup -q luksFormat /dev/md0 /keyfile cryptsetup -q luksFormat /dev/md0 /keyfile
echo "The passphrase is test" echo "The passphrase is test"
cryptsetup luksOpen /dev/md0 dracut_crypt_test < /keyfile cryptsetup luksOpen /dev/md0 dracut_crypt_test < /keyfile
lvm pvcreate -ff -y /dev/mapper/dracut_crypt_test lvm pvcreate -ff -y /dev/mapper/dracut_crypt_test
lvm vgcreate dracut /dev/mapper/dracut_crypt_test lvm vgcreate dracut /dev/mapper/dracut_crypt_test
lvm lvcreate -l 100%FREE -n root dracut \ lvm lvcreate -l 100%FREE -n root dracut
&& lvm vgchange -ay lvm vgchange -ay
mke2fs /dev/dracut/root mke2fs -L root /dev/dracut/root
mkdir -p /sysroot mkdir -p /sysroot
mount /dev/dracut/root /sysroot mount /dev/dracut/root /sysroot
cp -a -t /sysroot /source/* cp -a -t /sysroot /source/*
mkdir -p /sysroot/run
umount /sysroot umount /sysroot
lvm lvchange -a n /dev/dracut/root lvm lvchange -a n /dev/dracut/root
udevadm settle udevadm settle
cryptsetup luksClose /dev/mapper/dracut_crypt_test cryptsetup luksClose /dev/mapper/dracut_crypt_test
udevadm settle udevadm settle
mdadm -W /dev/md0 || :
udevadm settle
mdadm --detail --export /dev/md0 | grep -F MD_UUID > /tmp/mduuid
. /tmp/mduuid
udevadm settle
eval "$(udevadm info --query=env --name=/dev/md0 | while read -r line || [ -n "$line" ]; do [ "$line" != "${line#*ID_FS_UUID*}" ] && echo "$line"; done)" eval "$(udevadm info --query=env --name=/dev/md0 | while read -r line || [ -n "$line" ]; do [ "$line" != "${line#*ID_FS_UUID*}" ] && echo "$line"; done)"
{ {
echo "dracut-root-block-created" echo "dracut-root-block-created"
echo MD_UUID="$MD_UUID"
echo "ID_FS_UUID=$ID_FS_UUID" echo "ID_FS_UUID=$ID_FS_UUID"
} | dd oflag=direct,dsync of=/dev/sda1 } | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
sync sync
poweroff -f poweroff -f

View File

@ -1,19 +1,24 @@
#!/bin/sh #!/bin/sh
: > /dev/watchdog

. /lib/dracut-lib.sh . /lib/dracut-lib.sh


export PATH=/sbin:/bin:/usr/sbin:/usr/bin export PATH=/sbin:/bin:/usr/sbin:/usr/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1 exec > /dev/console 2>&1


echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/sda1 echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker

export TERM=linux export TERM=linux
export PS1='initramfs-test:\w\$ ' export PS1='initramfs-test:\w\$ '
[ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab [ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab
[ -f /etc/fstab ] || ln -sfn /proc/mounts /etc/fstab [ -f /etc/fstab ] || ln -sfn /proc/mounts /etc/fstab
stty sane stty sane
echo "made it to the rootfs!" echo "made it to the rootfs!"
getargbool 0 rd.shell && sh -i if getargbool 0 rd.shell; then
strstr "$(setsid --help)" "control" && CTTY="-c"
setsid $CTTY sh -i
fi
echo "Powering down." echo "Powering down."
mount -n -o remount,ro / mount -n -o remount,ro /
sync
poweroff -f poweroff -f

View File

@ -8,20 +8,24 @@ KVERSION=${KVERSION-$(uname -r)}
#DEBUGFAIL="rd.shell rd.udev.log-priority=debug loglevel=70 systemd.log_target=kmsg" #DEBUGFAIL="rd.shell rd.udev.log-priority=debug loglevel=70 systemd.log_target=kmsg"
#DEBUGFAIL="rd.break rd.shell rd.debug debug" #DEBUGFAIL="rd.break rd.shell rd.debug debug"
test_run() { test_run() {
DISKIMAGE=$TESTDIR/TEST-10-RAID-root.img dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-1.img raid1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-2.img raid2
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-3.img raid3

"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$DISKIMAGE" \ "${disk_args[@]}" \
-append "panic=1 systemd.crash_reboot root=/dev/dracut/root rd.auto rw rd.retry=10 console=ttyS0,115200n81 selinux=0 rd.shell=0 $DEBUGFAIL" \ -append "panic=1 systemd.crash_reboot root=/dev/dracut/root rd.auto rw rd.retry=10 console=ttyS0,115200n81 selinux=0 rd.shell=0 $DEBUGFAIL" \
-initrd "$TESTDIR"/initramfs.testing -initrd "$TESTDIR"/initramfs.testing || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$DISKIMAGE" || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/marker.img
} }


test_setup() { test_setup() {
DISKIMAGE=$TESTDIR/TEST-10-RAID-root.img
# Create the blank file to use as a root filesystem
rm -f -- "$DISKIMAGE"
dd if=/dev/zero of="$DISKIMAGE" bs=1M count=128

kernel=$KVERSION kernel=$KVERSION
# Create what will eventually be our root filesystem onto an overlay # Create what will eventually be our root filesystem onto an overlay
( (
@ -67,10 +71,9 @@ test_setup() {
export initdir=$TESTDIR/overlay export initdir=$TESTDIR/overlay
# shellcheck disable=SC1090 # shellcheck disable=SC1090
. "$basedir"/dracut-init.sh . "$basedir"/dracut-init.sh
inst_multiple sfdisk mke2fs poweroff cp umount dd sync inst_multiple sfdisk mke2fs poweroff cp umount dd sync grep
inst_hook initqueue 01 ./create-root.sh inst_hook initqueue 01 ./create-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh inst_hook initqueue/finished 01 ./finished-false.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -83,13 +86,26 @@ test_setup() {
--no-hostonly-cmdline -N \ --no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
rm -rf -- "$TESTDIR"/overlay rm -rf -- "$TESTDIR"/overlay
# Invoke KVM and/or QEMU to actually create the target filesystem.
# Create the blank files to use as a root filesystem
dd if=/dev/zero of="$TESTDIR"/raid-1.img bs=1MiB count=40
dd if=/dev/zero of="$TESTDIR"/raid-2.img bs=1MiB count=40
dd if=/dev/zero of="$TESTDIR"/raid-3.img bs=1MiB count=40
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-1.img raid1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-2.img raid2
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-3.img raid3

"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$DISKIMAGE" \ "${disk_args[@]}" \
-append "root=/dev/cannotreach rw rootfstype=ext2 console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/cannotreach rw rootfstype=ext2 console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$DISKIMAGE" || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1
eval "$(grep -F -a -m 1 ID_FS_UUID "$DISKIMAGE")" eval "$(grep -F -a -m 1 ID_FS_UUID "$TESTDIR"/marker.img)"


( (
# shellcheck disable=SC2031 # shellcheck disable=SC2031
@ -104,7 +120,6 @@ test_setup() {
echo "testluks UUID=$ID_FS_UUID /etc/key" > "$initdir"/etc/crypttab echo "testluks UUID=$ID_FS_UUID /etc/key" > "$initdir"/etc/crypttab
#echo "luks-$ID_FS_UUID /dev/md0 none" > $initdir/etc/crypttab #echo "luks-$ID_FS_UUID /dev/md0 none" > $initdir/etc/crypttab
echo -n "test" > "$initdir"/etc/key echo -n "test" > "$initdir"/etc/key
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \

View File

@ -1,8 +0,0 @@
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"

View File

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

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"
@ -6,28 +9,20 @@ done
rm -f -- /etc/lvm/lvm.conf rm -f -- /etc/lvm/lvm.conf
udevadm control --reload udevadm control --reload
udevadm settle udevadm settle
# save a partition at the beginning for future flagging purposes
sfdisk /dev/sda << EOF set -ex
,2M for dev in /dev/disk/by-id/ata-disk_disk[123]; do
,20M lvm pvcreate -ff -y "$dev"
,20M done
,20M
EOF lvm vgcreate dracut /dev/disk/by-id/ata-disk_disk[123]
udevadm settle lvm lvcreate -l 100%FREE -n root dracut
for i in sda2 sda3 sda4; do lvm vgchange -ay
lvm pvcreate -ff -y /dev/$i mke2fs /dev/dracut/root
done \ mkdir -p /sysroot
&& lvm vgcreate dracut /dev/sda[234] \ mount /dev/dracut/root /sysroot
&& lvm lvcreate -l 100%FREE -n root dracut \ cp -a -t /sysroot /source/*
&& lvm vgchange -ay \ umount /sysroot
&& mke2fs /dev/dracut/root \ lvm lvchange -a n /dev/dracut/root
&& mkdir -p /sysroot \ echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
&& mount /dev/dracut/root /sysroot \
&& cp -a -t /sysroot /source/* \
&& umount /sysroot \
&& sleep 1 \
&& lvm lvchange -a n /dev/dracut/root \
&& sleep 1 \
&& echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/sda1
sync
poweroff -f poweroff -f

View File

@ -1,19 +1,24 @@
#!/bin/sh #!/bin/sh
: > /dev/watchdog

. /lib/dracut-lib.sh . /lib/dracut-lib.sh


export PATH=/sbin:/bin:/usr/sbin:/usr/bin export PATH=/sbin:/bin:/usr/sbin:/usr/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1 exec > /dev/console 2>&1


echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/sda1 echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker

export TERM=linux export TERM=linux
export PS1='initramfs-test:\w\$ ' export PS1='initramfs-test:\w\$ '
[ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab [ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab
[ -f /etc/fstab ] || ln -sfn /proc/mounts /etc/fstab [ -f /etc/fstab ] || ln -sfn /proc/mounts /etc/fstab
stty sane stty sane
echo "made it to the rootfs!" echo "made it to the rootfs!"
getargbool 0 rd.shell && sh -i if getargbool 0 rd.shell; then
strstr "$(setsid --help)" "control" && CTTY="-c"
setsid $CTTY sh -i
fi
echo "Powering down." echo "Powering down."
mount -n -o remount,ro / mount -n -o remount,ro /
sync
poweroff -f poweroff -f

View File

@ -9,17 +9,24 @@ KVERSION=${KVERSION-$(uname -r)}
#DEBUGFAIL="rd.break rd.shell" #DEBUGFAIL="rd.break rd.shell"


test_run() { test_run() {
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-1.img disk1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-2.img disk2
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-3.img disk3

"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/root.ext2 \ "${disk_args[@]}" \
-append "panic=1 systemd.crash_reboot root=/dev/dracut/root rw rd.auto=1 quiet rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.debug rd.shell=0 $DEBUGFAIL" \ -append "panic=1 systemd.crash_reboot root=/dev/dracut/root rw rd.auto=1 quiet rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.debug rd.shell=0 $DEBUGFAIL" \
-initrd "$TESTDIR"/initramfs.testing -initrd "$TESTDIR"/initramfs.testing || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/root.ext2 || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/marker.img
} }


test_setup() { test_setup() {
# Create the blank file to use as a root filesystem
dd if=/dev/zero of="$TESTDIR"/root.ext2 bs=1M count=80

kernel=$KVERSION kernel=$KVERSION
# Create what will eventually be our root filesystem onto an overlay # Create what will eventually be our root filesystem onto an overlay
( (
@ -69,7 +76,6 @@ test_setup() {
inst_multiple sfdisk mke2fs poweroff cp umount dd sync inst_multiple sfdisk mke2fs poweroff cp umount dd sync
inst_hook initqueue 01 ./create-root.sh inst_hook initqueue 01 ./create-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh inst_hook initqueue/finished 01 ./finished-false.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -81,11 +87,26 @@ test_setup() {
--no-hostonly-cmdline -N \ --no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
rm -rf -- "$TESTDIR"/overlay rm -rf -- "$TESTDIR"/overlay
# Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu -drive format=raw,index=0,media=disk,file="$TESTDIR"/root.ext2 \ # Create the blank files to use as a root filesystem
dd if=/dev/zero of="$TESTDIR"/disk-1.img bs=1MiB count=40
dd if=/dev/zero of="$TESTDIR"/disk-2.img bs=1MiB count=40
dd if=/dev/zero of="$TESTDIR"/disk-3.img bs=1MiB count=40
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-1.img disk1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-2.img disk2
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-3.img disk3

"$testdir"/run-qemu \
"${disk_args[@]}" \
-append "root=/dev/fakeroot rw rootfstype=ext2 quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/fakeroot rw rootfstype=ext2 quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/root.ext2 || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1

( (
# shellcheck disable=SC2031 # shellcheck disable=SC2031
export initdir=$TESTDIR/overlay export initdir=$TESTDIR/overlay
@ -94,7 +115,6 @@ test_setup() {
inst_multiple poweroff shutdown dd inst_multiple poweroff shutdown dd
inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )
"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
-o "plymouth network kernel-network-modules" \ -o "plymouth network kernel-network-modules" \

View File

@ -1,8 +0,0 @@
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"

View File

@ -1,24 +1,22 @@
#!/bin/sh #!/bin/sh
# don't let udev and this script step on eachother's toes


trap 'poweroff -f' EXIT trap 'poweroff -f' EXIT


# don't let udev and this script step on eachother's toes
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"
done done
rm -f -- /etc/lvm/lvm.conf rm -f -- /etc/lvm/lvm.conf
udevadm control --reload udevadm control --reload
udevadm settle udevadm settle
sleep 1 set -ex
mdadm --create /dev/md0 --run --auto=yes --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd mdadm --create /dev/md0 --run --auto=yes --level=5 --raid-devices=3 /dev/disk/by-id/ata-disk_raid[123]
# wait for the array to finish initailizing, otherwise this sometimes fails # wait for the array to finish initailizing, otherwise this sometimes fails
# randomly. # randomly.
mdadm -W /dev/md0 mdadm -W /dev/md0 || :
printf test > keyfile printf test > keyfile
cryptsetup -q luksFormat /dev/md0 /keyfile cryptsetup -q luksFormat /dev/md0 /keyfile
echo "The passphrase is test" echo "The passphrase is test"
set -e
set -x
cryptsetup luksOpen /dev/md0 dracut_crypt_test < /keyfile cryptsetup luksOpen /dev/md0 dracut_crypt_test < /keyfile
lvm pvcreate -ff -y /dev/mapper/dracut_crypt_test lvm pvcreate -ff -y /dev/mapper/dracut_crypt_test
lvm vgcreate dracut /dev/mapper/dracut_crypt_test lvm vgcreate dracut /dev/mapper/dracut_crypt_test
@ -44,6 +42,6 @@ eval "$(udevadm info --query=env --name=/dev/md0 | while read -r line || [ -n "$
echo "dracut-root-block-created" echo "dracut-root-block-created"
echo MD_UUID="$MD_UUID" echo MD_UUID="$MD_UUID"
echo "ID_FS_UUID=$ID_FS_UUID" echo "ID_FS_UUID=$ID_FS_UUID"
} | dd oflag=direct,dsync of=/dev/sda } | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
sync sync
poweroff -f poweroff -f

View File

@ -1,23 +1,27 @@
#!/bin/sh #!/bin/sh
: > /dev/watchdog

. /lib/dracut-lib.sh . /lib/dracut-lib.sh


export PATH=/sbin:/bin:/usr/sbin:/usr/bin export PATH=/sbin:/bin:/usr/sbin:/usr/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1 exec > /dev/console 2>&1


echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/sda echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker

export TERM=linux export TERM=linux
export PS1='initramfs-test:\w\$ ' export PS1='initramfs-test:\w\$ '
[ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab [ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab
[ -f /etc/fstab ] || ln -sfn /proc/mounts /etc/fstab [ -f /etc/fstab ] || ln -sfn /proc/mounts /etc/fstab
stty sane stty sane
echo "made it to the rootfs!" echo "made it to the rootfs!"
getargbool 0 rd.shell && sh -i if getargbool 0 rd.shell; then
strstr "$(setsid --help)" "control" && CTTY="-c"
setsid $CTTY sh -i
fi
echo "Powering down." echo "Powering down."
mount -n -o remount,ro / mount -n -o remount,ro /
#echo " rd.break=shutdown " >> /run/initramfs/etc/cmdline
if [ -d /run/initramfs/etc ]; then if [ -d /run/initramfs/etc ]; then
echo " rd.debug=0 " >> /run/initramfs/etc/cmdline echo " rd.debug=0 " >> /run/initramfs/etc/cmdline
fi fi
sync
poweroff -f poweroff -f

View File

@ -12,21 +12,25 @@ KVERSION=${KVERSION-$(uname -r)}


client_run() { client_run() {
echo "CLIENT TEST START: $*" echo "CLIENT TEST START: $*"
cp --sparse=always --reflink=auto "$TESTDIR"/disk2.img "$TESTDIR"/disk2.img.new dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
cp --sparse=always --reflink=auto "$TESTDIR"/disk3.img "$TESTDIR"/disk3.img.new declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
# degrade the RAID
# qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-1.img raid1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-2.img raid2
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-3.img raid3


"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/marker.img \ "${disk_args[@]}" \
-drive format=raw,index=2,media=disk,file="$TESTDIR"/disk2.img.new \
-drive format=raw,index=3,media=disk,file="$TESTDIR"/disk3.img.new \
-append "panic=1 systemd.crash_reboot $* systemd.log_target=kmsg root=LABEL=root rw rd.retry=10 rd.info console=ttyS0,115200n81 log_buf_len=2M selinux=0 rd.shell=0 $DEBUGFAIL " \ -append "panic=1 systemd.crash_reboot $* systemd.log_target=kmsg root=LABEL=root rw rd.retry=10 rd.info console=ttyS0,115200n81 log_buf_len=2M selinux=0 rd.shell=0 $DEBUGFAIL " \
-initrd "$TESTDIR"/initramfs.testing -initrd "$TESTDIR"/initramfs.testing

if ! grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/marker.img; then if ! grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/marker.img; then
echo "CLIENT TEST END: $* [FAIL]" echo "CLIENT TEST END: $* [FAIL]"
return 1 return 1
fi fi
rm -f -- "$TESTDIR"/marker.img
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1M count=40


echo "CLIENT TEST END: $* [OK]" echo "CLIENT TEST END: $* [OK]"
return 0 return 0
@ -54,13 +58,6 @@ test_run() {
} }


test_setup() { test_setup() {
# Create the blank file to use as a root filesystem
rm -f -- "$TESTDIR"/marker.img
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1M count=40
dd if=/dev/zero of="$TESTDIR"/disk1.img bs=1M count=35
dd if=/dev/zero of="$TESTDIR"/disk2.img bs=1M count=35
dd if=/dev/zero of="$TESTDIR"/disk3.img bs=1M count=35

kernel=$KVERSION kernel=$KVERSION
# Create what will eventually be our root filesystem onto an overlay # Create what will eventually be our root filesystem onto an overlay
( (
@ -108,7 +105,6 @@ test_setup() {
inst_multiple sfdisk mke2fs poweroff cp umount dd grep sync inst_multiple sfdisk mke2fs poweroff cp umount dd grep sync
inst_hook initqueue 01 ./create-root.sh inst_hook initqueue 01 ./create-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh inst_hook initqueue/finished 01 ./finished-false.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -120,12 +116,22 @@ test_setup() {
--no-hostonly-cmdline -N \ --no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
rm -rf -- "$TESTDIR"/overlay rm -rf -- "$TESTDIR"/overlay
# Invoke KVM and/or QEMU to actually create the target filesystem.
# Create the blank files to use as a root filesystem
dd if=/dev/zero of="$TESTDIR"/raid-1.img bs=1MiB count=40
dd if=/dev/zero of="$TESTDIR"/raid-2.img bs=1MiB count=40
dd if=/dev/zero of="$TESTDIR"/raid-3.img bs=1MiB count=40
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-1.img raid1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-2.img raid2
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-3.img raid3

"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/marker.img \ "${disk_args[@]}" \
-drive format=raw,index=1,media=disk,file="$TESTDIR"/disk1.img \
-drive format=raw,index=2,media=disk,file="$TESTDIR"/disk2.img \
-drive format=raw,index=3,media=disk,file="$TESTDIR"/disk3.img \
-append "root=/dev/fakeroot rw rootfstype=ext2 quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/fakeroot rw rootfstype=ext2 quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1


@ -144,12 +150,12 @@ test_setup() {
inst_multiple poweroff shutdown dd inst_multiple poweroff shutdown dd
inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
inst ./cryptroot-ask.sh /sbin/cryptroot-ask inst ./cryptroot-ask.sh /sbin/cryptroot-ask
mkdir -p "$initdir"/etc mkdir -p "$initdir"/etc
echo "ARRAY /dev/md0 level=raid5 num-devices=3 UUID=$MD_UUID" > "$initdir"/etc/mdadm.conf echo "ARRAY /dev/md0 level=raid5 num-devices=3 UUID=$MD_UUID" > "$initdir"/etc/mdadm.conf
echo "luks-$ID_FS_UUID UUID=$ID_FS_UUID /etc/key" > "$initdir"/etc/crypttab echo "luks-$ID_FS_UUID UUID=$ID_FS_UUID /etc/key" > "$initdir"/etc/crypttab
echo -n test > "$initdir"/etc/key echo -n test > "$initdir"/etc/key
chmod 0600 "$initdir"/etc/key
) )


"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \

View File

@ -1,8 +0,0 @@
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"

View File

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

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
set -x set -x
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
@ -7,53 +10,41 @@ done
rm -f -- /etc/lvm/lvm.conf rm -f -- /etc/lvm/lvm.conf
udevadm control --reload udevadm control --reload
udevadm settle udevadm settle
# save a partition at the beginning for future flagging purposes
sfdisk /dev/sda << EOF set -ex
,4M
,43M
,43M
,43M
EOF
udevadm settle
printf test > keyfile printf test > keyfile
cryptsetup -q luksFormat /dev/sda2 /keyfile cryptsetup -q luksFormat /dev/disk/by-id/ata-disk_disk1 /keyfile
cryptsetup -q luksFormat /dev/sda3 /keyfile cryptsetup -q luksFormat /dev/disk/by-id/ata-disk_disk2 /keyfile
cryptsetup -q luksFormat /dev/sda4 /keyfile cryptsetup -q luksFormat /dev/disk/by-id/ata-disk_disk3 /keyfile
cryptsetup luksOpen /dev/sda2 dracut_sda2 < /keyfile cryptsetup luksOpen /dev/disk/by-id/ata-disk_disk1 dracut_disk1 < /keyfile
cryptsetup luksOpen /dev/sda3 dracut_sda3 < /keyfile cryptsetup luksOpen /dev/disk/by-id/ata-disk_disk2 dracut_disk2 < /keyfile
cryptsetup luksOpen /dev/sda4 dracut_sda4 < /keyfile cryptsetup luksOpen /dev/disk/by-id/ata-disk_disk3 dracut_disk3 < /keyfile
mdadm --create /dev/md0 --run --auto=yes --level=5 --raid-devices=3 /dev/mapper/dracut_sda2 /dev/mapper/dracut_sda3 /dev/mapper/dracut_sda4 mdadm --create /dev/md0 --run --auto=yes --level=5 --raid-devices=3 /dev/mapper/dracut_disk1 /dev/mapper/dracut_disk2 /dev/mapper/dracut_disk3
# wait for the array to finish initailizing, otherwise this sometimes fails # wait for the array to finish initailizing, otherwise this sometimes fails
# randomly. # randomly.
mdadm -W /dev/md0 mdadm -W /dev/md0
lvm pvcreate -ff -y /dev/md0 \ lvm pvcreate -ff -y /dev/md0
&& lvm vgcreate dracut /dev/md0 \ lvm vgcreate dracut /dev/md0
&& lvm lvcreate -l 100%FREE -n root dracut \
&& lvm vgchange -ay \ lvm lvcreate -l 100%FREE -n root dracut
&& mke2fs /dev/dracut/root \ lvm vgchange -ay
&& mkdir -p /sysroot \ mke2fs /dev/dracut/root
&& mount /dev/dracut/root /sysroot \ mkdir -p /sysroot
&& cp -a -t /sysroot /source/* \ mount /dev/dracut/root /sysroot
&& umount /sysroot \ cp -a -t /sysroot /source/*
&& sleep 2 \ umount /sysroot
&& lvm lvchange -a n /dev/dracut/root \ lvm lvchange -a n /dev/dracut/root
&& sleep 2 \ mdadm -W /dev/md0 || :
&& lvm vgchange -a n dracut \ mdadm --stop /dev/md0
&& { cryptsetup luksClose /dev/mapper/dracut_disk1
lvm vgdisplay \ cryptsetup luksClose /dev/mapper/dracut_disk2
&& { mdadm -W /dev/md0 || :; } \ cryptsetup luksClose /dev/mapper/dracut_disk3
&& mdadm --stop /dev/md0 \
&& cryptsetup luksClose /dev/mapper/dracut_sda2 \ {
&& cryptsetup luksClose /dev/mapper/dracut_sda3 \ echo "dracut-root-block-created"
&& cryptsetup luksClose /dev/mapper/dracut_sda4 \ for i in /dev/disk/by-id/ata-disk_disk[123]; do
&& : udevadm info --query=env --name="$i" | grep -F 'ID_FS_UUID='
: done
} \ } | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
&& {
echo "dracut-root-block-created"
for i in /dev/sda[234]; do
udevadm info --query=env --name="$i" | grep -F 'ID_FS_UUID='
done
} | dd oflag=direct,dsync of=/dev/sda1
sync sync
poweroff -f poweroff -f

View File

@ -1,11 +1,27 @@
#!/bin/sh #!/bin/sh
: > /dev/watchdog

. /lib/dracut-lib.sh

export PATH=/sbin:/bin:/usr/sbin:/usr/bin export PATH=/sbin:/bin:/usr/sbin:/usr/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1 exec > /dev/console 2>&1
echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/sdb
echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker

export TERM=linux export TERM=linux
export PS1='initramfs-test:\w\$ ' export PS1='initramfs-test:\w\$ '
[ -f /etc/fstab ] || ln -s /proc/mounts /etc/fstab [ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab
[ -f /etc/fstab ] || ln -sfn /proc/mounts /etc/fstab
stty sane stty sane
echo "made it to the rootfs! Powering down." echo "made it to the rootfs!"
if getargbool 0 rd.shell; then
strstr "$(setsid --help)" "control" && CTTY="-c"
setsid $CTTY sh -i
fi
echo "Powering down."
mount -n -o remount,ro / mount -n -o remount,ro /
if [ -d /run/initramfs/etc ]; then
echo " rd.debug=0 " >> /run/initramfs/etc/cmdline
fi
poweroff -f poweroff -f

View File

@ -12,47 +12,49 @@ KVERSION=${KVERSION-$(uname -r)}
test_run() { test_run() {
LUKSARGS=$(cat "$TESTDIR"/luks.txt) LUKSARGS=$(cat "$TESTDIR"/luks.txt)


dd if=/dev/zero of="$TESTDIR"/check-success.img bs=1M count=1 dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1


echo "CLIENT TEST START: $LUKSARGS" echo "CLIENT TEST START: $LUKSARGS"

declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-1.img disk1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-2.img disk2
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-3.img disk3

"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/root.ext2 \ "${disk_args[@]}" \
-drive format=raw,index=1,media=disk,file="$TESTDIR"/check-success.img \
-append "panic=1 systemd.crash_reboot root=/dev/dracut/root rw rd.auto rd.retry=20 console=ttyS0,115200n81 selinux=0 rd.debug rootwait $LUKSARGS rd.shell=0 $DEBUGFAIL" \ -append "panic=1 systemd.crash_reboot root=/dev/dracut/root rw rd.auto rd.retry=20 console=ttyS0,115200n81 selinux=0 rd.debug rootwait $LUKSARGS rd.shell=0 $DEBUGFAIL" \
-initrd "$TESTDIR"/initramfs.testing -initrd "$TESTDIR"/initramfs.testing
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/check-success.img || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/marker.img || return 1
echo "CLIENT TEST END: [OK]" echo "CLIENT TEST END: [OK]"


dd if=/dev/zero of="$TESTDIR"/check-success.img bs=1M count=1 dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1


echo "CLIENT TEST START: Any LUKS" echo "CLIENT TEST START: Any LUKS"
"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/root.ext2 \ "${disk_args[@]}" \
-drive format=raw,index=1,media=disk,file="$TESTDIR"/check-success.img \
-append "panic=1 systemd.crash_reboot root=/dev/dracut/root rw quiet rd.auto rd.retry=20 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL" \ -append "panic=1 systemd.crash_reboot root=/dev/dracut/root rw quiet rd.auto rd.retry=20 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL" \
-initrd "$TESTDIR"/initramfs.testing -initrd "$TESTDIR"/initramfs.testing
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/check-success.img || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/marker.img || return 1
echo "CLIENT TEST END: [OK]" echo "CLIENT TEST END: [OK]"


dd if=/dev/zero of="$TESTDIR"/check-success.img bs=1M count=1 dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1


echo "CLIENT TEST START: Wrong LUKS UUID" echo "CLIENT TEST START: Wrong LUKS UUID"
"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/root.ext2 \ "${disk_args[@]}" \
-drive format=raw,index=1,media=disk,file="$TESTDIR"/check-success.img \
-append "panic=1 systemd.crash_reboot root=/dev/dracut/root rw quiet rd.auto rd.retry=10 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL rd.luks.uuid=failme" \ -append "panic=1 systemd.crash_reboot root=/dev/dracut/root rw quiet rd.auto rd.retry=10 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL rd.luks.uuid=failme" \
-initrd "$TESTDIR"/initramfs.testing -initrd "$TESTDIR"/initramfs.testing
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/check-success.img && return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/marker.img && return 1
echo "CLIENT TEST END: [OK]" echo "CLIENT TEST END: [OK]"


return 0 return 0
} }


test_setup() { test_setup() {
# Create the blank file to use as a root filesystem
rm -f -- "$TESTDIR"/root.ext2
dd if=/dev/zero of="$TESTDIR"/root.ext2 bs=1M count=134

kernel=$KVERSION kernel=$KVERSION
# Create what will eventually be our root filesystem onto an overlay # Create what will eventually be our root filesystem onto an overlay
( (
@ -77,6 +79,12 @@ test_setup() {
inst_multiple -o ${_terminfodir}/l/linux inst_multiple -o ${_terminfodir}/l/linux
inst "$basedir/modules.d/35network-legacy/dhclient-script.sh" "/sbin/dhclient-script" inst "$basedir/modules.d/35network-legacy/dhclient-script.sh" "/sbin/dhclient-script"
inst "$basedir/modules.d/35network-legacy/ifup.sh" "/sbin/ifup" inst "$basedir/modules.d/35network-legacy/ifup.sh" "/sbin/ifup"

inst_simple "${basedir}/modules.d/99base/dracut-lib.sh" "/lib/dracut-lib.sh"
inst_binary "${basedir}/dracut-util" "/usr/bin/dracut-util"
ln -s dracut-util "${initdir}/usr/bin/dracut-getarg"
ln -s dracut-util "${initdir}/usr/bin/dracut-getargs"

inst_multiple grep inst_multiple grep
inst_simple /etc/os-release inst_simple /etc/os-release
inst ./test-init.sh /sbin/init inst ./test-init.sh /sbin/init
@ -95,7 +103,6 @@ test_setup() {
inst_multiple sfdisk mke2fs poweroff cp umount grep dd sync inst_multiple sfdisk mke2fs poweroff cp umount grep dd sync
inst_hook initqueue 01 ./create-root.sh inst_hook initqueue 01 ./create-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh inst_hook initqueue/finished 01 ./finished-false.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -107,12 +114,26 @@ test_setup() {
--no-hostonly-cmdline -N \ --no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
rm -rf -- "$TESTDIR"/overlay rm -rf -- "$TESTDIR"/overlay
# Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu -drive format=raw,index=0,media=disk,file="$TESTDIR"/root.ext2 \ # Create the blank files to use as a root filesystem
dd if=/dev/zero of="$TESTDIR"/disk-1.img bs=1MiB count=40
dd if=/dev/zero of="$TESTDIR"/disk-2.img bs=1MiB count=40
dd if=/dev/zero of="$TESTDIR"/disk-3.img bs=1MiB count=40
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-1.img disk1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-2.img disk2
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-3.img disk3

"$testdir"/run-qemu \
"${disk_args[@]}" \
-append "root=/dev/fakeroot rw rootfstype=ext2 quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/fakeroot rw rootfstype=ext2 quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/root.ext2 || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1
cryptoUUIDS=$(grep -F --binary-files=text -m 3 ID_FS_UUID "$TESTDIR"/root.ext2) cryptoUUIDS=$(grep -F --binary-files=text -m 3 ID_FS_UUID "$TESTDIR"/marker.img)
for uuid in $cryptoUUIDS; do for uuid in $cryptoUUIDS; do
eval "$uuid" eval "$uuid"
printf ' rd.luks.uuid=luks-%s ' "$ID_FS_UUID" printf ' rd.luks.uuid=luks-%s ' "$ID_FS_UUID"
@ -126,16 +147,16 @@ test_setup() {
inst_multiple poweroff shutdown dd inst_multiple poweroff shutdown dd
inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
inst ./cryptroot-ask.sh /sbin/cryptroot-ask inst ./cryptroot-ask.sh /sbin/cryptroot-ask
mkdir -p "$initdir"/etc mkdir -p "$initdir"/etc
i=2 i=1
for uuid in $cryptoUUIDS; do for uuid in $cryptoUUIDS; do
eval "$uuid" eval "$uuid"
printf 'luks-%s /dev/sda%s /etc/key timeout=0\n' "$ID_FS_UUID" $i printf 'luks-%s /dev/disk/by-id/ata-disk_disk%s /etc/key timeout=0\n' "$ID_FS_UUID" $i
((i += 1)) ((i += 1))
done > "$initdir"/etc/crypttab done > "$initdir"/etc/crypttab
echo -n test > "$initdir"/etc/key echo -n test > "$initdir"/etc/key
chmod 0600 "$initdir"/etc/key
) )
"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
-o "plymouth network kernel-network-modules" \ -o "plymouth network kernel-network-modules" \

View File

@ -1,8 +0,0 @@
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"

View File

@ -12,11 +12,7 @@ udevadm control --reload
udevadm settle udevadm settle


# dmraid does not want symlinks in --disk "..." # dmraid does not want symlinks in --disk "..."
if [ -e /dev/hda ]; then echo y | dmraid -f isw -C Test0 --type 1 --disk "$(realpath /dev/disk/by-id/ata-disk_disk1) $(realpath /dev/disk/by-id/ata-disk_disk2)"
echo y | dmraid -f isw -C Test0 --type 1 --disk "/dev/hdb /dev/hdc"
else
echo y | dmraid -f isw -C Test0 --type 1 --disk "/dev/sdb /dev/sdc"
fi
udevadm settle udevadm settle


SETS=$(dmraid -c -s) SETS=$(dmraid -c -s)
@ -78,7 +74,7 @@ echo "MD_UUID=$MD_UUID"
{ {
echo "dracut-root-block-created" echo "dracut-root-block-created"
echo MD_UUID="$MD_UUID" echo MD_UUID="$MD_UUID"
} | dd oflag=direct,dsync of=/dev/sda } | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
mdadm --wait-clean /dev/md0 mdadm --wait-clean /dev/md0
sync sync
poweroff -f poweroff -f

View File

@ -1,19 +1,27 @@
#!/bin/sh #!/bin/sh
: > /dev/watchdog

. /lib/dracut-lib.sh . /lib/dracut-lib.sh


export PATH=/sbin:/bin:/usr/sbin:/usr/bin export PATH=/sbin:/bin:/usr/sbin:/usr/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1 exec > /dev/console 2>&1


echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/sda echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker

export TERM=linux export TERM=linux
export PS1='initramfs-test:\w\$ ' export PS1='initramfs-test:\w\$ '
cat /proc/mdstat [ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab
[ -f /etc/fstab ] || ln -s /proc/mounts /etc/fstab [ -f /etc/fstab ] || ln -sfn /proc/mounts /etc/fstab
stty sane stty sane
echo "made it to the rootfs!" echo "made it to the rootfs!"
getargbool 0 rd.shell && sh -i if getargbool 0 rd.shell; then
strstr "$(setsid --help)" "control" && CTTY="-c"
setsid $CTTY sh -i
fi
echo "Powering down." echo "Powering down."
mount -n -o remount,ro / mount -n -o remount,ro /
sync if [ -d /run/initramfs/etc ]; then
echo " rd.debug=0 " >> /run/initramfs/etc/cmdline
fi
poweroff -f poweroff -f

View File

@ -11,15 +11,18 @@ KVERSION=${KVERSION-$(uname -r)}
client_run() { client_run() {
echo "CLIENT TEST START: $*" echo "CLIENT TEST START: $*"


rm -f -- "$TESTDIR"/marker.img dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1M count=1 declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-1.img disk1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-2.img disk2


"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/marker.img \ "${disk_args[@]}" \
-drive format=raw,index=1,media=disk,file="$TESTDIR"/disk1 \
-drive format=raw,index=2,media=disk,file="$TESTDIR"/disk2 \
-append "panic=1 systemd.crash_reboot $* root=LABEL=root rw debug rd.retry=5 rd.debug console=ttyS0,115200n81 selinux=0 rd.info rd.shell=0 $DEBUGFAIL" \ -append "panic=1 systemd.crash_reboot $* root=LABEL=root rw debug rd.retry=5 rd.debug console=ttyS0,115200n81 selinux=0 rd.info rd.shell=0 $DEBUGFAIL" \
-initrd "$TESTDIR"/initramfs.testing -initrd "$TESTDIR"/initramfs.testing || return 1


if ! grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/marker.img; then if ! grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/marker.img; then
echo "CLIENT TEST END: $* [FAIL]" echo "CLIENT TEST END: $* [FAIL]"
@ -49,15 +52,6 @@ test_run() {
} }


test_setup() { test_setup() {

# Create the blank file to use as a root filesystem
rm -f -- "$TESTDIR"/marker.img
rm -f -- "$TESTDIR"/disk1
rm -f -- "$TESTDIR"/disk2
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1M count=1
dd if=/dev/zero of="$TESTDIR"/disk1 bs=1M count=104
dd if=/dev/zero of="$TESTDIR"/disk2 bs=1M count=104

kernel=$KVERSION kernel=$KVERSION
# Create what will eventually be our root filesystem onto an overlay # Create what will eventually be our root filesystem onto an overlay
( (
@ -103,9 +97,8 @@ test_setup() {
export initdir=$TESTDIR/overlay export initdir=$TESTDIR/overlay
# shellcheck disable=SC1090 # shellcheck disable=SC1090
. "$basedir"/dracut-init.sh . "$basedir"/dracut-init.sh
inst_multiple sfdisk mke2fs poweroff cp umount grep dd sync inst_multiple sfdisk mke2fs poweroff cp umount grep dd sync realpath
inst_hook initqueue 01 ./create-root.sh inst_hook initqueue 01 ./create-root.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -117,11 +110,21 @@ test_setup() {
--no-hostonly-cmdline -N \ --no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
rm -rf -- "$TESTDIR"/overlay rm -rf -- "$TESTDIR"/overlay

# Create the blank files to use as a root filesystem
dd if=/dev/zero of="$TESTDIR"/disk-1.img bs=1MiB count=100
dd if=/dev/zero of="$TESTDIR"/disk-2.img bs=1MiB count=100
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-1.img disk1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-2.img disk2

# Invoke KVM and/or QEMU to actually create the target filesystem. # Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/marker.img \ "${disk_args[@]}" \
-drive format=raw,index=1,media=disk,file="$TESTDIR"/disk1 \
-drive format=raw,index=2,media=disk,file="$TESTDIR"/disk2 \
-append "root=/dev/dracut/root rw rootfstype=ext2 quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/dracut/root rw rootfstype=ext2 quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1
@ -141,7 +144,6 @@ test_setup() {
inst_multiple poweroff shutdown inst_multiple poweroff shutdown
inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )
"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
-o "plymouth network kernel-network-modules" \ -o "plymouth network kernel-network-modules" \

View File

@ -1,8 +0,0 @@
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"

View File

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

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"
@ -6,24 +9,20 @@ done
modprobe btrfs modprobe btrfs
udevadm control --reload udevadm control --reload
udevadm settle udevadm settle
# save a partition at the beginning for future flagging purposes
sfdisk -X gpt /dev/sda << EOF set -e
,10M
,200M mkfs.btrfs -draid10 -mraid10 -L root /dev/disk/by-id/ata-disk_raid[1234]
,200M
,200M
,200M
EOF
udevadm settle
mkfs.btrfs -draid10 -mraid10 -L root /dev/sda2 /dev/sda3 /dev/sda4 /dev/sda5
udevadm settle udevadm settle

btrfs device scan btrfs device scan
udevadm settle udevadm settle
set -e
mkdir -p /sysroot mkdir -p /sysroot
mount -t btrfs /dev/sda5 /sysroot mount -t btrfs /dev/disk/by-id/ata-disk_raid4 /sysroot
cp -a -t /sysroot /source/* cp -a -t /sysroot /source/*
umount /sysroot umount /sysroot
echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/sda1
echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
sync sync
poweroff -f poweroff -f

View File

@ -1,12 +1,25 @@
#!/bin/sh #!/bin/sh
: > /dev/watchdog

. /lib/dracut-lib.sh

export PATH=/sbin:/bin:/usr/sbin:/usr/bin export PATH=/sbin:/bin:/usr/sbin:/usr/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1 exec > /dev/console 2>&1
echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/sda
sync echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker

export TERM=linux export TERM=linux
export PS1='initramfs-test:\w\$ ' export PS1='initramfs-test:\w\$ '
[ -f /etc/fstab ] || ln -s /proc/mounts /etc/fstab [ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab
[ -f /etc/fstab ] || ln -sfn /proc/mounts /etc/fstab
stty sane stty sane
echo "made it to the rootfs! Powering down." echo "made it to the rootfs!"
if getargbool 0 rd.shell; then
strstr "$(setsid --help)" "control" && CTTY="-c"
setsid $CTTY sh -i
fi
echo "Powering down."
mount -n -o remount,ro / mount -n -o remount,ro /

poweroff -f poweroff -f

View File

@ -7,15 +7,21 @@ KVERSION=${KVERSION-$(uname -r)}
# Uncomment this to debug failures # Uncomment this to debug failures
#DEBUGFAIL="rd.shell" #DEBUGFAIL="rd.shell"
test_run() { test_run() {
DISKIMAGE=$TESTDIR/TEST-15-BTRFSRAID-root.img dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
MARKER_DISKIMAGE=$TESTDIR/TEST-15-BTRFSRAID-marker.img declare -a disk_args=()
dd if=/dev/zero of="$MARKER_DISKIMAGE" bs=512 count=10 # shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-1.img raid1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-2.img raid2
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-3.img raid3
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-4.img raid4

"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$MARKER_DISKIMAGE" \ "${disk_args[@]}" \
-drive format=raw,index=1,media=disk,file="$DISKIMAGE" \
-append "panic=1 systemd.crash_reboot root=LABEL=root rw rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.shell=0 $DEBUGFAIL" \ -append "panic=1 systemd.crash_reboot root=LABEL=root rw rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.shell=0 $DEBUGFAIL" \
-initrd "$TESTDIR"/initramfs.testing -initrd "$TESTDIR"/initramfs.testing
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$MARKER_DISKIMAGE" || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/marker.img || return 1
} }


test_setup() { test_setup() {
@ -48,6 +54,12 @@ test_setup() {
inst_multiple -o ${_terminfodir}/l/linux inst_multiple -o ${_terminfodir}/l/linux
inst "$basedir/modules.d/35network-legacy/dhclient-script.sh" "/sbin/dhclient-script" inst "$basedir/modules.d/35network-legacy/dhclient-script.sh" "/sbin/dhclient-script"
inst "$basedir/modules.d/35network-legacy/ifup.sh" "/sbin/ifup" inst "$basedir/modules.d/35network-legacy/ifup.sh" "/sbin/ifup"

inst_simple "${basedir}/modules.d/99base/dracut-lib.sh" "/lib/dracut-lib.sh"
inst_binary "${basedir}/dracut-util" "/usr/bin/dracut-util"
ln -s dracut-util "${initdir}/usr/bin/dracut-getarg"
ln -s dracut-util "${initdir}/usr/bin/dracut-getargs"

inst_multiple grep inst_multiple grep
inst ./test-init.sh /sbin/init inst ./test-init.sh /sbin/init
inst_simple /etc/os-release inst_simple /etc/os-release
@ -66,7 +78,6 @@ test_setup() {
inst_multiple sfdisk mkfs.btrfs poweroff cp umount dd sync inst_multiple sfdisk mkfs.btrfs poweroff cp umount dd sync
inst_hook initqueue 01 ./create-root.sh inst_hook initqueue 01 ./create-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh inst_hook initqueue/finished 01 ./finished-false.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -81,13 +92,27 @@ test_setup() {


rm -rf -- "$TESTDIR"/overlay rm -rf -- "$TESTDIR"/overlay


# Invoke KVM and/or QEMU to actually create the target filesystem. # Create the blank files to use as a root filesystem
dd if=/dev/zero of="$TESTDIR"/raid-1.img bs=1MiB count=150
dd if=/dev/zero of="$TESTDIR"/raid-2.img bs=1MiB count=150
dd if=/dev/zero of="$TESTDIR"/raid-3.img bs=1MiB count=150
dd if=/dev/zero of="$TESTDIR"/raid-4.img bs=1MiB count=150
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-1.img raid1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-2.img raid2
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-3.img raid3
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-4.img raid4

"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$DISKIMAGE" \ "${disk_args[@]}" \
-append "root=/dev/fakeroot rw quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/fakeroot rw quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1


dd if="$DISKIMAGE" bs=512 count=4 skip=2048 | grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1


( (
# shellcheck disable=SC2031 # shellcheck disable=SC2031
@ -97,7 +122,6 @@ test_setup() {
inst_multiple poweroff shutdown inst_multiple poweroff shutdown
inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )
"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
-o "plymouth network kernel-network-modules" \ -o "plymouth network kernel-network-modules" \

View File

@ -1,8 +0,0 @@
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"

View File

@ -1,4 +1,4 @@
#!/usr/bin/python -tt #!/usr/bin/python3 -tt
# #
# livecd-creator : Creates Live CD based for Fedora. # livecd-creator : Creates Live CD based for Fedora.
# #

View File

@ -1,19 +1,25 @@
#!/bin/sh #!/bin/sh
: > /dev/watchdog

. /lib/dracut-lib.sh . /lib/dracut-lib.sh


export PATH=/sbin:/bin:/usr/sbin:/usr/bin export PATH=/sbin:/bin:/usr/sbin:/usr/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1 exec > /dev/console 2>&1


echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/sdb echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker

export TERM=linux export TERM=linux
export PS1='initramfs-test:\w\$ ' export PS1='initramfs-test:\w\$ '
[ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab [ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab
[ -f /etc/fstab ] || ln -sfn /proc/mounts /etc/fstab [ -f /etc/fstab ] || ln -sfn /proc/mounts /etc/fstab
stty sane stty sane
echo "made it to the rootfs!" echo "made it to the rootfs!"
getargbool 0 rd.shell && sh -i if getargbool 0 rd.shell; then
strstr "$(setsid --help)" "control" && CTTY="-c"
setsid $CTTY sh -i
fi
echo "Powering down." echo "Powering down."
mount -n -o remount,ro / mount -n -o remount,ro /
sync
poweroff -f poweroff -f

View File

@ -8,7 +8,7 @@ KVERSION="${KVERSION-$(uname -r)}"
#DEBUGFAIL="rd.shell rd.break rd.debug systemd.log_level=debug systemd.log_target=console" #DEBUGFAIL="rd.shell rd.break rd.debug systemd.log_level=debug systemd.log_target=console"


test_check() { test_check() {
for pdir in $(python -c "import site; print(site.getsitepackages())" | sed -e 's/\[\(.*\)\]/\1/' -e "s/', /' /g"); do for pdir in $(python3 -c "import site; print(site.getsitepackages())" | sed -e 's/\[\(.*\)\]/\1/' -e "s/', /' /g"); do
# shellcheck disable=SC2001 # shellcheck disable=SC2001
pdir1=$(echo "$pdir" | sed "s/^'\(.*\)'$/\1/") pdir1=$(echo "$pdir" | sed "s/^'\(.*\)'$/\1/")
if [[ -d $pdir1/imgcreate ]]; then if [[ -d $pdir1/imgcreate ]]; then
@ -20,10 +20,16 @@ test_check() {
} }


test_run() { test_run() {
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/livecd.iso livecd 1

"$testdir"/run-qemu \ "$testdir"/run-qemu \
"${disk_args[@]}" \
-boot order=d \ -boot order=d \
-drive format=raw,bps=1000000,index=0,media=disk,file="$TESTDIR"/livecd.iso \
-drive format=raw,index=1,media=disk,file="$TESTDIR"/root.img \
-append "panic=1 systemd.crash_reboot root=live:CDLABEL=LiveCD live rw quiet rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.shell=0 $DEBUGFAIL" \ -append "panic=1 systemd.crash_reboot root=live:CDLABEL=LiveCD live rw quiet rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.shell=0 $DEBUGFAIL" \
-initrd "$TESTDIR"/initramfs.testing -initrd "$TESTDIR"/initramfs.testing


@ -36,7 +42,7 @@ test_run() {
# -append "root=live:CDLABEL=LiveCD live quiet rhgb selinux=0 rd.live.check" \ # -append "root=live:CDLABEL=LiveCD live quiet rhgb selinux=0 rd.live.check" \
# -initrd "$TESTDIR"/initramfs.testing # -initrd "$TESTDIR"/initramfs.testing


grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success -- "$TESTDIR"/root.img || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success -- "$TESTDIR"/marker.img || return 1
} }


test_setup() { test_setup() {
@ -49,11 +55,8 @@ test_setup() {
inst_multiple poweroff shutdown inst_multiple poweroff shutdown
inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


dd if=/dev/zero of="$TESTDIR"/root.img count=100

"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
-a "debug dmsquash-live qemu" \ -a "debug dmsquash-live qemu" \
-o "rngd" \ -o "rngd" \
@ -114,7 +117,7 @@ test_setup() {
cp -a -- /etc/ld.so.conf* "$initdir"/etc cp -a -- /etc/ld.so.conf* "$initdir"/etc
ldconfig -r "$initdir" ldconfig -r "$initdir"
) )
python create.py -d -c livecd-fedora-minimal.ks python3 create.py -d -c livecd-fedora-minimal.ks
return 0 return 0
} }



View File

@ -1,8 +0,0 @@
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"

View File

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

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"
@ -6,30 +9,26 @@ done
rm -f -- /etc/lvm/lvm.conf rm -f -- /etc/lvm/lvm.conf
udevadm control --reload udevadm control --reload
udevadm settle udevadm settle
# save a partition at the beginning for future flagging purposes
sfdisk /dev/sda << EOF set -ex
,4M for dev in /dev/disk/by-id/ata-disk_disk[123]; do
,29M lvm pvcreate -ff -y "$dev"
,29M done
,29M
EOF lvm vgcreate dracut /dev/disk/by-id/ata-disk_disk[123]
udevadm settle lvm lvcreate -l 17 -T dracut/mythinpool
for i in sda2 sda3 sda4; do lvm lvcreate -V1G -T dracut/mythinpool -n root
lvm pvcreate -ff -y /dev/$i lvm vgchange -ay
done \ mke2fs /dev/dracut/root
&& lvm vgcreate dracut /dev/sda[234] \ mkdir -p /sysroot
&& lvm lvcreate -l 17 -T dracut/mythinpool \ mount /dev/dracut/root /sysroot
&& lvm lvcreate -V1G -T dracut/mythinpool -n root \ cp -a -t /sysroot /source/*
&& lvm vgchange -ay \ umount /sysroot
&& mke2fs /dev/dracut/root \ lvm lvchange -a n /dev/dracut/root
&& mkdir -p /sysroot \
&& mount /dev/dracut/root /sysroot \ if ! dmsetup status | grep -q out_of_data_space; then
&& cp -a -t /sysroot /source/* \ echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
&& umount /sysroot \ fi
&& sleep 1 \
&& lvm lvchange -a n /dev/dracut/root \
&& sleep 1
dmsetup status | grep out_of_data_space \
|| echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/sda1
sync sync
poweroff -f poweroff -f

View File

@ -1,19 +1,24 @@
#!/bin/sh #!/bin/sh
: > /dev/watchdog

. /lib/dracut-lib.sh . /lib/dracut-lib.sh


export PATH=/sbin:/bin:/usr/sbin:/usr/bin export PATH=/sbin:/bin:/usr/sbin:/usr/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1 exec > /dev/console 2>&1


echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/sda1 echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker

export TERM=linux export TERM=linux
export PS1='initramfs-test:\w\$ ' export PS1='initramfs-test:\w\$ '
[ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab [ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab
[ -f /etc/fstab ] || ln -sfn /proc/mounts /etc/fstab [ -f /etc/fstab ] || ln -sfn /proc/mounts /etc/fstab
stty sane stty sane
echo "made it to the rootfs!" echo "made it to the rootfs!"
getargbool 0 rd.shell && sh -i if getargbool 0 rd.shell; then
strstr "$(setsid --help)" "control" && CTTY="-c"
setsid $CTTY sh -i
fi
echo "Powering down." echo "Powering down."
mount -n -o remount,ro / mount -n -o remount,ro /
sync
poweroff -f poweroff -f

View File

@ -8,17 +8,23 @@ KVERSION=${KVERSION-$(uname -r)}
#DEBUGFAIL="rd.break rd.shell" #DEBUGFAIL="rd.break rd.shell"


test_run() { test_run() {
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-1.img disk1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-2.img disk2
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-3.img disk3

"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/root.ext2 \ "${disk_args[@]}" \
-append "panic=1 systemd.crash_reboot root=/dev/dracut/root rw rd.auto=1 quiet rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.debug rd.shell=0 $DEBUGFAIL" \ -append "panic=1 systemd.crash_reboot root=/dev/dracut/root rw rd.auto=1 quiet rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.debug rd.shell=0 $DEBUGFAIL" \
-initrd "$TESTDIR"/initramfs.testing -initrd "$TESTDIR"/initramfs.testing || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/root.ext2 || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/marker.img || return 1
} }


test_setup() { test_setup() {
# Create the blank file to use as a root filesystem
dd if=/dev/zero of="$TESTDIR"/root.ext2 bs=1M count=92

kernel=$KVERSION kernel=$KVERSION
# Create what will eventually be our root filesystem onto an overlay # Create what will eventually be our root filesystem onto an overlay
( (
@ -68,7 +74,6 @@ test_setup() {
inst_multiple sfdisk mke2fs poweroff cp umount grep dmsetup dd sync inst_multiple sfdisk mke2fs poweroff cp umount grep dmsetup dd sync
inst_hook initqueue 01 ./create-root.sh inst_hook initqueue 01 ./create-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh inst_hook initqueue/finished 01 ./finished-false.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -80,11 +85,26 @@ test_setup() {
--no-hostonly-cmdline -N \ --no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
rm -rf -- "$TESTDIR"/overlay rm -rf -- "$TESTDIR"/overlay
# Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu -drive format=raw,index=0,media=disk,file="$TESTDIR"/root.ext2 \ # Create the blank files to use as a root filesystem
dd if=/dev/zero of="$TESTDIR"/disk-1.img bs=1MiB count=40
dd if=/dev/zero of="$TESTDIR"/disk-2.img bs=1MiB count=40
dd if=/dev/zero of="$TESTDIR"/disk-3.img bs=1MiB count=40
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-1.img disk1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-2.img disk2
qemu_add_drive_args disk_index disk_args "$TESTDIR"/disk-3.img disk3

"$testdir"/run-qemu \
"${disk_args[@]}" \
-append "root=/dev/fakeroot rw rootfstype=ext2 quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/fakeroot rw rootfstype=ext2 quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/root.ext2 || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1

( (
# shellcheck disable=SC2031 # shellcheck disable=SC2031
export initdir=$TESTDIR/overlay export initdir=$TESTDIR/overlay
@ -93,7 +113,6 @@ test_setup() {
inst_multiple poweroff shutdown inst_multiple poweroff shutdown
inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )
"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
-o "plymouth network kernel-network-modules" \ -o "plymouth network kernel-network-modules" \

View File

@ -1,8 +0,0 @@
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"

View File

@ -19,7 +19,7 @@ echo "made it to the rootfs! Powering down."


while read -r dev _ fstype opts rest || [ -n "$dev" ]; do while read -r dev _ fstype opts rest || [ -n "$dev" ]; do
[ "$fstype" != "nfs" -a "$fstype" != "nfs4" ] && continue [ "$fstype" != "nfs" -a "$fstype" != "nfs4" ] && continue
echo "nfs-OK $dev $fstype $opts" | dd oflag=direct,dsync of=/dev/sda echo "nfs-OK $dev $fstype $opts" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
break break
done < /proc/mounts done < /proc/mounts



View File

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

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"
@ -7,20 +10,14 @@ rm -f -- /etc/lvm/lvm.conf
udevadm control --reload udevadm control --reload
udevadm settle udevadm settle


set -e set -ex
# save a partition at the beginning for future flagging purposes
sfdisk /dev/sda << EOF
,1M
,
EOF


udevadm settle mkfs.ext3 -L dracut /dev/disk/by-id/ata-disk_root
mkfs.ext3 -L dracut /dev/sda2
mkdir -p /root mkdir -p /root
mount /dev/sda2 /root mount /dev/disk/by-id/ata-disk_root /root
cp -a -t /root /source/* cp -a -t /root /source/*
mkdir -p /root/run mkdir -p /root/run
umount /root umount /root
echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/sda1 echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
sync sync
poweroff -f poweroff -f

View File

@ -52,15 +52,15 @@ linkup() {
wait_for_if_link "$1" 2> /dev/null && ip link set "$1" up 2> /dev/null && wait_for_if_up "$1" 2> /dev/null wait_for_if_link "$1" 2> /dev/null && ip link set "$1" up 2> /dev/null && wait_for_if_up "$1" 2> /dev/null
} }


wait_for_if_link eth0 ens2 wait_for_if_link eth0 enp0s1


ip addr add 127.0.0.1/8 dev lo ip addr add 127.0.0.1/8 dev lo
ip link set lo up ip link set lo up
ip link set dev eth0 name ens2 ip link set dev eth0 name enp0s1
ip addr add 192.168.50.1/24 dev ens2 ip addr add 192.168.50.1/24 dev enp0s1
ip addr add 192.168.50.2/24 dev ens2 ip addr add 192.168.50.2/24 dev enp0s1
ip addr add 192.168.50.3/24 dev ens2 ip addr add 192.168.50.3/24 dev enp0s1
linkup ens2 linkup enp0s1


echo > /dev/watchdog echo > /dev/watchdog
modprobe af_packet modprobe af_packet

View File

@ -23,8 +23,13 @@ KVERSION=${KVERSION-$(uname -r)}
run_server() { run_server() {
# Start server first # Start server first
echo "NFS TEST SETUP: Starting DHCP/NFS server" echo "NFS TEST SETUP: Starting DHCP/NFS server"
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/root.img root 1

"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/server.ext3 \ "${disk_args[@]}" \
-net socket,listen=127.0.0.1:12320 \ -net socket,listen=127.0.0.1:12320 \
-net nic,macaddr=52:54:00:12:34:56,model=e1000 \ -net nic,macaddr=52:54:00:12:34:56,model=e1000 \
-serial "${SERIAL:-"file:$TESTDIR/server.log"}" \ -serial "${SERIAL:-"file:$TESTDIR/server.log"}" \
@ -59,13 +64,14 @@ client_test() {
echo "CLIENT TEST START: $test_name" echo "CLIENT TEST START: $test_name"


# Need this so kvm-qemu will boot (needs non-/dev/zero local disk) # Need this so kvm-qemu will boot (needs non-/dev/zero local disk)
if ! dd if=/dev/zero of="$TESTDIR"/client.img bs=1M count=1 &> /dev/null; then dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
echo "Unable to make client sda image" 1>&2 declare -a disk_args=()
return 1 # shellcheck disable=SC2034
fi declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker


"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/client.img \ "${disk_args[@]}" \
-net nic,macaddr="$mac",model=e1000 \ -net nic,macaddr="$mac",model=e1000 \
-net socket,connect=127.0.0.1:12320 \ -net socket,connect=127.0.0.1:12320 \
-watchdog i6300esb -watchdog-action poweroff \ -watchdog i6300esb -watchdog-action poweroff \
@ -73,13 +79,13 @@ client_test() {
-initrd "$TESTDIR"/initramfs.testing -initrd "$TESTDIR"/initramfs.testing


# shellcheck disable=SC2181 # shellcheck disable=SC2181
if [[ $? -ne 0 ]] || ! grep -U --binary-files=binary -F -m 1 -q nfs-OK "$TESTDIR"/client.img; then if [[ $? -ne 0 ]] || ! grep -U --binary-files=binary -F -m 1 -q nfs-OK "$TESTDIR"/marker.img; then
echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]" echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]"
return 1 return 1
fi fi


# nfsinfo=( server:/path nfs{,4} options ) # nfsinfo=( server:/path nfs{,4} options )
read -r -a nfsinfo < <(awk '{print $2, $3, $4; exit}' "$TESTDIR"/client.img) read -r -a nfsinfo < <(awk '{print $2, $3, $4; exit}' "$TESTDIR"/marker.img)


if [[ ${nfsinfo[0]%%:*} != "$server" ]]; then if [[ ${nfsinfo[0]%%:*} != "$server" ]]; then
echo "CLIENT TEST INFO: got server: ${nfsinfo[0]%%:*}" echo "CLIENT TEST INFO: got server: ${nfsinfo[0]%%:*}"
@ -165,7 +171,7 @@ test_nfsv3() {
52:54:00:12:34:05 "root=dhcp" 192.168.50.1 wsize=4096 || return 1 52:54:00:12:34:05 "root=dhcp" 192.168.50.1 wsize=4096 || return 1


client_test "NFSv3 Bridge Customized root=dhcp DHCP path,options" \ client_test "NFSv3 Bridge Customized root=dhcp DHCP path,options" \
52:54:00:12:34:05 "root=dhcp bridge=foobr0:ens2" 192.168.50.1 wsize=4096 || return 1 52:54:00:12:34:05 "root=dhcp bridge=foobr0:enp0s1" 192.168.50.1 wsize=4096 || return 1


client_test "NFSv3 root=dhcp DHCP IP:path,options" \ client_test "NFSv3 root=dhcp DHCP IP:path,options" \
52:54:00:12:34:06 "root=dhcp" 192.168.50.2 wsize=4096 || return 1 52:54:00:12:34:06 "root=dhcp" 192.168.50.2 wsize=4096 || return 1
@ -222,9 +228,6 @@ test_run() {
} }


test_setup() { test_setup() {
# Make server root
dd if=/dev/zero of="$TESTDIR"/server.ext3 bs=1M count=120

export kernel=$KVERSION export kernel=$KVERSION
export srcmods="/lib/modules/$kernel/" export srcmods="/lib/modules/$kernel/"
# Detect lib paths # Detect lib paths
@ -358,7 +361,6 @@ test_setup() {
inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd
inst_hook initqueue 01 ./create-root.sh inst_hook initqueue 01 ./create-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh inst_hook initqueue/finished 01 ./finished-false.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -371,13 +373,21 @@ test_setup() {
--no-hostonly-cmdline -N \ --no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
rm -rf -- "$TESTDIR"/server rm -rf -- "$TESTDIR"/server
# Invoke KVM and/or QEMU to actually create the target filesystem.


dd if=/dev/zero of="$TESTDIR"/root.img bs=1MiB count=80
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/root.img root

# Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/server.ext3 \ "${disk_args[@]}" \
-append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/server.ext3 || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1


# Make an overlay with needed tools for the test harness # Make an overlay with needed tools for the test harness
( (
@ -389,7 +399,6 @@ test_setup() {
inst_multiple poweroff shutdown inst_multiple poweroff shutdown
inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
inst_simple ./99-default.link /etc/systemd/network/99-default.link inst_simple ./99-default.link /etc/systemd/network/99-default.link
) )



View File

@ -1,8 +0,0 @@
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"

View File

@ -11,13 +11,14 @@ stty sane
echo "made it to the rootfs! Powering down." echo "made it to the rootfs! Powering down."
while read -r dev _ fstype opts rest || [ -n "$dev" ]; do while read -r dev _ fstype opts rest || [ -n "$dev" ]; do
[ "$fstype" != "ext3" ] && continue [ "$fstype" != "ext3" ] && continue
echo "iscsi-OK $dev $fstype $opts" | dd oflag=direct,dsync of=/dev/sda echo "iscsi-OK $dev $fstype $opts" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
break break
done < /proc/mounts done < /proc/mounts
#sh -i
if getargbool 0 rd.shell; then if getargbool 0 rd.shell; then
strstr "$(setsid --help)" "control" && CTTY="-c" strstr "$(setsid --help)" "control" && CTTY="-c"
setsid $CTTY sh -i setsid $CTTY sh -i
fi fi

sync sync
poweroff -f poweroff -f

View File

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

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"
@ -7,25 +10,24 @@ rm -f -- /etc/lvm/lvm.conf
udevadm control --reload udevadm control --reload
udevadm settle udevadm settle


echo "Size of /dev/sdc and /dev/sdd" set -ex
blockdev --getsize64 /dev/sdc /dev/sdd


mkfs.ext3 -j -L singleroot -F /dev/sda \ mkfs.ext3 -j -L singleroot -F /dev/disk/by-id/ata-disk_singleroot
&& mkdir -p /sysroot \ mkdir -p /sysroot
&& mount /dev/sda /sysroot \ mount /dev/disk/by-id/ata-disk_singleroot /sysroot
&& cp -a -t /sysroot /source/* \ cp -a -t /sysroot /source/*
&& umount /sysroot \ umount /sysroot
&& mdadm --create /dev/md0 --run --auto=yes --level=stripe --raid-devices=2 /dev/sdc /dev/sdd \ mdadm --create /dev/md0 --run --auto=yes --level=stripe --raid-devices=2 /dev/disk/by-id/ata-disk_raid0-1 /dev/disk/by-id/ata-disk_raid0-2
&& mdadm -W /dev/md0 || : \ mdadm -W /dev/md0 || :
&& lvm pvcreate -ff -y /dev/md0 \ lvm pvcreate -ff -y /dev/md0
&& lvm vgcreate dracut /dev/md0 \ lvm vgcreate dracut /dev/md0
&& lvm lvcreate -l 100%FREE -n root dracut \ lvm lvcreate -l 100%FREE -n root dracut
&& lvm vgchange -ay \ lvm vgchange -ay
&& mkfs.ext3 -j -L sysroot /dev/dracut/root \ mkfs.ext3 -j -L sysroot /dev/dracut/root
&& mount /dev/dracut/root /sysroot \ mount /dev/dracut/root /sysroot
&& cp -a -t /sysroot /source/* \ cp -a -t /sysroot /source/*
&& umount /sysroot \ umount /sysroot
&& lvm lvchange -a n /dev/dracut/root \ lvm lvchange -a n /dev/dracut/root
&& echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/sdb echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
sync sync
poweroff -f poweroff -f

View File

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

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"
@ -6,20 +9,12 @@ done
rm -f -- /etc/lvm/lvm.conf rm -f -- /etc/lvm/lvm.conf
udevadm control --reload udevadm control --reload
udevadm settle udevadm settle
set -e
# save a partition at the beginning for future flagging purposes
sfdisk /dev/sda << EOF
,1M
,
EOF


udevadm settle mkfs.ext3 -L dracut /dev/disk/by-id/ata-disk_root
mkfs.ext3 -L dracut /dev/sda2
mkdir -p /root mkdir -p /root
mount /dev/sda2 /root mount /dev/disk/by-id/ata-disk_root /root
cp -a -t /root /source/* cp -a -t /root /source/*
mkdir -p /root/run mkdir -p /root/run
umount /root umount /root
echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/sda1 echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
sync
poweroff -f poweroff -f

View File

@ -14,27 +14,21 @@ wait_for_if_link() {
while [ $cnt -lt 600 ]; do while [ $cnt -lt 600 ]; do
li=$(ip -o link show dev "$1" 2> /dev/null) li=$(ip -o link show dev "$1" 2> /dev/null)
[ -n "$li" ] && return 0 [ -n "$li" ] && return 0
if [[ $2 ]]; then
li=$(ip -o link show dev "$2" 2> /dev/null)
[ -n "$li" ] && return 0
fi
sleep 0.1 sleep 0.1
cnt=$((cnt + 1)) cnt=$((cnt + 1))
done done
return 1 return 1
} }


wait_for_if_link eth0 ens2 wait_for_if_link enp0s1
wait_for_if_link eth1 ens3 wait_for_if_link enp0s2


ip addr add 127.0.0.1/8 dev lo ip addr add 127.0.0.1/8 dev lo
ip link set lo up ip link set lo up
ip link set dev eth0 name ens2 ip addr add 192.168.50.1/24 dev enp0s1
ip addr add 192.168.50.1/24 dev ens2 ip link set enp0s1 up
ip link set ens2 up ip addr add 192.168.51.1/24 dev enp0s2
ip link set dev eth1 name ens3 ip link set enp0s2 up
ip addr add 192.168.51.1/24 dev ens3
ip link set ens3 up
: > /var/lib/dhcpd/dhcpd.leases : > /var/lib/dhcpd/dhcpd.leases
chmod 777 /var/lib/dhcpd/dhcpd.leases chmod 777 /var/lib/dhcpd/dhcpd.leases
dhcpd -d -cf /etc/dhcpd.conf -lf /var/lib/dhcpd/dhcpd.leases & dhcpd -d -cf /etc/dhcpd.conf -lf /var/lib/dhcpd/dhcpd.leases &
@ -43,9 +37,9 @@ tgtd
tgtadm --lld iscsi --mode target --op new --tid 1 --targetname iqn.2009-06.dracut:target0 tgtadm --lld iscsi --mode target --op new --tid 1 --targetname iqn.2009-06.dracut:target0
tgtadm --lld iscsi --mode target --op new --tid 2 --targetname iqn.2009-06.dracut:target1 tgtadm --lld iscsi --mode target --op new --tid 2 --targetname iqn.2009-06.dracut:target1
tgtadm --lld iscsi --mode target --op new --tid 3 --targetname iqn.2009-06.dracut:target2 tgtadm --lld iscsi --mode target --op new --tid 3 --targetname iqn.2009-06.dracut:target2
tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 -b /dev/sdb tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 -b /dev/disk/by-id/ata-disk_singleroot
tgtadm --lld iscsi --mode logicalunit --op new --tid 2 --lun 2 -b /dev/sdc tgtadm --lld iscsi --mode logicalunit --op new --tid 2 --lun 2 -b /dev/disk/by-id/ata-disk_raid0-1
tgtadm --lld iscsi --mode logicalunit --op new --tid 3 --lun 3 -b /dev/sdd tgtadm --lld iscsi --mode logicalunit --op new --tid 3 --lun 3 -b /dev/disk/by-id/ata-disk_raid0-2
tgtadm --lld iscsi --mode target --op bind --tid 1 -I 192.168.50.101 tgtadm --lld iscsi --mode target --op bind --tid 1 -I 192.168.50.101
tgtadm --lld iscsi --mode target --op bind --tid 2 -I 192.168.51.101 tgtadm --lld iscsi --mode target --op bind --tid 2 -I 192.168.51.101
tgtadm --lld iscsi --mode target --op bind --tid 3 -I 192.168.50.101 tgtadm --lld iscsi --mode target --op bind --tid 3 -I 192.168.50.101

View File

@ -23,16 +23,20 @@ run_server() {
# Start server first # Start server first
echo "iSCSI TEST SETUP: Starting DHCP/iSCSI server" echo "iSCSI TEST SETUP: Starting DHCP/iSCSI server"


declare -a disk_args=()
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/server.img serverroot 1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/singleroot.img singleroot
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid0-1.img raid0-1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid0-2.img raid0-2

"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/server.ext3 \ "${disk_args[@]}" \
-drive format=raw,index=1,media=disk,file="$TESTDIR"/root.ext3 \
-drive format=raw,index=2,media=disk,file="$TESTDIR"/iscsidisk2.img \
-drive format=raw,index=3,media=disk,file="$TESTDIR"/iscsidisk3.img \
-serial "${SERIAL:-"file:$TESTDIR/server.log"}" \ -serial "${SERIAL:-"file:$TESTDIR/server.log"}" \
-net nic,macaddr=52:54:00:12:34:56,model=e1000 \ -net nic,macaddr=52:54:00:12:34:56,model=e1000 \
-net nic,macaddr=52:54:00:12:34:57,model=e1000 \ -net nic,macaddr=52:54:00:12:34:57,model=e1000 \
-net socket,listen=127.0.0.1:12330 \ -net socket,listen=127.0.0.1:12330 \
-append "panic=1 quiet root=/dev/sda2 rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0 $SERVER_DEBUG" \ -append "panic=1 quiet root=/dev/disk/by-id/ata-disk_serverroot rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0 $SERVER_DEBUG" \
-initrd "$TESTDIR"/initramfs.server \ -initrd "$TESTDIR"/initramfs.server \
-pidfile "$TESTDIR"/server.pid -daemonize || return 1 -pidfile "$TESTDIR"/server.pid -daemonize || return 1
chmod 644 "$TESTDIR"/server.pid || return 1 chmod 644 "$TESTDIR"/server.pid || return 1
@ -41,15 +45,17 @@ run_server() {
tty -s && stty sane tty -s && stty sane


if ! [[ $SERIAL ]]; then if ! [[ $SERIAL ]]; then
echo "Waiting for the server to startup" while :; do
while ! grep -q Serving "$TESTDIR"/server.log; do grep Serving "$TESTDIR"/server.log && break
echo "Waiting for the server to startup" echo "Waiting for the server to startup"
tail "$TESTDIR"/server.log
sleep 1 sleep 1
done done
else else
echo Sleeping 10 seconds to give the server a head start echo Sleeping 10 seconds to give the server a head start
sleep 10 sleep 10
fi fi

} }


run_client() { run_client() {
@ -57,17 +63,22 @@ run_client() {
shift shift
echo "CLIENT TEST START: $test_name" echo "CLIENT TEST START: $test_name"


dd if=/dev/zero of="$TESTDIR"/client.img bs=1M count=1 dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker


"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/client.img \ "${disk_args[@]}" \
-net nic,macaddr=52:54:00:12:34:00,model=e1000 \ -net nic,macaddr=52:54:00:12:34:00,model=e1000 \
-net nic,macaddr=52:54:00:12:34:01,model=e1000 \ -net nic,macaddr=52:54:00:12:34:01,model=e1000 \
-net socket,connect=127.0.0.1:12330 \ -net socket,connect=127.0.0.1:12330 \
-acpitable file=ibft.table \ -acpitable file=ibft.table \
-append "panic=1 systemd.crash_reboot rw rd.auto rd.retry=50 console=ttyS0,115200n81 selinux=0 rd.debug=0 rd.shell=0 $DEBUGFAIL $*" \ -append "panic=1 systemd.crash_reboot rw rd.auto rd.retry=50 console=ttyS0,115200n81 selinux=0 rd.debug=0 rd.shell=0 $DEBUGFAIL $*" \
-initrd "$TESTDIR"/initramfs.testing -initrd "$TESTDIR"/initramfs.testing
if ! grep -U --binary-files=binary -F -m 1 -q iscsi-OK "$TESTDIR"/client.img; then
# shellcheck disable=SC2181
if [[ $? -ne 0 ]] || ! grep -U --binary-files=binary -F -m 1 -q iscsi-OK "$TESTDIR"/marker.img; then
echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]" echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]"
return 1 return 1
fi fi
@ -80,13 +91,13 @@ do_test_run() {
initiator=$(iscsi-iname) initiator=$(iscsi-iname)


run_client "root=dhcp" \ run_client "root=dhcp" \
"root=/dev/root netroot=dhcp ip=ens2:dhcp" \ "root=/dev/root netroot=dhcp ip=enp0s1:dhcp" \
"rd.iscsi.initiator=$initiator" \ "rd.iscsi.initiator=$initiator" \
|| return 1 || return 1


run_client "netroot=iscsi target0" \ run_client "netroot=iscsi target0" \
"root=LABEL=singleroot netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target0" \ "root=LABEL=singleroot netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target0" \
"ip=192.168.50.101::192.168.50.1:255.255.255.0:iscsi-1:ens2:off" \ "ip=192.168.50.101::192.168.50.1:255.255.255.0:iscsi-1:enp0s1:off" \
"rd.iscsi.initiator=$initiator" \ "rd.iscsi.initiator=$initiator" \
|| return 1 || return 1


@ -181,7 +192,6 @@ test_setup() {
inst_multiple sfdisk mkfs.ext3 poweroff cp umount setsid dd sync blockdev inst_multiple sfdisk mkfs.ext3 poweroff cp umount setsid dd sync blockdev
inst_hook initqueue 01 ./create-client-root.sh inst_hook initqueue 01 ./create-client-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh inst_hook initqueue/finished 01 ./finished-false.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -194,22 +204,25 @@ test_setup() {
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
rm -rf -- "$TESTDIR"/overlay rm -rf -- "$TESTDIR"/overlay


# Need this so kvm-qemu will boot (needs non-/dev/zero local disk) dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
if ! dd if=/dev/zero of="$TESTDIR"/client.img bs=1M count=1; then dd if=/dev/zero of="$TESTDIR"/singleroot.img bs=1MiB count=200
echo "Unable to make client sdb image" 1>&2 dd if=/dev/zero of="$TESTDIR"/raid0-1.img bs=1MiB count=100
return 1 dd if=/dev/zero of="$TESTDIR"/raid0-2.img bs=1MiB count=100
fi
declare -a disk_args=()
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/singleroot.img singleroot
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid0-1.img raid0-1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid0-2.img raid0-2

# Invoke KVM and/or QEMU to actually create the target filesystem. # Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/root.ext3 \ "${disk_args[@]}" \
-drive format=raw,index=1,media=disk,file="$TESTDIR"/client.img \
-drive format=raw,index=2,media=disk,file="$TESTDIR"/iscsidisk2.img \
-drive format=raw,index=3,media=disk,file="$TESTDIR"/iscsidisk3.img \
-append "root=/dev/fakeroot rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/fakeroot rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/client.img || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1
rm -- "$TESTDIR"/client.img rm -- "$TESTDIR"/marker.img
rm -rf -- "$TESTDIR"/overlay


# Make server root # Make server root
dd if=/dev/zero of="$TESTDIR"/server.ext3 bs=1M count=120 dd if=/dev/zero of="$TESTDIR"/server.ext3 bs=1M count=120
@ -263,7 +276,6 @@ test_setup() {
inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd
inst_hook initqueue 01 ./create-server-root.sh inst_hook initqueue 01 ./create-server-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh inst_hook initqueue/finished 01 ./finished-false.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -275,14 +287,23 @@ test_setup() {
--nomdadmconf \ --nomdadmconf \
--no-hostonly-cmdline -N \ --no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
rm -rf -- "$TESTDIR"/overlay

dd if=/dev/zero of="$TESTDIR"/server.img bs=1MiB count=60
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/server.img root


# Invoke KVM and/or QEMU to actually create the target filesystem. # Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/server.ext3 \ "${disk_args[@]}" \
-append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/server.ext3 || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1
rm -rf -- "$TESTDIR"/overlay rm -- "$TESTDIR"/marker.img


# Make an overlay with needed tools for the test harness # Make an overlay with needed tools for the test harness
( (
@ -293,7 +314,6 @@ test_setup() {
inst_multiple poweroff shutdown inst_multiple poweroff shutdown
inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
inst_simple ./99-default.link /etc/systemd/network/99-default.link inst_simple ./99-default.link /etc/systemd/network/99-default.link
) )



View File

@ -14,6 +14,7 @@ while read -r dev _ fstype opts rest || [ -n "$dev" ]; do
echo "iscsi-OK $dev $fstype $opts" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker echo "iscsi-OK $dev $fstype $opts" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
break break
done < /proc/mounts done < /proc/mounts

if getargbool 0 rd.shell; then if getargbool 0 rd.shell; then
strstr "$(setsid --help)" "control" && CTTY="-c" strstr "$(setsid --help)" "control" && CTTY="-c"
setsid $CTTY sh -i setsid $CTTY sh -i

View File

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

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"

View File

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

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"
@ -7,8 +10,6 @@ rm -f -- /etc/lvm/lvm.conf
udevadm control --reload udevadm control --reload
udevadm settle udevadm settle


ls -al /dev/disk/by-id

mkfs.ext3 -L dracut /dev/disk/by-id/ata-disk_root mkfs.ext3 -L dracut /dev/disk/by-id/ata-disk_root
mkdir -p /root mkdir -p /root
mount /dev/disk/by-id/ata-disk_root /root mount /dev/disk/by-id/ata-disk_root /root

View File

@ -30,7 +30,7 @@ run_server() {
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid0-1.img raid0-1 qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid0-1.img raid0-1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid0-2.img raid0-2 qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid0-2.img raid0-2


"$testdir"/run-qemu -M q35 \ "$testdir"/run-qemu \
"${disk_args[@]}" \ "${disk_args[@]}" \
-serial "${SERIAL:-"file:$TESTDIR/server.log"}" \ -serial "${SERIAL:-"file:$TESTDIR/server.log"}" \
-net nic,macaddr=52:54:00:12:34:56,model=e1000 \ -net nic,macaddr=52:54:00:12:34:56,model=e1000 \
@ -67,7 +67,7 @@ run_client() {
declare -i disk_index=0 declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker


"$testdir"/run-qemu -M q35 \ "$testdir"/run-qemu \
"${disk_args[@]}" \ "${disk_args[@]}" \
-net nic,macaddr=52:54:00:12:34:00,model=e1000 \ -net nic,macaddr=52:54:00:12:34:00,model=e1000 \
-net nic,macaddr=52:54:00:12:34:01,model=e1000 \ -net nic,macaddr=52:54:00:12:34:01,model=e1000 \
@ -221,7 +221,7 @@ test_setup() {
qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid0-2.img raid0-2 qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid0-2.img raid0-2


# Invoke KVM and/or QEMU to actually create the target filesystem. # Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu -M q35 \ "$testdir"/run-qemu \
"${disk_args[@]}" \ "${disk_args[@]}" \
-append "root=/dev/fakeroot rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/fakeroot rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1
@ -290,9 +290,10 @@ test_setup() {
--nomdadmconf \ --nomdadmconf \
--no-hostonly-cmdline -N \ --no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
rm -rf -- "$TESTDIR"/overlay


dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
dd if=/dev/zero of="$TESTDIR"/server.img bs=1MiB count=60 dd if=/dev/zero of="$TESTDIR"/server.img bs=1MiB count=60
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=() declare -a disk_args=()
# shellcheck disable=SC2034 # shellcheck disable=SC2034
declare -i disk_index=0 declare -i disk_index=0
@ -300,13 +301,12 @@ test_setup() {
qemu_add_drive_args disk_index disk_args "$TESTDIR"/server.img root qemu_add_drive_args disk_index disk_args "$TESTDIR"/server.img root


# Invoke KVM and/or QEMU to actually create the target filesystem. # Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu -M q35 \ "$testdir"/run-qemu \
"${disk_args[@]}" \ "${disk_args[@]}" \
-append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1
rm -- "$TESTDIR"/marker.img rm -- "$TESTDIR"/marker.img
rm -rf -- "$TESTDIR"/overlay


# Make an overlay with needed tools for the test harness # Make an overlay with needed tools for the test harness
( (

View File

@ -1,8 +0,0 @@
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"

View File

@ -1,11 +1,15 @@
#!/bin/sh #!/bin/sh
: > /dev/watchdog : > /dev/watchdog
. /lib/dracut-lib.sh

export PATH=/sbin:/bin:/usr/sbin:/usr/bin export PATH=/sbin:/bin:/usr/sbin:/usr/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1 exec > /dev/console 2>&1

while read -r dev fs fstype opts rest || [ -n "$dev" ]; do while read -r dev fs fstype opts rest || [ -n "$dev" ]; do
[ "$dev" = "rootfs" ] && continue [ "$dev" = "rootfs" ] && continue
[ "$fs" != "/" ] && continue [ "$fs" != "/" ] && continue
echo "nbd-OK $fstype $opts" | dd oflag=direct,dsync of=/dev/sda echo "nbd-OK $fstype $opts" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
echo "nbd-OK $fstype $opts" echo "nbd-OK $fstype $opts"
break break
done < /proc/mounts done < /proc/mounts
@ -13,8 +17,13 @@ export TERM=linux
export PS1='nbdclient-test:\w\$ ' export PS1='nbdclient-test:\w\$ '
stty sane stty sane
echo "made it to the rootfs! Powering down." echo "made it to the rootfs! Powering down."
#sh -i
: > /dev/watchdog if getargbool 0 rd.shell; then
mount -n -o remount,ro / &> /dev/null strstr "$(setsid --help)" "control" && CTTY="-c"
: > /dev/watchdog setsid $CTTY sh -i
fi

mount -n -o remount,ro /

sync
poweroff -f poweroff -f

View File

@ -1,23 +1,24 @@
#!/bin/sh #!/bin/sh

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"
done done
rm -f -- /etc/lvm/lvm.conf rm -f -- /etc/lvm/lvm.conf
udevadm control --reload udevadm control --reload
udevadm settle
set -e set -e


udevadm settle udevadm settle
mkfs.ext3 -L dracut /dev/sda mkfs.ext3 -L dracut /dev/disk/by-id/ata-disk_root
mkdir -p /root mkdir -p /root
mount /dev/sda /root mount /dev/disk/by-id/ata-disk_root /root
cp -a -t /root /source/* cp -a -t /root /source/*
mkdir -p /root/run mkdir -p /root/run
umount /root umount /root
{ {
echo "dracut-root-block-created" echo "dracut-root-block-created"
echo "ID_FS_UUID=$ID_FS_UUID" echo "ID_FS_UUID=$ID_FS_UUID"
} | dd oflag=direct,dsync of=/dev/sdb } | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
sync
poweroff -f poweroff -f

View File

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

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"
@ -7,29 +10,31 @@ rm -f -- /etc/lvm/lvm.conf
udevadm control --reload udevadm control --reload
udevadm settle udevadm settle


set -ex

printf test > keyfile printf test > keyfile
cryptsetup -q luksFormat /dev/sda /keyfile cryptsetup -q luksFormat /dev/disk/by-id/ata-disk_root /keyfile
echo "The passphrase is test" echo "The passphrase is test"
cryptsetup luksOpen /dev/sda dracut_crypt_test < /keyfile \ cryptsetup luksOpen /dev/disk/by-id/ata-disk_root dracut_crypt_test < /keyfile
&& lvm pvcreate -ff -y /dev/mapper/dracut_crypt_test \ lvm pvcreate -ff -y /dev/mapper/dracut_crypt_test
&& lvm vgcreate dracut /dev/mapper/dracut_crypt_test \ lvm vgcreate dracut /dev/mapper/dracut_crypt_test
&& lvm lvcreate -l 100%FREE -n root dracut \ lvm lvcreate -l 100%FREE -n root dracut
&& lvm vgchange -ay \ lvm vgchange -ay
&& mkfs.ext3 -L dracut -j /dev/dracut/root \ mkfs.ext3 -L dracut -j /dev/dracut/root
&& mkdir -p /sysroot \ mkdir -p /sysroot
&& mount /dev/dracut/root /sysroot \ mount /dev/dracut/root /sysroot
&& cp -a -t /sysroot /source/* \ cp -a -t /sysroot /source/*
&& umount /sysroot umount /sysroot
sleep 1 sleep 1
lvm lvchange -a n /dev/dracut/root lvm lvchange -a n /dev/dracut/root
udevadm settle udevadm settle
cryptsetup luksClose /dev/mapper/dracut_crypt_test cryptsetup luksClose /dev/mapper/dracut_crypt_test
udevadm settle udevadm settle
sleep 1 sleep 1
eval "$(udevadm info --query=env --name=/dev/sda | while read -r line || [ -n "$line" ]; do [ "$line" != "${line#*ID_FS_UUID*}" ] && echo "$line"; done)" eval "$(udevadm info --query=env --name=/dev/disk/by-id/ata-disk_root | while read -r line || [ -n "$line" ]; do [ "$line" != "${line#*ID_FS_UUID*}" ] && echo "$line"; done)"
{ {
echo "dracut-root-block-created" echo "dracut-root-block-created"
echo "ID_FS_UUID=$ID_FS_UUID" echo "ID_FS_UUID=$ID_FS_UUID"
} | dd oflag=direct,dsync of=/dev/sdb } | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
sync sync
poweroff -f poweroff -f

View File

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

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"
@ -9,15 +12,15 @@ udevadm settle
set -e set -e


udevadm settle udevadm settle
mkfs.ext3 -L dracut /dev/sda mkfs.ext3 -L dracut /dev/disk/by-id/ata-disk_root
mkdir -p /root mkdir -p /root
mount /dev/sda /root mount /dev/disk/by-id/ata-disk_root /root
cp -a -t /root /source/* cp -a -t /root /source/*
mkdir -p /root/run mkdir -p /root/run
umount /root umount /root
{ {
echo "dracut-root-block-created" echo "dracut-root-block-created"
echo "ID_FS_UUID=$ID_FS_UUID" echo "ID_FS_UUID=$ID_FS_UUID"
} | dd oflag=direct,dsync of=/dev/sdb } | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
sync sync
poweroff -f poweroff -f

View File

@ -14,10 +14,6 @@ wait_for_if_link() {
while [ $cnt -lt 600 ]; do while [ $cnt -lt 600 ]; do
li=$(ip -o link show dev "$1" 2> /dev/null) li=$(ip -o link show dev "$1" 2> /dev/null)
[ -n "$li" ] && return 0 [ -n "$li" ] && return 0
if [[ $2 ]]; then
li=$(ip -o link show dev "$2" 2> /dev/null)
[ -n "$li" ] && return 0
fi
sleep 0.1 sleep 0.1
cnt=$((cnt + 1)) cnt=$((cnt + 1))
done done
@ -51,13 +47,12 @@ linkup() {
wait_for_if_link "$1" 2> /dev/null && ip link set "$1" up 2> /dev/null && wait_for_if_up "$1" 2> /dev/null wait_for_if_link "$1" 2> /dev/null && ip link set "$1" up 2> /dev/null && wait_for_if_up "$1" 2> /dev/null
} }


wait_for_if_link eth0 ens3

ip addr add 127.0.0.1/8 dev lo ip addr add 127.0.0.1/8 dev lo
ip link set lo up ip link set lo up
ip link set dev eth0 name ens3
ip addr add 192.168.50.1/24 dev ens3 wait_for_if_link enp0s1
linkup ens3 ip addr add 192.168.50.1/24 dev enp0s1
linkup enp0s1


modprobe af_packet modprobe af_packet
nbd-server nbd-server

View File

@ -35,15 +35,21 @@ run_server() {
# Start server first # Start server first
echo "NBD TEST SETUP: Starting DHCP/NBD server" echo "NBD TEST SETUP: Starting DHCP/NBD server"


declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/unencrypted.img unencrypted
qemu_add_drive_args disk_index disk_args "$TESTDIR"/encrypted.img encrypted
qemu_add_drive_args disk_index disk_args "$TESTDIR"/server.img serverroot

"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/server.ext3 \ "${disk_args[@]}" \
-drive format=raw,index=1,media=disk,file="$TESTDIR"/nbd.ext3 \ -serial "${SERIAL:-"file:$TESTDIR/server.log"}" \
-drive format=raw,index=2,media=disk,file="$TESTDIR"/encrypted.ext3 \
-net nic,macaddr=52:54:00:12:34:56,model=e1000 \ -net nic,macaddr=52:54:00:12:34:56,model=e1000 \
-net socket,listen=127.0.0.1:12340 \ -net socket,listen=127.0.0.1:12340 \
-serial "${SERIAL:-"file:$TESTDIR/server.log"}" \ -append "panic=1 rd.luks=0 systemd.crash_reboot quiet root=/dev/disk/by-id/ata-disk_serverroot rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0 $SERVER_DEBUG" \
-append "panic=1 systemd.crash_reboot root=/dev/sda rootfstype=ext3 rw quiet console=ttyS0,115200n81 selinux=0" \ -initrd "$TESTDIR"/initramfs.server \
-initrd "$TESTDIR"/initramfs.server -pidfile "$TESTDIR"/server.pid -daemonize || return 1 -pidfile "$TESTDIR"/server.pid -daemonize || return 1
chmod 644 "$TESTDIR"/server.pid || return 1 chmod 644 "$TESTDIR"/server.pid || return 1


# Cleanup the terminal if we have one # Cleanup the terminal if we have one
@ -75,27 +81,26 @@ client_test() {


echo "CLIENT TEST START: $test_name" echo "CLIENT TEST START: $test_name"


# Clear out the flags for each test dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
if ! dd if=/dev/zero of="$TESTDIR"/flag.img bs=1M count=1; then declare -a disk_args=()
echo "Unable to make client flag image" 1>&2 declare -i disk_index=0
return 1 qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
fi


"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/flag.img \ "${disk_args[@]}" \
-net nic,macaddr="$mac",model=e1000 \ -net nic,macaddr="$mac",model=e1000 \
-net socket,connect=127.0.0.1:12340 \ -net socket,connect=127.0.0.1:12340 \
-append "panic=1 systemd.crash_reboot rd.shell=0 $cmdline $DEBUGFAIL rd.auto rd.info rd.retry=10 ro console=ttyS0,115200n81 selinux=0 " \ -append "panic=1 systemd.crash_reboot rd.shell=0 $cmdline $DEBUGFAIL rd.auto rd.info rd.retry=10 ro console=ttyS0,115200n81 selinux=0 " \
-initrd "$TESTDIR"/initramfs.testing -initrd "$TESTDIR"/initramfs.testing


# shellcheck disable=SC2181 # shellcheck disable=SC2181
if [[ $? -ne 0 ]] || ! grep -U --binary-files=binary -F -m 1 -q nbd-OK "$TESTDIR"/flag.img; then if [[ $? -ne 0 ]] || ! grep -U --binary-files=binary -F -m 1 -q nbd-OK "$TESTDIR"/marker.img; then
echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]" echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]"
return 1 return 1
fi fi


# nbdinfo=( fstype fsoptions ) # nbdinfo=( fstype fsoptions )
read -r -a nbdinfo < <(awk '{print $2, $3; exit}' "$TESTDIR"/flag.img) read -r -a nbdinfo < <(awk '{print $2, $3; exit}' "$TESTDIR"/marker.img)


if [[ ${nbdinfo[0]} != "$fstype" ]]; then if [[ ${nbdinfo[0]} != "$fstype" ]]; then
echo "CLIENT TEST END: $test_name [FAILED - WRONG FS TYPE] \"${nbdinfo[0]}\" != \"$fstype\"" echo "CLIENT TEST END: $test_name [FAILED - WRONG FS TYPE] \"${nbdinfo[0]}\" != \"$fstype\""
@ -191,10 +196,6 @@ client_run() {
} }


make_encrypted_root() { make_encrypted_root() {
# Create the blank file to use as a root filesystem
dd if=/dev/zero of="$TESTDIR"/encrypted.ext3 bs=1M count=80
dd if=/dev/zero of="$TESTDIR"/flag.img bs=1M count=1

rm -fr "$TESTDIR"/overlay rm -fr "$TESTDIR"/overlay
kernel=$KVERSION kernel=$KVERSION
# Create what will eventually be our root filesystem onto an overlay # Create what will eventually be our root filesystem onto an overlay
@ -214,11 +215,17 @@ make_encrypted_root() {
) )


inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \ inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
mount dmesg mkdir cp ping dd mount dmesg mkdir cp ping dd sync
for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
[ -f ${_terminfodir}/l/linux ] && break [ -f ${_terminfodir}/l/linux ] && break
done done
inst_multiple -o ${_terminfodir}/l/linux inst_multiple -o ${_terminfodir}/l/linux

inst_simple "${basedir}/modules.d/99base/dracut-lib.sh" "/lib/dracut-lib.sh"
inst_binary "${basedir}/dracut-util" "/usr/bin/dracut-util"
ln -s dracut-util "${initdir}/usr/bin/dracut-getarg"
ln -s dracut-util "${initdir}/usr/bin/dracut-getargs"

inst ./client-init.sh /sbin/init inst ./client-init.sh /sbin/init
inst_simple /etc/os-release inst_simple /etc/os-release
find_binary plymouth > /dev/null && inst_multiple plymouth find_binary plymouth > /dev/null && inst_multiple plymouth
@ -246,7 +253,6 @@ make_encrypted_root() {
inst_hook emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh
inst_hook initqueue 01 ./create-encrypted-root.sh inst_hook initqueue 01 ./create-encrypted-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh inst_hook initqueue/finished 01 ./finished-false.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -259,20 +265,24 @@ make_encrypted_root() {
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
rm -rf -- "$TESTDIR"/overlay rm -rf -- "$TESTDIR"/overlay


dd if=/dev/zero of="$TESTDIR"/encrypted.img bs=1MiB count=120
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/encrypted.img root

# Invoke KVM and/or QEMU to actually create the target filesystem. # Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/encrypted.ext3 \ "${disk_args[@]}" \
-drive format=raw,index=1,media=disk,file="$TESTDIR"/flag.img \
-append "root=/dev/fakeroot rw quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/fakeroot rw quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/flag.img || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1
grep -F -a -m 1 ID_FS_UUID "$TESTDIR"/flag.img > "$TESTDIR"/luks.uuid grep -F -a -m 1 ID_FS_UUID "$TESTDIR"/marker.img > "$TESTDIR"/luks.uuid
} }


make_client_root() { make_client_root() {
dd if=/dev/zero of="$TESTDIR"/nbd.ext3 bs=1M count=120
dd if=/dev/zero of="$TESTDIR"/flag.img bs=1M count=1

rm -fr "$TESTDIR"/overlay rm -fr "$TESTDIR"/overlay
kernel=$KVERSION kernel=$KVERSION
( (
@ -292,11 +302,17 @@ make_client_root() {
done done
) )
inst_multiple sh ls shutdown poweroff stty cat ps ln ip \ inst_multiple sh ls shutdown poweroff stty cat ps ln ip \
dmesg mkdir cp ping dd dmesg mkdir cp ping dd mount sync
for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
[ -f ${_terminfodir}/l/linux ] && break [ -f ${_terminfodir}/l/linux ] && break
done done
inst_multiple -o ${_terminfodir}/l/linux inst_multiple -o ${_terminfodir}/l/linux

inst_simple "${basedir}/modules.d/99base/dracut-lib.sh" "/lib/dracut-lib.sh"
inst_binary "${basedir}/dracut-util" "/usr/bin/dracut-util"
ln -s dracut-util "${initdir}/usr/bin/dracut-getarg"
ln -s dracut-util "${initdir}/usr/bin/dracut-getargs"

inst ./client-init.sh /sbin/init inst ./client-init.sh /sbin/init
inst_simple /etc/os-release inst_simple /etc/os-release
inst /etc/nsswitch.conf /etc/nsswitch.conf inst /etc/nsswitch.conf /etc/nsswitch.conf
@ -320,7 +336,6 @@ make_client_root() {
inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd
inst_hook initqueue 01 ./create-client-root.sh inst_hook initqueue 01 ./create-client-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh inst_hook initqueue/finished 01 ./finished-false.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -333,20 +348,24 @@ make_client_root() {
--no-hostonly-cmdline -N \ --no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1


dd if=/dev/zero of="$TESTDIR"/unencrypted.img bs=1MiB count=120
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/unencrypted.img root

# Invoke KVM and/or QEMU to actually create the target filesystem. # Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/nbd.ext3 \ "${disk_args[@]}" \
-drive format=raw,index=1,media=disk,file="$TESTDIR"/flag.img \
-append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/flag.img || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1
rm -fr "$TESTDIR"/overlay rm -fr "$TESTDIR"/overlay
} }


make_server_root() { make_server_root() {
dd if=/dev/zero of="$TESTDIR"/server.ext3 bs=1M count=120
dd if=/dev/zero of="$TESTDIR"/flag.img bs=1M count=1

rm -fr "$TESTDIR"/overlay rm -fr "$TESTDIR"/overlay
export kernel=$KVERSION export kernel=$KVERSION
( (
@ -365,11 +384,11 @@ make_server_root() {
cat > "$initdir/etc/nbd-server/config" << EOF cat > "$initdir/etc/nbd-server/config" << EOF
[generic] [generic]
[raw] [raw]
exportname = /dev/sdb exportname = /dev/disk/by-id/ata-disk_unencrypted
port = 2000 port = 2000
bs = 4096 bs = 4096
[encrypted] [encrypted]
exportname = /dev/sdc exportname = /dev/disk/by-id/ata-disk_encrypted
port = 2001 port = 2001
bs = 4096 bs = 4096
EOF EOF
@ -409,7 +428,6 @@ EOF
inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd sync inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd sync
inst_hook initqueue 01 ./create-server-root.sh inst_hook initqueue 01 ./create-server-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh inst_hook initqueue/finished 01 ./finished-false.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -422,13 +440,20 @@ EOF
--no-hostonly-cmdline -N \ --no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1


dd if=/dev/zero of="$TESTDIR"/server.img bs=1MiB count=120
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/server.img root

# Invoke KVM and/or QEMU to actually create the target filesystem. # Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/server.ext3 \ "${disk_args[@]}" \
-drive format=raw,index=1,media=disk,file="$TESTDIR"/flag.img \
-append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/flag.img || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1
rm -fr "$TESTDIR"/overlay rm -fr "$TESTDIR"/overlay
} }


@ -446,7 +471,6 @@ test_setup() {
. "$basedir"/dracut-init.sh . "$basedir"/dracut-init.sh
inst_multiple poweroff shutdown dd inst_multiple poweroff shutdown dd
inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook shutdown-emergency 000 ./hard-off.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
inst ./cryptroot-ask.sh /sbin/cryptroot-ask inst ./cryptroot-ask.sh /sbin/cryptroot-ask


# inst ./debug-shell.service /lib/systemd/system/debug-shell.service # inst ./debug-shell.service /lib/systemd/system/debug-shell.service
@ -461,8 +485,8 @@ test_setup() {
) )


"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
-m "dash udev-rules rootfs-block fs-lib base debug kernel-modules" \ -a "udev-rules base rootfs-block fs-lib debug kernel-modules" \
-d "af_packet piix ide-gd_mod ata_piix ext3 ext3 sd_mod e1000" \ -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 drbg" \
--no-hostonly-cmdline -N \ --no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.server "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.server "$KVERSION" || return 1



View File

@ -1,8 +0,0 @@
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"

View File

@ -27,7 +27,7 @@ done
{ {
echo "OK" echo "OK"
echo "$IFACES" echo "$IFACES"
} | dd oflag=direct,dsync of=/dev/sda } | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker


getargbool 0 rd.shell && sh -i getargbool 0 rd.shell && sh -i



View File

@ -1,25 +1,21 @@
#!/bin/sh #!/bin/sh

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"
done done
rm -f -- /etc/lvm/lvm.conf rm -f -- /etc/lvm/lvm.conf
udevadm control --reload udevadm control --reload
udevadm settle
set -e set -e
# save a partition at the beginning for future flagging purposes
sfdisk /dev/sda << EOF
,1M
,
EOF


udevadm settle udevadm settle
mkfs.ext3 -L dracut /dev/sda2 mkfs.ext3 -L dracut /dev/disk/by-id/ata-disk_root
mkdir -p /root mkdir -p /root
mount /dev/sda2 /root mount /dev/disk/by-id/ata-disk_root /root
cp -a -t /root /source/* cp -a -t /root /source/*
mkdir -p /root/run mkdir -p /root/run
umount /root umount /root
echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/sda1 echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
sync
poweroff -f poweroff -f

View File

@ -15,10 +15,6 @@ wait_for_if_link() {
while [ $cnt -lt 600 ]; do while [ $cnt -lt 600 ]; do
li=$(ip -o link show dev "$1" 2> /dev/null) li=$(ip -o link show dev "$1" 2> /dev/null)
[ -n "$li" ] && return 0 [ -n "$li" ] && return 0
if [[ $2 ]]; then
li=$(ip -o link show dev "$2" 2> /dev/null)
[ -n "$li" ] && return 0
fi
sleep 0.1 sleep 0.1
cnt=$((cnt + 1)) cnt=$((cnt + 1))
done done
@ -52,14 +48,14 @@ linkup() {
wait_for_if_link "$1" 2> /dev/null && ip link set "$1" up 2> /dev/null && wait_for_if_up "$1" 2> /dev/null wait_for_if_link "$1" 2> /dev/null && ip link set "$1" up 2> /dev/null && wait_for_if_up "$1" 2> /dev/null
} }


wait_for_if_link eth0 ens2 wait_for_if_link enp0s1


: > /dev/watchdog : > /dev/watchdog
ip addr add 127.0.0.1/8 dev lo ip addr add 127.0.0.1/8 dev lo
linkup lo linkup lo
ip link set dev eth0 name ens2
ip addr add 192.168.50.1/24 dev ens2 ip addr add 192.168.50.1/24 dev enp0s1
linkup ens2 linkup enp0s1


: > /dev/watchdog : > /dev/watchdog
modprobe af_packet modprobe af_packet

View File

@ -21,8 +21,13 @@ run_server() {
# Start server first # Start server first
echo "MULTINIC TEST SETUP: Starting DHCP/NFS server" echo "MULTINIC TEST SETUP: Starting DHCP/NFS server"


declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/server.img root

"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/server.ext3 \ "${disk_args[@]}" \
-net socket,listen=127.0.0.1:12350 \ -net socket,listen=127.0.0.1:12350 \
-net nic,macaddr=52:54:01:12:34:56,model=e1000 \ -net nic,macaddr=52:54:01:12:34:56,model=e1000 \
-serial "${SERIAL:-"file:$TESTDIR/server.log"}" \ -serial "${SERIAL:-"file:$TESTDIR/server.log"}" \
@ -59,13 +64,15 @@ client_test() {


echo "CLIENT TEST START: $test_name" echo "CLIENT TEST START: $test_name"


# Need this so kvm-qemu will boot (needs non-/dev/zero local disk) dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
if ! dd if=/dev/zero of="$TESTDIR"/client.img bs=1M count=1; then declare -a disk_args=()
echo "Unable to make client sda image" 1>&2 # shellcheck disable=SC2034
return 1 declare -i disk_index=0
fi qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker


"$testdir"/run-qemu -drive format=raw,index=0,media=disk,file="$TESTDIR"/client.img \ # Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu \
"${disk_args[@]}" \
-net socket,connect=127.0.0.1:12350 \ -net socket,connect=127.0.0.1:12350 \
-net nic,macaddr=52:54:00:12:34:"$mac1",model=e1000 \ -net nic,macaddr=52:54:00:12:34:"$mac1",model=e1000 \
-net nic,macaddr=52:54:00:12:34:"$mac2",model=e1000 \ -net nic,macaddr=52:54:00:12:34:"$mac2",model=e1000 \
@ -76,12 +83,12 @@ client_test() {
-device e1000,netdev=n2,mac=52:54:00:12:34:99 \ -device e1000,netdev=n2,mac=52:54:00:12:34:99 \
-watchdog i6300esb -watchdog-action poweroff \ -watchdog i6300esb -watchdog-action poweroff \
-append "quiet rd.net.timeout.dhcp=3 panic=1 systemd.crash_reboot rd.shell=0 $cmdline $DEBUGFAIL rd.retry=5 ro console=ttyS0,115200n81 selinux=0 init=/sbin/init rd.debug systemd.log_target=console" \ -append "quiet rd.net.timeout.dhcp=3 panic=1 systemd.crash_reboot rd.shell=0 $cmdline $DEBUGFAIL rd.retry=5 ro console=ttyS0,115200n81 selinux=0 init=/sbin/init rd.debug systemd.log_target=console" \
-initrd "$TESTDIR"/initramfs.testing -initrd "$TESTDIR"/initramfs.testing || return 1


{ {
read -r OK read -r OK
read -r IFACES read -r IFACES
} < "$TESTDIR"/client.img } < "$TESTDIR"/marker.img


if [[ $OK != "OK" ]]; then if [[ $OK != "OK" ]]; then
echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]" echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]"
@ -128,54 +135,51 @@ test_client() {
client_test "MULTINIC root=nfs BOOTIF=" \ client_test "MULTINIC root=nfs BOOTIF=" \
00 01 02 \ 00 01 02 \
"root=nfs:192.168.50.1:/nfs/client BOOTIF=52-54-00-12-34-00" \ "root=nfs:192.168.50.1:/nfs/client BOOTIF=52-54-00-12-34-00" \
"ens2" || return 1 "enp0s1" || return 1


client_test "MULTINIC root=nfs BOOTIF= ip=ens4:dhcp" \ client_test "MULTINIC root=nfs BOOTIF= ip=enp0s3:dhcp" \
00 01 02 \ 00 01 02 \
"root=nfs:192.168.50.1:/nfs/client BOOTIF=52-54-00-12-34-00 ip=ens3:dhcp" \ "root=nfs:192.168.50.1:/nfs/client BOOTIF=52-54-00-12-34-00 ip=enp0s2:dhcp" \
"ens2 ens3" || return 1 "enp0s1 enp0s2" || return 1


# PXE Style BOOTIF= with dhcp root-path # PXE Style BOOTIF= with dhcp root-path
client_test "MULTINIC root=dhcp BOOTIF=" \ client_test "MULTINIC root=dhcp BOOTIF=" \
00 01 02 \ 00 01 02 \
"root=dhcp BOOTIF=52-54-00-12-34-02" \ "root=dhcp BOOTIF=52-54-00-12-34-02" \
"ens4" || return 1 "enp0s3" || return 1


# Multinic case, where only one nic works # Multinic case, where only one nic works
client_test "MULTINIC root=nfs ip=dhcp" \ client_test "MULTINIC root=nfs ip=dhcp" \
FF 00 FE \ FF 00 FE \
"root=nfs:192.168.50.1:/nfs/client ip=dhcp" \ "root=nfs:192.168.50.1:/nfs/client ip=dhcp" \
"ens3" || return 1 "enp0s2" || return 1


# Require two interfaces # Require two interfaces
client_test "MULTINIC root=nfs ip=ens3:dhcp ip=ens4:dhcp bootdev=ens3" \ client_test "MULTINIC root=nfs ip=enp0s2:dhcp ip=enp0s3:dhcp bootdev=enp0s2" \
00 01 02 \ 00 01 02 \
"root=nfs:192.168.50.1:/nfs/client ip=ens3:dhcp ip=ens4:dhcp bootdev=ens3" \ "root=nfs:192.168.50.1:/nfs/client ip=enp0s2:dhcp ip=enp0s3:dhcp bootdev=enp0s2" \
"ens3 ens4" || return 1 "enp0s2 enp0s3" || return 1


# Require three interfaces with dhcp root-path # Require three interfaces with dhcp root-path
client_test "MULTINIC root=dhcp ip=ens2:dhcp ip=ens3:dhcp ip=ens4:dhcp bootdev=ens4" \ client_test "MULTINIC root=dhcp ip=enp0s1:dhcp ip=enp0s2:dhcp ip=enp0s3:dhcp bootdev=enp0s3" \
00 01 02 \ 00 01 02 \
"root=dhcp ip=ens2:dhcp ip=ens3:dhcp ip=ens4:dhcp bootdev=ens4" \ "root=dhcp ip=enp0s1:dhcp ip=enp0s2:dhcp ip=enp0s3:dhcp bootdev=enp0s3" \
"ens2 ens3 ens4" || return 1 "enp0s1 enp0s2 enp0s3" || return 1


client_test "MULTINIC bonding" \ client_test "MULTINIC bonding" \
00 01 02 \ 00 01 02 \
"root=nfs:192.168.50.1:/nfs/client ip=bond0:dhcp bond=bond0:ens2,ens3,ens4:mode=balance-rr" \ "root=nfs:192.168.50.1:/nfs/client ip=bond0:dhcp bond=bond0:enp0s1,enp0s2,enp0s3:mode=balance-rr" \
"bond0" || return 1 "bond0" || return 1


# bridge, where only one interface is actually connected # bridge, where only one interface is actually connected
client_test "MULTINIC bridging" \ client_test "MULTINIC bridging" \
00 01 02 \ 00 01 02 \
"root=nfs:192.168.50.1:/nfs/client ip=bridge0:dhcp bridge=bridge0:ens2,ens6,ens7" \ "root=nfs:192.168.50.1:/nfs/client ip=bridge0:dhcp bridge=bridge0:enp0s1,enp0s5,enp0s6" \
"bridge0" || return 1 "bridge0" || return 1
return 0 return 0
} }


test_setup() { test_setup() {
# Make server root
dd if=/dev/zero of="$TESTDIR"/server.ext3 bs=1M count=120

kernel=$KVERSION kernel=$KVERSION
( (
mkdir -p "$TESTDIR"/overlay/source mkdir -p "$TESTDIR"/overlay/source
@ -305,7 +309,6 @@ test_setup() {
inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd
inst_hook initqueue 01 ./create-root.sh inst_hook initqueue 01 ./create-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh inst_hook initqueue/finished 01 ./finished-false.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -317,14 +320,22 @@ test_setup() {
--nomdadmconf \ --nomdadmconf \
--no-hostonly-cmdline -N \ --no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
rm -fr "$TESTDIR"/overlay

dd if=/dev/zero of="$TESTDIR"/server.img bs=1MiB count=120
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/server.img root


# Invoke KVM and/or QEMU to actually create the target filesystem. # Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu \ "$testdir"/run-qemu \
-drive format=raw,index=0,media=disk,file="$TESTDIR"/server.ext3 \ "${disk_args[@]}" \
-append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \ -append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1 -initrd "$TESTDIR"/initramfs.makeroot || return 1
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/server.ext3 || return 1 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1
rm -fr "$TESTDIR"/overlay


# Make an overlay with needed tools for the test harness # Make an overlay with needed tools for the test harness
( (
@ -335,7 +346,6 @@ test_setup() {
inst_multiple poweroff shutdown inst_multiple poweroff shutdown
inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
inst_simple ./99-default.link /etc/systemd/network/99-default.link inst_simple ./99-default.link /etc/systemd/network/99-default.link
) )



View File

@ -1,8 +0,0 @@
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"

View File

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

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes # don't let udev and this script step on eachother's toes
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x" : > "/etc/udev/rules.d/$x"

View File

@ -320,7 +320,6 @@ test_setup() {
inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd
inst_hook initqueue 01 ./create-root.sh inst_hook initqueue 01 ./create-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh inst_hook initqueue/finished 01 ./finished-false.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
) )


# create an initramfs that will create the target root filesystem. # create an initramfs that will create the target root filesystem.
@ -349,7 +348,6 @@ test_setup() {
. "$basedir"/dracut-init.sh . "$basedir"/dracut-init.sh
inst_multiple poweroff shutdown inst_multiple poweroff shutdown
inst_hook emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
inst_simple ./99-default.link /etc/systemd/network/99-default.link inst_simple ./99-default.link /etc/systemd/network/99-default.link
) )



View File

@ -18,7 +18,7 @@ export PATH=/sbin:/bin:/usr/sbin:/usr/bin
} }


# Provide rng device sourcing the hosts /dev/urandom and other standard parameters # Provide rng device sourcing the hosts /dev/urandom and other standard parameters
ARGS+=(-smp 2 -m 512 -nodefaults -vga none -display none -no-reboot -device virtio-rng-pci) ARGS+=(-M q35 -smp 2 -m 512 -nodefaults -vga none -display none -no-reboot -device virtio-rng-pci)


if ! [[ $* == *-daemonize* ]] && ! [[ $* == *-daemonize* ]]; then if ! [[ $* == *-daemonize* ]] && ! [[ $* == *-daemonize* ]]; then
ARGS+=(-serial stdio) ARGS+=(-serial stdio)