From 177df80f09f3a84af7d86390ae7160a64fad8b4c Mon Sep 17 00:00:00 2001 From: Ryan Chu Date: Tue, 15 Jan 2019 14:52:44 +0100 Subject: Docker Provisioning: Install docker test servers on Windows 10 (x86_64) Build and cache docker images to VirtualBox virtual machine. 1. Download and install the docker tool kits and Apple Bonjour 2. Deploy boot2docker image into VirtualBox via docker-machine commands 3. Use Git Bash to run the shared provisioning scripts 4. Print CPU features to verify that CI has enabled VT-X/AMD-v support 5. Disable Hyper-V from Windows 10 Pro/Enterprise editions Change-Id: I5520e4a28376aba14f880c077bd7b083be971f0a Reviewed-by: Edward Welbourne --- .../common/shared/testserver/.gitattributes | 1 + .../common/shared/testserver/docker_machine.sh | 4 +- .../common/shared/testserver/docker_testserver.sh | 10 ++- coin/provisioning/common/windows/docker.ps1 | 85 ++++++++++++++++++++++ .../qtci-windows-10-x86_64/95-docker.ps1 | 6 ++ 5 files changed, 101 insertions(+), 5 deletions(-) create mode 100644 coin/provisioning/common/shared/testserver/.gitattributes create mode 100644 coin/provisioning/common/windows/docker.ps1 create mode 100644 coin/provisioning/qtci-windows-10-x86_64/95-docker.ps1 (limited to 'coin/provisioning') 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/docker_machine.sh b/coin/provisioning/common/shared/testserver/docker_machine.sh index 601056a4..9c69faa9 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,7 +40,7 @@ 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 fi diff --git a/coin/provisioning/common/shared/testserver/docker_testserver.sh b/coin/provisioning/common/shared/testserver/docker_testserver.sh index c40edf17..83baa488 100755 --- a/coin/provisioning/common/shared/testserver/docker_testserver.sh +++ b/coin/provisioning/common/shared/testserver/docker_testserver.sh @@ -35,14 +35,18 @@ set -ex -case ${BASH_SOURCE[0]} in - */*) SERVER_PATH="${BASH_SOURCE[0]%/*}" ;; +[ -x "$(command -v realpath)" ] && FILE=$(realpath ${BASH_SOURCE[0]}) || FILE=${BASH_SOURCE[0]} +case $FILE in + */*) SERVER_PATH="${FILE%/*}" ;; *) SERVER_PATH="." ;; esac # Create docker virtual machine (Boot2docker) case $1 in - VMX) source "$SERVER_PATH/docker_machine.sh" ;; + 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 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/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" -- cgit v1.2.3