Add CentOS 8 support

* Add "centos" element, a CentOS version-independent element. This is in
  line with the same work done for RHEL in Stein cycle.
* Deprecate the centos7 element. CentOS 7 support itself it not
  deprecated though. The new "centos" element provides the same support
  level as the "centos7" element.
* Add functional testing

The default CentOS version is 8. You can adjust it using the DIB_RELEASE
environment variable.

Change-Id: I373ba2296c4613765676e59aabd9c651345298d1
This commit is contained in:
Carlos Goncalves 2019-09-24 12:46:12 +02:00
parent 9d08848f25
commit 8226384cf0
20 changed files with 179 additions and 62 deletions

View File

@ -42,6 +42,7 @@
vars:
dib_functests:
- centos7/build-succeeds
- centos/8-build-succeeds
- opensuse/build-succeeds
- opensuse/opensuse15-build-succeeds
- fedora/build-succeeds

View File

@ -0,0 +1,26 @@
======
centos
======
Use CentOS cloud images as the baseline for built disk images.
For further details see the redhat-common README.
Environment Variables
---------------------
DIB_DISTRIBUTION_MIRROR:
:Required: No
:Default: None
:Description: To use a CentOS Yum mirror, set this variable to the mirror URL
before running bin/disk-image-create. This URL should point to
the directory containing the ``7/8`` directories.
:Example: ``DIB_DISTRIBUTION_MIRROR=http://amirror.com/centos``
DIB_CLOUD_IMAGES:
:Required: No
:Description: Set the desired URL to fetch the images from. ppc64le:
Currently the CentOS community is working on providing the
ppc64le images. Until then you'll need to set this to a local
image file.
:Example: ``DIB_CLOUD_IMAGES=/path/to/my/centos/8/CentOS-8-GenericCloud-x86_64.qcow2``

View File

@ -0,0 +1,5 @@
cache-url
redhat-common
rpm-distro
source-repositories
yum

View File

@ -0,0 +1,2 @@
export DISTRO_NAME=centos
export DIB_RELEASE=${DIB_RELEASE:-8}

View File

@ -0,0 +1,7 @@
# since CentOS 8, dnf is the yum replacement.
if [[ ${DIB_RELEASE} == '8' ]]; then
export YUM=dnf
elif [[ ${DIB_RELEASE} == '7' ]]; then
export YUM=yum
fi

View File

@ -0,0 +1,23 @@
#!/bin/bash
if [ ${DIB_DEBUG_TRACE:-0} -gt 0 ]; then
set -x
fi
set -eu
set -o pipefail
DIB_DISTRIBUTION_MIRROR=${DIB_DISTRIBUTION_MIRROR:-}
[ -n "$DIB_DISTRIBUTION_MIRROR" ] || exit 0
# Only set the mirror for the Base, Extras and Updates repositories
# The others aren't enabled and do not exist on all mirrors
if [[ ${DIB_RELEASE} == '7' ]]; then
sed -e "s|^#baseurl=http[s]*://mirror.centos.org/centos|baseurl=$DIB_DISTRIBUTION_MIRROR|;/^mirrorlist=/d" -i /etc/yum.repos.d/CentOS-Base.repo
elif [[ ${DIB_RELEASE} == '8' ]]; then
sed -e "s|^#baseurl=http[s]*://mirror.centos.org/|baseurl=$DIB_DISTRIBUTION_MIRROR|;/^mirrorlist=/d" -i /etc/yum.repos.d/CentOS-Base.repo
sed -e "s|^#baseurl=http[s]*://mirror.centos.org/|baseurl=$DIB_DISTRIBUTION_MIRROR|;/^mirrorlist=/d" -i /etc/yum.repos.d/CentOS-AppStream.repo
sed -e "s|^#baseurl=http[s]*://mirror.centos.org/|baseurl=$DIB_DISTRIBUTION_MIRROR|;/^mirrorlist=/d" -i /etc/yum.repos.d/CentOS-centosplus.repo
sed -e "s|^#baseurl=http[s]*://mirror.centos.org/|baseurl=$DIB_DISTRIBUTION_MIRROR|;/^mirrorlist=/d" -i /etc/yum.repos.d/CentOS-Extras.repo
sed -e "s|^#baseurl=http[s]*://mirror.centos.org/|baseurl=$DIB_DISTRIBUTION_MIRROR|;/^mirrorlist=/d" -i /etc/yum.repos.d/CentOS-PowerTools.repo
fi

View File

@ -0,0 +1,23 @@
#!/bin/bash
if [ ${DIB_DEBUG_TRACE:-0} -gt 0 ]; then
set -x
fi
set -eu
set -o pipefail
# Set a machine-id. The .qcow2 image doesn't have one, and sometimes
# one will get made (if systemd is upgraded as part of the build
# process) and sometimes not. The problem is that certain kernel
# install scripts bail silently without it; kernel packages end up
# being installed but the initramfs etc isn't copied into place.
#
# Note this is cleared out in the sysprep role.
#
# See also:
# 768c5e188c1b4bff01da14a49b96b51301db4c03 : similar thing for fedora
# https://bugzilla.redhat.com/show_bug.cgi?id=1737355 : upstream bug
# https://bugzilla.redhat.com/show_bug.cgi?id=1486124 : unresolved
# bug about kernel install requiring machine-id
systemd-machine-id-setup

View File

@ -0,0 +1,62 @@
#!/bin/bash
if [ ${DIB_DEBUG_TRACE:-0} -gt 0 ]; then
set -x
fi
set -eu
set -o pipefail
[ -n "$ARCH" ]
[ -n "$TARGET_ROOT" ]
if [[ "${DIB_RELEASE}" = 7 ]]; then
if [[ "amd64 x86_64" =~ "$ARCH" ]]; then
ARCH="x86_64"
DIB_CLOUD_IMAGES=${DIB_CLOUD_IMAGES:-http://cloud.centos.org/centos/${DIB_RELEASE}/images}
elif [[ "arm64 aarch64" =~ "$ARCH" ]]; then
ARCH="aarch64"
DIB_CLOUD_IMAGES=${DIB_CLOUD_IMAGES:-http://cloud.centos.org/altarch/${DIB_RELEASE}/images/aarch64}
elif [[ "ppc64le" =~ "$ARCH" ]]; then
DIB_CLOUD_IMAGES=${DIB_CLOUD_IMAGES:-http://cloud.centos.org/altarch/${DIB_RELEASE}/images/ppc64le}
else
echo 'centos root element only support the x86_64, aarch64 and ppc64le values for $ARCH'
exit 1
fi
else
if [[ "amd64 x86_64 arm64 aarch64 ppc64le" =~ "$ARCH" ]]; then
if [[ "amd64" =~ "$ARCH" ]]; then
ARCH="x86_64"
elif [[ "arm64" =~ "$ARCH" ]]; then
ARCH="aarch64"
fi
DIB_CLOUD_IMAGES=${DIB_CLOUD_IMAGES:-http://cloud.centos.org/centos/${DIB_RELEASE}/${ARCH}/images}
else
echo 'centos root element only support the x86_64, aarch64 and ppc64le values for $ARCH'
exit 1
fi
fi
DIB_LOCAL_IMAGE=${DIB_LOCAL_IMAGE:-}
if [ -n "$DIB_LOCAL_IMAGE" ]; then
IMAGE_LOCATION=$DIB_LOCAL_IMAGE
# No need to copy a local image into the cache directory, so just specify
# the cached path as the original path.
CACHED_IMAGE=$IMAGE_LOCATION
BASE_IMAGE_FILE=$(basename $DIB_LOCAL_IMAGE)
BASE_IMAGE_TAR=$BASE_IMAGE_FILE.tgz
else
DIB_FLAVOR=${DIB_FLAVOR:-GenericCloud}
if [[ "${DIB_RELEASE}" = 7 ]]; then
BASE_IMAGE_FILE=${BASE_IMAGE_FILE:-CentOS-${DIB_RELEASE}-${ARCH}-${DIB_FLAVOR}.qcow2.xz}
else
LATEST_IMAGE_FILE=$(curl -s https://cloud.centos.org/centos/${DIB_RELEASE}/${ARCH}/images/ | grep -o "CentOS-${DIB_RELEASE}-${DIB_FLAVOR}-.[^>]*.qcow2" | head -1)
BASE_IMAGE_FILE=${BASE_IMAGE_FILE:-$LATEST_IMAGE_FILE}
fi
BASE_IMAGE_TAR=$BASE_IMAGE_FILE.tgz
IMAGE_LOCATION=$DIB_CLOUD_IMAGES/$BASE_IMAGE_FILE
CACHED_IMAGE=$DIB_IMAGE_CACHE/$BASE_IMAGE_FILE
fi
$TMP_HOOKS_PATH/bin/extract-image $BASE_IMAGE_FILE $BASE_IMAGE_TAR $IMAGE_LOCATION $CACHED_IMAGE

View File

@ -0,0 +1 @@
Centos 8 test

View File

@ -0,0 +1,3 @@
base
epel
openstack-ci-mirrors

View File

@ -1,6 +1,13 @@
=======
centos7
=======
.. warning::
This element is deprecated and is left only for backward compatibility.
Use the `centos` element instead. Note that you should set DIB_RELEASE to 7
to indicate which release you are using. Please read the notes.
Use CentOS 7 cloud images as the baseline for built disk images.
For further details see the redhat-common README.

View File

@ -1,5 +1 @@
cache-url
redhat-common
rpm-distro
source-repositories
yum
centos

View File

@ -0,0 +1 @@
echo "The centos7 element is deprecated and will be removed in future releases. Use the centos element instead."

View File

@ -0,0 +1,7 @@
# For backward compat (centos vs centos7)
export DIB_FLAVOR=${DIB_RELEASE:-GenericCloud}
export DIB_RELEASE=7
# Useful for elements that work with fedora (dnf) & centos
export YUM=${YUM:-yum}

View File

@ -1,15 +0,0 @@
#!/bin/bash
if [ ${DIB_DEBUG_TRACE:-0} -gt 0 ]; then
set -x
fi
set -eu
set -o pipefail
DIB_DISTRIBUTION_MIRROR=${DIB_DISTRIBUTION_MIRROR:-}
[ -n "$DIB_DISTRIBUTION_MIRROR" ] || exit 0
# Only set the mirror for the Base, Extras and Updates repositories
# The others arn't enabled and do not exist on all mirrors
sed -e "s|^#baseurl=http[s]*://mirror.centos.org/centos|baseurl=$DIB_DISTRIBUTION_MIRROR|;/^mirrorlist=/d" -i /etc/yum.repos.d/CentOS-Base.repo

View File

@ -1,42 +0,0 @@
#!/bin/bash
if [ ${DIB_DEBUG_TRACE:-0} -gt 0 ]; then
set -x
fi
set -eu
set -o pipefail
[ -n "$ARCH" ]
[ -n "$TARGET_ROOT" ]
if [[ "amd64 x86_64" =~ "$ARCH" ]]; then
ARCH="x86_64"
DIB_CLOUD_IMAGES=${DIB_CLOUD_IMAGES:-http://cloud.centos.org/centos/7/images}
elif [[ "arm64 aarch64" =~ "$ARCH" ]]; then
ARCH="aarch64"
DIB_CLOUD_IMAGES=${DIB_CLOUD_IMAGES:-http://cloud.centos.org/altarch/7/images/aarch64}
elif [[ "ppc64le" =~ "$ARCH" ]]; then
DIB_CLOUD_IMAGES=${DIB_CLOUD_IMAGES:-http://cloud.centos.org/altarch/7/images/ppc64le}
else
echo 'centos7 root element only support the x86_64, aarch64 and ppc64le values for $ARCH'
exit 1
fi
DIB_LOCAL_IMAGE=${DIB_LOCAL_IMAGE:-}
if [ -n "$DIB_LOCAL_IMAGE" ]; then
IMAGE_LOCATION=$DIB_LOCAL_IMAGE
# No need to copy a local image into the cache directory, so just specify
# the cached path as the original path.
CACHED_IMAGE=$IMAGE_LOCATION
BASE_IMAGE_FILE=$(basename $DIB_LOCAL_IMAGE)
BASE_IMAGE_TAR=$BASE_IMAGE_FILE.tgz
else
DIB_CENTOS7_CLOUD_RELEASE=${DIB_CENTOS7_CLOUD_RELEASE:-GenericCloud}
BASE_IMAGE_FILE=${BASE_IMAGE_FILE:-CentOS-7-${ARCH}-$DIB_CENTOS7_CLOUD_RELEASE.qcow2.xz}
BASE_IMAGE_TAR=$BASE_IMAGE_FILE.tgz
IMAGE_LOCATION=$DIB_CLOUD_IMAGES/$BASE_IMAGE_FILE
CACHED_IMAGE=$DIB_IMAGE_CACHE/$BASE_IMAGE_FILE
fi
$TMP_HOOKS_PATH/bin/extract-image $BASE_IMAGE_FILE $BASE_IMAGE_TAR $IMAGE_LOCATION $CACHED_IMAGE

View File

@ -0,0 +1,8 @@
---
features:
- Added CentOS 8 support.
deprecations:
- |
The ``centos7`` element is deprecated and is left only for backward
compatibility. Use the ``centos`` element instead. Note that you should set
``DIB_RELEASE`` to ``7`` when using the ``centos`` element.