Spracherkennung für: .yml vermutete Sprache: MT940 {MT940[62] SQL[55] VDM[45]} [Methode: maximale Elemente, drei Dimensionen]
---
# Include Salsa
-CI as a base
include:
- https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml
- https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml
# Override Salsa
-CI with MariaDB specific variations
variables:
BUILT_PACKAGES:
"libmariadb-dev libmariadb-dev-compat libmariadb3
libmariadbd19t64 libmariadbd
-dev mariadb-common mariadb-client-core
mariadb
-client mariadb-server-core mariadb-server mariadb-backup
mariadb
-plugin-connect mariadb-plugin-s3 mariadb-plugin-rocksdb
mariadb
-plugin-oqgraph mariadb-plugin-mroonga mariadb-plugin-spider
mariadb
-plugin-gssapi-server mariadb-plugin-gssapi-client
mariadb
-plugin-cracklib-password-check mariadb-plugin-hashicorp-key-management
mariadb
-plugin-provider-bzip2 mariadb-plugin-provider-lz4
mariadb
-plugin-provider-lzma mariadb-plugin-provider-lzo
mariadb
-plugin-provider-snappy mariadb-test mariadb-test-data"
DEB_BUILD_OPTIONS:
"nocheck noautodbgsym"
RELEASE: sid
# Reprotest works, but takes very long time and often fails due to timeouts.
# Thus is best kept disabled and only occasionally manually enabled to
# test that reproducibility works, along with atomic reprotest to directly
# pinpoint what aspect of the build is broken if not reproducible.
SALSA_CI_DISABLE_REPROTEST:
1
SALSA_CI_ENABLE_ATOMIC_REPROTEST:
0
SALSA_CI_DISABLE_MISSING_BREAKS:
0
SALSA_CI_DISABLE_RC_BUGS:
1
SALSA_CI_DISABLE_BUILD_PACKAGE_ALL:
1
SALSA_CI_DISABLE_BUILD_PACKAGE_ANY:
1
GIT_SUBMODULE_STRATEGY: recursive
SALSA_CI_GBP_BUILDPACKAGE_ARGS:
"--git-submodules" # did not apply to extract-sources
# Extend Salsa
-CI build jobs to have longer timeout as the default GitLab
# timeout (
1h) is often not enough
.build
-package:
timeout:
3h
stages:
- provisioning
- build
- test
- upgrade MariaDB
- upgrade MariaDB and distro
- upgrade MariaDB variant
- test extras
- publish # Stage referenced by Salsa-CI template aptly stanza, so must exist even though not used
build autobake:
extends: .build
-package
stage: build
script: &autobake
-deb-steps
# Run Salsa
-CI .build-before-script equivalent
- mkdir -p ${WORKING_DIR} ${CCACHE_WORK_DIR}
- mv ${CCACHE_WORK_DIR} ${CCACHE_TMP_DIR}
# Run Salsa
-CI .build-script equivalent, with extra devscripts so autobake-deb.sh can run 'dch'
- export CCACHE_DIR=${CCACHE_TMP_DIR}
- apt-get update && eatmydata apt-get install --no-install-recommends -y ccache fakeroot build-essential devscripts lsb-release
- cd ${WORKING_DIR}/${SOURCE_DIR}
- eatmydata apt-get build-dep --no-install-recommends -y .
- update-ccache-symlinks; ccache -z # Zero out ccache counters
- while true; do sleep 600; echo "10 minutes passed" >&2; done & # Progress keeper since build is long and silent
- debian/autobake-deb.sh |& tail -n 10000 # Keep Gitlab-CI output under 4 MB
- cd ${WORKING_DIR}
- rm -rf ${WORKING_DIR}/${SOURCE_DIR}
- du -shc ${WORKING_DIR}/* # Show total file size of artifacts. Must stay are under 100 MB.
- ccache -s # Show ccache stats to validate it worked
- mv ${CCACHE_TMP_DIR} ${CCACHE_WORK_DIR}
# Buster only has libfmt
6.
1 but
7.
0 is required, so backport build for Buster
# is not possible unless somebody packages libfmt7
-dev for Buster.
autopkgtest:
extends: .test
-autopkgtest
artifacts:
reports:
junit: ${WORKING_DIR}/debci/artifacts/mysql
-test-run-junit.xml
piuparts:
stage: test extras
blhc:
stage: test extras
# In addition to Salsa
-CI, also run these fully MariaDB specific build jobs
# Define snippets used to construct jobs
.test
-prepare-container: &test-prepare-container |
cd ${WORKING_DIR} # Don
't repeat this step, it's just cd ./debian/output
# Enable automatic restarts from maint scripts
sed
-i "s/101/0/g" -i /usr/sbin/policy-rc.d
# Fake /sbin/runlevel to avoid warnings of
"invoke-rc.d: could not determine current runlevel"
echo
-e '#!/bin/sh\necho "N 5"' > /sbin/runlevel; chmod +x /sbin/runlevel
# Avoid the warnings of
"debconf: unable to initialize frontend: Dialog"
echo
'debconf debconf/frontend select Noninteractive' | debconf
-set-selections
# Emit non
-zero exit code also on warnings
echo
'APT::Update::Error-Mode "any";' > /etc/apt/apt.conf.d/non-zero-exit-on-warnings
# Prime the apt cache so later apt commands can run
apt
-get update -qq
# Readline was removed from Debian Sid (and Bullseye) in Feb
2021. To be able to install older
# versions of MariaDB that depend on it, fetch and install it from Buster.
.test
-install-readline-in-sid-for-backwards-compat: &test-install-readline-in-sid-for-backwards-compat |
curl
-sS -O https://snapshot.debian.org/archive/debian/20190316T031117Z/pool/main/r/readline5/libreadline5_5.2%2Bdfsg-3%2Bb13_amd64.deb
apt
-get -qq install --no-install-recommends --yes ./libreadline5_5.2%2Bdfsg-3%2Bb13_amd64.deb
# OpenSSL
1.
1 was Debian Sid in Dec
2022 (as Bookworm will ship with OpenSSL
3.
0
# only). To be able to install versions of MariaDB that depend on OpenSSL
1.
1,
# fetch and install it manually.
.test
-install-openssl1-in-sid-for-backwards-compat: &test-install-openssl1-in-sid-for-backwards-compat |
curl
-sS -O https://snapshot.debian.org/archive/debian/20220507T034236Z/pool/main/o/openssl/libssl1.1_1.1.1o-1_amd64.deb
apt
-get -qq install --no-install-recommends --yes ./libssl1.1_1.1.1o-1_amd64.deb
# Package libaio1 was replaced by libaio1t64 in Debian Sid in April
2024. To
# continue installing old MariaDB versions that depend on libaio1, use libaio1
# from snapshots.
.test
-install-libaio-in-sid-for-backwards-compat: &test-install-libaio-in-sid-for-backwards-compat |
curl
-sS -O https://snapshot.debian.org/archive/debian/20240331T210805Z/pool/main/liba/libaio/libaio1_0.3.113-5_amd64.deb
apt
-get -qq install --no-install-recommends --yes ./libaio1_0.3.113-5_amd64.deb
.test
-verify-initial: &test-verify-initial |
dpkg
-l | grep -iE 'maria|mysql|galera' || true # List installed
# MariaDB until
10.
5 only had
'mysql', and since only
'mariadb', so try both
service mysql status || service mariadb status
mysql
--skip-column-names -e "select @@version, @@version_comment" # Show version
mysql
--table -e "SHOW DATABASES;" # List databases before upgrade
mysql
--table -e "SELECT host,user,plugin,authentication_string FROM user;" mysql
mysql
--table -e "SELECT * FROM plugin;" mysql
mysql
--table -e "SHOW PLUGINS;" mysql
.test
-enable-sid-repos: &test-enable-sid-repos
# Replace any old repos with just Sid
- echo 'deb http://deb.debian.org/debian sid main' > /etc/apt/sources.list
# Upgrade minimal stack first
- apt-get update -qq
# Complete upgrade of minimal stack
- apt-get install -qq --yes apt || export APT_STATUS="failed"
# Due to
https://bugs.debian.org/993755 and #
975077 upgrades from Buster or
# older to Bookworm or newer fails on:
# /usr/bin/perl: error while loading shared libraries: libcrypt.so.
1: cannot
# open shared object file: No such file or directory
# dpkg: error processing package libc6:amd64 (
--configure):
# Therefore, run this extra workaround if first run of apt
-get install failed:
- |
if [
"$APT_STATUS" =
"failed" ]
then
cd $(mktemp
-d) # Use temp dir where apt can download and unpack files
apt
-get -y download libcrypt1
dpkg
-deb -x libcrypt1_*.deb .
cp
-ra usr/lib/* /lib/ || true # libcrypt 1:4.4.36-3+
cd
- # Back to /builds/$USER/mariadb-server/debian/output
find /lib/*/libcrypt.*
-ls # Show that new libcrypt is there
apt
-get -qq --yes --fix-broken install
apt
-get install -qq --yes apt
fi
.test
-enable-artifacts-repo: &test-enable-artifacts-repo |
apt
-get install -qq --yes apt-utils
apt
-ftparchive packages . > Packages
echo
"deb [trusted=yes] file:$(pwd) ./" > /etc/apt/sources.list.d/mariadb
-local.list
apt
-get update -qq
.test
-install-all: &test-install-all
- *test-enable-artifacts-repo
- apt-get install -qq --simulate ${BUILT_PACKAGES}
- apt-get install -qq --yes ${BUILT_PACKAGES}
# Verify installation of MariaDB built in this commit
- mariadb --version
- dpkg -l | grep -iE 'maria|mysql|galera'
- find /etc -name '*mariadb*' -ls -or -name '*mysql*' -ls | sort -k 11
# Purge old versions if they exist
- apt-get purge --yes mariadb*10.?
- find /etc -name '*mariadb*' -ls -or -name '*mysql*' -ls | sort -k 11
.test
-full-upgrade: &test-full-upgrade
- *test-enable-artifacts-repo
- apt-get full-upgrade -qq --simulate
- apt-get full-upgrade -qq --yes
# Verify installation of MariaDB built in this commit
- mariadb --version
- dpkg -l | grep -iE 'maria|mysql|galera'
- find /etc -name '*mariadb*' -ls -or -name '*mysql*' -ls | sort -k 11
# Purge old versions if they exist
- apt-get purge --yes mariadb*10.?
- find /etc -name '*mariadb*' -ls -or -name '*mysql*' -ls | sort -k 11
# Purging the old server might stop the running server, so restart it just in case
- service mariadb restart
.test
-install-all-libs: &test-install-all-libs
- *test-enable-artifacts-repo
- apt-get install -yq --no-install-recommends libmariadb-dev-compat libmariadbd-dev
# Installs
31 packages, including:
# libmariadb3 libmariadb
-dev libmariadb-dev-compat libmariadbd19t64 libmariadbd-dev
.test
-full-upgrade-libs: &test-full-upgrade-libs
- *test-enable-artifacts-repo
- apt-get full-upgrade -y
- dpkg -l | grep -iE 'maria|mysql|galera'
# library tests don
't have the mariadb client nor server, so don't check them
.test
-verify-final: &test-verify-final |
dpkg
-l | grep -e "mariadb-server.*10\.11"
mkdir
-p debug # Ensure dir exists before using it
find /var/lib/mysql
-ls > debug/var-lib-mysql.list || true # Ignore errors about "no such file or directory"
cp
-ra /etc/mysql debug/etc-mysql
mariadb
--skip-column-names -e "select @@version, @@version_comment" # Show version
mariadb
--table -e "SHOW DATABASES;" # List databases
mariadb
--table -e "SELECT host,user,plugin,authentication_string FROM user;" mysql
mariadb
--table -e "SELECT * FROM plugin;" mysql
mariadb
--table -e "SHOW PLUGINS;" mysql
# Test that InnoDB works and that command
'mysql' is also still usable
mysql
-e "CREATE DATABASE test; USE test; CREATE TABLE t(a INT PRIMARY KEY) ENGINE=INNODB; INSERT INTO t VALUEs (1); SELECT * FROM t; DROP TABLE t; DROP DATABASE test;"
.test
-verify-libs: &test-verify-libs
# Don
't use a collapsed command as Gitlab-CI would hide each command from the output
- ldconfig -p | grep -e mariadb -e mysql
- pkg-config --list-all
- pkg-config --cflags --libs mysqlclient
- pkg-config --cflags --libs libmariadb
- pkg-config --cflags --libs mariadb
- apt-get install -qq --yes --no-install-recommends g++
- |
# Build a test binary that depends on libmysqlclient
cat > b933063.cpp <<EOF
#include <iostream>
#include <mysql/mysql.h>
#include <stdexcept>
int main()
{
MYSQL h;
if (!mysql_init(&h)
|| mysql_options(&h, MYSQL_READ_DEFAULT_GROUP,
"")
// || mysql_options(&h, MYSQL_SET_CHARSET_NAME,
"utf8mb4")
|| !mysql_real_connect(&h,
"",
"", NULL,
"",
0, NULL,
0))
throw
std::runtime_error(mysql_error(&h));
std::string q =
"show variables like '%char%'";
if (mysql_real_query(&h, q.data(), q.size()))
throw
std::runtime_error(mysql_error(&h));
MYSQL_RES* result = mysql_store_result(&h);
if (!result && mysql_errno(&h))
throw
std::runtime_error(mysql_error(&h));
while (MYSQL_ROW row = mysql_fetch_row(result))
{
std::cout << row[
0] <<
": " << row[
1] <<
"\n";
}
return
0;
}
EOF
apt
-get install -qq --yes --allow-downgrades ./*.deb # Server must be installed for client to connect
echo
"Testing -l mysqlclient"
g++ b933063.cpp
-l mysqlclient && ./a.out | tee result
if grep
--quiet latin result; then echo "ERROR: Charset latin found!"; exit 1; fi
echo
"Testing -l mariadbclient"
g++ b933063.cpp
-l mariadbclient && ./a.out | tee result
if grep
--quiet latin result; then echo "ERROR: Charset latin found!"; exit 1; fi
- |
# Build a test binary to verify API version strings
cat > b1031863.cpp <<EOF
#include <cstring>
#include <iostream>
#include <mysql/mysql.h>
using namespace
std;
void test_if_starts_with(const string expected, const string tested, const string name) {
int r = strncmp(tested.c_str(), expected.c_str(), expected.size());
if (r ==
0) {
cout << name <<
": " << tested <<
"\n";
} else {
cout <<
"ERROR: " << name <<
" started with " << tested <<
" instead of the expected " << expected <<
"!\n";
exit(
1);
}
}
int main()
{
MYSQL h;
// Constants refer to server version
test_if_starts_with(
"1011", to_string(MARIADB_VERSION_ID),
"MARIADB_VERSION_ID");
test_if_starts_with(
"1011", to_string(MYSQL_VERSION_ID),
"MYSQL_VERSION_ID");
// Client ABI returns connector version
test_if_starts_with(
"303", to_string(mysql_get_client_version()),
"mysql_get_client_version()");
test_if_starts_with(
"3.3", mysql_get_client_info(),
"mysql_get_client_info()");
return
0;
}
EOF
g++ b1031863.cpp
-l mysqlclient && ./a.out
.salsa
-ci-template-for-mariadb:
stage: test
needs:
- job: build
image: debian:${RELEASE}
artifacts:
when: always
name:
"$CI_BUILD_NAME"
paths:
- ${WORKING_DIR}/debug
script:
- echo "This script section must be overridden in each test" && exit 1
variables:
GIT_STRATEGY: none
except:
variables:
- $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
.salsa
-ci-template-for-mariadb-upgrade:
stage: test
needs:
- job: build
image: debian:${RELEASE}
artifacts:
when: always
name:
"$CI_BUILD_NAME"
paths:
- ${WORKING_DIR}/debug
before_script:
- *test-prepare-container
- apt-get install -qq --yes --no-install-recommends ca-certificates curl
- |
[[
-d /etc/apt/keyrings ]] || mkdir /etc/apt/keyrings
curl
-sS https://mariadb.org/mariadb_release_signing_key.pgp -o /etc/apt/keyrings/mariadb-keyring.pgp
cat >/etc/apt/sources.list.d/mariadb.sources <<EOF
X
-Repolib-Name: MariaDB
Types: deb
URIs:
https://archive.mariadb.org/mariadb-${MARIADB_VERSION}/repo/debian
Suites: ${RELEASE}
Components: main
Signed
-By: /etc/apt/keyrings/mariadb-keyring.pgp
EOF
- apt-get update -qq
script:
- echo "This script section must be overridden in each test" && exit 1
variables:
GIT_STRATEGY: none
MARIADB_VERSION:
"10.0"
except:
variables:
- $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
fresh install:
extends: .salsa
-ci-template-for-mariadb
script:
- *test-prepare-container
- *test-install-all
- service mariadb status # There is no init.d/mysql in MariaDB 10.5+
- *test-verify-final
simple upgrade:
extends: .salsa
-ci-template-for-mariadb
stage: upgrade MariaDB
script:
- *test-prepare-container
- apt-get install -qq --yes 'default-mysql*' ${BUILT_PACKAGES}
- *test-full-upgrade
- service mariadb status # There is no init.d/mysql in MariaDB 10.5+
- *test-verify-final
mariadb and Bookworm upgrade:
extends: .salsa
-ci-template-for-mariadb
stage: upgrade MariaDB and distro
image: debian:bookworm
script:
- *test-prepare-container
# Install everything MariaDB currently in Debian Bookworm
- apt-get install -qq --yes 'default-mysql*' 'mariadb-*' 'libmariadb*'
# Verify installation of MariaDB from Bookworm
- dpkg -l | grep -e "mariadb-server.*10\.11"
- *test-verify-initial
- *test-enable-sid-repos
# Ensure mariadbd will not crash on next shutdown for any reason
- service mariadb restart
- *test-full-upgrade
- service mariadb status # There is no init.d/mysql in MariaDB 10.5+
- *test-verify-final
mariadb
-10.6 and Bookworm-20230208 upgrade:
extends: .salsa
-ci-template-for-mariadb
stage: upgrade MariaDB and distro
image: debian:bookworm
-20230208
script:
- *test-prepare-container
- |
echo
'deb [check-valid-until=no] http://snapshot.debian.org/archive/debian/20230208T130000Z bookworm main' > /etc/apt/sources.list.d/bookworm.list
rm /etc/apt/sources.list.d/debian.sources
apt
-get update -qq
# In February
2023 Bookworm snapshot this will install MariaDB
10.
6
- apt-get install -qq --yes mariadb-server
# Verify installation of MariaDB from (February
2023) Bookworm
- dpkg -l | grep -e "mariadb-server.*10\.6"
- *test-verify-initial
- *test-enable-sid-repos
# Ensure mariadbd will not crash on next shutdown for any reason
- service mariadb restart
- *test-full-upgrade
- service mariadb status # There is no init.d/mysql in MariaDB 10.5+
- apt-get purge --yes mariadb*10.?
- *test-verify-final
mariadb
-10.6 and Jammy upgrade:
extends: .salsa
-ci-template-for-mariadb
stage: upgrade MariaDB and distro
image: ubuntu:jammy
script:
- *test-prepare-container
# Install everything MariaDB currently in Ubuntu Jammy
- apt-get install -qq --yes 'mariadb-*' 'libmariadb*'
# Verify installation of MariaDB from Jammy
- dpkg -l | grep -e "mariadb-server.*10\.6"
- *test-verify-initial
# Install Debian Sid signing keys as Ubuntu does not have them by default
- apt-get install -qq --yes --no-install-recommends curl
- curl -sSLO http://deb.debian.org/debian/pool/main/d/debian-archive-keyring/debian-archive-keyring_2023.4_all.deb
- apt-get install -qq --yes ./debian-archive-keyring_*
- *test-enable-sid-repos
# Ensure mariadbd will not crash on next shutdown for any reason
- service mariadb restart
- *test-enable-artifacts-repo
- apt-get install -qq --simulate mariadb-server
- apt-get install -qq --yes mariadb-server
# Due to usrmerge, full
-upgrade from Jammy to Trixie or newer cannot work
- service mariadb status # There is no init.d/mysql in MariaDB 10.5+
- apt-get purge --yes mariadb*10.?
- *test-verify-final
mariadb
-10.5 and Bullseye upgrade:
extends: .salsa
-ci-template-for-mariadb
stage: upgrade MariaDB and distro
image: debian:bullseye
script:
- *test-prepare-container
# Install everything MariaDB currently in Debian Bullseye
- apt-get install -qq --yes 'default-mysql*' 'mariadb-*' 'libmariadb*'
# Verify installation of MariaDB from Bullseye
- dpkg -l | grep -e "mariadb-server.*10\.5"
- *test-verify-initial
- *test-enable-sid-repos
# Ensure mariadbd will not crash on next shutdown for any reason
- service mariadb restart
- *test-enable-artifacts-repo
- apt-get install -qq --simulate mariadb-server
- apt-get install -qq --yes mariadb-server
# Due to usrmerge, full
-upgrade from Bullseye to Trixie or newer cannot work
- service mariadb status # There is no init.d/mysql in MariaDB 10.5+
- apt-get purge --yes mariadb*10.?
- *test-verify-final
mariadb
-10.3 and Buster upgrade:
extends: .salsa
-ci-template-for-mariadb
stage: upgrade MariaDB and distro
image: debian:buster
script:
- *test-prepare-container
# Install everything MariaDB currently in Debian Buster
- apt-get install -qq --yes 'default-mysql*' 'mariadb-*' 'libmariadb*'
# Verify installation of MariaDB from Buster
- dpkg -l | grep -e "mariadb-server.*10\.3"
- *test-verify-initial
- *test-enable-sid-repos
# Ensure mariadbd will not crash on next shutdown for any reason
- service mysql restart # in 10.3 service name is still 'mysql'
- *test-enable-artifacts-repo
- apt-get install -qq --simulate mariadb-server
- apt-get install -qq --yes mariadb-server
# Due to usrmerge, full
-upgrade from Bullseye to Trixie or newer cannot work
- service mysql status
# mariadb
-10.3 in Buster ships a /etc/init.d/mysql and it continues to exist
# after upgrade, and is removed only on purge
- apt-get purge --yes mariadb*10.?
- service mariadb status
# Give the mariadb
-upgrade plenty of time to complete, otherwise next commands
# fail on non
-existing mariadb.sys user
- sleep 15
- *test-verify-final
mariadb
-10.3 and Focal upgrade:
extends: .salsa
-ci-template-for-mariadb
stage: upgrade MariaDB and distro
image: ubuntu:focal
script:
- *test-prepare-container
# Install everything MariaDB currently in Ubuntu Focal
- apt-get install -qq --yes 'mariadb-*' 'libmariadb*'
# Verify installation of MariaDB from Focal
- dpkg -l | grep -e "mariadb-server.*10\.3"
- *test-verify-initial
# Install Debian Sid signing keys as Ubuntu does not have them by default
- apt-get install -qq --yes --no-install-recommends curl
- curl -sSLO http://deb.debian.org/debian/pool/main/d/debian-archive-keyring/debian-archive-keyring_2023.4_all.deb
- apt-get install -qq --yes ./debian-archive-keyring_*
- *test-enable-sid-repos
# Ensure mariadbd will not crash on next shutdown for any reason
- service mysql restart # in 10.3 service name is still 'mysql'
- *test-enable-artifacts-repo
- apt-get install -qq --simulate mariadb-server
- apt-get install -qq --yes mariadb-server
# Due to usrmerge, full
-upgrade from Focal to Trixie or newer cannot work
- service mysql status
# mariadb
-10.3 in Focal ships a /etc/init.d/mysql and it continues to exist
# after upgrade, and is removed only on purge
- apt-get purge --yes mariadb*10.?
# Give the mariadb
-upgrade plenty of time to complete, otherwise next commands
# fail on non
-existing mariadb.sys user
- sleep 15
- *test-verify-final
# Similar to the Cacti install test, check that MariaDB consumer Zoph upgrades
default
-mysql-server and Bookworm upgrade:
extends: .salsa
-ci-template-for-mariadb
stage: upgrade MariaDB and distro
image: debian:bookworm
script:
- *test-prepare-container
# Install everything MariaDB currently in Debian Bookworm
- apt-get install -qq --yes default-mysql-server zoph
# Verify installation of MariaDB from Bookworm
- dpkg -l | grep -e "mariadb-server.*10\.11"
- *test-verify-initial
- *test-enable-sid-repos
- *test-enable-artifacts-repo
- apt-get install -qq --simulate default-mysql-server
- apt-get install -qq --yes default-mysql-server
- *test-full-upgrade
- service mariadb status # There is no init.d/mysql in MariaDB 10.5+
- *test-verify-final
# Similar to the Cacti install test, check that MariaDB consumer Zoph upgrades
default
-mysql-server and Bullseye upgrade:
extends: .salsa
-ci-template-for-mariadb
stage: upgrade MariaDB and distro
image: debian:bullseye
script:
- *test-prepare-container
# Install everything MariaDB currently in Debian Bullseye
- apt-get install -qq --yes default-mysql-server zoph
# Verify installation of MariaDB from Bullseye
- dpkg -l | grep -e "mariadb-server.*10\.5"
- *test-verify-initial
- *test-enable-sid-repos
- *test-enable-artifacts-repo
- apt-get install -qq --simulate default-mysql-server
- apt-get install -qq --yes default-mysql-server
# Due to usrmerge, full
-upgrade from Bullseye to Trixie or newer cannot work
- service mariadb status # There is no init.d/mysql in MariaDB 10.5+
- *test-verify-final
test basic features:
extends: .salsa
-ci-template-for-mariadb
script:
- *test-prepare-container
- *test-install-all
- service mariadb status # There is no init.d/mysql in MariaDB 10.5+
- *test-verify-final
- |
# Print info about server
mariadb
--skip-column-names -e "select @@version, @@version_comment"
mariadb
--skip-column-names -e "select engine, support, transactions, savepoints from information_schema.engines order by engine" | sort
mariadb
--skip-column-names -e "select plugin_name, plugin_status, plugin_type, plugin_library, plugin_license from information_schema.all_plugins order by plugin_name, plugin_library"
# Test various features
mariadb
-e "CREATE DATABASE db"
mariadb
-e "CREATE TABLE db.t_innodb(a1 SERIAL, c1 CHAR(8)) ENGINE=InnoDB; INSERT INTO db.t_innodb VALUES (1,'"'"'foo'"'"'),(2,'"'"'bar'"'"')"
mariadb
-e "CREATE TABLE db.t_myisam(a2 SERIAL, c2 CHAR(8)) ENGINE=MyISAM; INSERT INTO db.t_myisam VALUES (1,'"'"'foo'"'"'),(2,'"'"'bar'"'"')"
mariadb
-e "CREATE TABLE db.t_aria(a3 SERIAL, c3 CHAR(8)) ENGINE=Aria; INSERT INTO db.t_aria VALUES (1,'"'"'foo'"'"'),(2,'"'"'bar'"'"')"
mariadb
-e "CREATE TABLE db.t_memory(a4 SERIAL, c4 CHAR(8)) ENGINE=MEMORY; INSERT INTO db.t_memory VALUES (1,'"'"'foo'"'"'),(2,'"'"'bar'"'"')"
mariadb
-e "CREATE ALGORITHM=MERGE VIEW db.v_merge AS SELECT * FROM db.t_innodb, db.t_myisam, db.t_aria"
mariadb
-e "CREATE ALGORITHM=TEMPTABLE VIEW db.v_temptable AS SELECT * FROM db.t_innodb, db.t_myisam, db.t_aria"
mariadb
-e "CREATE PROCEDURE db.p() SELECT * FROM db.v_merge"
mariadb
-e "CREATE FUNCTION db.f() RETURNS INT DETERMINISTIC RETURN 1"
# Test that the features still work (this step can be done e.g. after an upgrade)
mariadb
-e "SHOW TABLES IN db"
mariadb
-e "SELECT * FROM db.t_innodb; INSERT INTO db.t_innodb VALUES (3,'"'"'foo'"'"'),(4,'"'"'bar'"'"')"
mariadb
-e "SELECT * FROM db.t_myisam; INSERT INTO db.t_myisam VALUES (3,'"'"'foo'"'"'),(4,'"'"'bar'"'"')"
mariadb
-e "SELECT * FROM db.t_aria; INSERT INTO db.t_aria VALUES (3,'"'"'foo'"'"'),(4,'"'"'bar'"'"')"
mariadb
-e "SELECT * FROM db.t_memory; INSERT INTO db.t_memory VALUES (3,'"'"'foo'"'"'),(4,'"'"'bar'"'"')"
mariadb
-e "SELECT COUNT(*) FROM db.v_merge"
mariadb
-e "SELECT COUNT(*) FROM db.v_temptable"
mariadb
-e "CALL db.p()"
mariadb
-e "SELECT db.f()"
- |
# Test TLS connections
dpkg
-l | grep -i -e tls -e ssl
# Create user for TCP connection, must have password
mariadb
-e "SET PASSWORD FOR 'mysql'@'localhost' = PASSWORD('asdf234');"
cat <<EOF > /root/.my.cnf
[client]
user=mysql
password=asdf234
protocol=tcp
EOF
export CERT_PATH=/usr/share/mariadb/mariadb
-test/std_data
openssl verify
-CAfile $CERT_PATH/cacert.pem $CERT_PATH/server-cert.pem
openssl x509
-subject -issuer -noout -in $CERT_PATH/cacert.pem
openssl x509
-subject -issuer -noout -in $CERT_PATH/server-cert.pem
cat <<EOF > /etc/mysql/mariadb.conf.d/tls.cnf
[client
-server]
ssl = on
ssl
-ca = $CERT_PATH/cacert.pem
ssl
-cert = $CERT_PATH/server-cert.pem
ssl
-key = $CERT_PATH/server-key.pem
[server]
require
-secure-transport = on
[client]
ssl
-verify-server-cert = on
EOF
service mariadb restart
mariadb
-Bse 'STATUS' | tee result
# Ensure important values present, otherwise fail job
grep
--quiet "localhost via TCP/IP" result
mariadb
-Bse 'SHOW VARIABLES' | grep -e tls -e ssl | tee result
grep
--quiet "have_ssl YES" result
grep
--quiet TLSv1.3 result
mariadb
-Bse 'SHOW SESSION STATUS' | grep -i -e tls -e ssl | tee result
grep
--quiet TLSv1.3 result
# Install Cacti, which in uses dbconfig
-common to configure the MariaDB user and
# connection automatically in order to validate that at least one downstream
# server consumer continues to work.
test consumer cacti:
extends: .salsa
-ci-template-for-mariadb
script:
- *test-prepare-container
- *test-enable-artifacts-repo
- apt-get install -qq --yes cacti
- mariadb -E -e "SHOW CREATE TABLE version;" cacti
# Build a piece of software that was designed for libmysqlclient
-dev but using the
# libmariadb
-dev-compat layer. Should always end up using libmariadb.so.3 run-time.
build mariadbclient consumer Python
-MySQLdb:
extends: .salsa
-ci-template-for-mariadb
script:
- *test-prepare-container
- *test-install-all-libs
- apt-get install -qq --yes pkg-config python3-pip
# See what MySQLdb will build with
- pkg-config --cflags --libs mysqlclient
# MySQLdb is also available in Debian as package python3
-mysqldb, but
# install it from pip to force that the client is compiled with
# libmariadb
-dev-compat on-the-fly.
# Python
3.
11 needs `
--break-system-packages` to proceed with this.
- pip3 install --break-system-packages mysqlclient # Compiles module against libmysqlclient
- apt-get purge --yes libmariadb-dev # Not needed for run-time
- python3 -c "import MySQLdb; print(MySQLdb.get_client_info())"
libmysql* to libmariadb* upgrade:
extends: .salsa
-ci-template-for-mariadb
stage: upgrade MariaDB
script:
- *test-prepare-container
# Install
all libmysql* available in Debian unstable
- apt-get install -qq --yes pkg-config libmysqlclient-dev
- pkg-config --list-all
- pkg-config --cflags mysqlclient # mysqlclient.pc from original package
- *test-enable-artifacts-repo
- apt-get install -qq --yes libmariadb3
- pkg-config --list-all
- apt-get install -qq --yes libmariadb-dev
- pkg-config --list-all
- apt-get install -qq --yes libmariadb-dev-compat
- pkg-config --cflags mysqlclient # mysqlclient.pc from compat package
- pkg-config --list-all
- apt-get install -qq --yes libmariadbd19t64
- pkg-config --list-all
- apt-get install -qq --yes libmariadbd-dev
- pkg-config --list-all
- apt-get install -qq --yes default-libmysqlclient-dev default-libmysqld-dev
- *test-verify-libs
default
-libmysqlclient-dev upgrade:
extends: .salsa
-ci-template-for-mariadb
stage: upgrade MariaDB
script:
- *test-prepare-container
- apt-get install -qq --yes pkg-config default-libmysqlclient-dev default-libmysqld-dev
- pkg-config --list-all
- *test-full-upgrade-libs
- *test-verify-libs
default
-libmysqlclient-dev and Bookworm upgrade:
extends: .salsa
-ci-template-for-mariadb
stage: upgrade MariaDB and distro
image: debian:bookworm
script:
- *test-prepare-container
- apt-get install -qq --yes pkg-config default-libmysqlclient-dev
- pkg-config --list-all
- *test-enable-sid-repos
- *test-full-upgrade-libs
- *test-verify-libs
default
-libmysqlclient-dev and Bullseye upgrade:
extends: .salsa
-ci-template-for-mariadb
stage: upgrade MariaDB and distro
image: debian:bullseye
script:
- *test-prepare-container
- apt-get install -qq --yes pkg-config default-libmysqlclient-dev
- pkg-config --list-all
- *test-enable-sid-repos
# Due to usrmerge, full
-upgrade from Bullseye to Trixie or newer cannot work
- *test-install-all-libs
- *test-verify-libs
# No longer possible since as it pulls as dependencies packages that trigger
# usrmerge, which cannot run in a container
#default
-libmysqlclient-dev and Buster upgrade:
# Upgrading from MySQL
8.
0 with datadir in place is not possible. Users need to do a data dump.
# The Debian maintainer scripts detect this situation and simply moves old datadir aside and st
art fresh.
mysql-8.0 in Sid upgrade:
extends: .salsa-ci-template-for-mariadb
stage: upgrade MariaDB variant
image: debian:sid
script:
- *test-prepare-container
# The postinst fails often if 'ps' is missing from system, so install procps
- apt-get install -qq --yes 'mysql*' libmysqlcppconn7t64
# Ensure MySQL 8.0 package actually got installed
- dpkg -l | grep -e "mysql-server.*8\.0"
- *test-verify-initial
- *test-install-all
# Due to some (currently unknown) changes in MySQL 8.0 packaging or apt
# behaviour changes, a system with a previous installation of MySQL 8.0 will
# on upgrades to MariaDB first fully remove MySQL, including the
# /etc/init.d/mysql file, so previous techniques in
# mariadb-server-10.6.postinst to maintain backwards compatibility with
# 'service mysql status' after installing MariaDB on top MySQL no longer
# works. Thus the step to test it now intentionally has a fallback to use
# the service name 'mariadb' instead, and the fallback is always used.
- sleep 5 # Give the mysql_upgrade a bit of time to complete before querying the server
- service mysql status || service mariadb status
- *test-verify-final
# Upgrading from MySQL 8.0 with datadir in place is not possible. Users need to do a data dump.
# The Debian maintainer scripts detect this situation and simply moves old datadir aside and start fresh.
mysql-8.0 in Ubuntu 23.10 upgrade:
extends: .salsa-ci-template-for-mariadb
stage: upgrade MariaDB variant
image: ubuntu:mantic
script:
- *test-prepare-container
- apt-get install -qq --yes procps mysql-server 'libmysqlc*'
# Ensure MySQL 8.0 package actually got installed
- dpkg -l | grep mysql
- service mysql status
- *test-verify-initial
# Install Debian Sid signing keys as Ubuntu does not have them by default
- apt-get install -qq --yes --no-install-recommends curl
- curl -sSLO http://deb.debian.org/debian/pool/main/d/debian-archive-keyring/debian-archive-keyring_2023.4_all.deb
- apt-get install -qq --yes ./debian-archive-keyring_*
- *test-enable-sid-repos
# Ensure mysqld will not crash on next shutdown for any reason
- service mysql restart
- *test-enable-artifacts-repo
- apt-get install -qq --simulate mariadb-server
- apt-get install -qq --yes mariadb-server
# Due to usrmerge, full-upgrade from Mantic to Trixie or newer may not work
- service mariadb status # There is no init.d/mysql in MariaDB 10.5+
# Remove everything MySQL except mysql-common which also MariaDB depends on
- apt-get purge --yes mysql-s* mysql-cl* libmysql*
- *test-verify-final
# Upgrading from MySQL 8.0 with datadir in place is not possible. Users need to do a data dump.
# The Debian maintainer scripts detect this situation and simply moves old datadir aside and start fresh.
mysql-community-cluster-8.0 from MySQL.com with Bookworm upgrade:
extends: .salsa-ci-template-for-mariadb
stage: upgrade MariaDB variant
image: debian:bookworm
script:
- *test-prepare-container
- |
apt-get install -qq --yes --no-install-recommends ca-certificates curl systemctl
curl -sS "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xbca43417c3b485dd128ec6d4b7b3b788a8d3785c" -o /etc/apt/trusted.gpg.d/mysql.asc
echo "deb https://repo.mysql.com/apt/debian/ bookworm mysql-cluster-8.0" > /etc/apt/sources.list.d/mysql.list
apt-get update -qq
- apt-get install -qq --yes mysql-cluster-community-server
- sed 's/ExecStartPre=+/ExecStartPre=/' -i /lib/systemd/system/mysql.service # Hack to make file compatible with systemctl shim
- systemctl start mysql
- dpkg -l | grep -iE 'maria|mysql|galera'
- systemctl status mysql; mysql -e 'SELECT VERSION()'
- systemctl stop mysql # Stop manually as maintainer scripts don't handle this with systemctl shim
- *test-enable-sid-repos
- *test-enable-artifacts-repo
- apt-get install -qq --simulate mariadb-server
- apt-get install -qq --yes mariadb-server
# Ignore systemctl shim result as MariaDB systemd file is incompatible with it and yields:
# ERROR:systemctl:the ExecStartPre control process exited with error code
- systemctl status mysql || true
- mysql -e 'SELECT VERSION()' || true
- sleep 5 # Give the mysql_upgrade a bit of time to complete before querying the server
- *test-verify-final
mariadb.org-10.11 upgrade:
extends: .salsa-ci-template-for-mariadb-upgrade
stage: upgrade MariaDB variant
variables:
MARIADB_VERSION: "10.11"
script:
- apt-get install -qq --yes mariadb-server
- *test-verify-initial
# Install MariaDB built in this commit
# Force downgrades so our version installs on top of upstream revision, e.g. 1:11.10.1-1 vs 1:11.10.1+mariadb~sid
- apt-get install -qq --yes --allow-downgrades ./*.deb
# Verify installation of MariaDB built in this commit
- dpkg -l | grep -iE 'maria|mysql|galera' || true # List installed
- mariadb --version # Client version
- service mariadb status # There is no init.d/mysql in MariaDB 10.5+
- *test-verify-final
mariadb.org-10.10 upgrade:
extends: .salsa-ci-template-for-mariadb-upgrade
stage: upgrade MariaDB variant
variables:
MARIADB_VERSION: "10.10"
script:
# this should not use Sid to begin with
- apt-get install -qq --yes mariadb-server=1:10.10.2+maria~debunstable mariadb-client=1:10.10.2+maria~debunstable
- *test-verify-initial
- *test-full-upgrade
- service mariadb status # There is no init.d/mysql in MariaDB 10.5+
- *test-verify-final
mariadb.org-10.9 upgrade:
extends: .salsa-ci-template-for-mariadb-upgrade
stage: upgrade MariaDB variant
variables:
MARIADB_VERSION: "10.9"
script:
# this should not use Sid to begin with
- apt-get install -qq --yes mariadb-server=1:10.9.4+maria~debunstable mariadb-client=1:10.9.4+maria~debunstable
- *test-verify-initial
- *test-full-upgrade
- service mariadb status # There is no init.d/mysql in MariaDB 10.5+
- *test-verify-final
mariadb.org-10.8 upgrade:
extends: .salsa-ci-template-for-mariadb-upgrade
stage: upgrade MariaDB variant
variables:
MARIADB_VERSION: "10.8"
script:
- apt-get install -qq --yes mariadb-server-10.8
- *test-verify-initial
- *test-install-all
- service mariadb status # There is no init.d/mysql in MariaDB 10.5+
- *test-verify-final
mariadb.org-10.7 upgrade:
extends: .salsa-ci-template-for-mariadb-upgrade
stage: upgrade MariaDB variant
variables:
MARIADB_VERSION: "10.7"
script:
- apt-get install -qq --yes mariadb-server-10.7
- *test-verify-initial
- *test-install-all
- service mariadb status # There is no init.d/mysql in MariaDB 10.5+
- *test-verify-final
mariadb.org-10.6 upgrade:
extends: .salsa-ci-template-for-mariadb-upgrade
stage: upgrade MariaDB variant
variables:
MARIADB_VERSION: "10.6"
script:
# Package libmariadbclient-dev from mariadb.org conflicts with libmariadb-dev in Sid, so cannot use wildcard that would include it
# Enable this line when there is a way to install them only from the mariadb.org repo
# - apt-get install -qq --yes 'mariadb*' libmariadb3 'libmariadb-*' 'libmariadbd*'
- apt-get install -qq --yes mariadb-server-10.6
- *test-verify-initial
- *test-install-all
- service mariadb status # There is no init.d/mysql in MariaDB 10.5+
- *test-verify-final
# archive.mariadb.org for Debian Sid latest is 10.5.13
mariadb.org-10.5 upgrade:
extends: .salsa-ci-template-for-mariadb-upgrade
stage: upgrade MariaDB variant
variables:
MARIADB_VERSION: "10.5"
script:
- *test-install-openssl1-in-sid-for-backwards-compat
- apt-get install -qq --yes mariadb-server-10.5
- *test-verify-initial
- *test-install-all
- service mariadb status # There is no init.d/mysql in MariaDB 10.5+
- *test-verify-final
# archive.mariadb.org for Debian Sid latest is 10.4.17
mariadb.org-10.4 upgrade:
extends: .salsa-ci-template-for-mariadb-upgrade
stage: upgrade MariaDB variant
variables:
MARIADB_VERSION: "10.4"
script:
- *test-install-readline-in-sid-for-backwards-compat
- *test-install-openssl1-in-sid-for-backwards-compat
- *test-install-libaio-in-sid-for-backwards-compat
- apt-get install -qq --yes mariadb-server-10.4
# MariaDB.org version of 10.4 and early 10.5 do not install an init file, so
# it must be installed here manually
- cp /usr/share/mysql/mysql.init /etc/init.d/mysql; chmod +x /etc/init.d/mysql; service mysql start; sleep 5
- *test-verify-initial
- *test-install-all
- sleep 5 # Give the mysql_upgrade a bit of time to complete before querying the server
- service mysql status
- service mariadb status
- *test-verify-final
# archive.mariadb.org for Debian Sid latest is 10.3.27
mariadb.org-10.3 upgrade:
extends: .salsa-ci-template-for-mariadb-upgrade
stage: upgrade MariaDB variant
variables:
MARIADB_VERSION: "10.3"
script:
- *test-install-readline-in-sid-for-backwards-compat
- *test-install-openssl1-in-sid-for-backwards-compat
- *test-install-libaio-in-sid-for-backwards-compat
- apt-get install -qq --yes mariadb-server-10.3
- *test-verify-initial
- *test-install-all
# mariadb-10.3 in Buster ships a /etc/init.d/mysql and it continues to exist
# after upgrade, and is removed only on purge
- service mysql status || service mariadb status
# Give the mariadb-upgrade plenty of time to complete, otherwise next commands
# fail on non-existing mariadb.sys user
- sleep 15
- *test-verify-final
# archive.mariadb.org for Debian Sid latest is 10.2.21
mariadb.org-10.2 upgrade:
extends: .salsa-ci-template-for-mariadb-upgrade
stage: upgrade MariaDB variant
variables:
MARIADB_VERSION: "10.2"
script:
- *test-install-readline-in-sid-for-backwards-compat
- *test-install-openssl1-in-sid-for-backwards-compat
- *test-install-libaio-in-sid-for-backwards-compat
- apt-get install -qq --yes mariadb-server-10.2
# Verify initial state before upgrade
- dpkg -l | grep -iE 'maria|mysql|galera' || true # List installed
- service mysql status
# prepending with --defaults-file=/etc/mysql/debian.cnf is needed in upstream 5.5–10.3
- |
mysql --defaults-file=/etc/mysql/debian.cnf --skip-column-names -e "SELECT @@version, @@version_comment"
mysql --defaults-file=/etc/mysql/debian.cnf --table -e "SHOW DATABASES;"
mysql --defaults-file=/etc/mysql/debian.cnf --table -e "SELECT * FROM mysql.user; SHOW CREATE USER root@localhost;"
mysql --defaults-file=/etc/mysql/debian.cnf --table -e "SELECT * FROM mysql.plugin; SHOW PLUGINS;"
- *test-install-all
# mariadb-10.2 in ships a /etc/init.d/mysql and it continues to exist
# after upgrade, and is removed only on purge
- service mysql status || service mariadb status
# Give the mariadb-upgrade plenty of time to complete, otherwise next commands
# fail on non-existing mariadb.sys user
- sleep 15
- *test-verify-final
# Buster is the last Debian release Oracle MySQL 5.7 offers binaries for
mysql.com-5.7 with Buster upgrade:
extends: .salsa-ci-template-for-mariadb
stage: upgrade MariaDB variant
needs:
- job: build
image: debian:buster
script:
- *test-prepare-container
- |
apt-get install -qq --yes --no-install-recommends gpg gpg-agent dirmngr ca-certificates # Bare minimal (<4MB) for apt-key to work
apt-key adv --recv-keys --keyserver hkps://keyserver.ubuntu.com:443 B7B3B788A8D3785C
echo "deb https://repo.mysql.com/apt/debian/ buster mysql-5.7" > /etc/apt/sources.list.d/mysql.list
apt-get update -qq
- apt-get install -qq --yes mysql-server 'libmysqlc*'
# Ensure MySQL 5.7 package actually got installed
- dpkg -l | grep -e "mysql-server.*5.7"
- *test-verify-initial
- *test-enable-sid-repos
- *test-install-all
# Due to some (currently unknown) changes in MySQL 5.7 packaging or apt
# behaviour changes, a system with a previous installation of MySQL will
# on upgrades to MariaDB first fully remove MySQL, including the
# /etc/init.d/mysql file, so previous techniques in
# mariadb-server-10.6.postinst to maintain backwards compatibility with
# 'service mysql status' after installing MariaDB on top MySQL no longer
# works. Thus the step to test it now intentionally has a fallback to use
# the service name 'mariadb' instead, and the fallback is always used.
- sleep 5 # Give the mysql_upgrade a bit of time to complete before querying the server
- service mysql status || service mariadb status
- sleep 15 # Give the mysql_upgrade a bit of extra time to complete with MySQL 5.7 before querying the server
- *test-verify-final
# Note: pmm2-client does not exist in the Bookworm repository anymore
percona-xtradb-5.7 with Bookworm upgrade:
extends: .salsa-ci-template-for-mariadb
stage: upgrade MariaDB variant
image: debian:bookworm
script:
- *test-prepare-container
- |
apt-get install -qq --yes --no-install-recommends ca-certificates curl systemctl
curl -sS "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x9334A25F8507EFA5" -o /etc/apt/trusted.gpg.d/percona.asc
echo "deb https://repo.percona.com/apt/ bookworm main" > /etc/apt/sources.list.d/percona.list
apt-get update -qq
- apt-get install -qq --yes percona-xtradb-cluster-full-57 percona-xtrabackup-24 percona-toolkit
# Ensure Percona 5.7 package actually got installed
- dpkg -l | grep -e "percona.*5\.7"
- service mysql status
- *test-verify-initial
- *test-enable-sid-repos
- *test-install-all
# Percona package owned /etc/init.d/mysql, so on removal and upgrade to MariaDB old service name can't be referenced anymore
- service mariadb status
- sleep 15 # Give the mysql_upgrade a bit of extra time to complete with MySQL 5.7 before querying the server
- *test-verify-final