This removes some hard assumptions about the file system layout.
It also hardens the tests with network interface renaming rules and
guards.
. /lib/dracut-lib.sh
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1
cd "$initdir" || exit
mkdir -p -- dev sys proc etc var/run tmp
mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
- for i in bin sbin lib lib64; do
- ln -sfnr usr/$i $i
- done
)
inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
mount dmesg dhclient mkdir cp ping dhclient \
. /lib/dracut-lib.sh
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1
cd "$initdir" || exit
mkdir -p -- dev sys proc etc var/run tmp
mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
- for i in bin sbin lib lib64; do
- ln -sfnr usr/$i $i
- done
mkdir -p -- var/lib/nfs/rpc_pipefs
)
inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
. /lib/dracut-lib.sh
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1
cd "$initdir" || exit
mkdir -p -- dev sys proc etc var/run tmp
mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
- for i in bin sbin lib lib64; do
- ln -sfnr usr/$i $i
- done
)
inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
mount dmesg dhclient mkdir cp ping dhclient \
. /lib/dracut-lib.sh
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1
return 1
fi
inst /sbin/init
- inst /lib/systemd/system/systemd-remount-fs.service
- inst /lib/systemd/systemd-remount-fs
- inst /lib/systemd/system/systemd-journal-flush.service
- inst /lib/systemd/system/slices.target
- inst_multiple -o /lib/systemd/system/dracut*
+ inst_multiple -o {,/usr}/lib/systemd/system/"dracut*"
inst_simple "${basedir}/modules.d/99base/dracut-lib.sh" "/lib/dracut-lib.sh"
inst_binary "${basedir}/dracut-util" "/usr/bin/dracut-util"
/etc/shadow \
/etc/group \
/etc/shells \
- /etc/nsswitch.conf \
+ {,/usr}/etc/nsswitch.conf \
/etc/pam.conf \
/etc/securetty \
/etc/os-release \
ln -fs /proc/self/mounts "$initdir"/etc/mtab
# install any Execs from the service files
- grep -Eho '^Exec[^ ]*=[^ ]+' "$initdir"/lib/systemd/system/*.service \
+ grep -Eho '^Exec[^ ]*=[^ ]+' "$initdir"{,/usr}/lib/systemd/system/*.service \
| while read -r i || [ -n "$i" ]; do
i=${i##Exec*=}
i=${i##-}
. /lib/dracut-lib.sh
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1
cd "$initdir" || exit
mkdir -p -- dev sys proc etc var/run tmp
mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
- for i in bin sbin lib lib64; do
- ln -sfnr usr/$i $i
- done
)
inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
mount dmesg dhclient mkdir cp ping dhclient dd sync
. /lib/dracut-lib.sh
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1
cd "$initdir" || exit
mkdir -p -- dev sys proc etc var/run tmp
mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
- for i in bin sbin lib lib64; do
- ln -sfnr usr/$i $i
- done
mkdir -p -- var/lib/nfs/rpc_pipefs
)
inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
. /lib/dracut-lib.sh
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1
cd "$initdir" || exit
mkdir -p -- dev sys proc etc var/run tmp
mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
- for i in bin sbin lib lib64; do
- ln -sfnr usr/$i $i
- done
)
inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
mount dmesg dhclient mkdir cp ping dhclient dd sync
. /lib/dracut-lib.sh
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1
cd "$initdir" || exit
mkdir -p -- dev sys proc etc var/run tmp
mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
- for i in bin sbin lib lib64; do
- ln -sfnr usr/$i $i
- done
mkdir -p -- var/lib/nfs/rpc_pipefs
)
inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
udevadm settle
sfdisk -g /dev/mapper/isw*Test0
-# save a partition at the beginning for future flagging purposes
sfdisk --no-reread /dev/mapper/isw*Test0 << EOF
,4M
,28M
,28M
EOF
+set -x
+
udevadm settle
dmraid -a n
udevadm settle
udevadm settle
mdadm --create /dev/md0 --run --auto=yes --level=5 --raid-devices=3 \
- /dev/mapper/isw*p2 \
- /dev/mapper/isw*p3 \
- /dev/mapper/isw*p4
-
+ /dev/mapper/isw*p*[234]
# wait for the array to finish initailizing, otherwise this sometimes fails
# randomly.
mdadm -W /dev/md0
. /lib/dracut-lib.sh
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1
cd "$initdir" || exit
mkdir -p -- dev sys proc etc var/run tmp
mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
- for i in bin sbin lib lib64; do
- ln -sfnr usr/$i $i
- done
)
inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
mount dmesg dhclient mkdir cp ping dhclient dd sync
. /lib/dracut-lib.sh
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1
cd "$initdir" || exit
mkdir -p -- dev sys proc etc var/run tmp
mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
- for i in bin sbin lib lib64; do
- ln -sfnr usr/$i $i
- done
mkdir -p -- var/lib/nfs/rpc_pipefs
)
inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
. /lib/dracut-lib.sh
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1
cd "$initdir" || exit
mkdir -p -- dev sys proc etc var/run tmp
mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
- for i in bin sbin lib lib64; do
- ln -sfnr usr/$i $i
- done
)
inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
mount dmesg dhclient mkdir cp ping dhclient \
. /lib/dracut-lib.sh
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1
cd "$initdir" || exit
mkdir -p -- dev sys proc etc var/run tmp
mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
- for i in bin sbin lib lib64; do
- ln -sfnr usr/$i $i
- done
mkdir -p -- var/lib/nfs/rpc_pipefs
)
inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
: > /dev/watchdog
. /lib/dracut-lib.sh
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1
#!/bin/sh
exec < /dev/console > /dev/console 2>&1
set -x
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
export TERM=linux
export PS1='nfstest-server:\w\$ '
-echo > /dev/watchdog
+: > /dev/watchdog
stty sane
echo "made it to the rootfs!"
echo server > /proc/sys/kernel/hostname
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 enp0s1
+wait_for_if_link enx525400123456
ip addr add 127.0.0.1/8 dev lo
ip link set lo up
-ip addr add 192.168.50.1/24 dev enp0s1
-ip addr add 192.168.50.2/24 dev enp0s1
-ip addr add 192.168.50.3/24 dev enp0s1
-linkup enp0s1
+ip addr add 192.168.50.1/24 dev enx525400123456
+ip addr add 192.168.50.2/24 dev enx525400123456
+ip addr add 192.168.50.3/24 dev enx525400123456
+linkup enx525400123456
-echo > /dev/watchdog
+: > /dev/watchdog
modprobe af_packet
-echo > /dev/watchdog
+: > /dev/watchdog
+mkdir /nfs/nfs3-5
mount --bind /nfs/client /nfs/nfs3-5
-echo > /dev/watchdog
+: > /dev/watchdog
+mkdir -p /nfs/ip/192.168.50.101
mount --bind /nfs/client /nfs/ip/192.168.50.101
-echo > /dev/watchdog
+: > /dev/watchdog
+mkdir -p /nfs/tftpboot/nfs4-5
mount --bind /nfs/client /nfs/tftpboot/nfs4-5
-echo > /dev/watchdog
+: > /dev/watchdog
modprobe sunrpc
-echo > /dev/watchdog
+: > /dev/watchdog
mount -t rpc_pipefs sunrpc /var/lib/nfs/rpc_pipefs
-echo > /dev/watchdog
+: > /dev/watchdog
[ -x /sbin/portmap ] && portmap
-echo > /dev/watchdog
+: > /dev/watchdog
mkdir -p /run/rpcbind
[ -x /sbin/rpcbind ] && rpcbind
-echo > /dev/watchdog
+: > /dev/watchdog
modprobe nfsd
-echo > /dev/watchdog
+: > /dev/watchdog
mount -t nfsd nfsd /proc/fs/nfsd
-echo > /dev/watchdog
+: > /dev/watchdog
exportfs -r
-echo > /dev/watchdog
+: > /dev/watchdog
rpc.nfsd
-echo > /dev/watchdog
+: > /dev/watchdog
rpc.mountd
-echo > /dev/watchdog
+: > /dev/watchdog
rpc.idmapd
-echo > /dev/watchdog
+: > /dev/watchdog
exportfs -r
-echo > /dev/watchdog
+: > /dev/watchdog
mkdir -p /var/lib/dhcpd
: > /var/lib/dhcpd/dhcpd.leases
-echo > /dev/watchdog
+: > /dev/watchdog
chmod 777 /var/lib/dhcpd/dhcpd.leases
-echo > /dev/watchdog
+: > /dev/watchdog
rm -f /var/run/dhcpd.pid
dhcpd -d -cf /etc/dhcpd.conf -lf /var/lib/dhcpd/dhcpd.leases &
+exportfs -s
echo "Serving NFS mounts"
while :; do
- [ -n "$(jobs -rp)" ] && echo > /dev/watchdog
+ [ -n "$(jobs -rp)" ] && : > /dev/watchdog
sleep 10
done
mount -n -o remount,ro /
KVERSION=${KVERSION-$(uname -r)}
# Uncomment this to debug failures
-#DEBUGFAIL="loglevel=1"
+DEBUGFAIL="rd.debug loglevel=7"
#DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 "
#DEBUGFAIL="rd.debug loglevel=7 rd.break=initqueue rd.shell"
-#SERVER_DEBUG="rd.debug loglevel=7"
+SERVER_DEBUG="rd.debug loglevel=7"
#SERIAL="unix:/tmp/server.sock"
run_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
+ qemu_add_drive_args disk_index disk_args "$TESTDIR"/server.img root 1
"$testdir"/run-qemu \
"${disk_args[@]}" \
-net nic,macaddr=52:54:00:12:34:56,model=e1000 \
-serial "${SERIAL:-"file:$TESTDIR/server.log"}" \
-watchdog i6300esb -watchdog-action poweroff \
- -append "panic=1 hung_task_panic=1 oops=panic softlockup_panic=1 quiet root=LABEL=dracut rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0 $SERVER_DEBUG" \
+ -append "panic=1 hung_task_panic=1 oops=panic softlockup_panic=1 root=LABEL=dracut rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0 $SERVER_DEBUG" \
-initrd "$TESTDIR"/initramfs.server \
-pidfile "$TESTDIR"/server.pid -daemonize || return 1
chmod 644 "$TESTDIR"/server.pid || return 1
export srcmods="/lib/modules/$kernel/"
# Detect lib paths
+ rm -rf -- "$TESTDIR"/overlay
(
mkdir -p "$TESTDIR"/server/overlay/source
# shellcheck disable=SC2030
# shellcheck disable=SC1090
. "$basedir"/dracut-init.sh
- for _f in modules.builtin.bin modules.builtin; do
- [[ -f $srcmods/$_f ]] && break
- done || {
- dfatal "No modules.builtin.bin and modules.builtin found!"
- return 1
- }
-
- for _f in modules.builtin.bin modules.builtin modules.order; do
- [[ -f $srcmods/$_f ]] && inst_simple "$srcmods/$_f" "/lib/modules/$kernel/$_f"
- done
+ (
+ cd "$initdir" || exit
+ mkdir -p dev sys proc run etc var/run tmp var/lib/{dhcpd,rpcbind}
+ mkdir -p var/lib/nfs/{v4recovery,rpc_pipefs}
+ chmod 777 var/lib/rpcbind var/lib/nfs
+ )
inst_multiple sh ls shutdown poweroff stty cat ps ln ip \
dmesg mkdir cp ping exportfs \
modprobe rpc.nfsd rpc.mountd showmount tcpdump \
- /etc/services sleep mount chmod rm
+ sleep mount chmod rm
for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
- [ -f ${_terminfodir}/l/linux ] && break
+ if [ -f "${_terminfodir}"/l/linux ]; then
+ inst_multiple -o "${_terminfodir}"/l/linux
+ break
+ fi
done
- inst_multiple -o ${_terminfodir}/l/linux
type -P portmap > /dev/null && inst_multiple portmap
type -P rpcbind > /dev/null && inst_multiple rpcbind
[ -f /etc/netconfig ] && inst_multiple /etc/netconfig
inst ./hosts /etc/hosts
inst ./exports /etc/exports
inst ./dhcpd.conf /etc/dhcpd.conf
- inst_multiple /etc/nsswitch.conf /etc/rpc /etc/protocols
+ inst_multiple -o {,/usr}/etc/nsswitch.conf {,/usr}/etc/rpc \
+ {,/usr}/etc/protocols {,/usr}/etc/services
inst_multiple rpc.idmapd /etc/idmapd.conf
inst_libdir_file 'libnfsidmap_nsswitch.so*'
inst_libdir_file 'libnfsidmap/*.so*'
inst_libdir_file 'libnfsidmap*.so*'
- _nsslibs=$(sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' /etc/nsswitch.conf \
- | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|')
+ _nsslibs=$(
+ cat "$dracutsysrootdir"/{,usr/}etc/nsswitch.conf 2> /dev/null \
+ | sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \
+ | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|'
+ )
_nsslibs=${_nsslibs#|}
_nsslibs=${_nsslibs%|}
-
inst_libdir_file -n "$_nsslibs" 'libnss_*.so*'
- (
- cd "$initdir" || exit
- mkdir -p dev sys proc run etc var/run tmp var/lib/{dhcpd,rpcbind}
- mkdir -p var/lib/nfs/{v4recovery,rpc_pipefs}
- chmod 777 var/lib/rpcbind var/lib/nfs
- )
- inst /etc/nsswitch.conf /etc/nsswitch.conf
-
inst /etc/passwd /etc/passwd
inst /etc/group /etc/group
cp -a /etc/ld.so.conf* "$initdir"/etc
ldconfig -r "$initdir"
dracut_kernel_post
-
)
# Make client root inside server root
(
cd "$initdir" || exit
- mkdir -p dev sys proc etc run
- mkdir -p var/lib/nfs/rpc_pipefs
- mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
- for i in bin sbin lib lib64; do
- ln -sfnr usr/$i $i
- done
+ mkdir -p dev sys proc etc run root usr var/lib/nfs/rpc_pipefs
)
inst_multiple sh shutdown poweroff stty cat ps ln ip dd \
mount dmesg mkdir cp ping grep setsid ls vi less cat sync
for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
- [ -f ${_terminfodir}/l/linux ] && break
+ if [ -f "${_terminfodir}"/l/linux ]; then
+ inst_multiple -o "${_terminfodir}"/l/linux
+ break
+ fi
done
- 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"
inst ./client-init.sh /sbin/init
inst_simple /etc/os-release
- inst /etc/nsswitch.conf /etc/nsswitch.conf
+ inst_multiple -o {,/usr}/etc/nsswitch.conf
inst /etc/passwd /etc/passwd
inst /etc/group /etc/group
inst_libdir_file 'libnfsidmap/*.so*'
inst_libdir_file 'libnfsidmap*.so*'
- _nsslibs=$(sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' /etc/nsswitch.conf \
- | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|')
+ _nsslibs=$(
+ cat "$dracutsysrootdir"/{,usr/}etc/nsswitch.conf 2> /dev/null \
+ | sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \
+ | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|'
+ )
_nsslibs=${_nsslibs#|}
_nsslibs=${_nsslibs%|}
-
inst_libdir_file -n "$_nsslibs" 'libnss_*.so*'
cp -a /etc/ld.so.conf* "$initdir"/etc
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
rm -rf -- "$TESTDIR"/server
- dd if=/dev/zero of="$TESTDIR"/root.img bs=1MiB count=80
+ dd if=/dev/zero of="$TESTDIR"/server.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
+ qemu_add_drive_args disk_index disk_args "$TESTDIR"/server.img root
# Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu \
# Make an overlay with needed tools for the test harness
(
# shellcheck disable=SC2031
- export initdir=$TESTDIR/overlay
+ # shellcheck disable=SC2030
+ export initdir="$TESTDIR"/overlay
+ mkdir -p "$TESTDIR"/overlay
# shellcheck disable=SC1090
. "$basedir"/dracut-init.sh
- mkdir -p "$TESTDIR"/overlay
inst_multiple poweroff shutdown
inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh
- inst_simple ./99-default.link /etc/systemd/network/99-default.link
+ inst_simple ./client.link /etc/systemd/network/01-client.link
)
- # Make server's dracut image
- "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
- -m "dash udev-rules base rootfs-block fs-lib debug kernel-modules watchdog qemu" \
- -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 i6300esb" \
- --no-hostonly-cmdline -N \
- -f "$TESTDIR"/initramfs.server "$KVERSION" || return 1
-
# Make client's dracut image
"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
-o "plymouth dash ${OMIT_NETWORK}" \
-a "debug watchdog ${USE_NETWORK}" \
- -d "af_packet piix ide-gd_mod ata_piix sd_mod e1000 nfs sunrpc i6300esb" \
--no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1
+
+ (
+ # shellcheck disable=SC2031
+ export initdir="$TESTDIR"/overlay
+ # shellcheck disable=SC1090
+ . "$basedir"/dracut-init.sh
+ rm "$initdir"/etc/systemd/network/01-client.link
+ inst_simple ./server.link /etc/systemd/network/01-server.link
+ inst_hook pre-mount 99 ./wait-if-server.sh
+ )
+ # Make server's dracut image
+ "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
+ -m "dash udev-rules base rootfs-block fs-lib debug kernel-modules watchdog qemu network network-legacy" \
+ -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 i6300esb" \
+ --no-hostonly-cmdline -N \
+ -f "$TESTDIR"/initramfs.server "$KVERSION" || return 1
+
+ rm -rf -- "$TESTDIR"/overlay
}
test_cleanup() {
--- /dev/null
+#!/bin/sh
+. /lib/net-lib.sh
+wait_for_if_link enx525400123456
#!/bin/sh
. /lib/dracut-lib.sh
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1
# NFSv3: last octect starts at 0x00 and works up
group {
- option root-path "iscsi:192.168.51.1:::1:iqn.2009-06.dracut:target1";
+ #option root-path "iscsi:192.168.51.1:::1:iqn.2009-06.dracut:target1";
host iscsi-2 {
hardware ethernet 52:54:00:12:34:01;
#!/bin/sh
exec < /dev/console > /dev/console 2>&1
set -x
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
export TERM=linux
export PS1='server:\w\$ '
stty sane
return 1
}
-wait_for_if_link enp0s1
-wait_for_if_link enp0s2
+wait_for_if_up() {
+ local cnt=0
+ local li
+ while [ $cnt -lt 200 ]; do
+ li=$(ip -o link show up dev "$1")
+ [ -n "$li" ] && return 0
+ sleep 0.1
+ cnt=$((cnt + 1))
+ done
+ return 1
+}
+
+wait_for_route_ok() {
+ local cnt=0
+ while [ $cnt -lt 200 ]; do
+ li=$(ip route show)
+ [ -n "$li" ] && [ -z "${li##*$1*}" ] && return 0
+ sleep 0.1
+ cnt=$((cnt + 1))
+ done
+ return 1
+}
+
+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 enx525400123456
+wait_for_if_link enx525400123457
ip addr add 127.0.0.1/8 dev lo
ip link set lo up
-ip addr add 192.168.50.1/24 dev enp0s1
-ip link set enp0s1 up
-ip addr add 192.168.51.1/24 dev enp0s2
-ip link set enp0s2 up
+
+ip addr add 192.168.50.1/24 dev enx525400123456
+linkup enx525400123456
+
+ip addr add 192.168.51.1/24 dev enx525400123457
+linkup enx525400123457
+
+modprobe af_packet
+
: > /var/lib/dhcpd/dhcpd.leases
chmod 777 /var/lib/dhcpd/dhcpd.leases
dhcpd -d -cf /etc/dhcpd.conf -lf /var/lib/dhcpd/dhcpd.leases &
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
-echo "Serving iSCSI"
-
# Wait forever for the VM to die
+echo "Serving iSCSI"
while pidof tgtd > /dev/null; do
: > /dev/watchdog
dmesg -c
--- /dev/null
+[Match]
+OriginalName=*
+
+[Link]
+NamePolicy=mac
+MACAddressPolicy=keep
return 1
fi
- # Create the blank file to use as a root filesystem
- rm -f "$TESTDIR"/root.ext3
- dd if=/dev/zero of="$TESTDIR"/root.ext3 bs=4096 count=$((200 * 256))
- rm -f "$TESTDIR"/iscsidisk2.img
- dd if=/dev/zero of="$TESTDIR"/iscsidisk2.img bs=4096 count=$((100 * 256))
- rm -f "$TESTDIR"/iscsidisk3.img
- dd if=/dev/zero of="$TESTDIR"/iscsidisk3.img bs=4096 count=$((100 * 256))
-
kernel=$KVERSION
# Create what will eventually be our root filesystem onto an overlay
rm -rf -- "$TESTDIR"/overlay
cd "$initdir" || exit
mkdir -p -- dev sys proc etc var/run tmp
mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
- for i in bin sbin lib lib64; do
- ln -sfnr usr/$i $i
- done
mkdir -p -- var/lib/nfs/rpc_pipefs
)
inst_multiple sh shutdown poweroff stty cat ps ln ip \
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1
rm -- "$TESTDIR"/marker.img
- # Make server root
- dd if=/dev/zero of="$TESTDIR"/server.ext3 bs=1M count=120
-
# shellcheck disable=SC2031
export kernel=$KVERSION
rm -rf -- "$TESTDIR"/overlay
inst /etc/passwd /etc/passwd
inst_multiple sh ls shutdown poweroff stty cat ps ln ip \
dmesg mkdir cp ping modprobe tcpdump setsid \
- /etc/services sleep mount chmod pidof
+ sleep mount chmod pidof
inst_multiple tgtd tgtadm
for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
[ -f ${_terminfodir}/l/linux ] && break
done
inst_multiple -o ${_terminfodir}/l/linux
- instmods iscsi_tcp crc32c ipv6
+ instmods iscsi_tcp crc32c ipv6 af_packet
[ -f /etc/netconfig ] && inst_multiple /etc/netconfig
type -P dhcpd > /dev/null && inst_multiple dhcpd
[ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd
- inst_simple /etc/os-release
inst ./server-init.sh /sbin/init
inst ./hosts /etc/hosts
inst ./dhcpd.conf /etc/dhcpd.conf
- inst_multiple /etc/nsswitch.conf /etc/rpc /etc/protocols
- inst /etc/group /etc/group
+ inst_multiple -o {,/usr}/etc/nsswitch.conf {,/usr}/etc/rpc \
+ {,/usr}/etc/protocols {,/usr}/etc/services \
+ /etc/group /etc/os-release
+
+ _nsslibs=$(
+ cat "$dracutsysrootdir"/{,usr/}etc/nsswitch.conf 2> /dev/null \
+ | sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \
+ | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|'
+ )
+ _nsslibs=${_nsslibs#|}
+ _nsslibs=${_nsslibs%|}
+
+ inst_libdir_file -n "$_nsslibs" 'libnss_*.so*'
cp -a /etc/ld.so.conf* "$initdir"/etc
ldconfig -r "$initdir"
# Make an overlay with needed tools for the test harness
(
# shellcheck disable=SC2031
+ # shellcheck disable=SC2030
export initdir=$TESTDIR/overlay
# shellcheck disable=SC1090
. "$basedir"/dracut-init.sh
inst_multiple poweroff shutdown
inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh
+ inst_simple ./client.link /etc/systemd/network/01-client.link
)
+ # Make client's dracut image
+ "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
+ -o "dash plymouth dmraid nfs ${OMIT_NETWORK}" \
+ -a "debug ${USE_NETWORK}" \
+ --no-hostonly-cmdline -N \
+ -f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1
+ (
+ # shellcheck disable=SC2031
+ export initdir="$TESTDIR"/overlay
+ # shellcheck disable=SC1090
+ . "$basedir"/dracut-init.sh
+ rm "$initdir"/etc/systemd/network/01-client.link
+ inst_simple ./server.link /etc/systemd/network/01-server.link
+ inst_hook pre-mount 99 ./wait-if-server.sh
+ )
# Make server's dracut image
"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
- -a "dash udev-rules base rootfs-block fs-lib debug kernel-modules" \
+ -a "dash udev-rules base rootfs-block fs-lib debug kernel-modules network network-legacy" \
-d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 drbg" \
--no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.server "$KVERSION" || return 1
- # Make client dracut image
- "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
- -o "dash plymouth dmraid nfs ${OMIT_NETWORK}" \
- -a "debug ${USE_NETWORK}" \
- -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod" \
- --no-hostonly-cmdline -N \
- -f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1
rm -rf -- "$TESTDIR"/overlay
-
}
test_cleanup() {
--- /dev/null
+#!/bin/sh
+. /lib/net-lib.sh
+wait_for_if_link enx525400123456
+wait_for_if_link enx525400123457
#!/bin/sh
. /lib/dracut-lib.sh
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1
--- /dev/null
+[Match]
+OriginalName=*
+
+[Link]
+NamePolicy=keep kernel database onboard slot path
+MACAddressPolicy=keep
udevadm control --reload
udevadm settle
-mkfs.ext3 -j -L singleroot -F /dev/disk/by-id/ata-disk_singleroot \
- && mkdir -p /sysroot \
- && mount /dev/disk/by-id/ata-disk_singleroot /sysroot \
- && cp -a -t /sysroot /source/* \
- && umount /sysroot \
- && 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 || : \
- && lvm pvcreate -ff -y /dev/md0 \
- && lvm vgcreate dracut /dev/md0 \
- && lvm lvcreate -l 100%FREE -n root dracut \
- && lvm vgchange -ay \
- && mkfs.ext3 -j -L sysroot /dev/dracut/root \
- && mount /dev/dracut/root /sysroot \
- && cp -a -t /sysroot /source/* \
- && umount /sysroot \
- && lvm lvchange -a n /dev/dracut/root \
- && echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
+set -ex
+
+mkfs.ext3 -j -L singleroot -F /dev/disk/by-id/ata-disk_singleroot
+mkdir -p /sysroot
+mount /dev/disk/by-id/ata-disk_singleroot /sysroot
+cp -a -t /sysroot /source/*
+umount /sysroot
+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 || :
+lvm pvcreate -ff -y /dev/md0
+lvm vgcreate dracut /dev/md0
+lvm lvcreate -l 100%FREE -n root dracut
+lvm vgchange -ay
+mkfs.ext3 -j -L sysroot /dev/dracut/root
+mount /dev/dracut/root /sysroot
+cp -a -t /sysroot /source/*
+umount /sysroot
+lvm lvchange -a n /dev/dracut/root
+echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
sync
poweroff -f
# NFSv3: last octect starts at 0x00 and works up
group {
- option root-path "iscsi:192.168.51.1:::1:iqn.2009-06.dracut:target1";
+ #option root-path "iscsi:192.168.51.1:::1:iqn.2009-06.dracut:target1";
host iscsi-2 {
hardware ethernet 52:54:00:12:34:01;
#!/bin/sh
exec < /dev/console > /dev/console 2>&1
set -x
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
export TERM=linux
export PS1='server:\w\$ '
stty sane
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 enp0s1
-wait_for_if_link enp0s2
+wait_for_if_link enx525400123456
+wait_for_if_link enx525400123457
ip addr add 127.0.0.1/8 dev lo
ip link set lo up
-ip addr add 192.168.50.1/24 dev enp0s1
-linkup enp0s1
+ip addr add 192.168.50.1/24 dev enx525400123456
+linkup enx525400123456
-ip addr add 192.168.51.1/24 dev enp0s2
-linkup enp0s2
+ip addr add 192.168.51.1/24 dev enx525400123457
+linkup enx525400123457
+
+modprobe af_packet
: > /var/lib/dhcpd/dhcpd.leases
chmod 777 /var/lib/dhcpd/dhcpd.leases
--- /dev/null
+[Match]
+OriginalName=*
+
+[Link]
+NamePolicy=mac
+MACAddressPolicy=keep
cd "$initdir" || exit
mkdir -p -- dev sys proc etc var/run tmp
mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
- for i in bin sbin lib lib64; do
- ln -sfnr usr/$i $i
- done
mkdir -p -- var/lib/nfs/rpc_pipefs
)
inst_multiple sh shutdown poweroff stty cat ps ln ip \
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1
rm -- "$TESTDIR"/marker.img
- # Make server root
- echo "MAKE SERVER ROOT"
-
# shellcheck disable=SC2031
export kernel=$KVERSION
rm -rf -- "$TESTDIR"/overlay
)
inst /etc/passwd /etc/passwd
inst_multiple sh ls shutdown poweroff stty cat ps ln ip \
- dmesg mkdir cp ping \
- modprobe tcpdump setsid \
- /etc/services sleep mount chmod pidof
+ dmesg mkdir cp ping modprobe tcpdump setsid \
+ sleep mount chmod pidof
inst_multiple tgtd tgtadm
for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
[ -f ${_terminfodir}/l/linux ] && break
done
inst_multiple -o ${_terminfodir}/l/linux
- instmods iscsi_tcp crc32c ipv6
+ instmods iscsi_tcp crc32c ipv6 af_packet
[ -f /etc/netconfig ] && inst_multiple /etc/netconfig
type -P dhcpd > /dev/null && inst_multiple dhcpd
[ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd
- inst_simple /etc/os-release
inst ./server-init.sh /sbin/init
inst ./hosts /etc/hosts
inst ./dhcpd.conf /etc/dhcpd.conf
- inst_multiple /etc/nsswitch.conf /etc/rpc /etc/protocols
- inst /etc/group /etc/group
+ inst_multiple -o {,/usr}/etc/nsswitch.conf {,/usr}/etc/rpc \
+ {,/usr}/etc/protocols {,/usr}/etc/services \
+ /etc/group /etc/os-release
+
+ _nsslibs=$(
+ cat "$dracutsysrootdir"/{,usr/}etc/nsswitch.conf 2> /dev/null \
+ | sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \
+ | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|'
+ )
+ _nsslibs=${_nsslibs#|}
+ _nsslibs=${_nsslibs%|}
+
+ inst_libdir_file -n "$_nsslibs" 'libnss_*.so*'
cp -a /etc/ld.so.conf* "$initdir"/etc
ldconfig -r "$initdir"
dracut_kernel_post
)
+
# second, install the files needed to make the root filesystem
(
# shellcheck disable=SC2031
# Make an overlay with needed tools for the test harness
(
# shellcheck disable=SC2031
+ # shellcheck disable=SC2030
export initdir=$TESTDIR/overlay
# shellcheck disable=SC1090
. "$basedir"/dracut-init.sh
inst_multiple poweroff shutdown
inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh
+ inst_simple ./client.link /etc/systemd/network/01-client.link
)
-
- # Make server's dracut image
- "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
- -a "dash udev-rules base rootfs-block fs-lib debug kernel-modules" \
- -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 drbg" \
- --no-hostonly-cmdline -N \
- -f "$TESTDIR"/initramfs.server "$KVERSION" || return 1
-
# Make client's dracut image
"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
-o "dash plymouth dmraid nfs ${OMIT_NETWORK}" \
-a "debug ${USE_NETWORK}" \
- -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod" \
--no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1
+ (
+ # shellcheck disable=SC2031
+ export initdir="$TESTDIR"/overlay
+ # shellcheck disable=SC1090
+ . "$basedir"/dracut-init.sh
+ rm "$initdir"/etc/systemd/network/01-client.link
+ inst_simple ./server.link /etc/systemd/network/01-server.link
+ inst_hook pre-mount 99 ./wait-if-server.sh
+ )
+ # Make server's dracut image
+ "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
+ -a "dash udev-rules base rootfs-block fs-lib debug kernel-modules network network-legacy" \
+ -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 drbg" \
+ --no-hostonly-cmdline -N \
+ -f "$TESTDIR"/initramfs.server "$KVERSION" || return 1
+
rm -rf -- "$TESTDIR"/overlay
}
--- /dev/null
+#!/bin/sh
+. /lib/net-lib.sh
+wait_for_if_link enx525400123456
+wait_for_if_link enx525400123457
: > /dev/watchdog
. /lib/dracut-lib.sh
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1
--- /dev/null
+[Match]
+OriginalName=*
+
+[Link]
+NamePolicy=keep kernel database onboard slot path
+MACAddressPolicy=keep
lvm vgcreate dracut /dev/mapper/dracut_crypt_test
lvm lvcreate -l 100%FREE -n root dracut
lvm vgchange -ay
+udevadm settle
mkfs.ext3 -L dracut -j /dev/dracut/root
mkdir -p /sysroot
mount /dev/dracut/root /sysroot
#!/bin/sh
exec < /dev/console > /dev/console 2>&1
set -x
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
export TERM=linux
export PS1='nbdtest-server:\w\$ '
stty sane
ip addr add 127.0.0.1/8 dev lo
ip link set lo up
-wait_for_if_link enp0s1
-ip addr add 192.168.50.1/24 dev enp0s1
-linkup enp0s1
+wait_for_if_link enx525400123456
+ip addr add 192.168.50.1/24 dev enx525400123456
+linkup enx525400123456
modprobe af_packet
nbd-server
chmod 777 /var/lib/dhcpd/dhcpd.leases
dhcpd -d -cf /etc/dhcpd.conf -lf /var/lib/dhcpd/dhcpd.leases &
echo "Serving NBD disks"
-while :; do
- [ -n "$(jobs -rp)" ] && echo > /dev/watchdog
- sleep 10
+while pidof nbd-server && pidof dhcpd; do
+ echo > /dev/watchdog
+ sleep 1
done
mount -n -o remount,ro /
poweroff -f
--- /dev/null
+[Match]
+OriginalName=*
+
+[Link]
+NamePolicy=mac
+MACAddressPolicy=keep
KVERSION=${KVERSION-$(uname -r)}
# Uncomment this to debug failures
+# DEBUGFAIL="rd.debug systemd.log_target=console loglevel=7"
#DEBUGFAIL="rd.shell rd.break rd.debug systemd.log_target=console loglevel=7 systemd.log_level=debug"
#SERIAL="tcp:127.0.0.1:9999"
test_check() {
- if ! type -p nbd-server 2> /dev/null; then
+ if ! type -p nbd-server &> /dev/null; then
echo "Test needs nbd-server... Skipping"
return 1
fi
(
cd "$initdir" || exit
mkdir -p dev sys proc etc run var/run tmp
- mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
- for i in bin sbin lib lib64; do
- ln -sfnr usr/$i $i
- done
)
inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
. "$basedir"/dracut-init.sh
(
cd "$initdir" || exit
- mkdir -p dev sys proc etc tmp var run root usr/bin usr/lib usr/lib64 usr/sbin
- for i in bin sbin lib lib64; do
- ln -sfnr usr/$i $i
- done
+ mkdir -p dev sys proc etc tmp var run root
ln -s ../run var/run
)
inst_multiple mkfs.ext3 poweroff cp umount dd sync
(
cd "$initdir" || exit
mkdir -p dev sys proc etc run var/run tmp
- mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
- for i in bin sbin lib lib64; do
- ln -sfnr usr/$i $i
- done
)
inst_multiple sh ls shutdown poweroff stty cat ps ln ip \
dmesg mkdir cp ping dd mount sync
inst ./client-init.sh /sbin/init
inst_simple /etc/os-release
- inst /etc/nsswitch.conf /etc/nsswitch.conf
+ inst_multiple -o {,/usr}/etc/nsswitch.conf
inst /etc/passwd /etc/passwd
inst /etc/group /etc/group
for i in /usr/lib*/libnss_files* /lib*/libnss_files*; do
EOF
inst_multiple sh ls shutdown poweroff stty cat ps ln ip \
dmesg mkdir cp ping grep \
- sleep nbd-server chmod modprobe vi
+ sleep nbd-server chmod modprobe vi pidof
for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
[ -f ${_terminfodir}/l/linux ] && break
done
inst_multiple -o ${_terminfodir}/l/linux
- instmods af_packet
+ instmods nfsd sunrpc ipv6 lockd af_packet 8021q ipvlan macvlan
type -P dhcpd > /dev/null && inst_multiple dhcpd
[ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd
inst ./server-init.sh /sbin/init
inst_simple /etc/os-release
inst ./hosts /etc/hosts
inst ./dhcpd.conf /etc/dhcpd.conf
- inst /etc/nsswitch.conf /etc/nsswitch.conf
+ inst_multiple -o {,/usr}/etc/nsswitch.conf
inst /etc/passwd /etc/passwd
inst /etc/group /etc/group
- for i in /usr/lib*/libnss_files* /lib*/libnss_files*; do
- [ -e "$i" ] || continue
- inst "$i"
- done
+ _nsslibs=$(
+ cat "$dracutsysrootdir"/{,usr/}etc/nsswitch.conf 2> /dev/null \
+ | sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \
+ | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|'
+ )
+ _nsslibs=${_nsslibs#|}
+ _nsslibs=${_nsslibs%|}
+
+ inst_libdir_file -n "$_nsslibs" 'libnss_*.so*'
cp -a /etc/ld.so.conf* "$initdir"/etc
ldconfig -r "$initdir"
+ dracut_kernel_post
)
# second, install the files needed to make the root filesystem
# Make the test image
(
# shellcheck disable=SC2031
+ # shellcheck disable=SC2030
export initdir=$TESTDIR/overlay
# shellcheck disable=SC1090
. "$basedir"/dracut-init.sh
mkdir -p "$initdir"/etc
echo "luks-$ID_FS_UUID /dev/nbd0 /etc/key" > "$initdir"/etc/crypttab
echo -n test > "$initdir"/etc/key
+ inst_simple ./client.link /etc/systemd/network/01-client.link
)
- "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
- -a "udev-rules base rootfs-block fs-lib debug kernel-modules" \
- -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 drbg" \
- --no-hostonly-cmdline -N \
- -f "$TESTDIR"/initramfs.server "$KVERSION" || return 1
-
"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
-o "plymouth dash iscsi nfs ${OMIT_NETWORK}" \
-a "debug watchdog ${USE_NETWORK}" \
- -d "af_packet piix ide-gd_mod ata_piix ext3 ext3 sd_mod e1000 i6300esb ib700wdt" \
--no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1
+
+ (
+ # shellcheck disable=SC2031
+ export initdir="$TESTDIR"/overlay
+ # shellcheck disable=SC1090
+ . "$basedir"/dracut-init.sh
+ rm "$initdir"/etc/systemd/network/01-client.link
+ inst_simple ./server.link /etc/systemd/network/01-server.link
+ inst_hook pre-mount 99 ./wait-if-server.sh
+ )
+ "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
+ -a "udev-rules base rootfs-block fs-lib debug kernel-modules network network-legacy" \
+ -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 drbg" \
+ --no-hostonly-cmdline -N \
+ -f "$TESTDIR"/initramfs.server "$KVERSION" || return 1
+
+ rm -rf -- "$TESTDIR"/overlay
}
kill_server() {
--- /dev/null
+#!/bin/sh
+. /lib/net-lib.sh
+wait_for_if_link enx525400123456
#!/bin/sh
. /lib/dracut-lib.sh
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
exec > /dev/console 2>&1
export PS1='initramfs-test:\w\$ '
stty sane
echo "made it to the rootfs! Powering down."
+
+set -x
+
for i in /sys/class/net/*; do
# booting with network-manager module
state=/run/NetworkManager/devices/$(cat "$i"/ifindex)
ip link show "$i" | grep -q master && continue
IFACES="${IFACES}${i} "
done
+
for i in /run/initramfs/net.*.did-setup; do
# booting with network-legacy module
[ -f "$i" ] || continue
--- /dev/null
+[Match]
+OriginalName=*
+
+[Link]
+NamePolicy=keep kernel database onboard slot path
+MACAddressPolicy=keep
done
rm -f -- /etc/lvm/lvm.conf
udevadm control --reload
-set -e
-
udevadm settle
+
+set -ex
+
mkfs.ext3 -L dracut /dev/disk/by-id/ata-disk_root
mkdir -p /root
mount /dev/disk/by-id/ata-disk_root /root
mkdir -p /root/run
umount /root
echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
+sync
poweroff -f
#!/bin/sh
exec < /dev/console > /dev/console 2>&1
set -x
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
export TERM=linux
export PS1='nfstest-server:\w\$ '
-echo : > /dev/watchdog
+: > /dev/watchdog
stty sane
echo "made it to the rootfs!"
echo server > /proc/sys/kernel/hostname
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 enp0s1
+wait_for_if_link enx525401123456
-: > /dev/watchdog
ip addr add 127.0.0.1/8 dev lo
-linkup lo
-
-ip addr add 192.168.50.1/24 dev enp0s1
-linkup enp0s1
+ip link set lo up
+ip addr add 192.168.50.1/24 dev enx525401123456
+linkup enx525401123456
: > /dev/watchdog
modprobe af_packet
: > /dev/watchdog
rpc.mountd
: > /dev/watchdog
-rpc.idmapd -S
+rpc.idmapd
: > /dev/watchdog
exportfs -r
: > /dev/watchdog
-
+mkdir -p /var/lib/dhcpd
: > /var/lib/dhcpd/dhcpd.leases
-
: > /dev/watchdog
chmod 777 /var/lib/dhcpd/dhcpd.leases
: > /dev/watchdog
+rm -f /var/run/dhcpd.pid
dhcpd -d -cf /etc/dhcpd.conf -lf /var/lib/dhcpd/dhcpd.leases &
+exportfs -s
echo "Serving NFS mounts"
while :; do
- [ -n "$(jobs -rp)" ] && echo : > /dev/watchdog
+ [ -n "$(jobs -rp)" ] && : > /dev/watchdog
sleep 10
done
mount -n -o remount,ro /
--- /dev/null
+[Match]
+OriginalName=*
+
+[Link]
+NamePolicy=mac
+MACAddressPolicy=keep
KVERSION=${KVERSION-$(uname -r)}
# Uncomment this to debug failures
-#DEBUGFAIL="rd.shell rd.break"
+#DEBUGFAIL="loglevel=7 rd.shell rd.break"
#SERIAL="tcp:127.0.0.1:9999"
run_server() {
-net nic,macaddr=52:54:01:12:34:56,model=e1000 \
-serial "${SERIAL:-"file:$TESTDIR/server.log"}" \
-watchdog i6300esb -watchdog-action poweroff \
- -append "panic=1 hung_task_panic=1 oops=panic softlockup_panic=1 systemd.crash_reboot loglevel=7 root=LABEL=dracut rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0" \
+ -append "panic=1 hung_task_panic=1 oops=panic softlockup_panic=1 systemd.crash_reboot root=LABEL=dracut rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.server \
-pidfile "$TESTDIR"/server.pid -daemonize || return 1
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
+ if dhclient --help 2>&1 | grep -q -F -- '--timeout' 2> /dev/null; then
+ cmdline="$cmdline rd.net.timeout.dhcp=3"
+ fi
+
# Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu \
"${disk_args[@]}" \
-device e1000,netdev=n1,mac=52:54:00:12:34:98 \
-device e1000,netdev=n2,mac=52:54:00:12:34:99 \
-watchdog i6300esb -watchdog-action poweroff \
- -append "quiet rd.net.timeout.dhcp=3 panic=1 hung_task_panic=1 oops=panic softlockup_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 panic=1 hung_task_panic=1 oops=panic softlockup_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 || return 1
{
}
test_setup() {
- kernel=$KVERSION
+ export kernel=$KVERSION
+ export srcmods="/lib/modules/$kernel/"
+ rm -rf -- "$TESTDIR"/overlay
(
mkdir -p "$TESTDIR"/overlay/source
# shellcheck disable=SC2030
(
cd "$initdir" || exit
- mkdir -p -- dev sys proc run var/run etc tmp var/lib/{dhcpd,rpcbind}
- mkdir -p -- var/lib/nfs/{v4recovery,rpc_pipefs}
- chmod 777 -- var/lib/rpcbind var/lib/nfs
+ mkdir -p dev sys proc run etc var/run tmp var/lib/{dhcpd,rpcbind}
+ mkdir -p var/lib/nfs/{v4recovery,rpc_pipefs}
+ chmod 777 var/lib/rpcbind var/lib/nfs
)
- for _f in modules.builtin.bin modules.builtin; do
- [[ -f $srcmods/$_f ]] && break
- done || {
- dfatal "No modules.builtin.bin and modules.builtin found!"
- return 1
- }
-
- for _f in modules.builtin.bin modules.builtin modules.order; do
- [[ -f $srcmods/$_f ]] && inst_simple "$srcmods/$_f" "/lib/modules/$kernel/$_f"
- done
-
inst_multiple sh ls shutdown poweroff stty cat ps ln ip \
dmesg mkdir cp ping exportfs \
modprobe rpc.nfsd rpc.mountd showmount tcpdump \
- /etc/services sleep mount chmod
+ sleep mount chmod rm
for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
- [ -f "${_terminfodir}"/l/linux ] && break
+ if [ -f "${_terminfodir}"/l/linux ]; then
+ inst_multiple -o "${_terminfodir}"/l/linux
+ break
+ fi
done
- inst_multiple -o "${_terminfodir}"/l/linux
type -P portmap > /dev/null && inst_multiple portmap
type -P rpcbind > /dev/null && inst_multiple rpcbind
[ -f /etc/netconfig ] && inst_multiple /etc/netconfig
type -P dhcpd > /dev/null && inst_multiple dhcpd
[ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd
instmods nfsd sunrpc ipv6 lockd af_packet
- inst_simple /etc/os-release
inst ./server-init.sh /sbin/init
+ inst_simple /etc/os-release
inst ./hosts /etc/hosts
inst ./exports /etc/exports
inst ./dhcpd.conf /etc/dhcpd.conf
- inst_multiple /etc/nsswitch.conf /etc/rpc /etc/protocols
-
+ inst_multiple -o {,/usr}/etc/nsswitch.conf {,/usr}/etc/rpc \
+ {,/usr}/etc/protocols {,/usr}/etc/services
inst_multiple rpc.idmapd /etc/idmapd.conf
inst_libdir_file 'libnfsidmap_nsswitch.so*'
inst_libdir_file 'libnfsidmap/*.so*'
inst_libdir_file 'libnfsidmap*.so*'
- _nsslibs=$(sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' /etc/nsswitch.conf \
- | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|')
+ _nsslibs=$(
+ cat "$dracutsysrootdir"/{,usr/}etc/nsswitch.conf 2> /dev/null \
+ | sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \
+ | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|'
+ )
_nsslibs=${_nsslibs#|}
_nsslibs=${_nsslibs%|}
-
inst_libdir_file -n "$_nsslibs" 'libnss_*.so*'
- inst /etc/nsswitch.conf /etc/nsswitch.conf
inst /etc/passwd /etc/passwd
inst /etc/group /etc/group
- cp -a -- /etc/ld.so.conf* "$initdir"/etc
+ cp -a /etc/ld.so.conf* "$initdir"/etc
ldconfig -r "$initdir"
dracut_kernel_post
)
export initdir=$TESTDIR/overlay/source/nfs/client
# shellcheck disable=SC1090
. "$basedir"/dracut-init.sh
+
(
cd "$initdir" || exit
- mkdir -p dev sys proc etc run
- mkdir -p var/lib/nfs/rpc_pipefs
- mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
- for i in bin sbin lib lib64; do
- ln -sfnr usr/$i $i
- done
+ mkdir -p dev sys proc etc run root usr var/lib/nfs/rpc_pipefs
)
- inst_multiple sh shutdown poweroff stty cat ps ln ip \
- mount dmesg mkdir cp ping grep ls dd sync
+
+ inst_multiple sh shutdown poweroff stty cat ps ln ip dd \
+ mount dmesg mkdir cp ping grep setsid ls vi less cat sync
for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
- [[ -f ${_terminfodir}/l/linux ]] && break
+ if [ -f "${_terminfodir}"/l/linux ]; then
+ inst_multiple -o "${_terminfodir}"/l/linux
+ break
+ fi
done
- inst_multiple -o "${_terminfodir}"/l/linux
- inst_simple /etc/os-release
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-getargs"
inst ./client-init.sh /sbin/init
- inst /etc/nsswitch.conf /etc/nsswitch.conf
+ inst_simple /etc/os-release
+ inst_multiple -o {,/usr}/etc/nsswitch.conf
inst /etc/passwd /etc/passwd
inst /etc/group /etc/group
- inst_multiple rpc.idmapd /etc/idmapd.conf
inst_libdir_file 'libnfsidmap_nsswitch.so*'
inst_libdir_file 'libnfsidmap/*.so*'
inst_libdir_file 'libnfsidmap*.so*'
- _nsslibs=$(sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' -- /etc/nsswitch.conf \
- | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|')
+ _nsslibs=$(
+ cat "$dracutsysrootdir"/{,usr/}etc/nsswitch.conf 2> /dev/null \
+ | sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \
+ | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|'
+ )
_nsslibs=${_nsslibs#|}
_nsslibs=${_nsslibs%|}
-
inst_libdir_file -n "$_nsslibs" 'libnss_*.so*'
- cp -a -- /etc/ld.so.conf* "$initdir"/etc
+ cp -a /etc/ld.so.conf* "$initdir"/etc
ldconfig -r "$initdir"
)
--nomdadmconf \
--no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
- rm -fr "$TESTDIR"/overlay
+ rm -rf -- "$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
# Make an overlay with needed tools for the test harness
(
# shellcheck disable=SC2031
+ # shellcheck disable=SC2030
export initdir="$TESTDIR"/overlay
+ mkdir -p "$TESTDIR"/overlay
# shellcheck disable=SC1090
. "$basedir"/dracut-init.sh
inst_multiple poweroff shutdown
inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh
- inst_simple ./99-default.link /etc/systemd/network/99-default.link
+ inst_simple ./client.link /etc/systemd/network/01-client.link
+
+ inst_binary awk
+ inst_hook pre-pivot 85 "$basedir/modules.d/45ifcfg/write-ifcfg.sh"
)
+ # Make client's dracut image
+ "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
+ -o "ifcfg plymouth dash ${OMIT_NETWORK}" \
+ -a "debug watchdog ${USE_NETWORK}" \
+ --no-hostonly-cmdline -N \
+ -f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1
+ (
+ # shellcheck disable=SC2031
+ export initdir="$TESTDIR"/overlay
+ # shellcheck disable=SC1090
+ . "$basedir"/dracut-init.sh
+ rm "$initdir"/etc/systemd/network/01-client.link
+ inst_simple ./server.link /etc/systemd/network/01-server.link
+ inst_hook pre-mount 99 ./wait-if-server.sh
+ )
# Make server's dracut image
- "$basedir"/dracut.sh \
- -l -i "$TESTDIR"/overlay / \
- -m "dash udev-rules base rootfs-block fs-lib debug kernel-modules watchdog qemu" \
+ "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
+ -m "dash udev-rules base rootfs-block fs-lib debug kernel-modules watchdog qemu network network-legacy" \
-d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod nfsv2 nfsv3 nfsv4 nfs_acl nfs_layout_nfsv41_files nfsd e1000 i6300esb ib700wdt" \
--no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.server "$KVERSION" || return 1
- # Make client's dracut image
- "$basedir"/dracut.sh \
- -l -i "$TESTDIR"/overlay / \
- -o "plymouth ${OMIT_NETWORK}" \
- -a "debug ${USE_NETWORK}" \
- -d "af_packet piix sd_mod sr_mod ata_piix ide-gd_mod e1000 nfsv2 nfsv3 nfsv4 nfs_acl nfs_layout_nfsv41_files sunrpc i6300esb ib700wdt" \
- --no-hostonly-cmdline -N \
- -f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1
}
kill_server() {
--- /dev/null
+#!/bin/sh
+. /lib/net-lib.sh
+wait_for_if_link enx525401123456
#!/bin/sh
exec > /dev/console 2>&1
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
strstr() { [ "${1#*$2*}" != "$1" ]; }
CMDLINE=$(while read -r line; do echo "$line"; done < /proc/cmdline)
export TERM=linux
--- /dev/null
+[Match]
+OriginalName=*
+
+[Link]
+NamePolicy=keep kernel database onboard slot path
+MACAddressPolicy=keep
#!/bin/sh
exec < /dev/console > /dev/console 2>&1
set -x
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
export TERM=linux
export PS1='nfstest-server:\w\$ '
stty sane
--- /dev/null
+[Match]
+OriginalName=*
+
+[Link]
+NamePolicy=mac
+MACAddressPolicy=keep
dd if=/dev/zero of="$TESTDIR"/server.ext3 bs=1M count=120
kernel=$KVERSION
+ rm -rf -- "$TESTDIR"/overlay
(
mkdir -p "$TESTDIR"/overlay/source
# shellcheck disable=SC2030
inst ./hosts /etc/hosts
inst ./exports /etc/exports
inst ./dhcpd.conf /etc/dhcpd.conf
- inst_multiple /etc/nsswitch.conf /etc/rpc /etc/protocols
+ inst_multiple -o {,/usr}/etc/nsswitch.conf {,/usr}/etc/rpc {,/usr}/etc/protocols
inst_multiple rpc.idmapd /etc/idmapd.conf
inst_libdir_file 'libnfsidmap/*.so*'
inst_libdir_file 'libnfsidmap*.so*'
- _nsslibs=$(sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' /etc/nsswitch.conf \
- | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|')
+ _nsslibs=$(
+ cat "$dracutsysrootdir"/{,usr/}etc/nsswitch.conf 2> /dev/null \
+ | sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \
+ | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|'
+ )
_nsslibs=${_nsslibs#|}
_nsslibs=${_nsslibs%|}
inst_libdir_file -n "$_nsslibs" 'libnss_*.so*'
- inst /etc/nsswitch.conf /etc/nsswitch.conf
inst /etc/passwd /etc/passwd
inst /etc/group /etc/group
mkdir -p -- dev sys proc etc run
mkdir -p -- var/lib/nfs/rpc_pipefs
)
- inst /etc/nsswitch.conf /etc/nsswitch.conf
+ inst_multiple -o {,/usr}/etc/nsswitch.conf {,/usr}/etc/rpc {,/usr}/etc/protocols
inst /etc/passwd /etc/passwd
inst /etc/group /etc/group
inst_libdir_file 'libnfsidmap/*.so*'
inst_libdir_file 'libnfsidmap*.so*'
- _nsslibs=$(sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' -- /etc/nsswitch.conf \
- | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|')
+ _nsslibs=$(
+ cat "$dracutsysrootdir"/{,usr/}etc/nsswitch.conf 2> /dev/null \
+ | sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \
+ | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|'
+ )
_nsslibs=${_nsslibs#|}
_nsslibs=${_nsslibs%|}
. "$basedir"/dracut-init.sh
inst_multiple poweroff shutdown
inst_hook emergency 000 ./hard-off.sh
+ inst_simple ./client.link /etc/systemd/network/01-client.link
)
# Make client's dracut image
"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
--no-early-microcode \
-o "plymouth ${OMIT_NETWORK}" \
-a "debug ${USE_NETWORK}" \
- -d "ipvlan macvlan af_packet piix sd_mod sr_mod ata_piix ide-gd_mod virtio-net nfsv2 nfsv3 nfsv4 nfs_acl nfs_layout_nfsv41_files sunrpc i6300esb ib700wdt" \
--no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1
export initdir="$TESTDIR"/overlay
# shellcheck disable=SC1090
. "$basedir"/dracut-init.sh
- inst_simple ./99-default.link /etc/systemd/network/99-default.link
+ inst_simple ./server.link /etc/systemd/network/01-server.link
inst_hook pre-mount 99 ./wait-if-server.sh
)
# Make server's dracut image
# Check which virtualization technology to use
# We prefer kvm, kqemu, userspace in that order.
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
[[ -x /usr/bin/qemu ]] && BIN=/usr/bin/qemu && ARGS=(-cpu max)
(lsmod | grep -q '^kqemu ') && BIN=/usr/bin/qemu && ARGS=(-kernel-kqemu -cpu host)
#!/bin/bash
-PATH=/sbin:/bin:/usr/sbin:/usr/bin
+PATH=/usr/sbin:/usr/bin:/sbin:/bin
export PATH
# shellcheck disable=SC1090