| #!/usr/bin/env bash | |
| # Licensed to the Apache Software Foundation (ASF) under one | |
| # or more contributor license agreements. See the NOTICE file | |
| # distributed with this work for additional information | |
| # regarding copyright ownership. The ASF licenses this file | |
| # to you under the Apache License, Version 2.0 (the | |
| # "License"); you may not use this file except in compliance | |
| # with the License. You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, | |
| # software distributed under the License is distributed on an | |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| # KIND, either express or implied. See the License for the | |
| # specific language governing permissions and limitations | |
| # under the License. | |
| # shellcheck shell=bash | |
| # shellcheck source=scripts/docker/common.sh | |
| . "$( dirname "${BASH_SOURCE[0]}" )/common.sh" | |
| set -euo pipefail | |
| common::get_colors | |
| declare -a packages | |
| # https://mariadb.org/about/#maintenance-policy | |
| readonly MARIADB_LTS_VERSION="10.11" | |
| : "${INSTALL_MYSQL_CLIENT:?Should be true or false}" | |
| : "${INSTALL_MYSQL_CLIENT_TYPE:-mariadb}" | |
| if [[ "${INSTALL_MYSQL_CLIENT}" != "true" && "${INSTALL_MYSQL_CLIENT}" != "false" ]]; then | |
| echo | |
| echo "${COLOR_RED}INSTALL_MYSQL_CLIENT must be either true or false${COLOR_RESET}" | |
| echo | |
| exit 1 | |
| fi | |
| if [[ "${INSTALL_MYSQL_CLIENT_TYPE}" != "mysql" && "${INSTALL_MYSQL_CLIENT_TYPE}" != "mariadb" ]]; then | |
| echo | |
| echo "${COLOR_RED}INSTALL_MYSQL_CLIENT_TYPE must be either mysql or mariadb${COLOR_RESET}" | |
| echo | |
| exit 1 | |
| fi | |
| if [[ "${INSTALL_MYSQL_CLIENT_TYPE}" == "mysql" ]]; then | |
| echo | |
| echo "${COLOR_RED}The 'mysql' client type is not supported any more. Use 'mariadb' instead.${COLOR_RESET}" | |
| echo | |
| echo "The MySQL drivers are wrongly packaged and released by Oracle with an expiration date on their GPG keys," | |
| echo "which causes builds to fail after the expiration date. MariaDB client is protocol-compatible with MySQL client." | |
| echo "" | |
| echo "Every two years the MySQL packages fail and Oracle team is always surprised and struggling" | |
| echo "with fixes and re-signing the packages which lasts few days" | |
| echo "See https://bugs.mysql.com/bug.php?id=113432 for more details." | |
| echo "As a community we are not able to support this broken packaging practice from Oracle" | |
| echo "Feel free however to install MySQL drivers on your own as extension of the image." | |
| echo | |
| exit 1 | |
| fi | |
| retry() { | |
| local retries=3 | |
| local count=0 | |
| # adding delay of 10 seconds | |
| local delay=10 | |
| until "$@"; do | |
| exit_code=$? | |
| count=$((count + 1)) | |
| if [[ $count -lt $retries ]]; then | |
| echo "Command failed. Attempt $count/$retries. Retrying in ${delay}s..." | |
| sleep $delay | |
| else | |
| echo "Command failed after $retries attempts." | |
| return $exit_code | |
| fi | |
| done | |
| } | |
| install_mariadb_client() { | |
| # List of compatible package Oracle MySQL -> MariaDB: | |
| # `mysql-client` -> `mariadb-client` or `mariadb-client-compat` (11+) | |
| # `libmysqlclientXX` (where XX is a number) -> `libmariadb3-compat` | |
| # `libmysqlclient-dev` -> `libmariadb-dev-compat` | |
| # | |
| # Different naming against Debian repo which we used before | |
| # that some of packages might contains `-compat` suffix, Debian repo -> MariaDB repo: | |
| # `libmariadb-dev` -> `libmariadb-dev-compat` | |
| # `mariadb-client-core` -> `mariadb-client` or `mariadb-client-compat` (11+) | |
| if [[ "${1}" == "dev" ]]; then | |
| packages=("libmariadb-dev-compat" "mariadb-client") | |
| elif [[ "${1}" == "prod" ]]; then | |
| packages=("libmariadb3-compat" "mariadb-client") | |
| else | |
| echo | |
| echo "${COLOR_RED}Specify either prod or dev${COLOR_RESET}" | |
| echo | |
| exit 1 | |
| fi | |
| common::import_trusted_gpg "0xF1656F24C74CD1D8" "mariadb" | |
| echo | |
| echo "${COLOR_BLUE}Installing MariaDB client version ${MARIADB_LTS_VERSION}: ${1}${COLOR_RESET}" | |
| echo "${COLOR_YELLOW}MariaDB client protocol-compatible with MySQL client.${COLOR_RESET}" | |
| echo | |
| echo "deb [arch=amd64,arm64] https://archive.mariadb.org/mariadb-${MARIADB_LTS_VERSION}/repo/debian/ $(lsb_release -cs) main" > \ | |
| /etc/apt/sources.list.d/mariadb.list | |
| # Make sure that dependencies from MariaDB repo are preferred over Debian dependencies | |
| printf "Package: *\nPin: release o=MariaDB\nPin-Priority: 999\n" > /etc/apt/preferences.d/mariadb | |
| retry apt-get update | |
| retry apt-get install --no-install-recommends -y "${packages[@]}" | |
| apt-get autoremove -yqq --purge | |
| apt-get clean && rm -rf /var/lib/apt/lists/* | |
| } | |
| if [[ ${INSTALL_MYSQL_CLIENT:="true"} == "true" ]]; then | |
| install_mariadb_client "${@}" | |
| fi |