Skip to content

Commit 4672559

Browse files
ltangvaldyosifkit
authored andcommitted
Prefix function names in entrypoint with "docker"
This is to reduce risk of collisions with any custom scripts users may attach
1 parent eb2821b commit 4672559

File tree

1 file changed

+53
-53
lines changed

1 file changed

+53
-53
lines changed

.template.Debian/docker-entrypoint.sh

+53-53
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@ set -eo pipefail
33
shopt -s nullglob
44

55
# logging functions
6-
_log() {
6+
docker_log() {
77
local type=$1;shift
88
printf "$(date --rfc-3339=seconds) [${type}] [Entrypoint]: $@\n"
99
}
10-
_note() {
11-
_log Note "$@"
10+
docker_note() {
11+
docker_log Note "$@"
1212
}
13-
_warn() {
14-
_log Warn "$@" >&2
13+
docker_warn() {
14+
docker_log Warn "$@" >&2
1515
}
16-
_error() {
17-
_log ERROR "$@" >&2
16+
docker_error() {
17+
docker_log ERROR "$@" >&2
1818
exit 1
1919
}
2020

@@ -34,16 +34,16 @@ for arg; do
3434
esac
3535
done
3636

37-
# usage: file_env VAR [DEFAULT]
38-
# ie: file_env 'XYZ_DB_PASSWORD' 'example'
37+
# usage: docker_file_env VAR [DEFAULT]
38+
# ie: docker_file_env 'XYZ_DB_PASSWORD' 'example'
3939
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
4040
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
41-
file_env() {
41+
docker_file_env() {
4242
local var="$1"
4343
local fileVar="${var}_FILE"
4444
local def="${2:-}"
4545
if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
46-
_error "Both $var and $fileVar are set (but are exclusive)"
46+
docker_error "Both $var and $fileVar are set (but are exclusive)"
4747
fi
4848
local val="$def"
4949
if [ "${!var:-}" ]; then
@@ -55,51 +55,51 @@ file_env() {
5555
unset "$fileVar"
5656
}
5757

58-
# usage: process_init_file FILENAME MYSQLCOMMAND...
59-
# ie: process_init_file foo.sh mysql -uroot
58+
# usage: docker_process_init_file FILENAME MYSQLCOMMAND...
59+
# ie: docker_process_init_file foo.sh mysql -uroot
6060
# (process a single initializer file, based on its extension. we define this
6161
# function here, so that initializer scripts (*.sh) can use the same logic,
6262
# potentially recursively, or override the logic used in subsequent calls)
63-
process_init_file() {
63+
docker_process_init_file() {
6464
local f="$1"; shift
6565
local mysql=( "$@" )
6666

6767
case "$f" in
68-
*.sh) _note "$0: running $f"; . "$f" ;;
69-
*.sql) _note "$0: running $f"; "${mysql[@]}" < "$f"; echo ;;
70-
*.sql.gz) _note "$0: running $f"; gunzip -c "$f" | "${mysql[@]}"; echo ;;
71-
*) _warn "$0: ignoring $f" ;;
68+
*.sh) docker_note "$0: running $f"; . "$f" ;;
69+
*.sql) docker_note "$0: running $f"; "${mysql[@]}" < "$f"; echo ;;
70+
*.sql.gz) docker_note "$0: running $f"; gunzip -c "$f" | "${mysql[@]}"; echo ;;
71+
*) docker_warn "$0: ignoring $f" ;;
7272
esac
7373
echo
7474
}
7575

76-
_check_config() {
76+
docker_check_config() {
7777
toRun=( "$@" --verbose --help )
7878
if ! errors="$("${toRun[@]}" 2>&1 >/dev/null)"; then
79-
_error "mysqld failed while attempting to check config\n\tcommand was: ${toRun[*]}\n\t$errors"
79+
docker_error "mysqld failed while attempting to check config\n\tcommand was: ${toRun[*]}\n\t$errors"
8080
fi
8181
}
8282

8383
# Fetch value from server config
8484
# We use mysqld --verbose --help instead of my_print_defaults because the
8585
# latter only show values present in config files, and not server defaults
86-
_get_config() {
86+
docker_get_config() {
8787
local conf="$1"; shift
8888
"$@" --verbose --help --log-bin-index="$(mktemp -u)" 2>/dev/null \
8989
| awk '$1 == "'"$conf"'" && /^[^ \t]/ { sub(/^[^ \t]+[ \t]+/, ""); print; exit }'
9090
# match "datadir /some/path with/spaces in/it here" but not "--xyz=abc\n datadir (xyz)"
9191
}
9292

93-
_start_server() {
93+
docker_start_server() {
9494
local socket=$1; shift
9595
result=0
9696
%%SERVERSTARTUP%%
9797
if [ ! "$result" = "0" ];then
98-
_error "Unable to start server. Status code $result."
98+
docker_error "Unable to start server. Status code $result."
9999
fi
100100
}
101101

102-
_wait_for_server() {
102+
docker_wait_for_server() {
103103
local mysql=( "$@" )
104104
for i in {30..0}; do
105105
if echo 'SELECT 1' | "${mysql[@]}" &> /dev/null; then
@@ -108,67 +108,67 @@ _wait_for_server() {
108108
sleep 1
109109
done
110110
if [ "$i" = 0 ]; then
111-
_error "Unable to start server."
111+
docker_error "Unable to start server."
112112
fi
113113
}
114114

115-
_stop_server() {
115+
docker_stop_server() {
116116
local passfile=$1
117117
local socket=$2
118118
result=0
119119
mysqladmin --defaults-extra-file="${passfile}" shutdown -uroot --socket="${socket}" || result=$?
120120
if [ ! "$result" = "0" ]; then
121-
_error "Unable to shut down server. Status code $result."
121+
docker_error "Unable to shut down server. Status code $result."
122122
fi
123123
}
124124
# allow the container to be started with `--user`
125125
if [ "$1" = 'mysqld' -a -z "$wantHelp" -a "$(id -u)" = '0' ]; then
126-
_check_config "$@"
127-
DATADIR="$(_get_config 'datadir' "$@")"
126+
docker_check_config "$@"
127+
DATADIR="$(docker_get_config 'datadir' "$@")"
128128
mkdir -p "$DATADIR"
129129
chown -R mysql:mysql "$DATADIR"
130130
exec gosu mysql "$BASH_SOURCE" "$@"
131131
fi
132132

133133
if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then
134134
# still need to check config, container may have started with --user
135-
_check_config "$@"
135+
docker_check_config "$@"
136136
# Get config
137-
DATADIR="$(_get_config 'datadir' "$@")"
137+
DATADIR="$(docker_get_config 'datadir' "$@")"
138138

139139
if [ ! -d "$DATADIR/mysql" ]; then
140-
file_env 'MYSQL_ROOT_PASSWORD'
140+
docker_file_env 'MYSQL_ROOT_PASSWORD'
141141
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
142-
_error "Database is uninitialized and password option is not specified \n\tYou need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD"
142+
docker_error "Database is uninitialized and password option is not specified \n\tYou need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD"
143143
fi
144144

145145
mkdir -p "$DATADIR"
146146

147-
_note "Initializing database"
147+
docker_note "Initializing database"
148148
%%DATABASEINIT%%
149-
_note "Database initialized"
149+
docker_note "Database initialized"
150150

151151
if command -v mysql_ssl_rsa_setup > /dev/null && [ ! -e "$DATADIR/server-key.pem" ]; then
152152
# https://github.com/mysql/mysql-server/blob/23032807537d8dd8ee4ec1c4d40f0633cd4e12f9/packaging/deb-in/extra/mysql-systemd-start#L81-L84
153-
_note "Initializing certificates"
153+
docker_note "Initializing certificates"
154154
mysql_ssl_rsa_setup --datadir="$DATADIR"
155-
_note "Certificates initialized"
155+
docker_note "Certificates initialized"
156156
fi
157157

158-
SOCKET="$(_get_config 'socket' "$@")"
158+
SOCKET="$(docker_get_config 'socket' "$@")"
159159
# We create a file to store the root password in so we don''t use it on the command line
160160
install -d -m0700 /tmp/mysql-files
161161
PASSFILE=$(mktemp /tmp/mysql-files/XXXXXXXXXX)
162162
install /dev/null -m0600 "${PASSFILE}"
163163

164164
mysql=( mysql --defaults-file="${PASSFILE}" --protocol=socket -uroot -hlocalhost --socket="${SOCKET}" )
165-
_note "Starting server"
166-
_start_server "${SOCKET}" "$@"
165+
docker_note "Starting server"
166+
docker_start_server "${SOCKET}" "$@"
167167
if [ "${MYSQL_MAJOR}" = "5.5" ] || [ "${MYSQL_MAJOR}" = "5.6" ]; then
168-
_note "Waiting for server startup"
169-
_wait_for_server "${mysql[@]}"
168+
docker_note "Waiting for server startup"
169+
docker_wait_for_server "${mysql[@]}"
170170
fi
171-
_note "Server started."
171+
docker_note "Server started."
172172

173173

174174
if [ -z "$MYSQL_INITDB_SKIP_TZINFO" ]; then
@@ -178,12 +178,12 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then
178178

179179
if [ ! -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
180180
export MYSQL_ROOT_PASSWORD="$(pwgen -1 32)"
181-
_note "GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD"
181+
docker_note "GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD"
182182
fi
183183

184184
rootCreate=
185185
# default root to listen for connections from anywhere
186-
file_env 'MYSQL_ROOT_HOST' '%'
186+
docker_file_env 'MYSQL_ROOT_HOST' '%'
187187
if [ ! -z "$MYSQL_ROOT_HOST" -a "$MYSQL_ROOT_HOST" != 'localhost' ]; then
188188
# no, we don't care if read finds a terminating character in this heredoc
189189
# https://unix.stackexchange.com/questions/265149/why-is-set-o-errexit-breaking-this-read-heredoc-expression/265151#265151
@@ -213,14 +213,14 @@ password="${MYSQL_ROOT_PASSWORD}"
213213
EOF
214214
fi
215215

216-
file_env 'MYSQL_DATABASE'
216+
docker_file_env 'MYSQL_DATABASE'
217217
if [ "$MYSQL_DATABASE" ]; then
218218
echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ;" | "${mysql[@]}"
219219
mysql+=( "$MYSQL_DATABASE" )
220220
fi
221221

222-
file_env 'MYSQL_USER'
223-
file_env 'MYSQL_PASSWORD'
222+
docker_file_env 'MYSQL_USER'
223+
docker_file_env 'MYSQL_PASSWORD'
224224
if [ "$MYSQL_USER" -a "$MYSQL_PASSWORD" ]; then
225225
echo "CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD' ;" | "${mysql[@]}"
226226

@@ -233,7 +233,7 @@ EOF
233233

234234
echo
235235
for f in /docker-entrypoint-initdb.d/*; do
236-
process_init_file "$f" "${mysql[@]}"
236+
docker_process_init_file "$f" "${mysql[@]}"
237237
done
238238

239239
if [ ! -z "$MYSQL_ONETIME_PASSWORD" ]; then
@@ -245,13 +245,13 @@ EOF
245245
EOSQL
246246
fi
247247
fi
248-
_note "Stopping server"
249-
_stop_server "${PASSFILE}" "${SOCKET}"
250-
_note "Server stopped"
248+
docker_note "Stopping server"
249+
docker_stop_server "${PASSFILE}" "${SOCKET}"
250+
docker_note "Server stopped"
251251
rm -f "${PASSFILE}"
252252
unset PASSFILE
253253
echo
254-
_note "MySQL init process done. Ready for start up."
254+
docker_note "MySQL init process done. Ready for start up."
255255
echo
256256
fi
257257
fi

0 commit comments

Comments
 (0)