Support CentOS Stream 9
This patch includes changes required to run devstack on CentOS Stream 9
which has been already published in official repos by CentOS team [1]:
- Add RDO deps repository for CS9.
- remove xinetd package from installation for swift. Note that
rsync-daemon is installed which should work fine.
- Replace genisoimage by xorriso in CS9.
- Use /etc/os-release to identify the distro in CS9 as it doesn't
provide lsb_release command.
- Use pip from rpm package instead of from get-pip.py as done in Fedora.
- Add non-voting job devstack-platform-centos-9-stream to the check
pipeline.
Change-Id: Ic67cddabd5069211dc0611994b8b8360bcd61bef
diff --git a/.zuul.yaml b/.zuul.yaml
index 7a85266..3945faf 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -67,6 +67,16 @@
- controller
- nodeset:
+ name: devstack-single-node-centos-9-stream
+ nodes:
+ - name: controller
+ label: centos-9-stream
+ groups:
+ - name: tempest
+ nodes:
+ - controller
+
+- nodeset:
name: devstack-single-node-opensuse-15
nodes:
- name: controller
@@ -623,6 +633,16 @@
configure_swap_size: 4096
- job:
+ name: devstack-platform-centos-9-stream
+ parent: tempest-full-py3
+ description: CentOS 9 Stream platform test
+ nodeset: devstack-single-node-centos-9-stream
+ voting: false
+ timeout: 9000
+ vars:
+ configure_swap_size: 4096
+
+- job:
name: devstack-platform-debian-bullseye
parent: tempest-full-py3
description: Debian Bullseye platform test
@@ -766,6 +786,7 @@
- devstack-enforce-scope
- devstack-platform-fedora-latest
- devstack-platform-centos-8-stream
+ - devstack-platform-centos-9-stream
- devstack-platform-debian-bullseye
- devstack-multinode
- devstack-unit-tests
diff --git a/files/rpms/ceph b/files/rpms/ceph
index 64befc5..33a55f8 100644
--- a/files/rpms/ceph
+++ b/files/rpms/ceph
@@ -1,3 +1,3 @@
ceph # NOPRIME
-redhat-lsb-core
+redhat-lsb-core # not:rhel9
xfsprogs
diff --git a/files/rpms/n-cpu b/files/rpms/n-cpu
index 68e5472..7ce5a72 100644
--- a/files/rpms/n-cpu
+++ b/files/rpms/n-cpu
@@ -1,9 +1,10 @@
cryptsetup
dosfstools
-genisoimage
+genisoimage # not:rhel9
iscsi-initiator-utils
libosinfo
lvm2
sg3_utils
# Stuff for diablo volumes
sysfsutils
+xorriso # not:rhel8
diff --git a/files/rpms/nova b/files/rpms/nova
index 8ea8ccc..9522e57 100644
--- a/files/rpms/nova
+++ b/files/rpms/nova
@@ -3,7 +3,7 @@
dnsmasq # for q-dhcp
dnsmasq-utils # for dhcp_release
ebtables
-genisoimage # required for config_drive
+genisoimage # not:rhel9 required for config_drive
iptables
iputils
kernel-modules
@@ -13,3 +13,4 @@
rabbitmq-server # NOPRIME
sqlite
sudo
+xorriso # not:rhel8
diff --git a/files/rpms/swift b/files/rpms/swift
index 18c957c..b6009a3 100644
--- a/files/rpms/swift
+++ b/files/rpms/swift
@@ -4,4 +4,4 @@
rsync-daemon
sqlite
xfsprogs
-xinetd # not:f34
+xinetd # not:f34,rhel9
diff --git a/functions-common b/functions-common
index b1ca6ad..bd029dd 100644
--- a/functions-common
+++ b/functions-common
@@ -368,12 +368,19 @@
# - os_VENDOR
# - os_PACKAGE
function GetOSVersion {
- # We only support distros that provide a sane lsb_release
- _ensure_lsb_release
+ # CentOS Stream 9 does not provide lsb_release
+ source /etc/os-release
+ if [[ "${ID}${VERSION}" == "centos9" ]]; then
+ os_RELEASE=${VERSION_ID}
+ os_CODENAME="n/a"
+ os_VENDOR=$(echo $NAME | tr -d '[:space:]')
+ else
+ _ensure_lsb_release
- os_RELEASE=$(lsb_release -r -s)
- os_CODENAME=$(lsb_release -c -s)
- os_VENDOR=$(lsb_release -i -s)
+ os_RELEASE=$(lsb_release -r -s)
+ os_CODENAME=$(lsb_release -c -s)
+ os_VENDOR=$(lsb_release -i -s)
+ fi
if [[ $os_VENDOR =~ (Debian|Ubuntu|LinuxMint) ]]; then
os_PACKAGE="deb"
diff --git a/lib/nova b/lib/nova
index 9aae2c4..31b7642 100644
--- a/lib/nova
+++ b/lib/nova
@@ -479,7 +479,8 @@
fi
# nova defaults to genisoimage but only mkisofs is available for 15.0+
- if is_suse; then
+ # rhel provides mkisofs symlink to genisoimage or xorriso appropiately
+ if is_suse || is_fedora; then
iniset $NOVA_CONF DEFAULT mkisofs_cmd /usr/bin/mkisofs
fi
diff --git a/stack.sh b/stack.sh
index b5ad81b..fa4e7e9 100755
--- a/stack.sh
+++ b/stack.sh
@@ -227,7 +227,7 @@
# Warn users who aren't on an explicitly supported distro, but allow them to
# override check and attempt installation with ``FORCE=yes ./stack``
-SUPPORTED_DISTROS="bullseye|focal|f34|opensuse-15.2|opensuse-tumbleweed|rhel8"
+SUPPORTED_DISTROS="bullseye|focal|f34|opensuse-15.2|opensuse-tumbleweed|rhel8|rhel9"
if [[ ! ${DISTRO} =~ $SUPPORTED_DISTROS ]]; then
echo "WARNING: this script has not been tested on $DISTRO"
@@ -300,13 +300,17 @@
}
function _install_rdo {
- if [[ "$TARGET_BRANCH" == "master" ]]; then
- # rdo-release.el8.rpm points to latest RDO release, use that for master
- sudo dnf -y install https://rdoproject.org/repos/rdo-release.el8.rpm
- else
- # For stable branches use corresponding release rpm
- rdo_release=$(echo $TARGET_BRANCH | sed "s|stable/||g")
- sudo dnf -y install https://rdoproject.org/repos/openstack-${rdo_release}/rdo-release-${rdo_release}.el8.rpm
+ if [[ $DISTRO == "rhel8" ]]; then
+ if [[ "$TARGET_BRANCH" == "master" ]]; then
+ # rdo-release.el8.rpm points to latest RDO release, use that for master
+ sudo dnf -y install https://rdoproject.org/repos/rdo-release.el8.rpm
+ else
+ # For stable branches use corresponding release rpm
+ rdo_release=$(echo $TARGET_BRANCH | sed "s|stable/||g")
+ sudo dnf -y install https://rdoproject.org/repos/openstack-${rdo_release}/rdo-release-${rdo_release}.el8.rpm
+ fi
+ elif [[ $DISTRO == "rhel9" ]]; then
+ sudo curl -L -o /etc/yum.repos.d/delorean-deps.repo http://trunk.rdoproject.org/centos9-master/delorean-deps.repo
fi
sudo dnf -y update
}
@@ -385,6 +389,10 @@
# RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1154272
# Patch: https://github.com/rpm-software-management/dnf/pull/1448
echo "[]" | sudo tee /var/cache/dnf/expired_repos.json
+elif [[ $DISTRO == "rhel9" ]]; then
+ sudo dnf config-manager --set-enabled crb
+ # rabbitmq and other packages are provided by RDO repositories.
+ _install_rdo
fi
# Ensure python is installed
diff --git a/tools/install_pip.sh b/tools/install_pip.sh
index c72dc89..259375a 100755
--- a/tools/install_pip.sh
+++ b/tools/install_pip.sh
@@ -118,7 +118,7 @@
configure_pypi_alternative_url
fi
-if is_fedora && [[ ${DISTRO} == f* ]]; then
+if is_fedora && [[ ${DISTRO} == f* || ${DISTRO} == rhel9 ]]; then
# get-pip.py will not install over the python3-pip package in
# Fedora 34 any more.
# https://bugzilla.redhat.com/show_bug.cgi?id=1988935