From 45b0a38b47e07186dfe35095c7d8b1e4c2524d80 Mon Sep 17 00:00:00 2001 From: Frantisek Sumsal Date: Mon, 14 Jan 2019 14:49:32 +0100 Subject: [PATCH] travis: RHEL8 support (cherry picked from commit e5c78840b2b124400f56cb5fbaf2357cd8901218) --- .travis.yml | 8 +- ...ravis-centos.sh => travis-centos-rhel7.sh} | 0 ci/travis-centos-rhel8.sh | 130 ++++++++++++++++++ 3 files changed, 135 insertions(+), 3 deletions(-) rename ci/{travis-centos.sh => travis-centos-rhel7.sh} (100%) create mode 100755 ci/travis-centos-rhel8.sh diff --git a/.travis.yml b/.travis.yml index fc6388732..1c4e6f972 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,11 +19,13 @@ jobs: - sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce - docker --version install: - - $CI_ROOT/travis-centos.sh SETUP + - RHEL_VERSION="rhel7" + - [ -f meson.build ] && RHEL_VERSION="rhel8" + - $CI_ROOT/travis-centos-${RHEL_VERSION}.sh SETUP script: - set -e # Build systemd - - $CI_ROOT/travis-centos.sh RUN + - $CI_ROOT/travis-centos-${RHEL_VERSION}.sh RUN - set +e after_script: - - $CI_ROOT/travis-centos.sh CLEANUP + - $CI_ROOT/travis-centos-${RHEL_VERSION}.sh CLEANUP diff --git a/ci/travis-centos.sh b/ci/travis-centos-rhel7.sh similarity index 100% rename from ci/travis-centos.sh rename to ci/travis-centos-rhel7.sh diff --git a/ci/travis-centos-rhel8.sh b/ci/travis-centos-rhel8.sh new file mode 100755 index 000000000..968603f94 --- /dev/null +++ b/ci/travis-centos-rhel8.sh @@ -0,0 +1,130 @@ +#!/bin/bash + +# Run this script from the root of the systemd's git repository +# or set REPO_ROOT to a correct path. +# +# Example execution on Fedora: +# dnf install docker +# systemctl start docker +# export CONT_NAME="my-fancy-container" +# ci/travis-centos.sh SETUP RUN CLEANUP + +PHASES=(${@:-SETUP RUN CLEANUP}) +CENTOS_RELEASE="${CENTOS_RELEASE:-latest}" +CONT_NAME="${CONT_NAME:-centos-$CENTOS_RELEASE-$RANDOM}" +DOCKER_EXEC="${DOCKER_EXEC:-docker exec -it $CONT_NAME}" +DOCKER_RUN="${DOCKER_RUN:-docker run}" +REPO_ROOT="${REPO_ROOT:-$PWD}" +ADDITIONAL_DEPS=(systemd-ci-environment libidn2-devel python-lxml python36 ninja-build libasan net-tools strace nc busybox e2fsprogs quota dnsmasq) +# Repo with additional depencencies to compile newer systemd on CentOS 7 +COPR_REPO="https://copr.fedorainfracloud.org/coprs/mrc0mmand/systemd-centos-ci/repo/epel-7/mrc0mmand-systemd-centos-ci-epel-7.repo" +COPR_REPO_PATH="/etc/yum.repos.d/${COPR_REPO##*/}" + +function info() { + echo -e "\033[33;1m$1\033[0m" +} + +set -e + +source "$(dirname $0)/travis_wait.bash" + +for phase in "${PHASES[@]}"; do + case $phase in + SETUP) + info "Setup phase" + info "Using Travis $CENTOS_RELEASE" + # Pull a Docker image and start a new container + docker pull centos:$CENTOS_RELEASE + info "Starting container $CONT_NAME" + $DOCKER_RUN -v $REPO_ROOT:/build:rw \ + -w /build --privileged=true --name $CONT_NAME \ + -dit --net=host centos:$CENTOS_RELEASE /sbin/init + # Beautiful workaround for Fedora's version of Docker + sleep 1 + $DOCKER_EXEC yum makecache + $DOCKER_EXEC curl "$COPR_REPO" -o "$COPR_REPO_PATH" + $DOCKER_EXEC yum -q -y install epel-release yum-utils + $DOCKER_EXEC yum-config-manager -q --enable epel + $DOCKER_EXEC yum -y --exclude selinux-policy\* upgrade + # Install necessary build/test requirements + $DOCKER_EXEC yum -y install "${ADDITIONAL_DEPS[@]}" + $DOCKER_EXEC python3.6 -m ensurepip + $DOCKER_EXEC python3.6 -m pip install meson + # Create necessary symlinks + $DOCKER_EXEC ln --force -s /usr/bin/python3.6 /usr/bin/python3 + $DOCKER_EXEC ln --force -s /usr/bin/ninja-build /usr/bin/ninja + ;; + RUN) + info "Run phase" + # Build systemd + CONFIGURE_OPTS=( + # RHEL8 options + -Dsysvinit-path=/etc/rc.d/init.d + -Drc-local=/etc/rc.d/rc.local + -Ddns-servers='' + -Ddev-kvm-mode=0666 + -Dkmod=true + -Dxkbcommon=true + -Dblkid=true + -Dseccomp=true + -Dima=true + -Dselinux=true + -Dapparmor=false + -Dpolkit=true + -Dxz=true + -Dzlib=true + -Dbzip2=true + -Dlz4=true + -Dpam=true + -Dacl=true + -Dsmack=true + -Dgcrypt=true + -Daudit=true + -Delfutils=true + -Dlibcryptsetup=true + -Delfutils=true + -Dqrencode=false + -Dgnutls=true + -Dmicrohttpd=true + -Dlibidn2=true + -Dlibiptc=true + -Dlibcurl=true + -Defi=true + -Dtpm=true + -Dhwdb=true + -Dsysusers=true + -Ddefault-kill-user-processes=false + -Dtests=unsafe + -Dinstall-tests=true + -Dtty-gid=5 + -Dusers-gid=100 + -Dnobody-user=nobody + -Dnobody-group=nobody + -Dsplit-usr=false + -Dsplit-bin=true + -Db_lto=false + -Dnetworkd=false + -Dtimesyncd=false + -Ddefault-hierarchy=legacy + # Custom options + -Dslow-tests=true + -Dtests=unsafe + -Dinstall-tests=true + ) + docker exec -it -e CFLAGS='-g -O0 -ftrapv' $CONT_NAME meson build "${CONFIGURE_OPTS[@]}" + $DOCKER_EXEC ninja -v -C build + # "Mask" the udev-test.pl, as it requires newer version of systemd-detect-virt + # and it's pointless to run it on a VM in a Docker container... + echo -ne "#!/usr/bin/perl\nexit(0);\n" > "test/udev-test.pl" + $DOCKER_EXEC ninja -C build test + ;; + CLEANUP) + info "Cleanup phase" + docker stop $CONT_NAME + docker rm -f $CONT_NAME + ;; + *) + echo >&2 "Unknown phase '$phase'" + exit 1 + esac +done