summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAnthony G. Basile <blueness@gentoo.org>2012-11-15 10:33:16 -0500
committerAnthony G. Basile <blueness@gentoo.org>2012-11-15 10:33:16 -0500
commit7d4a62f8c1404ed426500b97af03d4ef8d034a71 (patch)
tree2436cd4f0460a3a3d589875d4ffba55556f3c582 /test
parent2944f347d087ff24ec808e4b70fe104a772a97a0 (diff)
Isolation of udev code from remaining systemd
This commit is a first attempt to isolate the udev code from the remaining code base. It intentionally does not modify any files but purely delete files which, on a first examination, appear to not be needed. This is a sweeping commit which may easily have missed needed code. Files can be retrieved by doing a checkout from the previous commit: git checkout 2944f347d0 -- <filename>
Diffstat (limited to 'test')
-rw-r--r--test/.gitignore3
-rw-r--r--test/Makefile20
-rw-r--r--test/README.testsuite35
-rw-r--r--test/TEST-01-BASIC/Makefile10
-rwxr-xr-xtest/TEST-01-BASIC/test.sh252
l---------test/TEST-02-CRYPTSETUP/Makefile1
-rwxr-xr-xtest/TEST-02-CRYPTSETUP/test.sh264
-rw-r--r--test/a.service7
-rw-r--r--test/b.service6
-rw-r--r--test/c.service6
-rw-r--r--test/d.service8
-rw-r--r--test/e.service8
-rw-r--r--test/f.service5
-rw-r--r--test/g.service6
-rw-r--r--test/h.service6
-rw-r--r--test/test-functions864
16 files changed, 0 insertions, 1501 deletions
diff --git a/test/.gitignore b/test/.gitignore
deleted file mode 100644
index 93c1f950fe..0000000000
--- a/test/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.testdir
-test.log
-/sys
diff --git a/test/Makefile b/test/Makefile
deleted file mode 100644
index 987a32548f..0000000000
--- a/test/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-# Just a little hook script to easy building when in this directory
-.PHONY: all check clean
-
-all:
- $(MAKE) -C ..
-
-clean:
- @for i in TEST-[0-9]*; do \
- [ -d $$i ] || continue ; \
- [ -f $$i/Makefile ] || continue ; \
- make -C $$i clean ; \
- done
-
-check:
- $(MAKE) -C .. all
- @for i in TEST-[0-9]*; do \
- [ -d $$i ] || continue ; \
- [ -f $$i/Makefile ] || continue ; \
- make -C $$i all ; \
- done
diff --git a/test/README.testsuite b/test/README.testsuite
deleted file mode 100644
index 0f96b984a9..0000000000
--- a/test/README.testsuite
+++ /dev/null
@@ -1,35 +0,0 @@
-The extended testsuite only works with uid=0. It contains of several
-subdirectories named "test/TEST-??-*", which are run one by one.
-
-To run the extended testsuite do the following:
-
-$ make all
-$ cd test
-$ sudo make clean check
-...
-make[1]: Entering directory `/mnt/data/harald/git/systemd/test/TEST-01-BASIC'
-Making all in .
-Making all in po
-Making all in docs/libudev
-Making all in docs/gudev
-TEST: Basic systemd setup [OK]
-make[1]: Leaving directory `/mnt/data/harald/git/systemd/test/TEST-01-BASIC'
-...
-
-If one of the tests fails, then $subdir/test.log contains the log file of
-the test.
-
-To debug a special testcase of the testsuite do:
-
-$ make all
-$ cd test/TEST-01-BASIC
-$ sudo make clean setup run
-
-If you want to log in the testsuite virtual machine, you can specify
-additional kernel command line parameter with $DEBUGFAIL.
-
-$ sudo sh -c 'DEBUGFAIL="systemd.unit=multi-user.target" make clean setup run'
-
-you can even skip the "clean" and "setup" if you want to run the machine again.
-
-$ sudo sh -c 'DEBUGFAIL="systemd.unit=multi-user.target" make run'
diff --git a/test/TEST-01-BASIC/Makefile b/test/TEST-01-BASIC/Makefile
deleted file mode 100644
index 5e89a29eff..0000000000
--- a/test/TEST-01-BASIC/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-all:
- @make -s --no-print-directory -C ../.. all
- @basedir=../.. TEST_BASE_DIR=../ ./test.sh --all
-setup:
- @make --no-print-directory -C ../.. all
- @basedir=../.. TEST_BASE_DIR=../ ./test.sh --setup
-clean:
- @basedir=../.. TEST_BASE_DIR=../ ./test.sh --clean
-run:
- @basedir=../.. TEST_BASE_DIR=../ ./test.sh --run
diff --git a/test/TEST-01-BASIC/test.sh b/test/TEST-01-BASIC/test.sh
deleted file mode 100755
index eb6a80a07c..0000000000
--- a/test/TEST-01-BASIC/test.sh
+++ /dev/null
@@ -1,252 +0,0 @@
-#!/bin/bash
-# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
-# ex: ts=8 sw=4 sts=4 et filetype=sh
-TEST_DESCRIPTION="Basic systemd setup"
-
-KVERSION=${KVERSION-$(uname -r)}
-KERNEL_VER=$(uname -r)
-
-# Uncomment this to debug failures
-#DEBUGFAIL="systemd.unit=multi-user.target"
-DEBUGTOOLS="df free ls stty cat ps ln ip route dmesg dhclient mkdir cp ping dhclient strace less grep id tty touch du sort"
-
-run_qemu() {
- # TODO: qemu wrapper script: http://www.spinics.net/lists/kvm/msg72389.html
- qemu-kvm \
- -hda $TESTDIR/rootdisk.img \
- -m 512M -nographic \
- -net none -kernel /boot/vmlinuz-$KERNEL_VER \
- -append "root=/dev/sda1 systemd.log_level=debug raid=noautodetect loglevel=2 init=/usr/lib/systemd/systemd ro console=ttyS0,115200n81 selinux=0 $DEBUGFAIL" || return 1
-
- ret=1
- mkdir -p $TESTDIR/root
- mount ${LOOPDEV}p1 $TESTDIR/root
- [[ -e $TESTDIR/root/testok ]] && ret=0
- cp -a $TESTDIR/root/failed $TESTDIR
- cp -a $TESTDIR/root/var/log/journal $TESTDIR
- umount $TESTDIR/root
- cat $TESTDIR/failed
- ls -l $TESTDIR/journal/*/*.journal
- test -s $TESTDIR/failed && ret=$(($ret+1))
- return $ret
-}
-
-
-run_nspawn() {
- systemd-nspawn -b -D $TESTDIR/nspawn-root --capability=CAP_AUDIT_CONTROL,CAP_AUDIT_WRITE /usr/lib/systemd/systemd
- ret=1
- [[ -e $TESTDIR/nspawn-root/testok ]] && ret=0
- cp -a $TESTDIR/nspawn-root/failed $TESTDIR
- cp -a $TESTDIR/nspawn-root/var/log/journal $TESTDIR
- cat $TESTDIR/failed
- ls -l $TESTDIR/journal/*/*.journal
- test -s $TESTDIR/failed && ret=$(($ret+1))
- return $ret
-}
-
-
-test_run() {
- if check_qemu ; then
- run_qemu || return 1
- else
- dwarn "can't run qemu-kvm, skipping"
- fi
- if check_nspawn; then
- run_nspawn || return 1
- else
- dwarn "can't run systemd-nspawn, skipping"
- fi
- return 0
-}
-
-test_setup() {
- rm -f $TESTDIR/rootdisk.img
- # Create the blank file to use as a root filesystem
- dd if=/dev/null of=$TESTDIR/rootdisk.img bs=1M seek=200
- LOOPDEV=$(losetup --show -P -f $TESTDIR/rootdisk.img)
- [ -b $LOOPDEV ] || return 1
- echo "LOOPDEV=$LOOPDEV" >> $STATEFILE
- sfdisk -C 6400 -H 2 -S 32 -L $LOOPDEV <<EOF
-,3200
-,
-EOF
-
- mkfs.ext3 -L systemd ${LOOPDEV}p1
- echo -n test >$TESTDIR/keyfile
- mkdir -p $TESTDIR/root
- mount ${LOOPDEV}p1 $TESTDIR/root
- mkdir -p $TESTDIR/root/run
-
- # Create what will eventually be our root filesystem onto an overlay
- (
- LOG_LEVEL=5
- initdir=$TESTDIR/root
-
- # create the basic filesystem layout
- setup_basic_dirs
-
- # install compiled files
- (cd ../..; make DESTDIR=$initdir install)
-
- # remove unneeded documentation
- rm -fr $initdir/usr/share/{man,doc,gtk-doc}
-
- # install possible missing libraries
- for i in $initdir/{sbin,bin}/* $initdir/lib/systemd/*; do
- inst_libs $i
- done
-
- # make a journal directory
- mkdir -p $initdir/var/log/journal
-
- # install some basic config files
- inst /etc/sysconfig/init
- inst /etc/passwd
- inst /etc/shadow
- inst /etc/group
- inst /etc/shells
- inst /etc/nsswitch.conf
- inst /etc/pam.conf
- inst /etc/securetty
- inst /etc/os-release
- inst /etc/localtime
- # we want an empty environment
- > $initdir/etc/environment
- > $initdir/etc/machine-id
-
- # set the hostname
- echo systemd-testsuite > $initdir/etc/hostname
-
- eval $(udevadm info --export --query=env --name=${LOOPDEV}p2)
-
- cat >$initdir/etc/fstab <<EOF
-LABEL=systemd / ext3 rw 0 1
-EOF
-
- # setup the testsuite target
- cat >$initdir/etc/systemd/system/testsuite.target <<EOF
-[Unit]
-Description=Testsuite target
-Requires=multi-user.target
-After=multi-user.target
-Conflicts=rescue.target
-AllowIsolate=yes
-EOF
-
- # setup the testsuite service
- cat >$initdir/etc/systemd/system/testsuite.service <<EOF
-[Unit]
-Description=Testsuite service
-After=multi-user.target
-
-[Service]
-ExecStart=/bin/bash -c 'set -x; systemctl --failed --no-legend --no-pager > /failed ; echo OK > /testok; while : ;do echo "testsuite service waiting for journal to move to /var/log/journal" > /dev/console ; for i in /var/log/journal/*;do [ -d "\$i" ] && echo "\$i" && break 2; done; sleep 1; done; sleep 1; exit 0;'
-ExecStopPost=/usr/bin/systemctl poweroff
-Type=oneshot
-EOF
- mkdir -p $initdir/etc/systemd/system/testsuite.target.wants
- ln -fs ../testsuite.service $initdir/etc/systemd/system/testsuite.target.wants/testsuite.service
-
- # make the testsuite the default target
- ln -fs testsuite.target $initdir/etc/systemd/system/default.target
- mkdir -p $initdir/etc/rc.d
- cat >$initdir/etc/rc.d/rc.local <<EOF
-#!/bin/bash
-exit 0
-EOF
- chmod 0755 $initdir/etc/rc.d/rc.local
- # install basic tools needed
- dracut_install sh bash setsid loadkeys setfont \
- login sushell sulogin gzip sleep echo mount umount cryptsetup
- dracut_install dmsetup modprobe
-
- # install libnss_files for login
- inst_libdir_file "libnss_files*"
-
- # install dbus and pam
- find \
- /etc/dbus-1 \
- /etc/pam.d \
- /etc/security \
- /lib64/security \
- /lib/security -xtype f \
- | while read file; do
- inst $file
- done
-
- # install dbus socket and service file
- inst /usr/lib/systemd/system/dbus.socket
- inst /usr/lib/systemd/system/dbus.service
-
- # install basic keyboard maps and fonts
- for i in \
- /usr/lib/kbd/consolefonts/latarcyrheb-sun16* \
- /usr/lib/kbd/keymaps/include/* \
- /usr/lib/kbd/keymaps/i386/include/* \
- /usr/lib/kbd/keymaps/i386/qwerty/us.*; do
- [[ -f $i ]] || continue
- inst $i
- done
-
- # some basic terminfo files
- for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
- [ -f ${_terminfodir}/l/linux ] && break
- done
- dracut_install -o ${_terminfodir}/l/linux
-
- # softlink mtab
- ln -fs /proc/self/mounts $initdir/etc/mtab
-
- # install any Exec's from the service files
- egrep -ho '^Exec[^ ]*=[^ ]+' $initdir/lib/systemd/system/*.service \
- | while read i; do
- i=${i##Exec*=}; i=${i##-}
- inst $i
- done
-
- # install plymouth, if found... else remove plymouth service files
- # if [ -x /usr/libexec/plymouth/plymouth-populate-initrd ]; then
- # PLYMOUTH_POPULATE_SOURCE_FUNCTIONS="$TEST_BASE_DIR/test-functions" \
- # /usr/libexec/plymouth/plymouth-populate-initrd -t $initdir
- # dracut_install plymouth plymouthd
- # else
- rm -f $initdir/{usr/lib,etc}/systemd/system/plymouth* $initdir/{usr/lib,etc}/systemd/system/*/plymouth*
- # fi
-
- # some helper tools for debugging
- [[ $DEBUGTOOLS ]] && dracut_install $DEBUGTOOLS
-
- # install ld.so.conf* and run ldconfig
- cp -a /etc/ld.so.conf* $initdir/etc
- ldconfig -r "$initdir"
- ddebug "Strip binaeries"
- find "$initdir" -perm +111 -type f | xargs strip --strip-unneeded | ddebug
-
- # copy depmod files
- inst /lib/modules/$KERNEL_VER/modules.order
- inst /lib/modules/$KERNEL_VER/modules.builtin
- # generate module dependencies
- if [[ -d $initdir/lib/modules/$KERNEL_VER ]] && \
- ! depmod -a -b "$initdir" $KERNEL_VER; then
- dfatal "\"depmod -a $KERNEL_VER\" failed."
- exit 1
- fi
- )
- rm -fr $TESTDIR/nspawn-root
- ddebug "cp -ar $TESTDIR/root $TESTDIR/nspawn-root"
- cp -ar $TESTDIR/root $TESTDIR/nspawn-root
- # we don't mount in the nspawn root
- rm -fr $TESTDIR/nspawn-root/etc/fstab
-
- ddebug "umount $TESTDIR/root"
- umount $TESTDIR/root
-}
-
-test_cleanup() {
- umount $TESTDIR/root 2>/dev/null
- [[ $LOOPDEV ]] && losetup -d $LOOPDEV
- return 0
-}
-
-. $TEST_BASE_DIR/test-functions
-do_test "$@"
diff --git a/test/TEST-02-CRYPTSETUP/Makefile b/test/TEST-02-CRYPTSETUP/Makefile
deleted file mode 120000
index e9f93b1104..0000000000
--- a/test/TEST-02-CRYPTSETUP/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-../TEST-01-BASIC/Makefile \ No newline at end of file
diff --git a/test/TEST-02-CRYPTSETUP/test.sh b/test/TEST-02-CRYPTSETUP/test.sh
deleted file mode 100755
index 790dc3074c..0000000000
--- a/test/TEST-02-CRYPTSETUP/test.sh
+++ /dev/null
@@ -1,264 +0,0 @@
-#!/bin/bash
-# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
-# ex: ts=8 sw=4 sts=4 et filetype=sh
-TEST_DESCRIPTION="cryptsetup systemd setup"
-
-KVERSION=${KVERSION-$(uname -r)}
-KERNEL_VER=$(uname -r)
-
-# Uncomment this to debug failures
-#DEBUGFAIL="systemd.unit=multi-user.target"
-DEBUGTOOLS="df free ls stty cat ps ln ip route dmesg dhclient mkdir cp ping dhclient strace less grep id tty touch du sort"
-
-run_qemu() {
- # TODO: qemu wrapper script: http://www.spinics.net/lists/kvm/msg72389.html
- qemu-kvm \
- -hda $TESTDIR/rootdisk.img \
- -m 512M -nographic \
- -net none -kernel /boot/vmlinuz-$KERNEL_VER \
- -append "root=/dev/sda1 systemd.log_level=debug raid=noautodetect loglevel=2 init=/usr/lib/systemd/systemd ro console=ttyS0,115200n81 selinux=0 $DEBUGFAIL" || return 1
-
- ret=1
- mkdir -p $TESTDIR/root
- mount ${LOOPDEV}p1 $TESTDIR/root
- [[ -e $TESTDIR/root/testok ]] && ret=0
- cp -a $TESTDIR/root/failed $TESTDIR
- cryptsetup luksOpen ${LOOPDEV}p2 varcrypt <$TESTDIR/keyfile
- mount /dev/mapper/varcrypt $TESTDIR/root/var
- cp -a $TESTDIR/root/var/log/journal $TESTDIR
- umount $TESTDIR/root/var
- umount $TESTDIR/root
- cryptsetup luksClose /dev/mapper/varcrypt
- cat $TESTDIR/failed
- ls -l $TESTDIR/journal/*/*.journal
- test -s $TESTDIR/failed && ret=$(($ret+1))
- return $ret
-}
-
-
-test_run() {
- if check_qemu ; then
- run_qemu || return 1
- else
- dwarn "can't run qemu-kvm, skipping"
- fi
- return 0
-}
-
-test_setup() {
- rm -f $TESTDIR/rootdisk.img
- # Create the blank file to use as a root filesystem
- dd if=/dev/null of=$TESTDIR/rootdisk.img bs=1M seek=200
- LOOPDEV=$(losetup --show -P -f $TESTDIR/rootdisk.img)
- [ -b $LOOPDEV ] || return 1
- echo "LOOPDEV=$LOOPDEV" >> $STATEFILE
- sfdisk -C 6400 -H 2 -S 32 -L $LOOPDEV <<EOF
-,3200
-,
-EOF
-
- mkfs.ext3 -L systemd ${LOOPDEV}p1
- echo -n test >$TESTDIR/keyfile
- cryptsetup -q luksFormat ${LOOPDEV}p2 $TESTDIR/keyfile
- cryptsetup luksOpen ${LOOPDEV}p2 varcrypt <$TESTDIR/keyfile
- mkfs.ext3 -L var /dev/mapper/varcrypt
- mkdir -p $TESTDIR/root
- mount ${LOOPDEV}p1 $TESTDIR/root
- mkdir -p $TESTDIR/root/run
- mkdir -p $TESTDIR/root/var
- mount /dev/mapper/varcrypt $TESTDIR/root/var
-
- # Create what will eventually be our root filesystem onto an overlay
- (
- LOG_LEVEL=5
- initdir=$TESTDIR/root
-
- # create the basic filesystem layout
- setup_basic_dirs
-
- # install compiled files
- (cd ../..; make DESTDIR=$initdir install)
-
- # remove unneeded documentation
- rm -fr $initdir/usr/share/{man,doc,gtk-doc}
-
- # install possible missing libraries
- for i in $initdir/{sbin,bin}/* $initdir/lib/systemd/*; do
- inst_libs $i
- done
-
- # make a journal directory
- mkdir -p $initdir/var/log/journal
-
- # install some basic config files
- inst /etc/sysconfig/init
- inst /etc/passwd
- inst /etc/shadow
- inst /etc/group
- inst /etc/shells
- inst /etc/nsswitch.conf
- inst /etc/pam.conf
- inst /etc/securetty
- inst /etc/os-release
- inst /etc/localtime
- # we want an empty environment
- > $initdir/etc/environment
- > $initdir/etc/machine-id
-
- # set the hostname
- echo systemd-testsuite > $initdir/etc/hostname
-
- eval $(udevadm info --export --query=env --name=/dev/mapper/varcrypt)
- eval $(udevadm info --export --query=env --name=${LOOPDEV}p2)
-
- cat >$initdir/etc/crypttab <<EOF
-$DM_NAME UUID=$ID_FS_UUID /etc/varkey
-EOF
- echo -n test > $initdir/etc/varkey
- cat $initdir/etc/crypttab | ddebug
-
- cat >$initdir/etc/fstab <<EOF
-LABEL=systemd / ext3 rw 0 1
-/dev/mapper/varcrypt /var ext3 defaults 0 1
-EOF
-
- # setup the testsuite target
- cat >$initdir/etc/systemd/system/testsuite.target <<EOF
-[Unit]
-Description=Testsuite target
-Requires=multi-user.target
-After=multi-user.target
-Conflicts=rescue.target
-AllowIsolate=yes
-EOF
-
- # setup the testsuite service
- cat >$initdir/etc/systemd/system/testsuite.service <<EOF
-[Unit]
-Description=Testsuite service
-After=multi-user.target
-
-[Service]
-ExecStart=/bin/bash -c 'set -x; systemctl --failed --no-legend --no-pager > /failed ; echo OK > /testok; while : ;do systemd-cat echo "testsuite service waiting for /var/log/journal" ; echo "testsuite service waiting for journal to move to /var/log/journal" > /dev/console ; for i in /var/log/journal/*;do [ -d "\$i" ] && echo "\$i" && break 2; done; sleep 1; done; sleep 1; exit 0;'
-ExecStopPost=/usr/bin/systemctl poweroff
-Type=oneshot
-EOF
- mkdir -p $initdir/etc/systemd/system/testsuite.target.wants
- ln -fs ../testsuite.service $initdir/etc/systemd/system/testsuite.target.wants/testsuite.service
-
- # make the testsuite the default target
- ln -fs testsuite.target $initdir/etc/systemd/system/default.target
- mkdir -p $initdir/etc/rc.d
- cat >$initdir/etc/rc.d/rc.local <<EOF
-#!/bin/bash
-exit 0
-EOF
- chmod 0755 $initdir/etc/rc.d/rc.local
- # install basic tools needed
- dracut_install sh bash setsid loadkeys setfont \
- login sushell sulogin gzip sleep echo mount umount cryptsetup
- dracut_install dmsetup modprobe
-
- instmods dm_crypt =crypto
-
- type -P dmeventd >/dev/null && dracut_install dmeventd
-
- inst_libdir_file "libdevmapper-event.so*"
-
- inst_rules 10-dm.rules 13-dm-disk.rules 95-dm-notify.rules
-
- # install libnss_files for login
- inst_libdir_file "libnss_files*"
-
- # install dbus and pam
- find \
- /etc/dbus-1 \
- /etc/pam.d \
- /etc/security \
- /lib64/security \
- /lib/security -xtype f \
- | while read file; do
- inst $file
- done
-
- # install dbus socket and service file
- inst /usr/lib/systemd/system/dbus.socket
- inst /usr/lib/systemd/system/dbus.service
-
- # install basic keyboard maps and fonts
- for i in \
- /usr/lib/kbd/consolefonts/latarcyrheb-sun16* \
- /usr/lib/kbd/keymaps/include/* \
- /usr/lib/kbd/keymaps/i386/include/* \
- /usr/lib/kbd/keymaps/i386/qwerty/us.*; do
- [[ -f $i ]] || continue
- inst $i
- done
-
- # some basic terminfo files
- for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
- [ -f ${_terminfodir}/l/linux ] && break
- done
- dracut_install -o ${_terminfodir}/l/linux
-
- # softlink mtab
- ln -fs /proc/self/mounts $initdir/etc/mtab
-
- # install any Exec's from the service files
- egrep -ho '^Exec[^ ]*=[^ ]+' $initdir/lib/systemd/system/*.service \
- | while read i; do
- i=${i##Exec*=}; i=${i##-}
- inst $i
- done
-
- # install plymouth, if found... else remove plymouth service files
- # if [ -x /usr/libexec/plymouth/plymouth-populate-initrd ]; then
- # PLYMOUTH_POPULATE_SOURCE_FUNCTIONS="$TEST_BASE_DIR/test-functions" \
- # /usr/libexec/plymouth/plymouth-populate-initrd -t $initdir
- # dracut_install plymouth plymouthd
- # else
- rm -f $initdir/{usr/lib,etc}/systemd/system/plymouth* $initdir/{usr/lib,etc}/systemd/system/*/plymouth*
- # fi
-
- # some helper tools for debugging
- [[ $DEBUGTOOLS ]] && dracut_install $DEBUGTOOLS
-
- # install ld.so.conf* and run ldconfig
- cp -a /etc/ld.so.conf* $initdir/etc
- ldconfig -r "$initdir"
- ddebug "Strip binaeries"
- find "$initdir" -perm +111 -type f | xargs strip --strip-unneeded | ddebug
-
- # copy depmod files
- inst /lib/modules/$KERNEL_VER/modules.order
- inst /lib/modules/$KERNEL_VER/modules.builtin
- # generate module dependencies
- if [[ -d $initdir/lib/modules/$KERNEL_VER ]] && \
- ! depmod -a -b "$initdir" $KERNEL_VER; then
- dfatal "\"depmod -a $KERNEL_VER\" failed."
- exit 1
- fi
- )
- rm -fr $TESTDIR/nspawn-root
- ddebug "cp -ar $TESTDIR/root $TESTDIR/nspawn-root"
- cp -ar $TESTDIR/root $TESTDIR/nspawn-root
- # we don't mount in the nspawn root
- rm -fr $TESTDIR/nspawn-root/etc/fstab
-
- ddebug "umount $TESTDIR/root/var"
- umount $TESTDIR/root/var
- cryptsetup luksClose /dev/mapper/varcrypt
- ddebug "umount $TESTDIR/root"
- umount $TESTDIR/root
-}
-
-test_cleanup() {
- umount $TESTDIR/root/var 2>/dev/null
- [[ -b /dev/mapper/varcrypt ]] && cryptsetup luksClose /dev/mapper/varcrypt
- umount $TESTDIR/root 2>/dev/null
- [[ $LOOPDEV ]] && losetup -d $LOOPDEV
- return 0
-}
-
-. $TEST_BASE_DIR/test-functions
-do_test "$@"
diff --git a/test/a.service b/test/a.service
deleted file mode 100644
index 4168d2d051..0000000000
--- a/test/a.service
+++ /dev/null
@@ -1,7 +0,0 @@
-[Unit]
-Description=A
-Requires=b.service
-Before=b.service
-
-[Service]
-ExecStart=/bin/true
diff --git a/test/b.service b/test/b.service
deleted file mode 100644
index e03bae36be..0000000000
--- a/test/b.service
+++ /dev/null
@@ -1,6 +0,0 @@
-[Unit]
-Description=B
-Wants=f.service
-
-[Service]
-ExecStart=/bin/true
diff --git a/test/c.service b/test/c.service
deleted file mode 100644
index e2f60a8fbf..0000000000
--- a/test/c.service
+++ /dev/null
@@ -1,6 +0,0 @@
-[Unit]
-Description=C
-Requires=a.service
-
-[Service]
-ExecStart=/bin/true
diff --git a/test/d.service b/test/d.service
deleted file mode 100644
index 921fd2ee1b..0000000000
--- a/test/d.service
+++ /dev/null
@@ -1,8 +0,0 @@
-[Unit]
-Description=D:Cyclic
-After=b.service
-Before=a.service
-Requires=a.service
-
-[Service]
-ExecStart=/bin/true
diff --git a/test/e.service b/test/e.service
deleted file mode 100644
index 5ba98c7c43..0000000000
--- a/test/e.service
+++ /dev/null
@@ -1,8 +0,0 @@
-[Unit]
-Description=E:Cyclic
-After=b.service
-Before=a.service
-Wants=a.service
-
-[Service]
-ExecStart=/bin/true
diff --git a/test/f.service b/test/f.service
deleted file mode 100644
index 7dde681c17..0000000000
--- a/test/f.service
+++ /dev/null
@@ -1,5 +0,0 @@
-[Unit]
-Description=F
-
-[Service]
-ExecStart=/bin/true
diff --git a/test/g.service b/test/g.service
deleted file mode 100644
index cbfa82a454..0000000000
--- a/test/g.service
+++ /dev/null
@@ -1,6 +0,0 @@
-[Unit]
-Description=G
-Conflicts=e.service
-
-[Service]
-ExecStart=/bin/true
diff --git a/test/h.service b/test/h.service
deleted file mode 100644
index 74a7751cad..0000000000
--- a/test/h.service
+++ /dev/null
@@ -1,6 +0,0 @@
-[Unit]
-Description=H
-Wants=g.service
-
-[Service]
-ExecStart=/bin/true
diff --git a/test/test-functions b/test/test-functions
deleted file mode 100644
index 0587cd4feb..0000000000
--- a/test/test-functions
+++ /dev/null
@@ -1,864 +0,0 @@
-#!/bin/bash
-# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
-# ex: ts=8 sw=4 sts=4 et filetype=sh
-PATH=/sbin:/bin:/usr/sbin:/usr/bin
-export PATH
-
-KERNEL_VER=${KERNEL_VER-$(uname -r)}
-KERNEL_MODS="/lib/modules/$KERNEL_VER/"
-
-setup_basic_dirs() {
- for d in usr/bin usr/sbin bin etc lib "$libdir" sbin tmp usr var var/log dev proc sys sysroot root run run/lock run/initramfs; do
- if [ -L "/$d" ]; then
- inst_symlink "/$d"
- else
- inst_dir "/$d"
- fi
- done
-
- ln -sfn /run "$initdir/var/run"
- ln -sfn /run/lock "$initdir/var/lock"
-}
-
-inst_libs() {
- local _bin=$1
- local _so_regex='([^ ]*/lib[^/]*/[^ ]*\.so[^ ]*)'
- local _file _line
-
- LC_ALL=C ldd "$_bin" 2>/dev/null | while read _line; do
- [[ $_line = 'not a dynamic executable' ]] && break
-
- if [[ $_line =~ $_so_regex ]]; then
- _file=${BASH_REMATCH[1]}
- [[ -e ${initdir}/$_file ]] && continue
- inst_library "$_file"
- continue
- fi
-
- if [[ $_line =~ not\ found ]]; then
- dfatal "Missing a shared library required by $_bin."
- dfatal "Run \"ldd $_bin\" to find out what it is."
- dfatal "$_line"
- dfatal "dracut cannot create an initrd."
- exit 1
- fi
- done
-}
-
-import_testdir() {
- STATEFILE=".testdir"
- [[ -e $STATEFILE ]] && . $STATEFILE
- if [[ -z "$TESTDIR" ]] || [[ ! -d "$TESTDIR" ]]; then
- TESTDIR=$(mktemp --tmpdir=/var/tmp -d -t systemd-test.XXXXXX)
- echo "TESTDIR=\"$TESTDIR\"" > $STATEFILE
- export TESTDIR
- fi
-}
-
-## @brief Converts numeric logging level to the first letter of level name.
-#
-# @param lvl Numeric logging level in range from 1 to 6.
-# @retval 1 if @a lvl is out of range.
-# @retval 0 if @a lvl is correct.
-# @result Echoes first letter of level name.
-_lvl2char() {
- case "$1" in
- 1) echo F;;
- 2) echo E;;
- 3) echo W;;
- 4) echo I;;
- 5) echo D;;
- 6) echo T;;
- *) return 1;;
- esac
-}
-
-## @brief Internal helper function for _do_dlog()
-#
-# @param lvl Numeric logging level.
-# @param msg Message.
-# @retval 0 It's always returned, even if logging failed.
-#
-# @note This function is not supposed to be called manually. Please use
-# dtrace(), ddebug(), or others instead which wrap this one.
-#
-# This function calls _do_dlog() either with parameter msg, or if
-# none is given, it will read standard input and will use every line as
-# a message.
-#
-# This enables:
-# dwarn "This is a warning"
-# echo "This is a warning" | dwarn
-LOG_LEVEL=4
-
-dlog() {
- [ -z "$LOG_LEVEL" ] && return 0
- [ $1 -le $LOG_LEVEL ] || return 0
- local lvl="$1"; shift
- local lvlc=$(_lvl2char "$lvl") || return 0
-
- if [ $# -ge 1 ]; then
- echo "$lvlc: $*"
- else
- while read line; do
- echo "$lvlc: " "$line"
- done
- fi
-}
-
-## @brief Logs message at TRACE level (6)
-#
-# @param msg Message.
-# @retval 0 It's always returned, even if logging failed.
-dtrace() {
- set +x
- dlog 6 "$@"
- [ -n "$debug" ] && set -x || :
-}
-
-## @brief Logs message at DEBUG level (5)
-#
-# @param msg Message.
-# @retval 0 It's always returned, even if logging failed.
-ddebug() {
-# set +x
- dlog 5 "$@"
-# [ -n "$debug" ] && set -x || :
-}
-
-## @brief Logs message at INFO level (4)
-#
-# @param msg Message.
-# @retval 0 It's always returned, even if logging failed.
-dinfo() {
- set +x
- dlog 4 "$@"
- [ -n "$debug" ] && set -x || :
-}
-
-## @brief Logs message at WARN level (3)
-#
-# @param msg Message.
-# @retval 0 It's always returned, even if logging failed.
-dwarn() {
- set +x
- dlog 3 "$@"
- [ -n "$debug" ] && set -x || :
-}
-
-## @brief Logs message at ERROR level (2)
-#
-# @param msg Message.
-# @retval 0 It's always returned, even if logging failed.
-derror() {
-# set +x
- dlog 2 "$@"
-# [ -n "$debug" ] && set -x || :
-}
-
-## @brief Logs message at FATAL level (1)
-#
-# @param msg Message.
-# @retval 0 It's always returned, even if logging failed.
-dfatal() {
- set +x
- dlog 1 "$@"
- [ -n "$debug" ] && set -x || :
-}
-
-
-# Generic substring function. If $2 is in $1, return 0.
-strstr() { [ "${1#*$2*}" != "$1" ]; }
-
-# normalize_path <path>
-# Prints the normalized path, where it removes any duplicated
-# and trailing slashes.
-# Example:
-# $ normalize_path ///test/test//
-# /test/test
-normalize_path() {
- shopt -q -s extglob
- set -- "${1//+(\/)//}"
- shopt -q -u extglob
- echo "${1%/}"
-}
-
-# convert_abs_rel <from> <to>
-# Prints the relative path, when creating a symlink to <to> from <from>.
-# Example:
-# $ convert_abs_rel /usr/bin/test /bin/test-2
-# ../../bin/test-2
-# $ ln -s $(convert_abs_rel /usr/bin/test /bin/test-2) /usr/bin/test
-convert_abs_rel() {
- local __current __absolute __abssize __cursize __newpath
- local -i __i __level
-
- set -- "$(normalize_path "$1")" "$(normalize_path "$2")"
-
- # corner case #1 - self looping link
- [[ "$1" == "$2" ]] && { echo "${1##*/}"; return; }
-
- # corner case #2 - own dir link
- [[ "${1%/*}" == "$2" ]] && { echo "."; return; }
-
- IFS="/" __current=($1)
- IFS="/" __absolute=($2)
-
- __abssize=${#__absolute[@]}
- __cursize=${#__current[@]}
-
- while [[ ${__absolute[__level]} == ${__current[__level]} ]]
- do
- (( __level++ ))
- if (( __level > __abssize || __level > __cursize ))
- then
- break
- fi
- done
-
- for ((__i = __level; __i < __cursize-1; __i++))
- do
- if ((__i > __level))
- then
- __newpath=$__newpath"/"
- fi
- __newpath=$__newpath".."
- done
-
- for ((__i = __level; __i < __abssize; __i++))
- do
- if [[ -n $__newpath ]]
- then
- __newpath=$__newpath"/"
- fi
- __newpath=$__newpath${__absolute[__i]}
- done
-
- echo "$__newpath"
-}
-
-
-# Install a directory, keeping symlinks as on the original system.
-# Example: if /lib points to /lib64 on the host, "inst_dir /lib/file"
-# will create ${initdir}/lib64, ${initdir}/lib64/file,
-# and a symlink ${initdir}/lib -> lib64.
-inst_dir() {
- [[ -e ${initdir}/"$1" ]] && return 0 # already there
-
- local _dir="$1" _part="${1%/*}" _file
- while [[ "$_part" != "${_part%/*}" ]] && ! [[ -e "${initdir}/${_part}" ]]; do
- _dir="$_part $_dir"
- _part=${_part%/*}
- done
-
- # iterate over parent directories
- for _file in $_dir; do
- [[ -e "${initdir}/$_file" ]] && continue
- if [[ -L $_file ]]; then
- inst_symlink "$_file"
- else
- # create directory
- mkdir -m 0755 -p "${initdir}/$_file" || return 1
- [[ -e "$_file" ]] && chmod --reference="$_file" "${initdir}/$_file"
- chmod u+w "${initdir}/$_file"
- fi
- done
-}
-
-# $1 = file to copy to ramdisk
-# $2 (optional) Name for the file on the ramdisk
-# Location of the image dir is assumed to be $initdir
-# We never overwrite the target if it exists.
-inst_simple() {
- [[ -f "$1" ]] || return 1
- strstr "$1" "/" || return 1
-
- local _src=$1 target="${2:-$1}"
- if ! [[ -d ${initdir}/$target ]]; then
- [[ -e ${initdir}/$target ]] && return 0
- [[ -L ${initdir}/$target ]] && return 0
- [[ -d "${initdir}/${target%/*}" ]] || inst_dir "${target%/*}"
- fi
- # install checksum files also
- if [[ -e "${_src%/*}/.${_src##*/}.hmac" ]]; then
- inst "${_src%/*}/.${_src##*/}.hmac" "${target%/*}/.${target##*/}.hmac"
- fi
- ddebug "Installing $_src"
- cp --sparse=always -pfL "$_src" "${initdir}/$target"
-}
-
-# find symlinks linked to given library file
-# $1 = library file
-# Function searches for symlinks by stripping version numbers appended to
-# library filename, checks if it points to the same target and finally
-# prints the list of symlinks to stdout.
-#
-# Example:
-# rev_lib_symlinks libfoo.so.8.1
-# output: libfoo.so.8 libfoo.so
-# (Only if libfoo.so.8 and libfoo.so exists on host system.)
-rev_lib_symlinks() {
- [[ ! $1 ]] && return 0
-
- local fn="$1" orig="$(readlink -f "$1")" links=''
-
- [[ ${fn} =~ .*\.so\..* ]] || return 1
-
- until [[ ${fn##*.} == so ]]; do
- fn="${fn%.*}"
- [[ -L ${fn} && $(readlink -f "${fn}") == ${orig} ]] && links+=" ${fn}"
- done
-
- echo "${links}"
-}
-
-# Same as above, but specialized to handle dynamic libraries.
-# It handles making symlinks according to how the original library
-# is referenced.
-inst_library() {
- local _src="$1" _dest=${2:-$1} _lib _reallib _symlink
- strstr "$1" "/" || return 1
- [[ -e $initdir/$_dest ]] && return 0
- if [[ -L $_src ]]; then
- # install checksum files also
- if [[ -e "${_src%/*}/.${_src##*/}.hmac" ]]; then
- inst "${_src%/*}/.${_src##*/}.hmac" "${_dest%/*}/.${_dest##*/}.hmac"
- fi
- _reallib=$(readlink -f "$_src")
- inst_simple "$_reallib" "$_reallib"
- inst_dir "${_dest%/*}"
- [[ -d "${_dest%/*}" ]] && _dest=$(readlink -f "${_dest%/*}")/${_dest##*/}
- ln -sfn $(convert_abs_rel "${_dest}" "${_reallib}") "${initdir}/${_dest}"
- else
- inst_simple "$_src" "$_dest"
- fi
-
- # Create additional symlinks. See rev_symlinks description.
- for _symlink in $(rev_lib_symlinks $_src) $(rev_lib_symlinks $_reallib); do
- [[ ! -e $initdir/$_symlink ]] && {
- ddebug "Creating extra symlink: $_symlink"
- inst_symlink $_symlink
- }
- done
-}
-
-# find a binary. If we were not passed the full path directly,
-# search in the usual places to find the binary.
-find_binary() {
- if [[ -z ${1##/*} ]]; then
- if [[ -x $1 ]] || { strstr "$1" ".so" && ldd $1 &>/dev/null; }; then
- echo $1
- return 0
- fi
- fi
-
- type -P $1
-}
-
-# Same as above, but specialized to install binary executables.
-# Install binary executable, and all shared library dependencies, if any.
-inst_binary() {
- local _bin _target
- _bin=$(find_binary "$1") || return 1
- _target=${2:-$_bin}
- [[ -e $initdir/$_target ]] && return 0
- [[ -L $_bin ]] && inst_symlink $_bin $_target && return 0
- local _file _line
- local _so_regex='([^ ]*/lib[^/]*/[^ ]*\.so[^ ]*)'
- # I love bash!
- LC_ALL=C ldd "$_bin" 2>/dev/null | while read _line; do
- [[ $_line = 'not a dynamic executable' ]] && break
-
- if [[ $_line =~ $_so_regex ]]; then
- _file=${BASH_REMATCH[1]}
- [[ -e ${initdir}/$_file ]] && continue
- inst_library "$_file"
- continue
- fi
-
- if [[ $_line =~ not\ found ]]; then
- dfatal "Missing a shared library required by $_bin."
- dfatal "Run \"ldd $_bin\" to find out what it is."
- dfatal "$_line"
- dfatal "dracut cannot create an initrd."
- exit 1
- fi
- done
- inst_simple "$_bin" "$_target"
-}
-
-# same as above, except for shell scripts.
-# If your shell script does not start with shebang, it is not a shell script.
-inst_script() {
- local _bin
- _bin=$(find_binary "$1") || return 1
- shift
- local _line _shebang_regex
- read -r -n 80 _line <"$_bin"
- # If debug is set, clean unprintable chars to prevent messing up the term
- [[ $debug ]] && _line=$(echo -n "$_line" | tr -c -d '[:print:][:space:]')
- _shebang_regex='(#! *)(/[^ ]+).*'
- [[ $_line =~ $_shebang_regex ]] || return 1
- inst "${BASH_REMATCH[2]}" && inst_simple "$_bin" "$@"
-}
-
-# same as above, but specialized for symlinks
-inst_symlink() {
- local _src=$1 _target=${2:-$1} _realsrc
- strstr "$1" "/" || return 1
- [[ -L $1 ]] || return 1
- [[ -L $initdir/$_target ]] && return 0
- _realsrc=$(readlink -f "$_src")
- if ! [[ -e $initdir/$_realsrc ]]; then
- if [[ -d $_realsrc ]]; then
- inst_dir "$_realsrc"
- else
- inst "$_realsrc"
- fi
- fi
- [[ ! -e $initdir/${_target%/*} ]] && inst_dir "${_target%/*}"
- [[ -d ${_target%/*} ]] && _target=$(readlink -f ${_target%/*})/${_target##*/}
- ln -sfn $(convert_abs_rel "${_target}" "${_realsrc}") "$initdir/$_target"
-}
-
-# attempt to install any programs specified in a udev rule
-inst_rule_programs() {
- local _prog _bin
-
- if grep -qE 'PROGRAM==?"[^ "]+' "$1"; then
- for _prog in $(grep -E 'PROGRAM==?"[^ "]+' "$1" | sed -r 's/.*PROGRAM==?"([^ "]+).*/\1/'); do
- if [ -x /lib/udev/$_prog ]; then
- _bin=/lib/udev/$_prog
- else
- _bin=$(find_binary "$_prog") || {
- dinfo "Skipping program $_prog using in udev rule $(basename $1) as it cannot be found"
- continue;
- }
- fi
-
- #dinfo "Installing $_bin due to it's use in the udev rule $(basename $1)"
- dracut_install "$_bin"
- done
- fi
-}
-
-# udev rules always get installed in the same place, so
-# create a function to install them to make life simpler.
-inst_rules() {
- local _target=/etc/udev/rules.d _rule _found
-
- inst_dir "/lib/udev/rules.d"
- inst_dir "$_target"
- for _rule in "$@"; do
- if [ "${rule#/}" = "$rule" ]; then
- for r in /lib/udev/rules.d /etc/udev/rules.d; do
- if [[ -f $r/$_rule ]]; then
- _found="$r/$_rule"
- inst_simple "$_found"
- inst_rule_programs "$_found"
- fi
- done
- fi
- for r in '' ./ $dracutbasedir/rules.d/; do
- if [[ -f ${r}$_rule ]]; then
- _found="${r}$_rule"
- inst_simple "$_found" "$_target/${_found##*/}"
- inst_rule_programs "$_found"
- fi
- done
- [[ $_found ]] || dinfo "Skipping udev rule: $_rule"
- done
-}
-
-# general purpose installation function
-# Same args as above.
-inst() {
- local _x
-
- case $# in
- 1) ;;
- 2) [[ ! $initdir && -d $2 ]] && export initdir=$2
- [[ $initdir = $2 ]] && set $1;;
- 3) [[ -z $initdir ]] && export initdir=$2
- set $1 $3;;
- *) dfatal "inst only takes 1 or 2 or 3 arguments"
- exit 1;;
- esac
- for _x in inst_symlink inst_script inst_binary inst_simple; do
- $_x "$@" && return 0
- done
- return 1
-}
-
-# install any of listed files
-#
-# If first argument is '-d' and second some destination path, first accessible
-# source is installed into this path, otherwise it will installed in the same
-# path as source. If none of listed files was installed, function return 1.
-# On first successful installation it returns with 0 status.
-#
-# Example:
-#
-# inst_any -d /bin/foo /bin/bar /bin/baz
-#
-# Lets assume that /bin/baz exists, so it will be installed as /bin/foo in
-# initramfs.
-inst_any() {
- local to f
-
- [[ $1 = '-d' ]] && to="$2" && shift 2
-
- for f in "$@"; do
- if [[ -e $f ]]; then
- [[ $to ]] && inst "$f" "$to" && return 0
- inst "$f" && return 0
- fi
- done
-
- return 1
-}
-
-# dracut_install [-o ] <file> [<file> ... ]
-# Install <file> to the initramfs image
-# -o optionally install the <file> and don't fail, if it is not there
-dracut_install() {
- local _optional=no
- if [[ $1 = '-o' ]]; then
- _optional=yes
- shift
- fi
- while (($# > 0)); do
- if ! inst "$1" ; then
- if [[ $_optional = yes ]]; then
- dinfo "Skipping program $1 as it cannot be found and is" \
- "flagged to be optional"
- else
- dfatal "Failed to install $1"
- exit 1
- fi
- fi
- shift
- done
-}
-
-# Install a single kernel module along with any firmware it may require.
-# $1 = full path to kernel module to install
-install_kmod_with_fw() {
- # no need to go further if the module is already installed
-
- [[ -e "${initdir}/lib/modules/$KERNEL_VER/${1##*/lib/modules/$KERNEL_VER/}" ]] \
- && return 0
-
- [[ -e "$initdir/.kernelmodseen/${1##*/}" ]] && return 0
-
- if [[ $omit_drivers ]]; then
- local _kmod=${1##*/}
- _kmod=${_kmod%.ko}
- _kmod=${_kmod/-/_}
- if [[ "$_kmod" =~ $omit_drivers ]]; then
- dinfo "Omitting driver $_kmod"
- return 1
- fi
- if [[ "${1##*/lib/modules/$KERNEL_VER/}" =~ $omit_drivers ]]; then
- dinfo "Omitting driver $_kmod"
- return 1
- fi
- fi
-
- [ -d "$initdir/.kernelmodseen" ] && \
- > "$initdir/.kernelmodseen/${1##*/}"
-
- inst_simple "$1" "/lib/modules/$KERNEL_VER/${1##*/lib/modules/$KERNEL_VER/}" \
- || return $?
-
- local _modname=${1##*/} _fwdir _found _fw
- _modname=${_modname%.ko*}
- for _fw in $(modinfo -k $KERNEL_VER -F firmware $1 2>/dev/null); do
- _found=''
- for _fwdir in $fw_dir; do
- if [[ -d $_fwdir && -f $_fwdir/$_fw ]]; then
- inst_simple "$_fwdir/$_fw" "/lib/firmware/$_fw"
- _found=yes
- fi
- done
- if [[ $_found != yes ]]; then
- if ! grep -qe "\<${_modname//-/_}\>" /proc/modules; then
- dinfo "Possible missing firmware \"${_fw}\" for kernel module" \
- "\"${_modname}.ko\""
- else
- dwarn "Possible missing firmware \"${_fw}\" for kernel module" \
- "\"${_modname}.ko\""
- fi
- fi
- done
- return 0
-}
-
-# Do something with all the dependencies of a kernel module.
-# Note that kernel modules depend on themselves using the technique we use
-# $1 = function to call for each dependency we find
-# It will be passed the full path to the found kernel module
-# $2 = module to get dependencies for
-# rest of args = arguments to modprobe
-# _fderr specifies FD passed from surrounding scope
-for_each_kmod_dep() {
- local _func=$1 _kmod=$2 _cmd _modpath _options _found=0
- shift 2
- modprobe "$@" --ignore-install --show-depends $_kmod 2>&${_fderr} | (
- while read _cmd _modpath _options; do
- [[ $_cmd = insmod ]] || continue
- $_func ${_modpath} || exit $?
- _found=1
- done
- [[ $_found -eq 0 ]] && exit 1
- exit 0
- )
-}
-
-# filter kernel modules to install certain modules that meet specific
-# requirements.
-# $1 = search only in subdirectory of /kernel/$1
-# $2 = function to call with module name to filter.
-# This function will be passed the full path to the module to test.
-# The behavior of this function can vary depending on whether $hostonly is set.
-# If it is, we will only look at modules that are already in memory.
-# If it is not, we will look at all kernel modules
-# This function returns the full filenames of modules that match $1
-filter_kernel_modules_by_path () (
- local _modname _filtercmd
- if ! [[ $hostonly ]]; then
- _filtercmd='find "$KERNEL_MODS/kernel/$1" "$KERNEL_MODS/extra"'
- _filtercmd+=' "$KERNEL_MODS/weak-updates" -name "*.ko" -o -name "*.ko.gz"'
- _filtercmd+=' -o -name "*.ko.xz"'
- _filtercmd+=' 2>/dev/null'
- else
- _filtercmd='cut -d " " -f 1 </proc/modules|xargs modinfo -F filename '
- _filtercmd+='-k $KERNEL_VER 2>/dev/null'
- fi
- for _modname in $(eval $_filtercmd); do
- case $_modname in
- *.ko) "$2" "$_modname" && echo "$_modname";;
- *.ko.gz) gzip -dc "$_modname" > $initdir/$$.ko
- $2 $initdir/$$.ko && echo "$_modname"
- rm -f $initdir/$$.ko
- ;;
- *.ko.xz) xz -dc "$_modname" > $initdir/$$.ko
- $2 $initdir/$$.ko && echo "$_modname"
- rm -f $initdir/$$.ko
- ;;
- esac
- done
-)
-find_kernel_modules_by_path () (
- if ! [[ $hostonly ]]; then
- find "$KERNEL_MODS/kernel/$1" "$KERNEL_MODS/extra" "$KERNEL_MODS/weak-updates" \
- -name "*.ko" -o -name "*.ko.gz" -o -name "*.ko.xz" 2>/dev/null
- else
- cut -d " " -f 1 </proc/modules \
- | xargs modinfo -F filename -k $KERNEL_VER 2>/dev/null
- fi
-)
-
-filter_kernel_modules () {
- filter_kernel_modules_by_path drivers "$1"
-}
-
-find_kernel_modules () {
- find_kernel_modules_by_path drivers
-}
-
-# instmods [-c] <kernel module> [<kernel module> ... ]
-# instmods [-c] <kernel subsystem>
-# install kernel modules along with all their dependencies.
-# <kernel subsystem> can be e.g. "=block" or "=drivers/usb/storage"
-instmods() {
- [[ $no_kernel = yes ]] && return
- # called [sub]functions inherit _fderr
- local _fderr=9
- local _check=no
- if [[ $1 = '-c' ]]; then
- _check=yes
- shift
- fi
-
- function inst1mod() {
- local _ret=0 _mod="$1"
- case $_mod in
- =*)
- if [ -f $KERNEL_MODS/modules.${_mod#=} ]; then
- ( [[ "$_mpargs" ]] && echo $_mpargs
- cat "${KERNEL_MODS}/modules.${_mod#=}" ) \
- | instmods
- else
- ( [[ "$_mpargs" ]] && echo $_mpargs
- find "$KERNEL_MODS" -path "*/${_mod#=}/*" -printf '%f\n' ) \
- | instmods
- fi
- ;;
- --*) _mpargs+=" $_mod" ;;
- i2o_scsi) return ;; # Do not load this diagnostic-only module
- *)
- _mod=${_mod##*/}
- # if we are already installed, skip this module and go on
- # to the next one.
- [[ -f "$initdir/.kernelmodseen/${_mod%.ko}.ko" ]] && return
-
- if [[ $omit_drivers ]] && [[ "$1" =~ $omit_drivers ]]; then
- dinfo "Omitting driver ${_mod##$KERNEL_MODS}"
- return
- fi
- # If we are building a host-specific initramfs and this
- # module is not already loaded, move on to the next one.
- [[ $hostonly ]] && ! grep -qe "\<${_mod//-/_}\>" /proc/modules \
- && ! echo $add_drivers | grep -qe "\<${_mod}\>" \
- && return
-
- # We use '-d' option in modprobe only if modules prefix path
- # differs from default '/'. This allows us to use Dracut with
- # old version of modprobe which doesn't have '-d' option.
- local _moddirname=${KERNEL_MODS%%/lib/modules/*}
- [[ -n ${_moddirname} ]] && _moddirname="-d ${_moddirname}/"
-
- # ok, load the module, all its dependencies, and any firmware
- # it may require
- for_each_kmod_dep install_kmod_with_fw $_mod \
- --set-version $KERNEL_VER ${_moddirname} $_mpargs
- ((_ret+=$?))
- ;;
- esac
- return $_ret
- }
-
- function instmods_1() {
- local _mod _mpargs
- if (($# == 0)); then # filenames from stdin
- while read _mod; do
- inst1mod "${_mod%.ko*}" || {
- if [ "$_check" = "yes" ]; then
- dfatal "Failed to install $_mod"
- return 1
- fi
- }
- done
- fi
- while (($# > 0)); do # filenames as arguments
- inst1mod ${1%.ko*} || {
- if [ "$_check" = "yes" ]; then
- dfatal "Failed to install $1"
- return 1
- fi
- }
- shift
- done
- return 0
- }
-
- local _ret _filter_not_found='FATAL: Module .* not found.'
- set -o pipefail
- # Capture all stderr from modprobe to _fderr. We could use {var}>...
- # redirections, but that would make dracut require bash4 at least.
- eval "( instmods_1 \"\$@\" ) ${_fderr}>&1" \
- | while read line; do [[ "$line" =~ $_filter_not_found ]] && echo $line || echo $line >&2 ;done | derror
- _ret=$?
- set +o pipefail
- return $_ret
-}
-
-# inst_libdir_file [-n <pattern>] <file> [<file>...]
-# Install a <file> located on a lib directory to the initramfs image
-# -n <pattern> install non-matching files
-inst_libdir_file() {
- if [[ "$1" == "-n" ]]; then
- local _pattern=$1
- shift 2
- for _dir in $libdirs; do
- for _i in "$@"; do
- for _f in "$_dir"/$_i; do
- [[ "$_i" =~ $_pattern ]] || continue
- [[ -e "$_i" ]] && dracut_install "$_i"
- done
- done
- done
- else
- for _dir in $libdirs; do
- for _i in "$@"; do
- for _f in "$_dir"/$_i; do
- [[ -e "$_f" ]] && dracut_install "$_f"
- done
- done
- done
- fi
-}
-
-check_qemu() {
- command -v qemu-kvm &>/dev/null && [[ -c /dev/kvm ]]
-}
-
-check_nspawn() {
- [[ -d /sys/fs/cgroup/systemd ]]
-}
-
-
-do_test() {
- if [[ $UID != "0" ]]; then
- echo "TEST: $TEST_DESCRIPTION [SKIPPED]: not root" >&2
- exit 0
- fi
-
-# Detect lib paths
- [[ $libdir ]] || for libdir in /lib64 /lib; do
- [[ -d $libdir ]] && libdirs+=" $libdir" && break
- done
-
- [[ $usrlibdir ]] || for usrlibdir in /usr/lib64 /usr/lib; do
- [[ -d $usrlibdir ]] && libdirs+=" $usrlibdir" && break
- done
-
- import_testdir
-
- while (($# > 0)); do
- case $1 in
- --run)
- echo "TEST RUN: $TEST_DESCRIPTION"
- test_run
- ret=$?
- if [ $ret -eq 0 ]; then
- echo "TEST RUN: $TEST_DESCRIPTION [OK]"
- else
- echo "TEST RUN: $TEST_DESCRIPTION [FAILED]"
- fi
- exit $ret;;
- --setup)
- echo "TEST SETUP: $TEST_DESCRIPTION"
- test_setup
- exit $?;;
- --clean)
- echo "TEST CLEANUP: $TEST_DESCRIPTION"
- test_cleanup
- rm -fr "$TESTDIR"
- rm -f .testdir
- exit $?;;
- --all)
- echo -n "TEST: $TEST_DESCRIPTION ";
- (
- test_setup && test_run
- ret=$?
- test_cleanup
- rm -fr "$TESTDIR"
- rm -f .testdir
- exit $ret
- ) </dev/null >test.log 2>&1
- ret=$?
- if [ $ret -eq 0 ]; then
- rm test.log
- echo "[OK]"
- else
- echo "[FAILED]"
- echo "see $(pwd)/test.log"
- fi
- exit $ret;;
- *) break ;;
- esac
- shift
- done
-}