Skip to content

Commit 1df4495

Browse files
authored
fix(shell): mixed tabs and spaces (#456)
1 parent db6e5f2 commit 1df4495

File tree

6 files changed

+1340
-1347
lines changed

6 files changed

+1340
-1347
lines changed

docker/mysql-xtrabackup/docker-entrypoint.sh

Lines changed: 164 additions & 171 deletions
Original file line numberDiff line numberDiff line change
@@ -4,209 +4,202 @@ shopt -s nullglob
44

55
# if command starts with an option, prepend mysqld
66
if [ "${1:0:1}" = '-' ]; then
7-
set -- mysqld "$@"
7+
set -- mysqld "$@"
88
fi
99

1010
# skip setup if they want an option that stops mysqld
1111
wantHelp=
1212
for arg; do
13-
case "${arg}" in
14-
-'?'|--help|--print-defaults|-V|--version)
15-
wantHelp=1
16-
break
17-
;;
18-
esac
13+
case "${arg}" in
14+
-'?'|--help|--print-defaults|-V|--version)
15+
wantHelp=1
16+
break
17+
;;
18+
esac
1919
done
2020

2121
# usage: file_env VAR [DEFAULT]
2222
# ie: file_env 'XYZ_DB_PASSWORD' 'example'
2323
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
2424
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
2525
file_env() {
26-
local var="$1"
27-
local fileVar="${var}_FILE"
28-
local def="${2:-}"
29-
if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
30-
echo >&2 "error: both ${var} and ${fileVar} are set (but are exclusive)"
31-
exit 1
32-
fi
33-
local val="${def}"
34-
if [ "${!var:-}" ]; then
35-
val="${!var}"
36-
elif [ "${!fileVar:-}" ]; then
37-
val="$(< "${!fileVar}")"
38-
fi
39-
export "${var}"="${val}"
40-
unset "${fileVar}"
26+
local var="$1"
27+
local fileVar="${var}_FILE"
28+
local def="${2:-}"
29+
if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
30+
echo >&2 "error: both ${var} and ${fileVar} are set (but are exclusive)"
31+
exit 1
32+
fi
33+
local val="${def}"
34+
if [ "${!var:-}" ]; then
35+
val="${!var}"
36+
elif [ "${!fileVar:-}" ]; then
37+
val="$(< "${!fileVar}")"
38+
fi
39+
export "${var}"="${val}"
40+
unset "${fileVar}"
4141
}
4242

4343
_check_config() {
44-
toRun=( "$@" --verbose --help )
45-
if ! errors="$("${toRun[@]}" 2>&1 >/dev/null)"; then
46-
cat >&2 <<-EOM
47-
48-
ERROR: mysqld failed while attempting to check config
49-
command was: "${toRun[*]}"
50-
51-
${errors}
52-
EOM
53-
exit 1
54-
fi
55-
}
44+
toRun=( "$@" --verbose --help )
45+
if ! errors="$("${toRun[@]}" 2>&1 >/dev/null)"; then
46+
echo 'ERROR: mysqld failed while attempting to check config'
47+
echo "command was: '${toRun[*]}'"
48+
echo "${errors}"
49+
exit 1
50+
fi >&2
51+
}
5652

5753
# Fetch value from server config
5854
# We use mysqld --verbose --help instead of my_print_defaults because the
5955
# latter only show values present in config files, and not server defaults
6056
_get_config() {
61-
local conf="$1"; shift
62-
"$@" --verbose --help --log-bin-index="$(mktemp -u)" 2>/dev/null | awk '$1 == "'"${conf}"'" { print $2; exit }'
57+
local conf="$1"; shift
58+
"$@" --verbose --help --log-bin-index="$(mktemp -u)" 2>/dev/null | awk '$1 == "'"${conf}"'" { print $2; exit }'
6359
}
6460

6561
# allow the container to be started with `--user`
6662
if [ "$1" = 'mysqld' -a -z "${wantHelp}" -a "$(id -u)" = '0' ]; then
67-
_check_config "$@"
68-
DATADIR="$(_get_config 'datadir' "$@")"
69-
mkdir -p "${DATADIR}"
70-
chown -R mysql:mysql "${DATADIR}"
63+
_check_config "$@"
64+
DATADIR="$(_get_config 'datadir' "$@")"
65+
mkdir -p "${DATADIR}"
66+
chown -R mysql:mysql "${DATADIR}"
7167

72-
if [ -f /root/pending-restore ]; then
73-
/root/xrecovery-final.sh
74-
fi
68+
if [ -f /root/pending-restore ]; then
69+
/root/xrecovery-final.sh
70+
fi
7571

76-
exec gosu mysql "${BASH_SOURCE}" "$@"
72+
exec gosu mysql "${BASH_SOURCE}" "$@"
7773
fi
7874

7975
if [ "$1" = 'mysqld' -a -z "${wantHelp}" ]; then
80-
# still need to check config, container may have started with --user
81-
_check_config "$@"
82-
# Get config
83-
DATADIR="$(_get_config 'datadir' "$@")"
84-
85-
if [ ! -d "${DATADIR}/mysql" ]; then
86-
file_env 'MYSQL_ROOT_PASSWORD'
87-
if [ -z "${MYSQL_ROOT_PASSWORD}" -a -z "${MYSQL_ALLOW_EMPTY_PASSWORD}" -a -z "${MYSQL_RANDOM_ROOT_PASSWORD}" ]; then
88-
echo >&2 'error: database is uninitialized and password option is not specified '
89-
echo >&2 ' You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD'
90-
exit 1
91-
fi
92-
93-
mkdir -p "${DATADIR}"
94-
95-
echo 'Initializing database'
96-
"$@" --initialize-insecure
97-
echo 'Database initialized'
98-
99-
if command -v mysql_ssl_rsa_setup > /dev/null && [ ! -e "${DATADIR}/server-key.pem" ]; then
100-
# https://github.com/mysql/mysql-server/blob/23032807537d8dd8ee4ec1c4d40f0633cd4e12f9/packaging/deb-in/extra/mysql-systemd-start#L81-L84
101-
echo 'Initializing certificates'
102-
mysql_ssl_rsa_setup --datadir="${DATADIR}"
103-
echo 'Certificates initialized'
104-
fi
105-
106-
SOCKET="$(_get_config 'socket' "$@")"
107-
"$@" --skip-networking --socket="${SOCKET}" &
108-
pid="$!"
109-
110-
mysql=( mysql --protocol=socket -uroot -hlocalhost --socket="${SOCKET}" )
111-
112-
for i in {30..0}; do
113-
if echo 'SELECT 1' | "${mysql[@]}" &> /dev/null; then
114-
break
115-
fi
116-
echo 'MySQL init process in progress...'
117-
sleep 1
118-
done
119-
if [ "${i}" = 0 ]; then
120-
echo >&2 'MySQL init process failed.'
121-
exit 1
122-
fi
123-
124-
if [ -z "${MYSQL_INITDB_SKIP_TZINFO}" ]; then
125-
# sed is for https://bugs.mysql.com/bug.php?id=20545
126-
mysql_tzinfo_to_sql /usr/share/zoneinfo | sed 's/Local time zone must be set--see zic manual page/FCTY/' | "${mysql[@]}" mysql
127-
fi
128-
129-
if [ ! -z "${MYSQL_RANDOM_ROOT_PASSWORD}" ]; then
130-
export MYSQL_ROOT_PASSWORD="$(pwgen -1 32)"
131-
echo "GENERATED ROOT PASSWORD: ${MYSQL_ROOT_PASSWORD}"
132-
fi
133-
134-
rootCreate=
135-
# default root to listen for connections from anywhere
136-
file_env 'MYSQL_ROOT_HOST' '%'
137-
if [ ! -z "${MYSQL_ROOT_HOST}" -a "${MYSQL_ROOT_HOST}" != 'localhost' ]; then
138-
# no, we don't care if read finds a terminating character in this heredoc
139-
# https://unix.stackexchange.com/questions/265149/why-is-set-o-errexit-breaking-this-read-heredoc-expression/265151#265151
140-
read -r -d '' rootCreate <<-EOSQL || true
141-
CREATE USER 'root'@'${MYSQL_ROOT_HOST}' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
142-
GRANT ALL ON *.* TO 'root'@'${MYSQL_ROOT_HOST}' WITH GRANT OPTION ;
143-
EOSQL
144-
fi
145-
146-
"${mysql[@]}" <<-EOSQL
147-
-- What's done in this file shouldn't be replicated
148-
-- or products like mysql-fabric won't work
149-
SET @@SESSION.SQL_LOG_BIN=0;
150-
151-
DELETE FROM mysql.user WHERE user NOT IN ('mysql.sys', 'mysqlxsys', 'root') OR host NOT IN ('localhost') ;
152-
SET PASSWORD FOR 'root'@'localhost'=PASSWORD('${MYSQL_ROOT_PASSWORD}') ;
153-
GRANT ALL ON *.* TO 'root'@'localhost' WITH GRANT OPTION ;
154-
${rootCreate}
155-
DROP DATABASE IF EXISTS test ;
156-
FLUSH PRIVILEGES ;
157-
EOSQL
158-
159-
if [ ! -z "${MYSQL_ROOT_PASSWORD}" ]; then
160-
mysql+=( -p"${MYSQL_ROOT_PASSWORD}" )
161-
fi
162-
163-
file_env 'MYSQL_DATABASE'
164-
if [ "${MYSQL_DATABASE}" ]; then
165-
echo "CREATE DATABASE IF NOT EXISTS \`${MYSQL_DATABASE}\` ;" | "${mysql[@]}"
166-
mysql+=( "${MYSQL_DATABASE}" )
167-
fi
168-
169-
file_env 'MYSQL_USER'
170-
file_env 'MYSQL_PASSWORD'
171-
if [ "${MYSQL_USER}" -a "${MYSQL_PASSWORD}" ]; then
172-
echo "CREATE USER '${MYSQL_USER}'@'%' IDENTIFIED BY '${MYSQL_PASSWORD}' ;" | "${mysql[@]}"
173-
174-
if [ "${MYSQL_DATABASE}" ]; then
175-
echo "GRANT ALL ON \`${MYSQL_DATABASE}\`.* TO '${MYSQL_USER}'@'%' ;" | "${mysql[@]}"
176-
fi
177-
178-
echo 'FLUSH PRIVILEGES ;' | "${mysql[@]}"
179-
fi
180-
181-
echo
182-
for f in /docker-entrypoint-initdb.d/*; do
183-
case "${f}" in
184-
*.sh) echo "$0: running ${f}"; . "${f}" ;;
185-
*.sql) echo "$0: running ${f}"; "${mysql[@]}" < "${f}"; echo ;;
186-
*.sql.gz) echo "$0: running ${f}"; gunzip -c "${f}" | "${mysql[@]}"; echo ;;
187-
*) echo "$0: ignoring ${f}" ;;
188-
esac
189-
echo
190-
done
191-
192-
if [ ! -z "${MYSQL_ONETIME_PASSWORD}" ]; then
193-
"${mysql[@]}" <<-EOSQL
194-
ALTER USER 'root'@'%' PASSWORD EXPIRE;
195-
EOSQL
196-
fi
197-
if ! kill -s TERM "${pid}" || ! wait "${pid}"; then
198-
echo >&2 'MySQL init process failed.'
199-
exit 1
200-
fi
201-
202-
echo
203-
echo 'MySQL init process done. Ready for start up.'
204-
echo
205-
fi
76+
# still need to check config, container may have started with --user
77+
_check_config "$@"
78+
# Get config
79+
DATADIR="$(_get_config 'datadir' "$@")"
80+
81+
if [ ! -d "${DATADIR}/mysql" ]; then
82+
file_env 'MYSQL_ROOT_PASSWORD'
83+
if [ -z "${MYSQL_ROOT_PASSWORD}" -a -z "${MYSQL_ALLOW_EMPTY_PASSWORD}" -a -z "${MYSQL_RANDOM_ROOT_PASSWORD}" ]; then
84+
echo >&2 'error: database is uninitialized and password option is not specified '
85+
echo >&2 ' You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD'
86+
exit 1
87+
fi
88+
89+
mkdir -p "${DATADIR}"
90+
91+
echo 'Initializing database'
92+
"$@" --initialize-insecure
93+
echo 'Database initialized'
94+
95+
if command -v mysql_ssl_rsa_setup > /dev/null && [ ! -e "${DATADIR}/server-key.pem" ]; then
96+
# https://github.com/mysql/mysql-server/blob/23032807537d8dd8ee4ec1c4d40f0633cd4e12f9/packaging/deb-in/extra/mysql-systemd-start#L81-L84
97+
echo 'Initializing certificates'
98+
mysql_ssl_rsa_setup --datadir="${DATADIR}"
99+
echo 'Certificates initialized'
100+
fi
101+
102+
SOCKET="$(_get_config 'socket' "$@")"
103+
"$@" --skip-networking --socket="${SOCKET}" &
104+
pid="$!"
105+
106+
mysql=( mysql --protocol=socket -uroot -hlocalhost --socket="${SOCKET}" )
107+
108+
for i in {30..0}; do
109+
if echo 'SELECT 1' | "${mysql[@]}" &> /dev/null; then
110+
break
111+
fi
112+
echo 'MySQL init process in progress...'
113+
sleep 1
114+
done
115+
if [ "${i}" = 0 ]; then
116+
echo >&2 'MySQL init process failed.'
117+
exit 1
118+
fi
119+
120+
if [ -z "${MYSQL_INITDB_SKIP_TZINFO}" ]; then
121+
# sed is for https://bugs.mysql.com/bug.php?id=20545
122+
mysql_tzinfo_to_sql /usr/share/zoneinfo | sed 's/Local time zone must be set--see zic manual page/FCTY/' | "${mysql[@]}" mysql
123+
fi
124+
125+
if [ ! -z "${MYSQL_RANDOM_ROOT_PASSWORD}" ]; then
126+
export MYSQL_ROOT_PASSWORD="$(pwgen -1 32)"
127+
echo "GENERATED ROOT PASSWORD: ${MYSQL_ROOT_PASSWORD}"
128+
fi
129+
130+
rootCreate=()
131+
# default root to listen for connections from anywhere
132+
file_env 'MYSQL_ROOT_HOST' '%'
133+
if [ ! -z "${MYSQL_ROOT_HOST}" -a "${MYSQL_ROOT_HOST}" != 'localhost' ]; then
134+
rootCreate=(
135+
"CREATE USER 'root'@'${MYSQL_ROOT_HOST}' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}';"
136+
"GRANT ALL ON *.* TO 'root'@'${MYSQL_ROOT_HOST}' WITH GRANT OPTION;"
137+
)
138+
fi
139+
140+
sql=(
141+
"-- What's done in this file shouldn't be replicated"
142+
"-- or products like mysql-fabric won't work"
143+
'SET @@SESSION.SQL_LOG_BIN=0;'
144+
"DELETE FROM mysql.user WHERE user NOT IN ('mysql.sys', 'mysqlxsys', 'root') OR host NOT IN ('localhost');"
145+
"SET PASSWORD FOR 'root'@'localhost'=PASSWORD('${MYSQL_ROOT_PASSWORD}');"
146+
"GRANT ALL ON *.* TO 'root'@'localhost' WITH GRANT OPTION;"
147+
"${rootCreate[@]}"
148+
'DROP DATABASE IF EXISTS test;'
149+
'FLUSH PRIVILEGES;'
150+
)
151+
152+
printf '%s\n' "${sql[@]}" | "${mysql[@]}"
153+
154+
if [ ! -z "${MYSQL_ROOT_PASSWORD}" ]; then
155+
mysql+=( -p"${MYSQL_ROOT_PASSWORD}" )
156+
fi
157+
158+
file_env 'MYSQL_DATABASE'
159+
if [ "${MYSQL_DATABASE}" ]; then
160+
echo "CREATE DATABASE IF NOT EXISTS \`${MYSQL_DATABASE}\` ;" | "${mysql[@]}"
161+
mysql+=( "${MYSQL_DATABASE}" )
162+
fi
163+
164+
file_env 'MYSQL_USER'
165+
file_env 'MYSQL_PASSWORD'
166+
if [ "${MYSQL_USER}" -a "${MYSQL_PASSWORD}" ]; then
167+
echo "CREATE USER '${MYSQL_USER}'@'%' IDENTIFIED BY '${MYSQL_PASSWORD}' ;" | "${mysql[@]}"
168+
169+
if [ "${MYSQL_DATABASE}" ]; then
170+
echo "GRANT ALL ON \`${MYSQL_DATABASE}\`.* TO '${MYSQL_USER}'@'%' ;" | "${mysql[@]}"
171+
fi
172+
173+
echo 'FLUSH PRIVILEGES ;' | "${mysql[@]}"
174+
fi
175+
176+
echo
177+
for f in /docker-entrypoint-initdb.d/*; do
178+
case "${f}" in
179+
*.sh) echo "$0: running ${f}"; . "${f}" ;;
180+
*.sql) echo "$0: running ${f}"; "${mysql[@]}" < "${f}"; echo ;;
181+
*.sql.gz) echo "$0: running ${f}"; gunzip -c "${f}" | "${mysql[@]}"; echo ;;
182+
*) echo "$0: ignoring ${f}" ;;
183+
esac
184+
echo
185+
done
186+
187+
if [ ! -z "${MYSQL_ONETIME_PASSWORD}" ]; then
188+
"${mysql[@]}" <<< "ALTER USER 'root'@'%' PASSWORD EXPIRE;"
189+
fi
190+
if ! kill -s TERM "${pid}" || ! wait "${pid}"; then
191+
echo >&2 'MySQL init process failed.'
192+
exit 1
193+
fi
194+
195+
echo
196+
echo 'MySQL init process done. Ready for start up.'
197+
echo
198+
fi
206199
fi
207200

208201
if [ -f /root/pending-restore ]; then
209-
/root/xrecovery-final.sh
202+
/root/xrecovery-final.sh
210203
fi
211204

212205

0 commit comments

Comments
 (0)