-
Notifications
You must be signed in to change notification settings - Fork 29
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 330b40b
Showing
189 changed files
with
27,858 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
.classpath | ||
.project | ||
.settings | ||
|
||
# Keep empty directories: | ||
# Keep empty directories: >> .gitignore/.git* | ||
/target/ | ||
.idea | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
#dist: trusty | ||
sudo: false | ||
language: java | ||
services: docker | ||
addons: | ||
hosts: | ||
- mariadb.example.com | ||
jdk: openjdk11 | ||
|
||
before_install: | ||
- chmod +x .travis/script.sh .travis/build/build.sh .travis/gen-ssl.sh .travis/build/docker-entrypoint.sh | ||
- chmod 777 .travis/build/ | ||
- echo "MAVEN_OPTS='-Xmx384m'" > ~/.mavenrc | ||
|
||
install: | ||
- wget -qO- 'https://github.com/tianon/pgp-happy-eyeballs/raw/master/hack-my-builds.sh' | bash | ||
- mkdir tmp | ||
- .travis/gen-ssl.sh mariadb.example.com tmp | ||
- export PROJ_PATH=`pwd` | ||
- export SSLCERT=$PROJ_PATH/tmp | ||
- export ENTRYPOINT=$PROJ_PATH/.travis/sql | ||
- export TEST_SERVER_SSL_CERT=$SSLCERT/server.crt | ||
- export TEST_CLIENT_SSL_CERT=$SSLCERT/client.crt | ||
- export TEST_CLIENT_KEY=$SSLCERT/client.key | ||
|
||
cache: | ||
directories: | ||
- $HOME/.m2 | ||
|
||
matrix: | ||
# allow_failures: | ||
# - env: DB=build | ||
include: | ||
# - env: DB=mariadb:5.5 | ||
# - env: DB=mariadb:10.1 | ||
# - env: DB=mariadb:10.2 | ||
# - env: DB=mariadb:10.3 | ||
# - env: DB=mariadb:10.4 | ||
# - env: DB=mariadb:10.4 BENCHMARK=1 | ||
# - env: DB=mariadb:10.5 | ||
# - env: DB=mariadb:10.4 MAXSCALE_VERSION=2.2.9 | ||
# - env: DB=build | ||
# - env: DB=mysql:5.6 | ||
# - env: DB=mysql:5.7 | ||
- env: DB=mysql:8.0 ADDITIONAL_CONF=--default-authentication-plugin=mysql_native_password --caching_sha2_password_private_key_path=/etc/sslcert/server.key --caching_sha2_password_public_key_path=/etc/sslcert/public.key --sha256_password_public_key_path=/etc/sslcert/public.key --sha256_password_private_key_path=/etc/sslcert/server.key | ||
|
||
script: | ||
- if [ "$DB" = "build" ] ; then .travis/build/build.sh; fi | ||
- if [ "$DB" = "build" ] ; then docker build -t build:latest --label build .travis/build/; fi | ||
- .travis/script.sh | ||
|
||
after_success: | ||
- bash <(curl -s https://codecov.io/bash) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
# vim:set ft=dockerfile: | ||
FROM ubuntu:bionic | ||
|
||
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added | ||
RUN groupadd -r mysql && useradd -r -g mysql mysql | ||
|
||
# https://bugs.debian.org/830696 (apt uses gpgv by default in newer releases, rather than gpg) | ||
RUN set -ex; \ | ||
apt-get update; \ | ||
if ! which gpg; then \ | ||
apt-get install -y --no-install-recommends gnupg; \ | ||
fi; \ | ||
# Ubuntu includes "gnupg" (not "gnupg2", but still 2.x), but not dirmngr, and gnupg 2.x requires dirmngr | ||
# so, if we're not running gnupg 1.x, explicitly install dirmngr too | ||
if ! gpg --version | grep -q '^gpg (GnuPG) 1\.'; then \ | ||
apt-get install -y --no-install-recommends dirmngr; \ | ||
fi; \ | ||
rm -rf /var/lib/apt/lists/* | ||
|
||
# add gosu for easy step-down from root | ||
ENV GOSU_VERSION 1.10 | ||
RUN set -ex; \ | ||
\ | ||
fetchDeps=' \ | ||
ca-certificates \ | ||
wget \ | ||
'; \ | ||
apt-get update; \ | ||
apt-get install -y --no-install-recommends $fetchDeps; \ | ||
rm -rf /var/lib/apt/lists/*; \ | ||
\ | ||
dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \ | ||
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \ | ||
wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \ | ||
\ | ||
# verify the signature | ||
export GNUPGHOME="$(mktemp -d)"; \ | ||
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \ | ||
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \ | ||
command -v gpgconf > /dev/null && gpgconf --kill all || :; \ | ||
rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc; \ | ||
\ | ||
chmod +x /usr/local/bin/gosu; \ | ||
# verify that the binary works | ||
gosu nobody true; \ | ||
\ | ||
apt-get purge -y --auto-remove $fetchDeps | ||
|
||
RUN mkdir /docker-entrypoint-initdb.d | ||
|
||
# install "pwgen" for randomizing passwords | ||
# install "apt-transport-https" for Percona's repo (switched to https-only) | ||
RUN apt-get update && apt-get install -y --no-install-recommends \ | ||
apt-transport-https ca-certificates \ | ||
tzdata \ | ||
pwgen \ | ||
&& rm -rf /var/lib/apt/lists/* | ||
|
||
RUN { \ | ||
echo "mariadb-server-10.4" mysql-server/root_password password 'unused'; \ | ||
echo "mariadb-server-10.4" mysql-server/root_password_again password 'unused'; \ | ||
} | debconf-set-selections | ||
|
||
RUN apt-get update -y | ||
RUN apt-get install -y software-properties-common wget | ||
RUN apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db | ||
RUN apt-key adv --recv-keys --keyserver ha.pool.sks-keyservers.net F1656F24C74CD1D8 | ||
RUN echo 'deb http://yum.mariadb.org/galera/repo/deb bionic main' > /etc/apt/sources.list.d/galera-test-repo.list | ||
RUN apt-get update -y | ||
|
||
RUN apt-get install -y curl libdbi-perl rsync socat galera3 libnuma1 libaio1 zlib1g-dev libreadline5 libjemalloc1 libsnappy1v5 libcrack2 | ||
|
||
COPY *.deb /root/ | ||
RUN chmod 777 /root/* | ||
|
||
RUN dpkg --install /root/mysql-common* | ||
RUN dpkg --install /root/mariadb-common* | ||
RUN dpkg -R --unpack /root/ | ||
RUN apt-get install -f -y | ||
|
||
RUN rm -rf /var/lib/apt/lists/* \ | ||
&& sed -ri 's/^user\s/#&/' /etc/mysql/my.cnf /etc/mysql/conf.d/* \ | ||
&& rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql /var/run/mysqld \ | ||
&& chown -R mysql:mysql /var/lib/mysql /var/run/mysqld \ | ||
&& chmod 777 /var/run/mysqld \ | ||
&& find /etc/mysql/ -name '*.cnf' -print0 \ | ||
| xargs -0 grep -lZE '^(bind-address|log)' \ | ||
| xargs -rt -0 sed -Ei 's/^(bind-address|log)/#&/' \ | ||
&& echo '[mysqld]\nskip-host-cache\nskip-name-resolve' > /etc/mysql/conf.d/docker.cnf | ||
|
||
VOLUME /var/lib/mysql | ||
|
||
COPY docker-entrypoint.sh /usr/local/bin/ | ||
RUN ln -s usr/local/bin/docker-entrypoint.sh / # backwards compat | ||
ENTRYPOINT ["docker-entrypoint.sh"] | ||
|
||
EXPOSE 3306 | ||
CMD ["mysqld"] | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
#!/usr/bin/env bash | ||
|
||
echo "**************************************************************************" | ||
echo "* searching for last complete build" | ||
echo "**************************************************************************" | ||
|
||
wget -q -o /dev/null index.html http://hasky.askmonty.org/archive/10.4/ | ||
grep -o ">build-[0-9]*" index.html | grep -o "[0-9]*" | tac | while read -r line; do | ||
|
||
curl -s --head http://hasky.askmonty.org/archive/10.4/build-$line/kvm-deb-bionic-amd64/md5sums.txt | head -n 1 | grep "HTTP/1.[01] [23].." >/dev/null | ||
if [ $? = "0" ]; then | ||
echo "**************************************************************************" | ||
echo "* Processing $line" | ||
echo "**************************************************************************" | ||
wget -q -o /dev/null -O $line.html http://hasky.askmonty.org/archive/10.4/build-$line/kvm-deb-bionic-amd64/debs/binary/ | ||
grep -o ">[^\"]*\.deb" $line.html | grep -o "[^>]*\.deb" | while read -r file; do | ||
if [[ "$file" =~ ^mariadb-plugin.* ]]; then | ||
echo "skipped file: $file" | ||
else | ||
echo "download file: $file" | ||
wget -q -o /dev/null -O .travis/build/$file http://hasky.askmonty.org/archive/10.4/build-$line/kvm-deb-bionic-amd64/debs/binary/$file | ||
fi | ||
done | ||
|
||
exit | ||
else | ||
echo "skip build $line" | ||
fi | ||
done |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,196 @@ | ||
#!/bin/bash | ||
set -eo pipefail | ||
shopt -s nullglob | ||
|
||
# if command starts with an option, prepend mysqld | ||
if [ "${1:0:1}" = '-' ]; then | ||
set -- mysqld "$@" | ||
fi | ||
|
||
# skip setup if they want an option that stops mysqld | ||
wantHelp= | ||
for arg; do | ||
case "$arg" in | ||
-'?'|--help|--print-defaults|-V|--version) | ||
wantHelp=1 | ||
break | ||
;; | ||
esac | ||
done | ||
|
||
# usage: file_env VAR [DEFAULT] | ||
# ie: file_env 'XYZ_DB_PASSWORD' 'example' | ||
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of | ||
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) | ||
file_env() { | ||
local var="$1" | ||
local fileVar="${var}_FILE" | ||
local def="${2:-}" | ||
if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then | ||
echo >&2 "error: both $var and $fileVar are set (but are exclusive)" | ||
exit 1 | ||
fi | ||
local val="$def" | ||
if [ "${!var:-}" ]; then | ||
val="${!var}" | ||
elif [ "${!fileVar:-}" ]; then | ||
val="$(< "${!fileVar}")" | ||
fi | ||
export "$var"="$val" | ||
unset "$fileVar" | ||
} | ||
|
||
_check_config() { | ||
toRun=( "$@" --verbose --help --log-bin-index="$(mktemp -u)" ) | ||
if ! errors="$("${toRun[@]}" 2>&1 >/dev/null)"; then | ||
cat >&2 <<-EOM | ||
ERROR: mysqld failed while attempting to check config | ||
command was: "${toRun[*]}" | ||
$errors | ||
EOM | ||
exit 1 | ||
fi | ||
} | ||
|
||
# Fetch value from server config | ||
# We use mysqld --verbose --help instead of my_print_defaults because the | ||
# latter only show values present in config files, and not server defaults | ||
_get_config() { | ||
local conf="$1"; shift | ||
"$@" --verbose --help --log-bin-index="$(mktemp -u)" 2>/dev/null \ | ||
| awk '$1 == "'"$conf"'" && /^[^ \t]/ { sub(/^[^ \t]+[ \t]+/, ""); print; exit }' | ||
# match "datadir /some/path with/spaces in/it here" but not "--xyz=abc\n datadir (xyz)" | ||
} | ||
|
||
# allow the container to be started with `--user` | ||
if [ "$1" = 'mysqld' -a -z "$wantHelp" -a "$(id -u)" = '0' ]; then | ||
_check_config "$@" | ||
DATADIR="$(_get_config 'datadir' "$@")" | ||
mkdir -p "$DATADIR" | ||
find "$DATADIR" \! -user mysql -exec chown mysql '{}' + | ||
exec gosu mysql "$BASH_SOURCE" "$@" | ||
fi | ||
|
||
if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then | ||
# still need to check config, container may have started with --user | ||
_check_config "$@" | ||
# Get config | ||
DATADIR="$(_get_config 'datadir' "$@")" | ||
|
||
if [ ! -d "$DATADIR/mysql" ]; then | ||
file_env 'MYSQL_ROOT_PASSWORD' | ||
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then | ||
echo >&2 'error: database is uninitialized and password option is not specified ' | ||
echo >&2 ' You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD' | ||
exit 1 | ||
fi | ||
|
||
mkdir -p "$DATADIR" | ||
|
||
echo 'Initializing database' | ||
installArgs=( --datadir="$DATADIR" --rpm ) | ||
if { mysql_install_db --help || :; } | grep -q -- '--auth-root-authentication-method'; then | ||
# beginning in 10.4.3, install_db uses "socket" which only allows system user root to connect, switch back to "normal" to allow mysql root without a password | ||
# see https://github.com/mariadb-corporation/server/commit/b9f3f06857ac6f9105dc65caae19782f09b47fb3 | ||
# (this flag doesn't exist in 10.0 and below) | ||
installArgs+=( --auth-root-authentication-method=normal ) | ||
fi | ||
# "Other options are passed to mysqld." (so we pass all "mysqld" arguments directly here) | ||
mysql_install_db "${installArgs[@]}" "${@:2}" | ||
echo 'Database initialized' | ||
|
||
SOCKET="$(_get_config 'socket' "$@")" | ||
"$@" --skip-networking --socket="${SOCKET}" & | ||
pid="$!" | ||
|
||
mysql=( mysql --protocol=socket -uroot -hlocalhost --socket="${SOCKET}" ) | ||
|
||
for i in {30..0}; do | ||
if echo 'SELECT 1' | "${mysql[@]}" &> /dev/null; then | ||
break | ||
fi | ||
echo 'MySQL init process in progress...' | ||
sleep 1 | ||
done | ||
if [ "$i" = 0 ]; then | ||
echo >&2 'MySQL init process failed.' | ||
exit 1 | ||
fi | ||
|
||
if [ -z "$MYSQL_INITDB_SKIP_TZINFO" ]; then | ||
# sed is for https://bugs.mysql.com/bug.php?id=20545 | ||
mysql_tzinfo_to_sql /usr/share/zoneinfo | sed 's/Local time zone must be set--see zic manual page/FCTY/' | "${mysql[@]}" mysql | ||
fi | ||
|
||
if [ ! -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then | ||
export MYSQL_ROOT_PASSWORD="$(pwgen -1 32)" | ||
echo "GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD" | ||
fi | ||
|
||
rootCreate= | ||
# default root to listen for connections from anywhere | ||
file_env 'MYSQL_ROOT_HOST' '%' | ||
if [ ! -z "$MYSQL_ROOT_HOST" -a "$MYSQL_ROOT_HOST" != 'localhost' ]; then | ||
# no, we don't care if read finds a terminating character in this heredoc | ||
# https://unix.stackexchange.com/questions/265149/why-is-set-o-errexit-breaking-this-read-heredoc-expression/265151#265151 | ||
read -r -d '' rootCreate <<-EOSQL || true | ||
CREATE USER 'root'@'${MYSQL_ROOT_HOST}' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ; | ||
GRANT ALL ON *.* TO 'root'@'${MYSQL_ROOT_HOST}' WITH GRANT OPTION ; | ||
EOSQL | ||
fi | ||
|
||
"${mysql[@]}" <<-EOSQL | ||
-- What's done in this file shouldn't be replicated | ||
-- or products like mysql-fabric won't work | ||
SET @@SESSION.SQL_LOG_BIN=0; | ||
DELETE FROM mysql.user WHERE user NOT IN ('mysql.sys', 'mysqlxsys', 'root') OR host NOT IN ('localhost') ; | ||
SET PASSWORD FOR 'root'@'localhost'=PASSWORD('${MYSQL_ROOT_PASSWORD}') ; | ||
GRANT ALL ON *.* TO 'root'@'localhost' WITH GRANT OPTION ; | ||
${rootCreate} | ||
DROP DATABASE IF EXISTS test ; | ||
FLUSH PRIVILEGES ; | ||
EOSQL | ||
|
||
if [ ! -z "$MYSQL_ROOT_PASSWORD" ]; then | ||
mysql+=( -p"${MYSQL_ROOT_PASSWORD}" ) | ||
fi | ||
|
||
file_env 'MYSQL_DATABASE' | ||
if [ "$MYSQL_DATABASE" ]; then | ||
echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ;" | "${mysql[@]}" | ||
mysql+=( "$MYSQL_DATABASE" ) | ||
fi | ||
|
||
file_env 'MYSQL_USER' | ||
file_env 'MYSQL_PASSWORD' | ||
if [ "$MYSQL_USER" -a "$MYSQL_PASSWORD" ]; then | ||
echo "CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD' ;" | "${mysql[@]}" | ||
|
||
if [ "$MYSQL_DATABASE" ]; then | ||
echo "GRANT ALL ON \`$MYSQL_DATABASE\`.* TO '$MYSQL_USER'@'%' ;" | "${mysql[@]}" | ||
fi | ||
fi | ||
|
||
echo | ||
for f in /docker-entrypoint-initdb.d/*; do | ||
case "$f" in | ||
*.sh) echo "$0: running $f"; . "$f" ;; | ||
*.sql) echo "$0: running $f"; "${mysql[@]}" < "$f"; echo ;; | ||
*.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "${mysql[@]}"; echo ;; | ||
*) echo "$0: ignoring $f" ;; | ||
esac | ||
echo | ||
done | ||
|
||
if ! kill -s TERM "$pid" || ! wait "$pid"; then | ||
echo >&2 'MySQL init process failed.' | ||
exit 1 | ||
fi | ||
|
||
echo | ||
echo 'MySQL init process done. Ready for start up.' | ||
echo | ||
fi | ||
fi | ||
|
||
exec "$@" |
Oops, something went wrong.