aboutsummaryrefslogtreecommitdiffstats
path: root/coin
diff options
context:
space:
mode:
Diffstat (limited to 'coin')
-rwxr-xr-xcoin/provisioning/common/linux/docker.sh7
-rw-r--r--coin/provisioning/common/shared/testserver/.gitattributes1
-rw-r--r--coin/provisioning/common/shared/testserver/apache2_18.04/Dockerfile4
-rw-r--r--coin/provisioning/common/shared/testserver/cyrus/Dockerfile4
-rw-r--r--coin/provisioning/common/shared/testserver/cyrus_18.04/Dockerfile4
-rw-r--r--coin/provisioning/common/shared/testserver/danted_18.04/Dockerfile4
-rwxr-xr-xcoin/provisioning/common/shared/testserver/docker_machine.sh7
-rwxr-xr-xcoin/provisioning/common/shared/testserver/docker_testserver.sh (renamed from coin/provisioning/common/linux/docker_testserver.sh)38
-rw-r--r--coin/provisioning/common/shared/testserver/echo/Dockerfile4
-rw-r--r--coin/provisioning/common/shared/testserver/echo_18.04/Dockerfile4
-rw-r--r--coin/provisioning/common/shared/testserver/ftp-proxy_18.04/Dockerfile4
-rw-r--r--coin/provisioning/common/shared/testserver/iptables/Dockerfile4
-rw-r--r--coin/provisioning/common/shared/testserver/iptables_18.04/Dockerfile4
-rw-r--r--coin/provisioning/common/shared/testserver/settings.sh5
-rw-r--r--coin/provisioning/common/shared/testserver/squid_18.04/Dockerfile4
-rw-r--r--coin/provisioning/common/shared/testserver/testserver_util.sh41
-rw-r--r--coin/provisioning/common/shared/testserver/vsftpd_18.04/Dockerfile4
-rw-r--r--coin/provisioning/common/windows/disable-windows-updates.ps14
-rw-r--r--coin/provisioning/common/windows/docker.ps185
-rw-r--r--coin/provisioning/common/windows/helpers.ps132
-rw-r--r--coin/provisioning/qtci-windows-10-x86_64/95-docker.ps16
21 files changed, 211 insertions, 59 deletions
diff --git a/coin/provisioning/common/linux/docker.sh b/coin/provisioning/common/linux/docker.sh
index 1d9e8419..9be84e38 100755
--- a/coin/provisioning/common/linux/docker.sh
+++ b/coin/provisioning/common/linux/docker.sh
@@ -2,7 +2,7 @@
#############################################################################
##
-## Copyright (C) 2018 The Qt Company Ltd.
+## Copyright (C) 2019 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the provisioning scripts of the Qt Toolkit.
@@ -42,14 +42,15 @@ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubun
sudo apt-get update
sudo apt-get install docker-ce -y
sudo usermod -a -G docker $USER
-sudo docker info
+sudo docker --version
# Download and install the docker-compose extension.
sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
+sudo docker-compose --version
# Install Avahi to discover Docker containers in the test network
sudo apt-get install avahi-daemon -y
# Start testserver provisioning
-source "${BASH_SOURCE%/*}/docker_testserver.sh"
+sudo "$(readlink -f $(dirname ${BASH_SOURCE[0]}))/../shared/testserver/docker_testserver.sh"
diff --git a/coin/provisioning/common/shared/testserver/.gitattributes b/coin/provisioning/common/shared/testserver/.gitattributes
new file mode 100644
index 00000000..fcadb2cf
--- /dev/null
+++ b/coin/provisioning/common/shared/testserver/.gitattributes
@@ -0,0 +1 @@
+* text eol=lf
diff --git a/coin/provisioning/common/shared/testserver/apache2_18.04/Dockerfile b/coin/provisioning/common/shared/testserver/apache2_18.04/Dockerfile
new file mode 100644
index 00000000..dff9fe43
--- /dev/null
+++ b/coin/provisioning/common/shared/testserver/apache2_18.04/Dockerfile
@@ -0,0 +1,4 @@
+FROM ubuntu:18.04
+ARG packages="apache2 libcgi-session-perl avahi-daemon"
+RUN apt-get update && apt-get install -y $packages && dpkg -l $packages
+EXPOSE 80 443
diff --git a/coin/provisioning/common/shared/testserver/cyrus/Dockerfile b/coin/provisioning/common/shared/testserver/cyrus/Dockerfile
new file mode 100644
index 00000000..55486175
--- /dev/null
+++ b/coin/provisioning/common/shared/testserver/cyrus/Dockerfile
@@ -0,0 +1,4 @@
+FROM ubuntu:16.04
+ARG packages="cyrus-imapd avahi-daemon"
+RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y $packages && dpkg -l $packages
+EXPOSE 143 993
diff --git a/coin/provisioning/common/shared/testserver/cyrus_18.04/Dockerfile b/coin/provisioning/common/shared/testserver/cyrus_18.04/Dockerfile
new file mode 100644
index 00000000..2e525ec6
--- /dev/null
+++ b/coin/provisioning/common/shared/testserver/cyrus_18.04/Dockerfile
@@ -0,0 +1,4 @@
+FROM ubuntu:18.04
+ARG packages="cyrus-imapd avahi-daemon"
+RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y $packages && dpkg -l $packages
+EXPOSE 143 993
diff --git a/coin/provisioning/common/shared/testserver/danted_18.04/Dockerfile b/coin/provisioning/common/shared/testserver/danted_18.04/Dockerfile
new file mode 100644
index 00000000..f48794af
--- /dev/null
+++ b/coin/provisioning/common/shared/testserver/danted_18.04/Dockerfile
@@ -0,0 +1,4 @@
+FROM ubuntu:18.04
+ARG packages="dante-server avahi-daemon"
+RUN apt-get update && apt-get install -y $packages && dpkg -l $packages
+EXPOSE 1080-1081
diff --git a/coin/provisioning/common/shared/testserver/docker_machine.sh b/coin/provisioning/common/shared/testserver/docker_machine.sh
index 601056a4..8d791074 100755
--- a/coin/provisioning/common/shared/testserver/docker_machine.sh
+++ b/coin/provisioning/common/shared/testserver/docker_machine.sh
@@ -2,7 +2,7 @@
#############################################################################
##
-## Copyright (C) 2018 The Qt Company Ltd.
+## Copyright (C) 2019 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the provisioning scripts of the Qt Toolkit.
@@ -40,8 +40,11 @@ TestMachine='qt-test-server'
# Deploy docker virtual machine (Boot2Docker) into VirtualBox only if it doesn't exist
if [ -z $(docker-machine ls -q --filter "name=$TestMachine") ]
then
- docker-machine create -d virtualbox $TestMachine
+ docker-machine create $@ $TestMachine
docker-machine ip $TestMachine
+else
+ # Otherwise, start the docker machine and update with new TLS certificates.
+ docker-machine start $TestMachine && docker-machine regenerate-certs -f $TestMachine
fi
# Switch the docker engine to $TestMachine
diff --git a/coin/provisioning/common/linux/docker_testserver.sh b/coin/provisioning/common/shared/testserver/docker_testserver.sh
index 2d5d9611..83baa488 100755
--- a/coin/provisioning/common/linux/docker_testserver.sh
+++ b/coin/provisioning/common/shared/testserver/docker_testserver.sh
@@ -2,7 +2,7 @@
#############################################################################
##
-## Copyright (C) 2018 The Qt Company Ltd.
+## Copyright (C) 2019 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the provisioning scripts of the Qt Toolkit.
@@ -35,14 +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" ;;
+[ -x "$(command -v realpath)" ] && FILE=$(realpath ${BASH_SOURCE[0]}) || FILE=${BASH_SOURCE[0]}
+case $FILE in
+ */*) SERVER_PATH="${FILE%/*}" ;;
+ *) SERVER_PATH="." ;;
esac
-# testserver shared scripts
-source "$SERVER_PATH/testserver_util.sh"
+# Create docker virtual machine (Boot2docker)
+case $1 in
+ VMX) source "$SERVER_PATH/docker_machine.sh" "-d virtualbox" ;;
+ Hyper-V)
+ # The Hyper-v has been enabled in Windows 10. Disable checking the hardware virtualization.
+ source "$SERVER_PATH/docker_machine.sh" "-d virtualbox --virtualbox-no-vtx-check" ;;
+ *) ;;
+esac
+
+# Display system-wide information of docker-engine
+docker info
+
+# Sort files by their SHA-1, and then return the accumulated result
+sha1tree () {
+ # For example, macOS doesn't install sha1sum by default. In such case, it uses shasum instead.
+ [ -x "$(command -v sha1sum)" ] || SHASUM=shasum
+
+ find "$@" -type f -print0 | \
+ xargs -0 ${SHASUM-sha1sum} | cut -d ' ' -f 1 | \
+ sort | ${SHASUM-sha1sum} | cut -d ' ' -f 1
+}
# 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)
@@ -55,8 +74,7 @@ source "$SERVER_PATH/settings.sh"
for server in $testserver
do
context="$SERVER_PATH/$server"
- # 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
+ docker build -t qt-test-server-$server:$(sha1tree $context) $context
done
-sudo docker images
+docker images
diff --git a/coin/provisioning/common/shared/testserver/echo/Dockerfile b/coin/provisioning/common/shared/testserver/echo/Dockerfile
new file mode 100644
index 00000000..653ca714
--- /dev/null
+++ b/coin/provisioning/common/shared/testserver/echo/Dockerfile
@@ -0,0 +1,4 @@
+FROM ubuntu:16.04
+ARG packages="xinetd avahi-daemon"
+RUN apt-get update && apt-get install -y $packages && dpkg -l $packages
+EXPOSE 7 7/UDP 13
diff --git a/coin/provisioning/common/shared/testserver/echo_18.04/Dockerfile b/coin/provisioning/common/shared/testserver/echo_18.04/Dockerfile
new file mode 100644
index 00000000..37f488cb
--- /dev/null
+++ b/coin/provisioning/common/shared/testserver/echo_18.04/Dockerfile
@@ -0,0 +1,4 @@
+FROM ubuntu:18.04
+ARG packages="xinetd avahi-daemon"
+RUN apt-get update && apt-get install -y $packages && dpkg -l $packages
+EXPOSE 7 7/UDP 13
diff --git a/coin/provisioning/common/shared/testserver/ftp-proxy_18.04/Dockerfile b/coin/provisioning/common/shared/testserver/ftp-proxy_18.04/Dockerfile
new file mode 100644
index 00000000..0e7146ba
--- /dev/null
+++ b/coin/provisioning/common/shared/testserver/ftp-proxy_18.04/Dockerfile
@@ -0,0 +1,4 @@
+FROM ubuntu:18.04
+ARG packages="ftp-proxy avahi-daemon"
+RUN apt-get update && apt-get install -y $packages && dpkg -l $packages
+EXPOSE 2121
diff --git a/coin/provisioning/common/shared/testserver/iptables/Dockerfile b/coin/provisioning/common/shared/testserver/iptables/Dockerfile
new file mode 100644
index 00000000..cbee61d4
--- /dev/null
+++ b/coin/provisioning/common/shared/testserver/iptables/Dockerfile
@@ -0,0 +1,4 @@
+FROM ubuntu:16.04
+ARG packages="iptables avahi-daemon"
+RUN apt-get update && apt-get install -y $packages && dpkg -l $packages
+EXPOSE 1357
diff --git a/coin/provisioning/common/shared/testserver/iptables_18.04/Dockerfile b/coin/provisioning/common/shared/testserver/iptables_18.04/Dockerfile
new file mode 100644
index 00000000..5865e9c8
--- /dev/null
+++ b/coin/provisioning/common/shared/testserver/iptables_18.04/Dockerfile
@@ -0,0 +1,4 @@
+FROM ubuntu:18.04
+ARG packages="iptables avahi-daemon"
+RUN apt-get update && apt-get install -y $packages && dpkg -l $packages
+EXPOSE 1357
diff --git a/coin/provisioning/common/shared/testserver/settings.sh b/coin/provisioning/common/shared/testserver/settings.sh
index 041661f2..4819cef2 100644
--- a/coin/provisioning/common/shared/testserver/settings.sh
+++ b/coin/provisioning/common/shared/testserver/settings.sh
@@ -1,6 +1,6 @@
#############################################################################
##
-## Copyright (C) 2018 The Qt Company Ltd.
+## Copyright (C) 2019 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the provisioning scripts of the Qt Toolkit.
@@ -34,4 +34,5 @@
set -ex
# A list of test servers to be provisioned
-testserver='apache2 squid vsftpd ftp-proxy danted'
+testserver='apache2 squid vsftpd ftp-proxy danted echo cyrus iptables'
+testserver="$testserver apache2_18.04 squid_18.04 vsftpd_18.04 ftp-proxy_18.04 danted_18.04 echo_18.04 cyrus_18.04 iptables_18.04"
diff --git a/coin/provisioning/common/shared/testserver/squid_18.04/Dockerfile b/coin/provisioning/common/shared/testserver/squid_18.04/Dockerfile
new file mode 100644
index 00000000..208feec7
--- /dev/null
+++ b/coin/provisioning/common/shared/testserver/squid_18.04/Dockerfile
@@ -0,0 +1,4 @@
+FROM ubuntu:18.04
+ARG packages="squid avahi-daemon"
+RUN apt-get update && apt-get install -y $packages && dpkg -l $packages
+EXPOSE 3128-3130
diff --git a/coin/provisioning/common/shared/testserver/testserver_util.sh b/coin/provisioning/common/shared/testserver/testserver_util.sh
deleted file mode 100644
index c42fb5e0..00000000
--- a/coin/provisioning/common/shared/testserver/testserver_util.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-#############################################################################
-##
-## 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.
-##
-## $QT_BEGIN_LICENSE:LGPL21$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see http://www.qt.io/terms-conditions. For further
-## information use the contact form at http://www.qt.io/contact-us.
-##
-## GNU Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 2.1 or version 3 as published by the Free
-## Software Foundation and appearing in the file LICENSE.LGPLv21 and
-## LICENSE.LGPLv3 included in the packaging of this file. Please review the
-## following information to ensure the GNU Lesser General Public License
-## requirements will be met: https://www.gnu.org/licenses/lgpl.html and
-## http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-##
-## As a special exception, The Qt Company gives you certain additional
-## rights. These rights are described in The Qt Company LGPL Exception
-## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-set -ex
-
-# Sort files by their SHA-1, and then return the accumulated result
-sha1tree () {
- find "$@" -type f -print0 | \
- xargs -0 shasum | cut -d ' ' -f 1 | \
- sort | shasum | cut -d ' ' -f 1
-}
diff --git a/coin/provisioning/common/shared/testserver/vsftpd_18.04/Dockerfile b/coin/provisioning/common/shared/testserver/vsftpd_18.04/Dockerfile
new file mode 100644
index 00000000..843472fd
--- /dev/null
+++ b/coin/provisioning/common/shared/testserver/vsftpd_18.04/Dockerfile
@@ -0,0 +1,4 @@
+FROM ubuntu:18.04
+ARG packages="vsftpd avahi-daemon"
+RUN apt-get update && apt-get install -y $packages && dpkg -l $packages
+EXPOSE 20-21
diff --git a/coin/provisioning/common/windows/disable-windows-updates.ps1 b/coin/provisioning/common/windows/disable-windows-updates.ps1
index 87414f03..15644cfe 100644
--- a/coin/provisioning/common/windows/disable-windows-updates.ps1
+++ b/coin/provisioning/common/windows/disable-windows-updates.ps1
@@ -33,6 +33,8 @@
# This script disables the automatic Windows updates
+. "$PSScriptRoot\helpers.ps1"
+
$service = get-service wuauserv
if (-not $service) {
Write-Host "Windows Update service not found."
@@ -43,7 +45,7 @@ if ($service.Status -eq "Stopped") {
Write-Host "Windows Update service already stopped."
} else {
Write-Host "Stopping Windows Update service."
- Stop-Service -Name "wuauserv" -Force
+ Retry {Stop-Service -Name "wuauserv" -Force} 20 5
}
$startup = Get-WmiObject Win32_Service | Where-Object {$_.Name -eq "wuauserv"} | Select -ExpandProperty "StartMode"
diff --git a/coin/provisioning/common/windows/docker.ps1 b/coin/provisioning/common/windows/docker.ps1
new file mode 100644
index 00000000..6f53eccd
--- /dev/null
+++ b/coin/provisioning/common/windows/docker.ps1
@@ -0,0 +1,85 @@
+#############################################################################
+##
+## Copyright (C) 2019 The Qt Company Ltd.
+## Contact: http://www.qt.io/licensing/
+##
+## This file is part of the provisioning scripts of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:LGPL21$
+## Commercial License Usage
+## Licensees holding valid commercial Qt licenses may use this file in
+## accordance with the commercial license agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and The Qt Company. For licensing terms
+## and conditions see http://www.qt.io/terms-conditions. For further
+## information use the contact form at http://www.qt.io/contact-us.
+##
+## GNU Lesser General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU Lesser
+## General Public License version 2.1 or version 3 as published by the Free
+## Software Foundation and appearing in the file LICENSE.LGPLv21 and
+## LICENSE.LGPLv3 included in the packaging of this file. Please review the
+## following information to ensure the GNU Lesser General Public License
+## requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+## http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+##
+## As a special exception, The Qt Company gives you certain additional
+## rights. These rights are described in The Qt Company LGPL Exception
+## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+. "$PSScriptRoot\helpers.ps1"
+
+# This script installs Docker tool kits and Apple Bonjour on Windows.
+
+function DownloadAndInstall
+{
+ Param (
+ [string]$externalUrl,
+ [string]$internalUrl,
+ [string]$package,
+ [string]$sha1,
+ [string]$parameters
+ )
+
+ Write-Host "Fetching $package from URL..."
+ Download $externalUrl $internalUrl $package
+ Verify-Checksum $package $sha1
+
+ Write-Host "Installing $package..."
+ Run-Executable $package $parameters
+
+ Write-Host "Remove $package..."
+ Remove-Item -Path $package
+}
+
+# Install Docker Toolbox
+$package = Get-DownloadLocation "DockerToolbox.exe"
+$externalUrl = "https://download.docker.com/win/stable/DockerToolbox.exe"
+$internalUrl = "http://ci-files01-hki.intra.qt.io/input/windows/DockerToolbox.exe"
+$sha1 = "62325c426ff321d9ebfb89664d65cf9ffaef2985"
+DownloadAndInstall $externalUrl $internalUrl $package $sha1 "/SP- /SILENT"
+Add-Path 'C:\Program Files\Docker Toolbox'
+docker --version
+docker-compose --version
+
+# Install Apple Bonjour
+$package = Get-DownloadLocation "BonjourPSSetup.exe"
+$externalUrl = "http://support.apple.com/downloads/DL999/en_US/BonjourPSSetup.exe"
+$internalUrl = "http://ci-files01-hki.intra.qt.io/input/windows/BonjourPSSetup.exe"
+$sha1 = "847f39e0ea80d2a4d902fe59657e18f5bc32a8cb"
+DownloadAndInstall $externalUrl $internalUrl $package $sha1 "/qr"
+
+# Nested virtualization - Print CPU features to verify that CI has enabled VT-X/AMD-v support
+$testserver = "$PSScriptRoot\..\shared\testserver\docker_testserver.sh"
+$sysInfoStr = systeminfo
+if ($sysInfoStr -like "*A hypervisor has been detected*") {
+ & 'C:\Program Files\Git\bin\bash.exe' --login $testserver Hyper-V
+} elseif ($sysInfoStr -like "*Virtualization Enabled In Firmware: Yes*") {
+ & 'C:\Program Files\Git\bin\bash.exe' --login $testserver VMX
+} else {
+ Write-Error "VMX not found error! Please make sure Coin has enabled VT-X/AMD-v."
+}
diff --git a/coin/provisioning/common/windows/helpers.ps1 b/coin/provisioning/common/windows/helpers.ps1
index 76ad4867..9cd8567e 100644
--- a/coin/provisioning/common/windows/helpers.ps1
+++ b/coin/provisioning/common/windows/helpers.ps1
@@ -159,3 +159,35 @@ function IsProxyEnabled {
function Get-Proxy {
return (Get-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings').proxyServer
}
+
+function Retry{
+ <#
+ usage:
+ Retry{CODE}
+ Retry{CODE} <num of retries> <delay_s>
+ #delay is in seconds
+ #>
+ Param(
+ [Parameter(mandatory=$true)]
+ [scriptblock]$command,
+ [int][ValidateRange(1, 20)]$retry = 5,
+ [int][ValidateRange(1, 60)]$delay_s = 5
+ )
+ $success=$false
+ $retry_count=0
+ do{
+ try {
+ Invoke-Command -ScriptBlock $command
+ $success=$true
+ }
+ catch {
+ $retry_count++
+ Write-Host "Error: $_, try: $retry_count, retrying in $delay_s seconds"
+ Start-Sleep -Seconds $delay_s
+ }
+ } until ($success -or $retry+1 -le $retry_count)
+
+ if (-not $success) {
+ Throw("Failed to run command successfully in $retry_count tries")
+ }
+}
diff --git a/coin/provisioning/qtci-windows-10-x86_64/95-docker.ps1 b/coin/provisioning/qtci-windows-10-x86_64/95-docker.ps1
new file mode 100644
index 00000000..df735855
--- /dev/null
+++ b/coin/provisioning/qtci-windows-10-x86_64/95-docker.ps1
@@ -0,0 +1,6 @@
+# Disable Hyper-V from Windows 10 Pro/Enterprise
+# Because VirtualBox is a type 2 hypervisor, it can't run if Hyper-V virtual machines are in use.
+# Otherwise, docker-machine will complain about "VT-x is not available (VERR_VMX_NO_VMX)".
+Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All -NoRestart
+
+. "$PSScriptRoot\..\common\windows\docker.ps1"