#!/bin/bash set -e set -o pipefail rand64() { set -- "${1:-64}" [ "$1" -ge 4 ] && set -- "$1" "$(head -c "$(($1 * 3 / 4))" < /dev/urandom | base64)" && [ "${#2}" = "$1" ] && printf '%s\n' "$2" } rand26() { set -- "${1:-32}" && [ "$1" -ge 4 ] && set -- "$1" "$(tr -cd a-z &2 Usage: $0 <--fqdn> $0 $0 <-h | --help> With --fqdn, parameters are derived from \$(hostname --fqdn) or locally: $(hostname --fqdn) END } case "$# $1" in "1 --fqdn" ) DB_HOST=$(hostname --fqdn) DB_NAME=wordpress@$DB_HOST DB_USER=$DB_NAME ;; "3 "* ) DB_NAME=$1 DB_USER=$2 DB_HOST=$3 ;; "1 -h" | "1 --help" ) usage exit 0 ;; * ) usage exit 1 ;; esac for v in DB_NAME DB_USER DB_HOST do [ "${!v}" ] && continue printf 'Error: a required environment variable is not defined: $%s\n' \ "$v" >&2 exit 1 done if ! [ -v DB_PASSWORD ] then DB_PASSWORD=$(rand26 32) fi declare -a WP_SALT_VARS=( AUTH_KEY SECURE_AUTH_KEY LOGGED_IN_KEY NONCE_KEY AUTH_SALT SECURE_AUTH_SALT LOGGED_IN_SALT NONCE_SALT ) for v in "${WP_SALT_VARS[@]}" do [ -v "$v" ] && [ -n "${!v}" ] && continue eval "$v=\$(rand64)" && eval "[ \${#$v} -gt 16 ]" || exit 4 done cat <