From da90970467ebc55b788822cb58262a79c424b15c Mon Sep 17 00:00:00 2001 From: Andrii Nikitin Date: Fri, 5 Jun 2026 08:31:52 +0200 Subject: [PATCH 1/2] t: bump leap to 16.0 --- t/lib/Dockerfile.environ.mariadb | 17 +++++++---------- t/lib/Dockerfile.environ.mariadb.experimental | 19 ++++++------------- t/lib/Dockerfile.environ.postgresql | 14 ++++---------- t/lib/Dockerfile.systemd.mariadb | 6 +++--- t/lib/Dockerfile.systemd.postgresql | 6 +++--- 5 files changed, 23 insertions(+), 39 deletions(-) diff --git a/t/lib/Dockerfile.environ.mariadb b/t/lib/Dockerfile.environ.mariadb index 74ad5b62..9e5adfac 100644 --- a/t/lib/Dockerfile.environ.mariadb +++ b/t/lib/Dockerfile.environ.mariadb @@ -1,29 +1,26 @@ -FROM opensuse/leap:15.6 +FROM opensuse/leap:16.0 ENV container docker ENV LANG en_US.UTF-8 RUN sed -i 's,http://download.opensuse.org,http://cdn.opensuse.org,g' /etc/zypp/repos.d/*repo -RUN zypper ar -f http://cdn.opensuse.org/repositories/openSUSE:infrastructure:MirrorCache/15.6 mc +RUN zypper ar -f http://cdn.opensuse.org/repositories/openSUSE:infrastructure:MirrorCache/16.0 mc RUN zypper --gpg-auto-import-keys ref # install MirrorCache here to fetch all dependencies RUN zypper -vvv -n install MirrorCache perl-MaxMind-DB-Reader perl-Mojolicious-Plugin-ClientIP \ vim mariadb mariadb-server curl sudo git-core wget tar m4 make rsync \ - apache2 perl-Digest-MD4 tidy nginx bbe perl-DBD-mysql perl-Mojo-mysql perl-Minion-Backend-mysql perl-DateTime-HiRes \ - perl-Config-IniFiles environ eatmydata + apache2 perl-Digest-MD4 tidy nginx perl-DBD-mysql perl-Mojo-mysql perl-Minion-Backend-mysql perl-DateTime-HiRes \ + perl-Config-IniFiles environ eatmydata which # optional dependencies used in testing -RUN zypper -vvv -n install perl-Geo-IP2Location perl-Digest-Zsync perl-DateTime-Format-MySQL libxml2-tools iputils - -# this hack is needed because old nginx versions cannot run as non-root -RUN bbe -e 's,/var/log/nginx/error.log,/tmp/log_nginx_error.log,' /usr/sbin/nginx > /usr/sbin/nginx.hacked -RUN mv /usr/sbin/nginx.hacked /usr/sbin/nginx -RUN chmod +x /usr/sbin/nginx +RUN zypper -vvv -n install perl-Geo-IP2Location perl-Digest-Zsync perl-DateTime-Format-MySQL libxml2-tools iputils findutils systemd WORKDIR /opt/project ENV TZ UTC ENV MOJO_PUBSUB_EXPERIMENTAL 1 +# see MDEV-39860 +RUN systemd-tmpfiles --create /usr/lib/tmpfiles.d/mariadb.conf ENTRYPOINT ["/usr/bin/tail", "-f", "/dev/null"] diff --git a/t/lib/Dockerfile.environ.mariadb.experimental b/t/lib/Dockerfile.environ.mariadb.experimental index 1b4ac930..73db9101 100644 --- a/t/lib/Dockerfile.environ.mariadb.experimental +++ b/t/lib/Dockerfile.environ.mariadb.experimental @@ -1,37 +1,30 @@ -FROM opensuse/leap:15.6 +FROM opensuse/leap:16.0 ENV container docker ENV LANG en_US.UTF-8 RUN zypper -n in curl # rpm --import needs curl atm RUN curl -IL https://mirror.mariadb.org/yum/11.8/sles15-amd64/repodata/repomd.xml -RUN zypper ar -f http://cdn.opensuse.org/repositories/openSUSE:infrastructure:MirrorCache/15.6 mc +RUN zypper ar -f http://cdn.opensuse.org/repositories/openSUSE:infrastructure:MirrorCache/16.0 mc # RUN zypper ar -f https://mirror.mariadb.org/yum/11.8/sles15-amd64 mariadb -RUN zypper ar -f https://mirror.netcologne.de/mariadb/mariadb-11.8.8/yum/sles/15.7/x86_64 mariadb +RUN zypper ar -f https://mirror.netcologne.de/mariadb/mariadb-11.8.8/yum/sles/16.0/x86_64 mariadb RUN rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB RUN zypper --gpg-auto-import-keys ref # install MirrorCache here to fetch all dependencies RUN zypper -vvv -n install MirrorCache perl-MaxMind-DB-Reader perl-Mojolicious-Plugin-ClientIP \ vim MariaDB-server MariaDB-client curl sudo git-core wget tar m4 make rsync \ - apache2 perl-Digest-MD4 tidy nginx bbe perl-DBD-mysql perl-Mojo-mysql perl-Minion-Backend-mysql perl-DateTime-HiRes \ - perl-Config-IniFiles environ eatmydata + apache2 perl-Digest-MD4 tidy nginx perl-DBD-mysql perl-Mojo-mysql perl-Minion-Backend-mysql perl-DateTime-HiRes \ + perl-Config-IniFiles environ eatmydata which # optional dependencies used in testing -RUN zypper -vvv -n install perl-Geo-IP2Location perl-Digest-Zsync perl-DateTime-Format-MySQL libxml2-tools iputils +RUN zypper -vvv -n install perl-Geo-IP2Location perl-Digest-Zsync perl-DateTime-Format-MySQL libxml2-tools iputils findutils RUN zypper -vvv -n install MariaDB-server-compat MariaDB-client-compat -# this hack is needed because old nginx versions cannot run as non-root -RUN bbe -e 's,/var/log/nginx/error.log,/tmp/log_nginx_error.log,' /usr/sbin/nginx > /usr/sbin/nginx.hacked -RUN mv /usr/sbin/nginx.hacked /usr/sbin/nginx -RUN chmod +x /usr/sbin/nginx - WORKDIR /opt/project ENV TZ UTC ENV MOJO_PUBSUB_EXPERIMENTAL 1 - - ENTRYPOINT ["/usr/bin/tail", "-f", "/dev/null"] diff --git a/t/lib/Dockerfile.environ.postgresql b/t/lib/Dockerfile.environ.postgresql index 8ac35528..f372aeb4 100644 --- a/t/lib/Dockerfile.environ.postgresql +++ b/t/lib/Dockerfile.environ.postgresql @@ -1,24 +1,18 @@ -FROM opensuse/leap:15.6 +FROM opensuse/leap:16.0 ENV container docker ENV LANG en_US.UTF-8 -RUN sed -i 's,http://download.opensuse.org,http://cdn.opensuse.org,g' /etc/zypp/repos.d/*repo -RUN zypper ar -f http://cdn.opensuse.org/repositories/openSUSE:infrastructure:MirrorCache/15.6 mc +RUN zypper ar -f http://cdn.opensuse.org/repositories/openSUSE:infrastructure:MirrorCache/16.0 mc RUN zypper --gpg-auto-import-keys ref # install MirrorCache here to fetch all dependencies RUN zypper -vvv -n install MirrorCache perl-MaxMind-DB-Reader perl-Mojolicious-Plugin-ClientIP \ vim postgresql postgresql-server curl sudo git-core wget tar m4 make rsync \ - apache2 perl-Digest-MD4 tidy nginx bbe perl-DateTime-HiRes perl-Config-IniFiles environ + apache2 perl-Digest-MD4 tidy nginx perl-DateTime-HiRes perl-Config-IniFiles environ # optional dependencies used in testing -RUN zypper -vvv -n install perl-Geo-IP2Location perl-Digest-Zsync libxml2-tools iputils - -# this hack is needed because old nginx versions cannot run as non-root -RUN bbe -e 's,/var/log/nginx/error.log,/tmp/log_nginx_error.log,' /usr/sbin/nginx > /usr/sbin/nginx.hacked -RUN mv /usr/sbin/nginx.hacked /usr/sbin/nginx -RUN chmod +x /usr/sbin/nginx +RUN zypper -vvv -n install perl-Geo-IP2Location perl-Digest-Zsync libxml2-tools iputils findutils WORKDIR /opt/project ENV TZ UTC diff --git a/t/lib/Dockerfile.systemd.mariadb b/t/lib/Dockerfile.systemd.mariadb index 5656fee4..9fa618f3 100644 --- a/t/lib/Dockerfile.systemd.mariadb +++ b/t/lib/Dockerfile.systemd.mariadb @@ -1,9 +1,9 @@ -FROM opensuse/leap:15.6 +FROM opensuse/leap:16.0 ENV container podman ENV LANG en_US.UTF-8 -RUN zypper ar -f http://cdn.opensuse.org/repositories/openSUSE:infrastructure:MirrorCache/15.6 mc +RUN zypper ar -f http://cdn.opensuse.org/repositories/openSUSE:infrastructure:MirrorCache/16.0 mc RUN zypper --gpg-auto-import-keys -vvv ref RUN zypper -vvvn install systemd curl sudo iputils vi @@ -11,7 +11,7 @@ RUN zypper -vvvn install systemd curl sudo iputils vi # install MirrorCache here to fetch all dependencies RUN zypper -vvv -n install MirrorCache perl-MaxMind-DB-Reader perl-Mojolicious-Plugin-ClientIP \ vim mariadb mariadb-server curl sudo git-core wget tar m4 \ - apache2 perl-Digest-MD4 tidy nginx bbe perl-DBD-mysql perl-Mojo-mysql perl-Minion-Backend-mysql perl-DateTime-HiRes make \ + apache2 perl-Digest-MD4 tidy nginx perl-DBD-mysql perl-Mojo-mysql perl-Minion-Backend-mysql perl-DateTime-HiRes make \ perl-Config-IniFiles ADD src/city.mmdb /var/lib/GeoIP/GeoLite2-City.mmdb diff --git a/t/lib/Dockerfile.systemd.postgresql b/t/lib/Dockerfile.systemd.postgresql index 89ec33e9..c64b657f 100644 --- a/t/lib/Dockerfile.systemd.postgresql +++ b/t/lib/Dockerfile.systemd.postgresql @@ -1,14 +1,14 @@ -FROM opensuse/leap:15.6 +FROM opensuse/leap:16.0 ENV container podman ENV LANG en_US.UTF-8 -RUN zypper ar -f http://cdn.opensuse.org/repositories/openSUSE:infrastructure:MirrorCache/15.6 mc +RUN zypper ar -f http://cdn.opensuse.org/repositories/openSUSE:infrastructure:MirrorCache/16.0 mc RUN zypper --gpg-auto-import-keys -vvv ref RUN zypper -vvvn install systemd curl sudo iputils vi -# install MirrorCache here to fetch all dependencies +# install MirrorCache h/re to fetch all dependencies RUN zypper -vvv -n install MirrorCache perl-MaxMind-DB-Reader perl-Mojolicious-Plugin-ClientIP \ vim postgresql postgresql-server curl sudo git-core wget tar m4 \ apache2 perl-Digest-MD4 tidy make perl-DateTime-HiRes perl-Config-IniFiles From 888c3e2a6f8b6ed3c69b7382c3cdcf96964b5308 Mon Sep 17 00:00:00 2001 From: Andrii Nikitin Date: Thu, 11 Jun 2026 16:38:22 +0200 Subject: [PATCH 2/2] t: add which to experimental container and support disabling native AIO - Add the `which` package to MariaDB Dockerfiles to ensure `eatmydata` gets resolved and preloaded. - Introduce `MIRRORCACHE_DB_AIO` to dynamically append `--innodb-use-native-aio=0` to MariaDB starts. - Patch the compiled `ma/start` script inside `build.sh.m4` to ensure all standalone DB starts (e.g. `$mc/db/start`) also respect this setting. - Forward the `MIRRORCACHE_DB_AIO` environment variable into both `docker run` and `docker exec` in `t/lib/test-in-container-environ.sh`. - Set `MIRRORCACHE_DB_AIO: "0"` globally for CircleCI to ensure `eatmydata` correctly intercepts all database syncs and flushes. --- .circleci/config.yml | 1 + t/lib/environ/mc/source/_exec.m4 | 2 +- t/lib/environ/mc/source/backstage-exec/shoot.sh.m4 | 2 +- t/lib/environ/mc/source/backstage-exec/start.sh.m4 | 2 +- t/lib/environ/mc/source/backstage/job.sh.m4 | 2 +- t/lib/environ/mc/source/backstage/shoot.sh.m4 | 2 +- t/lib/environ/mc/source/backstage/start.sh.m4 | 2 +- t/lib/environ/mc/source/build.sh.m4 | 2 ++ t/lib/environ/mc/source/gen_env.sh.m4 | 3 +++ t/lib/test-in-container-environ.sh | 4 ++-- 10 files changed, 14 insertions(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f6ed5609..f2498915 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -13,6 +13,7 @@ jobs: environment: MIRRORCACHE_DB_PROVIDER: << parameters.db >> T_EXPERIMENTAL: << parameters.experimental >> + MIRRORCACHE_DB_AIO: "0" working_directory: ~/project steps: - checkout: diff --git a/t/lib/environ/mc/source/_exec.m4 b/t/lib/environ/mc/source/_exec.m4 index 128aa085..61341a36 100644 --- a/t/lib/environ/mc/source/_exec.m4 +++ b/t/lib/environ/mc/source/_exec.m4 @@ -3,7 +3,7 @@ __workdir/gen_env set -a source __workdir/conf.env set +a -test 1 != "${ENVIRON_MC_DB_AUTOSTART-1}" || __workdir/db/status >& /dev/null || __workdir/db/start "--transaction-isolation=read-committed" +test 1 != "${ENVIRON_MC_DB_AUTOSTART-1}" || __workdir/db/status >& /dev/null || __workdir/db/start "--transaction-isolation=read-committed" ${MIRRORCACHE_DB_START_OPTS:-} [ -e __workdir/db/sql_mc_test ] || __workdir/db/create_db mc_test ( diff --git a/t/lib/environ/mc/source/backstage-exec/shoot.sh.m4 b/t/lib/environ/mc/source/backstage-exec/shoot.sh.m4 index 5fbfd059..f5db3a34 100644 --- a/t/lib/environ/mc/source/backstage-exec/shoot.sh.m4 +++ b/t/lib/environ/mc/source/backstage-exec/shoot.sh.m4 @@ -3,7 +3,7 @@ set -e __workdir/../gen_env source __workdir/../conf.env -__workdir/../db/status >& /dev/null || __workdir/../db/start +__workdir/../db/status >& /dev/null || __workdir/../db/start ${MIRRORCACHE_DB_START_OPTS:-} [ -e __workdir/../db/sql_mc_test ] || __workdir/../db/create_db mc_test ( diff --git a/t/lib/environ/mc/source/backstage-exec/start.sh.m4 b/t/lib/environ/mc/source/backstage-exec/start.sh.m4 index 8d3169b5..5ffccbaf 100644 --- a/t/lib/environ/mc/source/backstage-exec/start.sh.m4 +++ b/t/lib/environ/mc/source/backstage-exec/start.sh.m4 @@ -3,7 +3,7 @@ set -e __workdir/../gen_env source __workdir/../conf.env -__workdir/../db/status >& /dev/null || __workdir/../db/start +__workdir/../db/status >& /dev/null || __workdir/../db/start ${MIRRORCACHE_DB_START_OPTS:-} [ -e __workdir/../db/sql_mc_test ] || __workdir/../db/create_db mc_test ( diff --git a/t/lib/environ/mc/source/backstage/job.sh.m4 b/t/lib/environ/mc/source/backstage/job.sh.m4 index 00988e33..6fc611c1 100644 --- a/t/lib/environ/mc/source/backstage/job.sh.m4 +++ b/t/lib/environ/mc/source/backstage/job.sh.m4 @@ -3,7 +3,7 @@ set -e __workdir/../gen_env source __workdir/../conf.env -__workdir/../db/status >& /dev/null || __workdir/../db/start +__workdir/../db/status >& /dev/null || __workdir/../db/start ${MIRRORCACHE_DB_START_OPTS:-} [ -e __workdir/../db/sql_mc_test ] || __workdir/../db/create_db mc_test ( diff --git a/t/lib/environ/mc/source/backstage/shoot.sh.m4 b/t/lib/environ/mc/source/backstage/shoot.sh.m4 index 89ae3da1..7d6f2826 100644 --- a/t/lib/environ/mc/source/backstage/shoot.sh.m4 +++ b/t/lib/environ/mc/source/backstage/shoot.sh.m4 @@ -3,7 +3,7 @@ set -e __workdir/../gen_env source __workdir/../conf.env -__workdir/../db/status >& /dev/null || __workdir/../db/start +__workdir/../db/status >& /dev/null || __workdir/../db/start ${MIRRORCACHE_DB_START_OPTS:-} [ -e __workdir/../db/sql_mc_test ] || __workdir/../db/create_db mc_test ( diff --git a/t/lib/environ/mc/source/backstage/start.sh.m4 b/t/lib/environ/mc/source/backstage/start.sh.m4 index b3792885..9822ba22 100644 --- a/t/lib/environ/mc/source/backstage/start.sh.m4 +++ b/t/lib/environ/mc/source/backstage/start.sh.m4 @@ -3,7 +3,7 @@ set -e __workdir/../gen_env source __workdir/../conf.env -__workdir/../db/status >& /dev/null || __workdir/../db/start +__workdir/../db/status >& /dev/null || __workdir/../db/start ${MIRRORCACHE_DB_START_OPTS:-} [ -e __workdir/../db/sql_mc_test ] || __workdir/../db/create_db mc_test ( diff --git a/t/lib/environ/mc/source/build.sh.m4 b/t/lib/environ/mc/source/build.sh.m4 index 9798c124..415a1c8b 100644 --- a/t/lib/environ/mc/source/build.sh.m4 +++ b/t/lib/environ/mc/source/build.sh.m4 @@ -1,6 +1,8 @@ if [ "$MIRRORCACHE_DB_PROVIDER" == mariadb ]; then ln -sf __workdir/ma __workdir/db rm -r __workdir/pg + # Patch the compiled ma/start script so that all manual/standalone db starts also respect MIRRORCACHE_DB_AIO=0 + sed -i 's,\$eatmydata /usr/sbin/mariadbd,extra_opts=""; if [ "${MIRRORCACHE_DB_AIO:-1}" = "0" ]; then extra_opts="--innodb-use-native-aio=0"; fi; \$eatmydata /usr/sbin/mariadbd \$extra_opts,g' __workdir/ma/start else ln -sf __workdir/pg __workdir/db rm -r __workdir/ma diff --git a/t/lib/environ/mc/source/gen_env.sh.m4 b/t/lib/environ/mc/source/gen_env.sh.m4 index 57d12900..443d7842 100644 --- a/t/lib/environ/mc/source/gen_env.sh.m4 +++ b/t/lib/environ/mc/source/gen_env.sh.m4 @@ -6,6 +6,9 @@ echo __dbi='$(__workdir/db/print_dbi mc_test)' if test "${MIRRORCACHE_DB_PROVIDER}" == mariadb; then echo export TEST_MYSQL='${__dbi//\/ma\//\/db\//}' echo export MARIADB_TLS_DISABLE_PEER_VERIFICATION=1 + if test "${MIRRORCACHE_DB_AIO:-1}" == 0; then + echo 'export MIRRORCACHE_DB_START_OPTS="--innodb-use-native-aio=0 ${MIRRORCACHE_DB_START_OPTS:-}"' + fi else echo export TEST_PG='${__dbi//\/pg\//\/db\//}' fi diff --git a/t/lib/test-in-container-environ.sh b/t/lib/test-in-container-environ.sh index 2007a60b..2d21b682 100755 --- a/t/lib/test-in-container-environ.sh +++ b/t/lib/test-in-container-environ.sh @@ -62,7 +62,7 @@ if [[ -n "$MIRRORCACHE_CITY_MMDB" ]]; then [[ -f "$MIRRORCACHE_CITY_MMDB" ]] && mc_database+=" -v $MIRRORCACHE_CITY_MMDB:$MIRRORCACHE_CITY_MMDB" fi -docker run $map_port $mc_database --env MIRRORCACHE_PERMANENT_JOBS="" --env MIRRORCACHE_DB_PROVIDER=$dbprovider --rm --name "$containername" --env REBUILD=1 -d -v"$thisdir/../../..":/opt/project -- $ident.image +docker run $map_port $mc_database --env MIRRORCACHE_PERMANENT_JOBS="" --env MIRRORCACHE_DB_PROVIDER=$dbprovider --env MIRRORCACHE_DB_AIO="${MIRRORCACHE_DB_AIO:-}" --rm --name "$containername" --env REBUILD=1 -d -v"$thisdir/../../..":/opt/project -- $ident.image in_cleanup=0 @@ -94,6 +94,6 @@ echo "$*" [ -z $initscript ] || echo "bash -xe /opt/project/t/$initscript" | docker exec -i "$containername" bash -x set +ex -docker exec -e TESTCASE="$testcase" -e MIRRORCACHE_DB_PROVIDER=$dbprovider -i "$containername" bash -c "useradd $(id -nu) -u $(id -u) || :; sudo -E -u \#$(id -u) bash" < "$testcase" +docker exec -e TESTCASE="$testcase" -e MIRRORCACHE_DB_PROVIDER=$dbprovider -e MIRRORCACHE_DB_AIO="${MIRRORCACHE_DB_AIO:-}" -i "$containername" bash -c "useradd $(id -nu) -u $(id -u) || :; sudo -E -u \#$(id -u) bash" < "$testcase" ret=$? ( exit $ret )