Skip to content

Commit a00c17c

Browse files
committed
Merge branch 'master' into mysql-server
Config changes will instead be included in .rpm package Conflicts: 5.5/Dockerfile 5.5/docker-entrypoint.sh 5.6/Dockerfile 5.6/docker-entrypoint.sh 5.7/Dockerfile 5.7/docker-entrypoint.sh generate-stackbrew-library.sh
2 parents 96b7fa6 + cefd45b commit a00c17c

File tree

6 files changed

+117
-113
lines changed

6 files changed

+117
-113
lines changed

5.5/Dockerfile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
FROM oraclelinux:latest
22

3-
## -- The environment variables set using ENV will persist when a container
4-
## -- is run from the resulting image. -- ##
53
ENV PACKAGE_URL https://repo.mysql.com/yum/mysql-5.5-community/docker/x86_64/mysql-community-server-minimal-5.5.45-2.el7.x86_64.rpm
64

75
# Install server
86
RUN rpmkeys --import http://repo.mysql.com/RPM-GPG-KEY-mysql \
97
&& yum install -y $PACKAGE_URL \
108
&& rm -rf /var/cache/yum/*
9+
RUN mkdir /docker-entrypoint-initdb.d
1110

1211
VOLUME /var/lib/mysql
1312

5.5/docker-entrypoint.sh

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,14 @@
11
#!/bin/bash
22
set -e
33

4-
get_option () {
5-
local section=$1
6-
local option=$2
7-
local default=$3
8-
ret=$(my_print_defaults $section | grep '^--'${option}'=' | cut -d= -f2-)
9-
[ -z "$ret" ] && ret=$default
10-
echo $ret
11-
}
12-
4+
# if command starts with an option, prepend mysqld
135
if [ "${1:0:1}" = '-' ]; then
146
set -- mysqld "$@"
157
fi
168

179
if [ "$1" = 'mysqld' ]; then
1810
# Get config
1911
DATADIR="$("$@" --verbose --help 2>/dev/null | awk '$1 == "datadir" { print $2; exit }')"
20-
SOCKET=$(get_option mysqld socket "$DATADIR/mysql.sock")
21-
PIDFILE=$(get_option mysqld pid-file "/var/run/mysqld/mysqld.pid")
2212

2313
if [ ! -d "$DATADIR/mysql" ]; then
2414
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" ]; then
@@ -34,59 +24,72 @@ if [ "$1" = 'mysqld' ]; then
3424
echo 'Finished mysql_install_db'
3525

3626
mysqld --user=mysql --datadir="$DATADIR" --skip-networking &
37-
for i in $(seq 30 -1 0); do
38-
[ -S "$SOCKET" ] && break
27+
pid="$!"
28+
29+
mysql=( mysql --protocol=socket -uroot )
30+
31+
for i in {30..0}; do
32+
if echo 'SELECT 1' | "${mysql[@]}" &> /dev/null; then
33+
break
34+
fi
3935
echo 'MySQL init process in progress...'
4036
sleep 1
4137
done
42-
if [ $i = 0 ]; then
38+
if [ "$i" = 0 ]; then
4339
echo >&2 'MySQL init process failed.'
4440
exit 1
4541
fi
4642

47-
# These statements _must_ be on individual lines, and _must_ end with
48-
# semicolons (no line breaks or comments are permitted).
49-
# TODO proper SQL escaping on ALL the things D:
43+
mysql_tzinfo_to_sql /usr/share/zoneinfo | "${mysql[@]}" mysql
5044

51-
tempSqlFile=$(mktemp /tmp/mysql-first-time.XXXXXX.sql)
52-
cat > "$tempSqlFile" <<-EOSQL
45+
"${mysql[@]}" <<-EOSQL
5346
-- What's done in this file shouldn't be replicated
47+
-- or products like mysql-fabric won't work
5448
SET @@SESSION.SQL_LOG_BIN=0;
5549
DELETE FROM mysql.user ;
5650
CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
5751
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
5852
DROP DATABASE IF EXISTS test ;
53+
FLUSH PRIVILEGES ;
5954
EOSQL
55+
mysql+=( -p"${MYSQL_ROOT_PASSWORD}" )
6056

6157
if [ "$MYSQL_DATABASE" ]; then
62-
echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ;" >> "$tempSqlFile"
58+
echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ;" | "${mysql[@]}"
59+
mysql+=( "$MYSQL_DATABASE" )
6360
fi
6461

6562
if [ "$MYSQL_USER" -a "$MYSQL_PASSWORD" ]; then
66-
echo "CREATE USER '"$MYSQL_USER"'@'%' IDENTIFIED BY '"$MYSQL_PASSWORD"' ;" >> "$tempSqlFile"
63+
echo "CREATE USER '"$MYSQL_USER"'@'%' IDENTIFIED BY '"$MYSQL_PASSWORD"' ;" | "${mysql[@]}"
6764

6865
if [ "$MYSQL_DATABASE" ]; then
69-
echo "GRANT ALL ON \`"$MYSQL_DATABASE"\`.* TO '"$MYSQL_USER"'@'%' ;" >> "$tempSqlFile"
66+
echo "GRANT ALL ON \`"$MYSQL_DATABASE"\`.* TO '"$MYSQL_USER"'@'%' ;" | "${mysql[@]}"
7067
fi
71-
fi
72-
73-
echo 'FLUSH PRIVILEGES ;' >> "$tempSqlFile"
7468

75-
mysql -uroot < "$tempSqlFile"
69+
echo 'FLUSH PRIVILEGES ;' | "${mysql[@]}"
70+
fi
7671

77-
rm -f "$tempSqlFile"
78-
kill $(cat "$PIDFILE")
79-
for i in $(seq 30 -1 0); do
80-
[ -f "$PIDFILE" ] || break
81-
echo 'MySQL init process in progress...'
82-
sleep 1
72+
echo
73+
for f in /docker-entrypoint-initdb.d/*; do
74+
case "$f" in
75+
*.sh) echo "$0: running $f"; . "$f" ;;
76+
*.sql) echo "$0: running $f"; "${mysql[@]}" < "$f" && echo ;;
77+
*) echo "$0: ignoring $f" ;;
78+
esac
79+
echo
8380
done
84-
if [ $i = 0 ]; then
85-
echo >&2 'MySQL hangs during init process.'
81+
82+
if ! kill -s TERM "$pid" || ! wait "$pid"; then
83+
echo >&2 'MySQL init process failed.'
8684
exit 1
8785
fi
86+
87+
echo
8888
echo 'MySQL init process done. Ready for start up.'
89+
echo
8990
fi
91+
92+
chown -R mysql:mysql "$DATADIR"
9093
fi
9194

9295
exec "$@"

5.6/Dockerfile

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
FROM oraclelinux:latest
22

3-
## -- The environment variables set using ENV will persist when a container
4-
## -- is run from the resulting image. -- ##
5-
63
ENV PACKAGE_URL https://repo.mysql.com/yum/mysql-5.6-community/docker/x86_64/mysql-community-server-minimal-5.6.26-2.el7.x86_64.rpm
74

85
# Install server
96
RUN rpmkeys --import http://repo.mysql.com/RPM-GPG-KEY-mysql \
107
&& yum install -y $PACKAGE_URL \
118
&& rm -rf /var/cache/yum/*
129

10+
RUN mkdir /docker-entrypoint-initdb.d
11+
1312
VOLUME /var/lib/mysql
1413

1514
COPY docker-entrypoint.sh /entrypoint.sh

5.6/docker-entrypoint.sh

Lines changed: 38 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,14 @@
11
#!/bin/bash
22
set -e
33

4-
get_option () {
5-
local section=$1
6-
local option=$2
7-
local default=$3
8-
ret=$(my_print_defaults $section | grep '^--'${option}'=' | cut -d= -f2-)
9-
[ -z "$ret" ] && ret=$default
10-
echo $ret
11-
}
12-
4+
# if command starts with an option, prepend mysqld
135
if [ "${1:0:1}" = '-' ]; then
146
set -- mysqld "$@"
157
fi
168

179
if [ "$1" = 'mysqld' ]; then
1810
# Get config
1911
DATADIR="$("$@" --verbose --help 2>/dev/null | awk '$1 == "datadir" { print $2; exit }')"
20-
SOCKET=$(get_option mysqld socket "$datadir/mysql.sock")
21-
PIDFILE=$(get_option mysqld pid-file "/var/run/mysqld/mysqld.pid")
2212

2313
if [ ! -d "$DATADIR/mysql" ]; then
2414
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" ]; then
@@ -34,59 +24,73 @@ if [ "$1" = 'mysqld' ]; then
3424
echo 'Finished mysql_install_db'
3525

3626
mysqld --user=mysql --datadir="$DATADIR" --skip-networking &
37-
for i in $(seq 30 -1 0); do
38-
[ -S "$SOCKET" ] && break
27+
pid="$!"
28+
29+
mysql=( mysql --protocol=socket -uroot )
30+
31+
for i in {30..0}; do
32+
if echo 'SELECT 1' | "${mysql[@]}" &> /dev/null; then
33+
break
34+
fi
3935
echo 'MySQL init process in progress...'
4036
sleep 1
4137
done
42-
if [ $i = 0 ]; then
38+
if [ "$i" = 0 ]; then
4339
echo >&2 'MySQL init process failed.'
4440
exit 1
4541
fi
4642

47-
# These statements _must_ be on individual lines, and _must_ end with
48-
# semicolons (no line breaks or comments are permitted).
49-
# TODO proper SQL escaping on ALL the things D:
43+
# sed is for https://bugs.mysql.com/bug.php?id=20545
44+
mysql_tzinfo_to_sql /usr/share/zoneinfo | sed 's/Local time zone must be set--see zic manual page/FCTY/' | "${mysql[@]}" mysql
5045

51-
tempSqlFile=$(mktemp /tmp/mysql-first-time.XXXXXX.sql)
52-
cat > "$tempSqlFile" <<-EOSQL
46+
"${mysql[@]}" <<-EOSQL
5347
-- What's done in this file shouldn't be replicated
48+
-- or products like mysql-fabric won't work
5449
SET @@SESSION.SQL_LOG_BIN=0;
5550
DELETE FROM mysql.user ;
5651
CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
5752
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
5853
DROP DATABASE IF EXISTS test ;
54+
FLUSH PRIVILEGES ;
5955
EOSQL
56+
mysql+=( -p"${MYSQL_ROOT_PASSWORD}" )
6057

6158
if [ "$MYSQL_DATABASE" ]; then
62-
echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ;" >> "$tempSqlFile"
59+
echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ;" | "${mysql[@]}"
60+
mysql+=( "$MYSQL_DATABASE" )
6361
fi
6462

6563
if [ "$MYSQL_USER" -a "$MYSQL_PASSWORD" ]; then
66-
echo "CREATE USER '"$MYSQL_USER"'@'%' IDENTIFIED BY '"$MYSQL_PASSWORD"' ;" >> "$tempSqlFile"
64+
echo "CREATE USER '"$MYSQL_USER"'@'%' IDENTIFIED BY '"$MYSQL_PASSWORD"' ;" | "${mysql[@]}"
6765

6866
if [ "$MYSQL_DATABASE" ]; then
69-
echo "GRANT ALL ON \`"$MYSQL_DATABASE"\`.* TO '"$MYSQL_USER"'@'%' ;" >> "$tempSqlFile"
67+
echo "GRANT ALL ON \`"$MYSQL_DATABASE"\`.* TO '"$MYSQL_USER"'@'%' ;" | "${mysql[@]}"
7068
fi
71-
fi
72-
73-
echo 'FLUSH PRIVILEGES ;' >> "$tempSqlFile"
7469

75-
mysql -uroot < "$tempSqlFile"
70+
echo 'FLUSH PRIVILEGES ;' | "${mysql[@]}"
71+
fi
7672

77-
rm -f "$tempSqlFile"
78-
kill $(cat "$PIDFILE")
79-
for i in $(seq 30 -1 0); do
80-
[ -f "$PIDFILE" ] || break
81-
echo 'MySQL init process in progress...'
82-
sleep 1
73+
echo
74+
for f in /docker-entrypoint-initdb.d/*; do
75+
case "$f" in
76+
*.sh) echo "$0: running $f"; . "$f" ;;
77+
*.sql) echo "$0: running $f"; "${mysql[@]}" < "$f" && echo ;;
78+
*) echo "$0: ignoring $f" ;;
79+
esac
80+
echo
8381
done
84-
if [ $i = 0 ]; then
85-
echo >&2 'MySQL hangs during init process.'
82+
83+
if ! kill -s TERM "$pid" || ! wait "$pid"; then
84+
echo >&2 'MySQL init process failed.'
8685
exit 1
8786
fi
87+
88+
echo
8889
echo 'MySQL init process done. Ready for start up.'
90+
echo
8991
fi
92+
93+
chown -R mysql:mysql "$DATADIR"
9094
fi
9195

9296
exec "$@"

5.7/Dockerfile

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
FROM oraclelinux:latest
22

3-
## -- The environment variables set using ENV will persist when a container
4-
## -- is run from the resulting image. -- ##
5-
63
ENV PACKAGE_URL http://repo.mysql.com/yum/mysql-5.7-community/docker/x86_64/mysql-community-server-minimal-5.7.8-0.3.rc.el7.x86_64.rpm
74

85
# Install server
96
RUN rpmkeys --import http://repo.mysql.com/RPM-GPG-KEY-mysql \
107
&& yum install -y $PACKAGE_URL \
118
&& rm -rf /var/cache/yum/*
9+
RUN mkdir /docker-entrypoint-initdb.d
1210

1311
VOLUME /var/lib/mysql
1412

0 commit comments

Comments
 (0)