#!/bin/bash set -ex IMAGE="$1" # avoid failures when running image builds in a non-English locale (ssh transfers the host environment) unset LANGUAGE unset LANG export LC_ALL=C.utf8 # keep this in sync with avocado/selenium image mapping in bots/tests-invoke if [ "$IMAGE" = fedora-30 ]; then AVOCADO=1 fi # HACK - virt-resize might not be able to resize our xfs rootfs, # depending on how it was compiled and which plugins are installed, # and will just silently not do it. So we do it here. # xfs_growfs / df -h / echo foobar | passwd --stdin root HAVE_KUBERNETES= if [ $(uname -m) = x86_64 ]; then HAVE_KUBERNETES=1 fi # We install all dependencies of the cockpit packages since we want # them to not spontaneously change from one test run to the next when # the distribution repository is updated. # COCKPIT_DEPS="\ atomic \ device-mapper-multipath \ docker \ etcd \ glib-networking \ json-glib \ kexec-tools \ libssh \ libvirt-daemon-kvm \ libvirt-client \ libvirt-dbus \ NetworkManager-team \ openssl \ PackageKit \ pcp \ pcp-libs \ qemu \ realmd \ selinux-policy-targeted \ setroubleshoot-server \ sos \ sscg \ system-logos \ subscription-manager \ tuned \ virt-install \ " COCKPIT_DEPS="$COCKPIT_DEPS udisks2 udisks2-lvm2 udisks2-iscsi" [ -z "$HAVE_KUBERNETES" ] || COCKPIT_DEPS="$COCKPIT_DEPS kubernetes" # We also install the packages necessary to join a FreeIPA domain so # that we don't have to go to the network during a test run. # IPA_CLIENT_PACKAGES="\ freeipa-client \ oddjob \ oddjob-mkhomedir \ sssd \ sssd-dbus \ libsss_sudo \ " TEST_PACKAGES="\ systemtap-runtime-virtguest \ valgrind \ gdb \ targetcli \ dnf-automatic \ cryptsetup \ clevis-luks \ socat \ tang \ podman \ libvirt-daemon-config-network \ " # HACK - For correct work of ABRT in Fedora 26 Alpha release a following # packages are necessary. In Fedora 26 Beta and later these packages should be # installed by default. See https://bugzilla.redhat.com/show_bug.cgi?id=1436941 # ABRT_PACKAGES="\ abrt-desktop \ libreport-plugin-systemd-journal \ " rm -rf /etc/sysconfig/iptables maybe() { if type "$1" >/dev/null 2>&1; then "$@"; fi; } # For the D-Bus test server maybe firewall-cmd --permanent --add-port 8765/tcp echo 'NETWORKING=yes' > /etc/sysconfig/network useradd -c Administrator -G wheel admin echo foobar | passwd --stdin admin if [ "${IMAGE%-i386}" != "$IMAGE" ]; then TEST_PACKAGES="${TEST_PACKAGES/podman /}" fi if [ "${IMAGE%-testing}" != "$IMAGE" ]; then dnf config-manager --set-enabled updates-testing fi dnf $DNF_OPTS -y upgrade dnf $DNF_OPTS -y install $TEST_PACKAGES $COCKPIT_DEPS $IPA_CLIENT_PACKAGES $ABRT_PACKAGES if [ -n "$AVOCADO" ]; then # enable python3 avocado support repository dnf module install -y avocado:69lts dnf $DNF_OPTS -y install \ fontconfig \ npm \ chromium-headless \ python3-libvirt \ python3-avocado \ python3-avocado-plugins-output-html \ python3-selenium npm -g install chrome-remote-interface echo 'NODE_PATH=/usr/lib/node_modules' >> /etc/environment fi dnf $DNF_OPTS -y install mock dnf-plugins-core rpm-build useradd -c Builder -G mock builder if [ "${IMAGE%-testing}" != "$IMAGE" ]; then # Enable updates-testing in mock echo "config_opts['yum.conf'] += '[updates-testing]\nenabled=1'" >>/etc/mock/default.cfg fi # HACK - mock --installdeps is broken, it seems that it forgets to # copy the source rpm to a location that dnf can actually access. A # workaround is to pass "--no-bootstrap-chroot". # # When you remove this hack, also remove it in fedora-*.install. # # https://bugzilla.redhat.com/show_bug.cgi?id=1447627 opsys=$(cut -d '-' -f 1 <<< "$IMAGE") version=$(cut -d '-' -f 2 <<< "$IMAGE") # If version is not number (testing/i386) then use Fedora 30 if ! [ "$version" -eq "$version" ] 2>/dev/null; then version=30; fi su builder -c "/usr/bin/mock --no-bootstrap-chroot --verbose -i $(/var/lib/testvm/build-deps.sh "$opsys $version")" su builder -c "/usr/bin/mock --install --verbose rpmlint" # HACK: docker falls over regularly, print its log if it does systemctl start docker || journalctl -u docker # our cockpit/base container is only really a thing on x86_64, just skip it on other arches if [ $(uname -m) = x86_64 ]; then docker build -t cockpit/base /var/tmp/cockpit-base fi # Configure kubernetes [ -z "$HAVE_KUBERNETES" ] || /var/lib/testvm/kubernetes.setup # docker images that we need for integration testing /var/lib/testvm/docker-images.setup # reduce image size dnf clean all /var/lib/testvm/zero-disk.setup ln -sf ../selinux/config /etc/sysconfig/selinux printf "SELINUX=enforcing\nSELINUXTYPE=targeted\n" > /etc/selinux/config # Prevent SSH from hanging for a long time when no external network access echo 'UseDNS no' >> /etc/ssh/sshd_config # Audit events to the journal rm -f '/etc/systemd/system/multi-user.target.wants/auditd.service' rm -rf /var/log/audit/