Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[bitnami/percona-mysql] Release 8.0.36-28-debian-12-r9 #69051

Merged
merged 1 commit into from
Jul 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions bitnami/percona-mysql/8.0/debian-12/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ ARG TARGETARCH

LABEL com.vmware.cp.artifact.flavor="sha256:c50c90cfd9d12b445b011e6ad529f1ad3daea45c26d20b00732fae3cd71f6a83" \
org.opencontainers.image.base.name="docker.io/bitnami/minideb:bookworm" \
org.opencontainers.image.created="2024-06-29T17:08:15Z" \
org.opencontainers.image.created="2024-07-06T09:19:50Z" \
org.opencontainers.image.description="Application packaged by Broadcom, Inc." \
org.opencontainers.image.documentation="https://github.com/bitnami/containers/tree/main/bitnami/percona-mysql/README.md" \
org.opencontainers.image.licenses="Apache-2.0" \
org.opencontainers.image.ref.name="8.0.36-28-debian-12-r8" \
org.opencontainers.image.ref.name="8.0.36-28-debian-12-r9" \
org.opencontainers.image.source="https://github.com/bitnami/containers/tree/main/bitnami/percona-mysql" \
org.opencontainers.image.title="percona-mysql" \
org.opencontainers.image.vendor="Broadcom, Inc." \
Expand All @@ -28,8 +28,8 @@ SHELL ["/bin/bash", "-o", "errexit", "-o", "nounset", "-o", "pipefail", "-c"]
RUN install_packages ca-certificates curl libaio1 libaudit1 libbrotli1 libbz2-1.0 libcap-ng0 libcom-err2 libcrypt1 libcurl4 libev4 libffi8 libgcc-s1 libgmp10 libgnutls30 libgssapi-krb5-2 libhogweed6 libidn2-0 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libldap-2.5-0 libnettle8 libnghttp2-14 libnuma-dev libp11-kit0 libpam0g libpsl5 librtmp1 libsasl2-2 libssh2-1 libssl3 libstdc++6 libtasn1-6 libudev0 libudev1 libunistring2 libuuid1 libzstd1 procps zlib1g
RUN mkdir -p /tmp/bitnami/pkg/cache/ ; cd /tmp/bitnami/pkg/cache/ ; \
COMPONENTS=( \
"mysql-shell-8.0.37-1-linux-${OS_ARCH}-debian-12" \
"ini-file-1.4.6-14-linux-${OS_ARCH}-debian-12" \
"mysql-shell-8.0.38-0-linux-${OS_ARCH}-debian-12" \
"ini-file-1.4.7-2-linux-${OS_ARCH}-debian-12" \
"percona-mysql-8.0.36-28-1-linux-${OS_ARCH}-debian-12" \
) ; \
for COMPONENT in "${COMPONENTS[@]}"; do \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
"arch": "amd64",
"distro": "debian-12",
"type": "NAMI",
"version": "1.4.6-14"
"version": "1.4.7-2"
},
"mysql-shell": {
"arch": "amd64",
"distro": "debian-12",
"type": "NAMI",
"version": "8.0.37-1"
"version": "8.0.38-0"
},
"percona-mysql": {
"arch": "amd64",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,47 @@ flush privileges;
EOF
}

########################
# Initialize database data
# Globals:
# BITNAMI_DEBUG
# DB_*
# Arguments:
# None
# Returns:
# None
#########################
mysql_install_db() {
local command="${DB_BIN_DIR}/mysql_install_db"
local -a args=("--defaults-file=${DB_CONF_FILE}" "--basedir=${DB_BASE_DIR}" "--datadir=${DB_DATA_DIR}")

# Add flags specified via the 'DB_EXTRA_FLAGS' environment variable
read -r -a db_extra_flags <<< "$(mysql_extra_flags)"
[[ "${#db_extra_flags[@]}" -gt 0 ]] && args+=("${db_extra_flags[@]}")

am_i_root && args=("${args[@]}" "--user=$DB_DAEMON_USER")
command="${DB_BIN_DIR}/mysqld"
args+=("--initialize-insecure")

debug_execute "$command" "${args[@]}"
}

########################
# Upgrade Database Schema
# Globals:
# BITNAMI_DEBUG
# DB_*
# Arguments:
# None
# Returns:
# None
#########################
mysql_upgrade() {
info "Running mysql_upgrade"
mysql_stop
mysql_start_bg "--upgrade=${DB_UPGRADE}"
}

########################
# Ensure MySQL/MariaDB is initialized
# Globals:
Expand Down Expand Up @@ -354,7 +395,7 @@ mysql_initialize() {
# commands can still be executed until we restart or run 'flush privileges'
info "Configuring authentication"
mysql_execute "mysql" <<EOF
DELETE FROM mysql.user WHERE user not in ('mysql.sys','mariadb.sys');
DELETE FROM mysql.user WHERE user not in ('mysql.sys','mysql.infoschema','mysql.session','mariadb.sys');
EOF
# slaves do not need to configure users
if [[ -z "$DB_REPLICATION_MODE" ]] || [[ "$DB_REPLICATION_MODE" = "master" ]]; then
Expand Down Expand Up @@ -482,6 +523,96 @@ mysql_start_bg() {
fi
}

########################
# Ensure a db user exists with the given password for the '%' host
# Globals:
# DB_*
# Flags:
# -p|--password - database password
# -u|--user - database user
# --auth-plugin - authentication plugin
# --use-ldap - authenticate user via LDAP
# --host - database host
# --port - database host
# Arguments:
# $1 - database user
# Returns:
# None
#########################
mysql_ensure_user_exists() {
local -r user="${1:?user is required}"
local password=""
local auth_plugin=""
local use_ldap="no"
local hosts
local auth_string=""
# For accessing an external database
local db_host=""
local db_port=""

# Validate arguments
shift 1
while [ "$#" -gt 0 ]; do
case "$1" in
-p|--password)
shift
password="${1:?missing database password}"
;;
--auth-plugin)
shift
auth_plugin="${1:?missing authentication plugin}"
;;
--use-ldap)
use_ldap="yes"
;;
--host)
shift
db_host="${1:?missing database host}"
;;
--port)
shift
db_port="${1:?missing database port}"
;;
*)
echo "Invalid command line flag $1" >&2
return 1
;;
esac
shift
done
if is_boolean_yes "$use_ldap"; then
auth_string="identified via pam using '$DB_FLAVOR'"
elif [[ -n "$password" ]]; then
if [[ -n "$auth_plugin" ]]; then
auth_string="identified with $auth_plugin by '$password'"
else
auth_string="identified by '$password'"
fi
fi
debug "creating database user \'$user\'"

local -a mysql_execute_cmd=("mysql_execute")
local -a mysql_execute_print_output_cmd=("mysql_execute_print_output")
if [[ -n "$db_host" && -n "$db_port" ]]; then
mysql_execute_cmd=("mysql_remote_execute" "$db_host" "$db_port")
mysql_execute_print_output_cmd=("mysql_remote_execute_print_output" "$db_host" "$db_port")
fi

"${mysql_execute_cmd[@]}" "mysql" "$DB_ROOT_USER" "$DB_ROOT_PASSWORD" <<EOF
create user if not exists '${user}'@'%' ${auth_string};
EOF
debug "Removing all other hosts for the user"
hosts=$("${mysql_execute_print_output_cmd[@]}" "mysql" "$DB_ROOT_USER" "$DB_ROOT_PASSWORD" <<EOF
select Host from user where User='${user}' and Host!='%';
EOF
)
for host in $hosts; do
"${mysql_execute_cmd[@]}" "mysql" "$DB_ROOT_USER" "$DB_ROOT_PASSWORD" <<EOF
drop user '$user'@'$host';
EOF
done
}

#!/bin/bash
# Copyright Broadcom, Inc. All Rights Reserved.
# SPDX-License-Identifier: APACHE-2.0
Expand Down Expand Up @@ -769,69 +900,6 @@ mysql_stop() {
fi
}

########################
# Initialize database data
# Globals:
# BITNAMI_DEBUG
# DB_*
# Arguments:
# None
# Returns:
# None
#########################
mysql_install_db() {
local command="${DB_BIN_DIR}/mysql_install_db"
local -a args=("--defaults-file=${DB_CONF_FILE}" "--basedir=${DB_BASE_DIR}" "--datadir=${DB_DATA_DIR}")

# Add flags specified via the 'DB_EXTRA_FLAGS' environment variable
read -r -a db_extra_flags <<< "$(mysql_extra_flags)"
[[ "${#db_extra_flags[@]}" -gt 0 ]] && args+=("${db_extra_flags[@]}")

am_i_root && args=("${args[@]}" "--user=$DB_DAEMON_USER")
if [[ "$DB_FLAVOR" = "mariadb" ]]; then
args+=("--auth-root-authentication-method=normal")
# Feature available only in MariaDB 10.5+
# ref: https://mariadb.com/kb/en/mysql_install_db/#not-creating-the-test-database-and-anonymous-user
if [[ ! "$(mysql_get_version)" =~ ^10\.[01234]\. ]]; then
is_boolean_yes "$DB_SKIP_TEST_DB" && args+=("--skip-test-db")
fi
else
command="${DB_BIN_DIR}/mysqld"
args+=("--initialize-insecure")
fi
debug_execute "$command" "${args[@]}"
}

########################
# Upgrade Database Schema
# Globals:
# BITNAMI_DEBUG
# DB_*
# Arguments:
# None
# Returns:
# None
#########################
mysql_upgrade() {
local -a args=("--defaults-file=${DB_CONF_FILE}" "-u" "$DB_ROOT_USER")
local major_version minor_version patch_version
major_version="$(get_sematic_version "$(mysql_get_version)" 1)"
minor_version="$(get_sematic_version "$(mysql_get_version)" 2)"
patch_version="$(get_sematic_version "$(mysql_get_version)" 3)"
info "Running mysql_upgrade"
if [[ "$DB_FLAVOR" = *"mysql"* ]] && [[
"$major_version" -gt "8"
|| ( "$major_version" -eq "8" && "$minor_version" -gt "0" )
|| ( "$major_version" -eq "8" && "$minor_version" -eq "0" && "$patch_version" -ge "16" )
]]; then
mysql_stop
mysql_start_bg "--upgrade=FORCE"
else
mysql_start_bg
is_boolean_yes "${ROOT_AUTH_ENABLED:-false}" && args+=("-p$(get_master_env_var_value ROOT_PASSWORD)")
debug_execute "${DB_BIN_DIR}/mysql_upgrade" "${args[@]}" || echo "This installation is already upgraded"
fi
}

########################
# Migrate old custom configuration files
Expand Down Expand Up @@ -860,98 +928,6 @@ mysql_migrate_old_configuration() {
fi
}

########################
# Ensure a db user exists with the given password for the '%' host
# Globals:
# DB_*
# Flags:
# -p|--password - database password
# -u|--user - database user
# --auth-plugin - authentication plugin
# --use-ldap - authenticate user via LDAP
# --host - database host
# --port - database host
# Arguments:
# $1 - database user
# Returns:
# None
#########################
mysql_ensure_user_exists() {
local -r user="${1:?user is required}"
local password=""
local auth_plugin=""
local use_ldap="no"
local hosts
local auth_string=""
# For accessing an external database
local db_host=""
local db_port=""

# Validate arguments
shift 1
while [ "$#" -gt 0 ]; do
case "$1" in
-p|--password)
shift
password="${1:?missing database password}"
;;
--auth-plugin)
shift
auth_plugin="${1:?missing authentication plugin}"
;;
--use-ldap)
use_ldap="yes"
;;
--host)
shift
db_host="${1:?missing database host}"
;;
--port)
shift
db_port="${1:?missing database port}"
;;
*)
echo "Invalid command line flag $1" >&2
return 1
;;
esac
shift
done
if is_boolean_yes "$use_ldap"; then
auth_string="identified via pam using '$DB_FLAVOR'"
elif [[ -n "$password" ]]; then
if [[ -n "$auth_plugin" ]]; then
auth_string="identified with $auth_plugin by '$password'"
else
auth_string="identified by '$password'"
fi
fi
debug "creating database user \'$user\'"

local -a mysql_execute_cmd=("mysql_execute")
local -a mysql_execute_print_output_cmd=("mysql_execute_print_output")
if [[ -n "$db_host" && -n "$db_port" ]]; then
mysql_execute_cmd=("mysql_remote_execute" "$db_host" "$db_port")
mysql_execute_print_output_cmd=("mysql_remote_execute_print_output" "$db_host" "$db_port")
fi

local mysql_create_user_cmd
[[ "$DB_FLAVOR" = "mariadb" ]] && mysql_create_user_cmd="create or replace user" || mysql_create_user_cmd="create user if not exists"
"${mysql_execute_cmd[@]}" "mysql" "$DB_ROOT_USER" "$DB_ROOT_PASSWORD" <<EOF
${mysql_create_user_cmd} '${user}'@'%' ${auth_string};
EOF
debug "Removing all other hosts for the user"
hosts=$("${mysql_execute_print_output_cmd[@]}" "mysql" "$DB_ROOT_USER" "$DB_ROOT_PASSWORD" <<EOF
select Host from user where User='${user}' and Host!='%';
EOF
)
for host in $hosts; do
"${mysql_execute_cmd[@]}" "mysql" "$DB_ROOT_USER" "$DB_ROOT_PASSWORD" <<EOF
drop user '$user'@'$host';
EOF
done
}

########################
# Ensure a db user does not exist
# Globals:
Expand Down Expand Up @@ -1189,7 +1165,7 @@ mysql_ensure_optional_user_exists() {
flags+=("-p" "$password")
[[ -n "$auth_plugin" ]] && flags=("${flags[@]}" "--auth-plugin" "$auth_plugin")
fi
mysql_ensure_user_exists "${flags[@]}"
"${DB_FLAVOR}"_ensure_user_exists "${flags[@]}"
}

########################
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ mysql_env_vars=(
MYSQL_COLLATE
MYSQL_BIND_ADDRESS
MYSQL_SQL_MODE
MYSQL_UPGRADE
MYSQL_IS_DEDICATED_SERVER
MYSQL_CLIENT_ENABLE_SSL
MYSQL_CLIENT_SSL_CA_FILE
Expand Down Expand Up @@ -151,6 +152,8 @@ export MYSQL_BIND_ADDRESS="${MYSQL_BIND_ADDRESS:-}"
export DB_BIND_ADDRESS="$MYSQL_BIND_ADDRESS"
export MYSQL_SQL_MODE="${MYSQL_SQL_MODE:-}"
export DB_SQL_MODE="$MYSQL_SQL_MODE"
export MYSQL_UPGRADE="${MYSQL_UPGRADE:-AUTO}"
export DB_UPGRADE="$MYSQL_UPGRADE"
export MYSQL_IS_DEDICATED_SERVER="${MYSQL_IS_DEDICATED_SERVER:-}"
export DB_IS_DEDICATED_SERVER="$MYSQL_IS_DEDICATED_SERVER"
export MYSQL_CLIENT_ENABLE_SSL="${MYSQL_CLIENT_ENABLE_SSL:-no}"
Expand Down
1 change: 1 addition & 0 deletions bitnami/percona-mysql/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ docker build -t bitnami/APP:latest .
| `MYSQL_COLLATE` | Percona Server for MySQL collation to use. | `nil` |
| `MYSQL_BIND_ADDRESS` | Percona Server for MySQL bind address. | `nil` |
| `MYSQL_SQL_MODE` | Percona Server for MySQL Server SQL modes to enable. | `nil` |
| `MYSQL_UPGRADE` | Percona Server for MySQL upgrade option. | `AUTO` |
| `MYSQL_IS_DEDICATED_SERVER` | Whether the Percona Server for MySQL Server will run on a dedicated node. | `nil` |
| `MYSQL_CLIENT_ENABLE_SSL` | Whether to force SSL for connections to the Percona Server for MySQL database. | `no` |
| `MYSQL_CLIENT_SSL_CA_FILE` | Path to CA certificate to use for SSL connections to the Percona Server for MySQL database server. | `nil` |
Expand Down
Loading