#!/bin/bash # This file is part of dracut. # SPDX-License-Identifier: GPL-2.0-or-later # shellcheck disable=SC2034 TEST_DESCRIPTION="rpm integrity after dracut and kernel install" test_check() { # disable for now return 1 command -v rpm &> /dev/null && (command -v yum || command -v dnf) &> /dev/null } test_run() { set -x set -e export rootdir=$TESTDIR/root mkdir -p "$rootdir" mkdir -p "$rootdir/proc" mkdir -p "$rootdir/sys" mkdir -p "$rootdir/dev" mkdir -p "$rootdir/boot" trap 'ret=$?; [[ -d $rootdir ]] && { umount "$rootdir/proc"; umount "$rootdir/sys"; umount "$rootdir/dev"; rm -rf -- "$rootdir"; } || :; exit $ret;' EXIT trap '[[ -d $rootdir ]] && { umount "$rootdir/proc"; umount "$rootdir/sys"; umount "$rootdir/dev"; rm -rf -- "$rootdir"; } || :; exit 1;' SIGINT mount --bind /proc "$rootdir/proc" mount --bind /sys "$rootdir/sys" mount -t devtmpfs devtmpfs "$rootdir/dev" mkdir -p "$rootdir/$TESTDIR" cp --reflink=auto -a \ "$TESTDIR"/dracut-[0-9]*."$(uname -m)".rpm \ "$TESTDIR"/dracut-network-[0-9]*."$(uname -m)".rpm \ "$rootdir/$TESTDIR/" . /etc/os-release dnf_or_yum=yum dnf_or_yum_cmd=yum command -v dnf > /dev/null && { dnf_or_yum="dnf" dnf_or_yum_cmd="dnf --allowerasing" } for ((i = 0; i < 5; i++)); do if $dnf_or_yum_cmd -v --nogpgcheck --installroot "$rootdir"/ --releasever "$VERSION_ID" --disablerepo='*' \ --enablerepo=fedora --enablerepo=updates --setopt=install_weak_deps=False \ install -y \ $dnf_or_yum \ passwd \ rootfiles \ systemd \ systemd-udev \ kernel \ kernel-core \ redhat-release \ device-mapper-multipath \ lvm2 \ mdadm \ bash \ iscsi-initiator-utils \ "$TESTDIR"/dracut-[0-9]*."$(uname -m)".rpm; then break fi done ((i < 5)) cat > "$rootdir"/test.sh << EOF #!/bin/bash set -x export LC_MESSAGES=C rpm -Va 2>&1 | \\ grep -F \\ '85-display-manager.preset| /run| /var| /usr/lib/variant| /etc/machine-id| /etc/systemd/system/dbus-org.freedesktop.network1.service| /etc/systemd/system/dbus-org.freedesktop.resolve1.service| /etc/udev/hwdb.bin| /usr/share/info/dir.old' \\ &> /test.output find / -xdev -type f -not -path '/var/*' \\ -not -path '/usr/lib/modules/*/modules.*' \\ -not -path '/etc/*-' \\ -not -path '/etc/.pwd.lock' \\ -not -path '/run/mount/utab' \\ -not -path '/test.sh' \\ -not -path '/test.output' \\ -not -path '/etc/nsswitch.conf.bak' \\ -not -path '/etc/iscsi/initiatorname.iscsi' \\ -not -path '/boot/*0-rescue*' \\ -not -path '/usr/share/mime/*' \\ -not -path '/etc/crypto-policies/*' \\ -not -path '/dev/null' \\ -not -path "/boot/loader/entries/\$(cat /etc/machine-id)-*" \\ -not -path "/boot/\$(cat /etc/machine-id)/*" \\ -not -path '/etc/openldap/certs/*' \\ -not -path '/etc/dnf/*' \\ -print0 | xargs -0 rpm -qf | \\ grep -F 'not owned' &>> /test.output || : exit 0 EOF chmod 0755 "$rootdir/test.sh" chroot "$rootdir" /test.sh || : if [[ -s "$rootdir"/test.output ]]; then failed=1 echo TEST Failed >&2 cat "$rootdir"/test.output >&2 fi umount "$rootdir/proc" umount "$rootdir/sys" umount "$rootdir/dev" [[ $failed ]] && return 1 return 0 } test_setup() { make -C "$basedir" DESTDIR="$TESTDIR/" rpm return 0 } test_cleanup() { rm -fr -- "$TESTDIR"/*.rpm return 0 } # shellcheck disable=SC1090 . "$testdir"/test-functions