#!/bin/bash # # Copyright (C) 2019 OX Software GmbH # # This file is part of OX Automation. # # OX Automation is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # OX Automation is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with OX Automation. If not, see <http://www.gnu.org/licenses/>. # # # Authors: # Benedikt Kroening <benedikt.kroening@open-xchange.com> # set -e SCRIPT_DIR="$( cd "$(dirname "$0")" ; pwd -P)" # sourcing some commonly used functions and executing basic checks source ${SCRIPT_DIR}/../lib/common.bash source ${SCRIPT_DIR}/../lib/setup.bash DB_SERVICE_NAME=mysql ## Help text show_usage() { echo -n " --type mysql|mariadb --version 5.6 ... --root-password --init " } ### reading config from command line; overriding defaults POSITIONAL=() while [[ $# -gt 0 ]] do key="$1" case $key in -h|--help) show_usage exit 0 shift ;; --debug) echo "WARNING: Debug flag set (--debug)" set -x shift ;; --type) DATABASE_TYPE=$s shift shift ;; --version) DATABASE_VERSION=$2 shift shift ;; --root-password) DATABASE_ROOT_PASS="$2" shift shift ;; --init) OX_INIT=true; shift ;; # --foo) # non value argument # INSTALL_FOO=true # shift # ;; # --bar) # argument with value # INSTALL_BAR=true # BAR_VAL=$2 # shift # shift # ;; *) # unknown option echo "Unknonwn option: $1" POSITIONAL+=("$1") # save it in an array for later shift ;; esac done set -- "${POSITIONAL[@]}" # restore positional parameters if [[ -z ${DATABASE_TYPE} ]]; then export DATABASE_TYPE="mysql" fi if [[ -z ${DATABASE_VERSION} ]]; then export DATABASE_VERSION="5.6" fi checkRootPrivileges detectDistribution if [[ -z ${EXECUTED_preInstallActions} ]]; then preInstallActions fi echo "Database setup prepared, Following config will be used" printenv | grep DATABASE_ echo "=== (CTRL+C to cancel) ===" sleep 3 if [[ "${DATABASE_TYPE}" == "mysql" ]]; then echo "Installing mysql-server packages..." echo -n "Adding MySQL repositories" if [[ true == "${ANY_DEB}" ]]; then DB_SERVICE_NAME=mysql # Adding mysql key # apt-key adv --recv-keys 5072E1F5 gpg --keyserver keys.gnupg.net --recv-key 5072E1F5 gpg --export -a 5072E1F5 > mysql-repo.key apt-key add mysql-repo.key { echo "deb http://repo.mysql.com/apt/debian/ ${DIST_VERSION} mysql-$DATABASE_VERSION" echo "deb http://repo.mysql.com/apt/debian/ ${DIST_VERSION} mysql-tools" # echo "deb-src http://repo.mysql.com/apt/debian/ stretch mysql-$DATABASE_VERSION" } > /etc/apt/sources.list.d/mysql.list elif [[ true == "${ANY_SLES}" ]]; then echo "" echo "ERROR: database setup on sles not yet implemented" echo "" sleep 10 exit 1 elif [[ true == "${ANY_RHEL}" ]] || [[ true == "${ANY_CENTOS}" ]]; then DB_SERVICE_NAME=mysqld gpg --keyserver keys.gnupg.net --recv-key 5072E1F5 gpg --export -a 5072E1F5 > mysql-repo.key rpm --import mysql-repo.key { echo "[mysql-repo]" echo "name=MySQL ${DATABASE_VERSION} Community Server" echo "baseurl=http://repo.mysql.com/yum/mysql-${DATABASE_VERSION}-community/el/${DIST_VERSION}/\$basearch/" echo "gpgcheck=1" } > /etc/yum.repos.d/mysql.repo fi installPackages "mysql-server" fi if [[ "${OX_INIT}" == true ]]; then restartService ${DB_SERVICE_NAME} waitPort localhost 3306 if [[ -n "${DATABASE_ROOT_PASS}" ]]; then if [[ true == "${ANY_RHEL}" ]] || [[ true == "${ANY_CENTOS}" ]]; then if [[ ${DIST_VERSION} == "7" ]]; then # CentOS7 / RHEL(maybe) are special and generate a temporary root password for mysql # We will grep it out and replace it with the provided one (if any) password_match=`awk '/A temporary password is generated for/ {a=$0} END{ print a }' /var/log/mysqld.log | awk '{print $(NF)}'` mysql -u root -p$password_match --connect-expired-password -e "SET password FOR root@localhost=password('$password_match');" mysql -u root -p$password_match -e "SHOW VARIABLES LIKE 'validate_password%';" mysql -u root -p$password_match -e "SET GLOBAL validate_password_length=4;" mysql -u root -p$password_match -e "SET GLOBAL validate_password_policy=LOW;" mysql -u root -p$password_match -e "SHOW VARIABLES LIKE 'validate_password%';" mysql -u root -p$password_match -e "SET password for root@localhost=password('${DATABASE_ROOT_PASS}');" mysql -u root -p${DATABASE_ROOT_PASS} -e "flush privileges;" fi else echo "Setting MySQL root password..." /usr/bin/mysqladmin -u root password ${DATABASE_ROOT_PASS} fi fi fi