Enable mDNS service discovery in Docker-based test servers

To resolve the challenge of connecting Docker containers from the host
without extra user-efforts, Avahi is used to publish the Docker-based
test servers (Docker containers) on a local network. It is a free
Zeroconf implementation, and it provides multicast DNS (mDNS) service
discovery. By default, mDNS only resolves hostname ending with the
".local" domain. In this change, the domain name of test servers is
changed to "test-net.qt.local". As stated in the standard, the DNS query
for a local domain will be sent to the mDNS multicast address. It avoids
the need for root access to modify system files.

Task-number: QTQAINFRA-1686
Change-Id: I255fba0720ee6d0e84c9cb5ca9289d4466578922
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Ryan Chu <ryan.chu@qt.io>
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io>
This commit is contained in:
Ryan Chu 2018-07-02 15:13:12 +02:00
parent 6d0878db1b
commit 5c5af7155a
5 changed files with 34 additions and 35 deletions

View File

@ -73,7 +73,7 @@ equals(QMAKE_HOST.os, Windows)|isEmpty(TESTSERVER_VERSION) {
isEmpty(TESTSERVER_IMAGES): error("Docker image qt-test-server-* not found")
# The domain name is relevant to https keycert (qnetworkreply/crts/qt-test-net-cacert.pem).
DNSDOMAIN = test-net.qt
DNSDOMAIN = test-net.qt.local
TEST_ENV += TESTSERVER_DOMAIN=$$DNSDOMAIN
DEFINES += QT_TEST_SERVER QT_TEST_SERVER_DOMAIN=$$shell_quote(\"$${DNSDOMAIN}\")

View File

@ -1,4 +1,4 @@
ServerName apache2.test-net.qt:80
ServerName apache2.test-net.qt.local:80
NameVirtualHost *:443

View File

@ -48,5 +48,10 @@ for RUN_CMD
do $RUN_CMD
done
# start multicast DNS service discovery (mDNS)
sed -i "s,#domain-name=local,domain-name=test-net.qt.local," /etc/avahi/avahi-daemon.conf
service dbus restart
service avahi-daemon restart
# keep-alive in docker detach mode
sleep infinity

View File

@ -1,16 +1,16 @@
-----BEGIN CERTIFICATE-----
MIICiTCCAfICCQCqBnF3SPSY7jANBgkqhkiG9w0BAQQFADCBiDELMAkGA1UEChMC
MIIClTCCAf4CCQC2xMhNhwvATDANBgkqhkiG9w0BAQQFADCBjjELMAkGA1UEChMC
UXQxGTAXBgNVBAsTEENvcmUgQW5kIE5ldHdvcmsxGzAZBgkqhkiG9w0BCQEWDG5v
Ym9keS5xdC5pbzENMAsGA1UEBxMET3NsbzENMAsGA1UECBMET3NsbzELMAkGA1UE
BhMCTk8xFjAUBgNVBAMUDSoudGVzdC1uZXQucXQwHhcNMTgwMzEzMDkyNjQ0WhcN
NDgwMzA1MDkyNjQ0WjCBiDELMAkGA1UEChMCUXQxGTAXBgNVBAsTEENvcmUgQW5k
IE5ldHdvcmsxGzAZBgkqhkiG9w0BCQEWDG5vYm9keS5xdC5pbzENMAsGA1UEBxME
T3NsbzENMAsGA1UECBMET3NsbzELMAkGA1UEBhMCTk8xFjAUBgNVBAMUDSoudGVz
dC1uZXQucXQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM2q22/WNMmn8cC+
5EEYGeICySLmp9W6Ay6eKHr0Xxp3X3epETuPfvAuxp7rOtkS18EMUegkUj8jw0IM
EcbyHKFC/rTCaYOt93CxGBXMIChiMPAsFeYzGa/D6xzAkfcRaJRQ+Ek3CDLXPnXf
o7xpABXezYcPXAJrgsgBfWrwHdxzAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAwNhw
aKznTaMj6JeHP/kEEwMppRkNjmh4ECdQfT9vYNs45UKSAvCa1dn6ZBZKIdhqKCLn
U2qiIS2783IoisRjFtg8x70S13EsBw/yEL/av+Ca1gQHOIFrOuLqwYbslTHrRXRA
RPzHOl3ZP9FD3mPZ8jyzxYs4x5EM0X26FkAR078=
BhMCTk8xHDAaBgNVBAMUEyoudGVzdC1uZXQucXQubG9jYWwwHhcNMTgwNzAxMTgz
NjI3WhcNNDgwNjIzMTgzNjI3WjCBjjELMAkGA1UEChMCUXQxGTAXBgNVBAsTEENv
cmUgQW5kIE5ldHdvcmsxGzAZBgkqhkiG9w0BCQEWDG5vYm9keS5xdC5pbzENMAsG
A1UEBxMET3NsbzENMAsGA1UECBMET3NsbzELMAkGA1UEBhMCTk8xHDAaBgNVBAMU
EyoudGVzdC1uZXQucXQubG9jYWwwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
AM2q22/WNMmn8cC+5EEYGeICySLmp9W6Ay6eKHr0Xxp3X3epETuPfvAuxp7rOtkS
18EMUegkUj8jw0IMEcbyHKFC/rTCaYOt93CxGBXMIChiMPAsFeYzGa/D6xzAkfcR
aJRQ+Ek3CDLXPnXfo7xpABXezYcPXAJrgsgBfWrwHdxzAgMBAAEwDQYJKoZIhvcN
AQEEBQADgYEAZu/lQPy8PXeyyYGamOVms/FZKJ48BH1y8KC3BeBU5FYnhvgG7pz8
Wz9JKvt2t/r45wQeAkNL6HnGUBhPJsHMjPHl5KktqN+db3D+FQygBeS2V1+zmC0X
UZNRE4aWiHvt1Lq+pTx89SOMOpfqWfh4qTQKiE5jC2V4DeCNQ3u7uI8=
-----END CERTIFICATE-----

View File

@ -1,9 +1,5 @@
version: '3.4'
x-domains:
&testdomain
${TESTSERVER_DOMAIN:-test-net.qt}
# The tag of images is used by docker compose file to launch the corresponding
# docker containers. The value of tag comes from the provisioning script
# (coin/provisioning/.../testserver/docker_testserver.sh). The script gets SHA-1
@ -16,9 +12,9 @@ x-domains:
services:
apache2:
image: qt-test-server-apache2:e2a70c8b169c204e762b375885bd3a26cc40ba48
image: qt-test-server-apache2:cc9ea678b92bdda33acb9fa0159bb4ad0f3cd947
container_name: qt-test-server-apache2
domainname: *testdomain
domainname: test-net.qt.local
hostname: apache2
volumes:
- ./common:/common:ro
@ -27,14 +23,14 @@ services:
command: [common/ssl.sh, service/apache2.sh]
squid:
image: qt-test-server-squid:276768104d3bbf097f4f3d9f3dc472a067852094
image: qt-test-server-squid:577d99307eea9a8cccfec944d25be2bce2fe99cc
container_name: qt-test-server-squid
domainname: *testdomain
domainname: test-net.qt.local
hostname: squid
depends_on:
- apache2
external_links:
- apache2:apache2.test-net.qt
- apache2:apache2.test-net.qt.local
volumes:
- ./common:/common:ro
- ./squid:/service:ro
@ -42,12 +38,10 @@ services:
command: service/squid.sh
vsftpd:
image: qt-test-server-vsftpd:ab7ecdbbace1bce7642a92ce04e9051c7630376c
image: qt-test-server-vsftpd:18896604c7e90b543e56d80c8a8aabdb65a590d0
container_name: qt-test-server-vsftpd
domainname: *testdomain
domainname: test-net.qt.local
hostname: vsftpd
depends_on:
- squid
volumes:
- ./common:/common:ro
- ./vsftpd:/service:ro
@ -55,14 +49,14 @@ services:
command: service/vsftpd.sh
ftp-proxy:
image: qt-test-server-ftp-proxy:4c5734fe60eb450cbf8a96165f67cba19851ec12
image: qt-test-server-ftp-proxy:2c6c8f1ab6a364b540c43d705fb6f15a585cb2af
container_name: qt-test-server-ftp-proxy
domainname: *testdomain
domainname: test-net.qt.local
hostname: ftp-proxy
depends_on:
- vsftpd
external_links:
- vsftpd:vsftpd.test-net.qt
- vsftpd:vsftpd.test-net.qt.local
volumes:
- ./common:/common:ro
- ./ftp-proxy:/service:ro
@ -70,18 +64,18 @@ services:
command: service/ftp-proxy.sh
danted:
image: qt-test-server-danted:8404549745b5601ec3d22dc019258b70438864de
image: qt-test-server-danted:327dd56c3c35db85b26fac93213a5a1918475bc7
container_name: qt-test-server-danted
domainname: *testdomain
domainname: test-net.qt.local
hostname: danted
depends_on:
- apache2
- vsftpd
- ftp-proxy
external_links:
- apache2:apache2.test-net.qt
- vsftpd:vsftpd.test-net.qt
- ftp-proxy:ftp-proxy.test-net.qt
- apache2:apache2.test-net.qt.local
- vsftpd:vsftpd.test-net.qt.local
- ftp-proxy:ftp-proxy.test-net.qt.local
volumes:
- ./common:/common:ro
- ./danted:/service:ro