#!/bin/bash ## Init is run on host ## For now it is run every time the script is launched, but ## it should be launched only once after build. ## Accessible variables are: ## - SERVICE_NAME Name of current service ## - DOCKER_BASE_IMAGE Base image from which this service might be built if any ## - SERVICE_DATASTORE Location on host of the DATASTORE of this service ## - SERVICE_CONFIGSTORE Location on host of the CONFIGSTORE of this service . lib/common set -e if [ "${HOST_DATASTORE+x}" ]; then export HOST_DB_PASSFILE="$HOST_DATASTORE/${SERVICE_NAME}$DB_DATADIR/my.cnf" else export HOST_DB_PASSFILE="$CLIENT_DB_PASSFILE" fi if ! [ -d "$HOST_DATASTORE/${SERVICE_NAME}$DB_DATADIR" ]; then MYSQL_ROOT_PASSWORD="$(gen_password)" debug docker run -e "MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD" \ --rm \ -v "$DATA_DIR:$DB_DATADIR" \ --entrypoint /bin/bash "$DOCKER_BASE_IMAGE" docker run -e "MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD" \ --rm \ -v "$DATA_DIR:$DB_DATADIR" \ --entrypoint /bin/bash "$DOCKER_BASE_IMAGE" -c ' mysqld() { echo "diverted mysqld call..." >&2; echo "$*" | grep -E "(--help|--skip-networking)" >/dev/null 2>&1 || return; echo " .. Allowing call." >&2; /usr/sbin/mysqld "$@"; } export -f mysqld; /docker-entrypoint.sh mysqld' || true ## docker errorlevel is still 0 even if it failed. ## AND we must ignore mysqld error ! [ "$(find "$DATA_DIR" \ -maxdepth 0 -type d -empty 2>/dev/null)" ] && { err "Docker run probably failed to do it's job." exit 1 } ## XXXvlab: this won't help support multiple project running on the ## same host cat < "$HOST_DB_PASSFILE" [client] password=$MYSQL_ROOT_PASSWORD EOF chmod 600 "$HOST_DB_PASSFILE" info "New root password for mysql. " fi