Docker Provisioning: Install Docker-based test servers on macOS

Build and cache docker images based on the configurations in testserver.
1. Move the shared Docker files to common/shared/testserver
2. Deploy boot2docker image into VirtualBox via docker-machine commands.
3. Build and tag the docker images by the SHA-1 of server context.

Change-Id: Ic5a588e5cc5e753ec4c4e2e1bc79917bbd03f95d
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This commit is contained in:
Ryan Chu
2018-10-01 10:38:39 +02:00
committed by Liang Qi
parent a76e315034
commit ea76ace825
15 changed files with 277 additions and 9 deletions

View File

@@ -2,7 +2,7 @@
#############################################################################
##
## Copyright (C) 2017 The Qt Company Ltd.
## Copyright (C) 2018 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the provisioning scripts of the Qt Toolkit.
@@ -49,4 +49,4 @@ sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-c
sudo chmod +x /usr/local/bin/docker-compose
# Start testserver provisioning
source "${BASH_SOURCE%/*}/testserver/docker_testserver.sh"
source "${BASH_SOURCE%/*}/docker_testserver.sh"

View File

@@ -2,7 +2,7 @@
#############################################################################
##
## Copyright (C) 2017 The Qt Company Ltd.
## Copyright (C) 2018 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the provisioning scripts of the Qt Toolkit.
@@ -35,24 +35,33 @@
set -ex
case ${BASH_SOURCE[0]} in
*/linux/*) SERVER_PATH="${BASH_SOURCE[0]%/linux/*}/shared/testserver" ;;
*/*) SERVER_PATH="${BASH_SOURCE[0]%/*}/../shared/testserver" ;;
*) SERVER_PATH="../shared/testserver" ;;
esac
# testserver shared scripts
source "$SERVER_PATH/testserver_util.sh"
# Using SHA-1 of each server context as the tag of docker images. A tag labels a
# specific image version. It is used by docker compose file (docker-compose.yml)
# to launch the corresponding docker containers. If one of the server contexts
# (./apache2, ./danted, ...) gets changes, all the related compose files in
# qtbase should be updated as well.
#
# For example, here's how to get the SHA-1 of apache test server.
# find ./apache2 -type f -print0 | sort -z | xargs -r0 sha1sum | \
# awk '{ print $1 }' | sha1sum | awk '{ print $1 }'
testserver='apache2 squid vsftpd ftp-proxy danted'
source "$SERVER_PATH/settings.sh"
for server in $testserver
do
context="${BASH_SOURCE%/*}/$server"
context="$SERVER_PATH/$server"
# obsolete - This one is still needed for CI. It will be removed later.
sha1=$(find $context -type f -print0 | sort -z | xargs -r0 sha1sum | awk '{ print $1 }' | \
sha1sum | awk '{ print $1 }')
sudo docker build -t qt-test-server-$server:$sha1 $context
# Sort files by their SHA-1 and use the accumulated result as the TAG
sudo docker build -t qt-test-server-$server:$(sha1tree $context) $context
done
sudo docker images

View File

@@ -1,6 +0,0 @@
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y apache2 libcgi-session-perl wget avahi-daemon
EXPOSE 80 443
# install configurations and test data
RUN wget https://tools.ietf.org/rfc/rfc3252.txt

View File

@@ -1,9 +0,0 @@
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y gdebi-core=0.9.5.7ubuntu1 wget avahi-daemon
RUN wget http://ppa.launchpad.net/dajhorn/dante/ubuntu/pool/main/d/dante/dante-server_1.4.1-1_amd64.deb
RUN gdebi -n dante-server_1.4.1-1_amd64.deb
EXPOSE 1080-1081
# install configurations and test data
COPY danted /etc/init.d/
COPY danted-authenticating /etc/init.d/

View File

@@ -1,93 +0,0 @@
#! /bin/sh
### BEGIN INIT INFO
# Provides: danted
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: SOCKS (v4 and v5) proxy daemon (danted)
### END INIT INFO
#
# dante SOCKS server init.d file. Based on /etc/init.d/skeleton:
# Version: @(#)skeleton 1.8 03-Mar-1998 miquels@cistron.nl
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/danted
NAME=danted
DESC="Dante SOCKS daemon"
PIDFILE=/var/run/$NAME.pid
CONFFILE=/etc/$NAME.conf
test -f $DAEMON || exit 0
set -e
# This function makes sure that the Dante server can write to the pid-file.
touch_pidfile ()
{
if [ -r $CONFFILE ]; then
uid="`sed -n -e 's/[[:space:]]//g' -e 's/#.*//' -e '/^user\.privileged/{s/[^:]*://p;q;}' \
$CONFFILE`"
if [ -n "$uid" ]; then
touch $PIDFILE
chown $uid $PIDFILE
fi
fi
}
. /lib/lsb/init-functions
case "$1" in
start)
if ! egrep -cve '^ *(#|$)' \
-e '^(logoutput|user\.((not)?privileged|libwrap)):' $CONFFILE > /dev/null
then
echo "Not starting $DESC: not configured."
exit 0
fi
echo -n "Starting $DESC: "
touch_pidfile
start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON -- -D
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON
echo "$NAME."
;;
reload|force-reload)
#
# If the daemon can reload its config files on the fly
# for example by sending it SIGHUP, do it here.
#
# If the daemon responds to changes in its config file
# directly anyway, make this a do-nothing entry.
#
echo "Reloading $DESC configuration files."
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --exec $DAEMON -- -D
;;
restart)
#
# If the "reload" option is implemented, move the "force-reload"
# option to the "reload" entry above. If not, "force-reload" is
# just the same as "restart".
#
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
sleep 1
touch_pidfile
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- -D
echo "$NAME."
;;
status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
*)
N=/etc/init.d/$NAME
# echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0

View File

@@ -1,97 +0,0 @@
#! /bin/sh
### BEGIN INIT INFO
# Provides: danted-authenticating
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: SOCKS (v4 and v5) proxy daemon (danted)
### END INIT INFO
#
# dante SOCKS server init.d file. Based on /etc/init.d/skeleton:
# Version: @(#)skeleton 1.8 03-Mar-1998 miquels@cistron.nl
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/danted
NAME=danted-authenticating
DESC="Dante SOCKS daemon"
PIDFILE=/var/run/$NAME.pid
CONFFILE=/etc/$NAME.conf
DANTED_ARGS="-D -f $CONFFILE"
test -f $DAEMON || exit 0
set -e
# This function makes sure that the Dante server can write to the pid-file.
touch_pidfile ()
{
if [ -r $CONFFILE ]; then
uid="`sed -n -e 's/[[:space:]]//g' -e 's/#.*//' -e '/^user\.privileged/{s/[^:]*://p;q;}' \
$CONFFILE`"
if [ -n "$uid" ]; then
touch $PIDFILE
chown $uid $PIDFILE
fi
fi
}
. /lib/lsb/init-functions
case "$1" in
start)
if ! egrep -cve '^ *(#|$)' \
-e '^(logoutput|user\.((not)?privileged|libwrap)):' $CONFFILE > /dev/null
then
echo "Not starting $DESC: not configured."
exit 0
fi
echo -n "Starting $DESC: "
touch_pidfile
start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE \
--exec $DAEMON -- $DANTED_ARGS
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON
echo "$NAME."
;;
reload|force-reload)
#
# If the daemon can reload its config files on the fly
# for example by sending it SIGHUP, do it here.
#
# If the daemon responds to changes in its config file
# directly anyway, make this a do-nothing entry.
#
echo "Reloading $DESC configuration files."
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE \
--exec $DAEMON -- $DANTED_ARGS
;;
restart)
#
# If the "reload" option is implemented, move the "force-reload"
# option to the "reload" entry above. If not, "force-reload" is
# just the same as "restart".
#
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
sleep 1
touch_pidfile
start-stop-daemon --start --quiet --pidfile $PIDFILE \
--exec $DAEMON -- $DANTED_ARGS
echo "$NAME."
;;
status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
*)
N=/etc/init.d/$NAME
# echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0

View File

@@ -1,3 +0,0 @@
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y ftp-proxy=1.9.2.4-10 avahi-daemon
EXPOSE 2121

View File

@@ -1,3 +0,0 @@
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y squid=3.5.12-1ubuntu7.5 avahi-daemon
EXPOSE 3128-3130

View File

@@ -1,6 +0,0 @@
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y vsftpd=3.0.3-3ubuntu2 ftp=0.17-33 wget avahi-daemon
EXPOSE 20-21
# install configurations and test data
RUN wget https://tools.ietf.org/rfc/rfc3252.txt