From 0923497dccf27070ec4ea6f6572c6453a9041136 Mon Sep 17 00:00:00 2001 From: Wolfgang Manousek Date: Thu, 5 Jan 2017 19:29:10 +0100 Subject: [PATCH] fixed boost download and opencv installation --- Scripts/devInstall/Windows/DevInstall.ps1 | 13 +- Scripts/devInstall/Windows/helper/Action.ps1 | 66 +++- .../devInstall/Windows/helper/Download.ps1 | 8 +- .../devInstall/Windows/helper/Operations.ps1 | 372 ++---------------- 4 files changed, 90 insertions(+), 369 deletions(-) diff --git a/Scripts/devInstall/Windows/DevInstall.ps1 b/Scripts/devInstall/Windows/DevInstall.ps1 index ffa06f536..a0459d64d 100644 --- a/Scripts/devInstall/Windows/DevInstall.ps1 +++ b/Scripts/devInstall/Windows/DevInstall.ps1 @@ -57,11 +57,6 @@ Param( [parameter(Mandatory=$false)] [string] $ServerLocation, [parameter(Mandatory=$false)] [string] $CloneDirectory) - - - $Execute = $true - - $roboCopyCmd = "robocopy.exe" $localDir = $InstallLocation @@ -141,6 +136,7 @@ Function main $operation += OpSwig3010 -cache $localCache -targetFolder $localDir $operation += OpProtoBuf310VS15 -cache $localCache -targetFolder $localDir $operation += OpZlibVS15 -cache $localCache -targetFolder $localDir + $operation += OpOpenCV31 -cache $localCache -targetFolder $localDir if ($ServerLocation) { $operation += OpProtoBuf310VS15Internal -server $ServerLocation -cache $localCache -targetFolder $localDir $operation += OpZLibVS15Internal -server $ServerLocation -cache $localCache -targetFolder $localDir @@ -153,12 +149,7 @@ Function main #$operation += OpGitClone -targetFolder $repositoryRootDir -targetDir $reponame #$operation += OpSysinternals -cache $localCache -targetFolder $localDir #$operation += OpOpenCVInternal $ServerLocation -cache $localCache -targetFolder $localDir - #$operation += OpOpenCV31 -cache $localCache -targetFolder $localDir - #$operation += OpCygwin -cache $localCache -targetFolder $localDir - - #$operation += AddOpDisableJITDebug - #$operation += OpTestData "c:\Data\CNTKTestData" "\\storage.ccp.philly.selfhost.corp.microsoft.com\public\CNTKTestData" - #$operation += OpSysinternals -cache $localCache -targetFolder $localDir + $operationList = @() diff --git a/Scripts/devInstall/Windows/helper/Action.ps1 b/Scripts/devInstall/Windows/helper/Action.ps1 index d8f8c8bce..00abf8cbc 100644 --- a/Scripts/devInstall/Windows/helper/Action.ps1 +++ b/Scripts/devInstall/Windows/helper/Action.ps1 @@ -326,30 +326,66 @@ function ExtractAllFromZip( } $tempDir = [System.IO.Path]::GetTempFileName(); - remove-item $tempDir | Out-Null $completeTempDestination = join-path -Path $tempDir -ChildPath $destinationFolder new-item -type directory -path $completeTempDestination -Force -ErrorAction Stop | Out-Null + $obj = new-object -com shell.application + $zipFile = $obj.NameSpace($zipFileName) + $destinationNS = $obj.NameSpace($completeTempDestination) - if ($Execute) { - $obj = new-object -com shell.application - $zipFile = $obj.NameSpace($zipFileName) - $destinationNS = $obj.NameSpace($completeTempDestination) + $destinationNS.CopyHere($zipFile.Items()) - $destinationNS.CopyHere($zipFile.Items()) - - if ($zipSubTree -ne $null) { - $completeTempDestination = join-path $completeTempDestination $zipSubTree - } - - RobocopySourceDestination $completeTempDestination $completeDestination $copyAdditive - - rm -r tempDir -Force -ErrorAction SilentlyContinue | Out-Null + if ($zipSubTree) { + $completeTempDestination = join-path $completeTempDestination $zipSubTree } - return + RobocopySourceDestination $completeTempDestination $completeDestination $copyAdditive + + rm -r $tempDir -Force -ErrorAction SilentlyContinue | Out-Null +} + + +function Extract7zipSelfExtractingArchive( + [Parameter(Mandatory = $true)][hashtable] $table) +{ + FunctionIntro $table + + $func = $table["Function"] + $archiveName = $table["archiveName"] + $destination = $table["destination"] + $destinationFolder = $table["destinationFolder"] + $archiveSubTree = $table["archiveSubTree"] + $copyAdditive = GetTableDefaultBool -table $table -entryName "AddToDirectory" -defaultValue $false + + Write-Verbose "Extract7zipSelfExtractingArchive: archiveName [$archiveName] destination [$destination] Folder [$destinationFolder]" + + if (-not $Execute) { + return + } + $completeDestination = join-path -Path $destination -ChildPath $destinationFolder + + if (-not (test-path $archiveName -PathType Leaf)) { + throw "Extract7zipSelfExtractingArchive: zipFileName [$zipFileName] not found!" + } + + $tempDir = [System.IO.Path]::GetTempFileName(); + remove-item $tempDir | Out-Null + + $completeTempDestination = $tempDir + new-item -type directory -path $completeTempDestination -Force -ErrorAction Stop | Out-Null + + $cmdParm = "-o`"$completeTempDestination`" -y" + $newTable = @{ Function = "InstallExe"; Command = $archiveName; Param = $cmdParm; runAs=$false } + InstallExe $newTable + + if ($archiveSubTree) { + $completeTempDestination = join-path $completeTempDestination $archiveSubTree + } + RobocopySourceDestination $completeTempDestination $completeDestination $copyAdditive + + rm -r $tempDir -Force -ErrorAction SilentlyContinue | Out-Null } function ExtractAllFromTarGz( diff --git a/Scripts/devInstall/Windows/helper/Download.ps1 b/Scripts/devInstall/Windows/helper/Download.ps1 index 6bc4c6771..56ae8fe8b 100644 --- a/Scripts/devInstall/Windows/helper/Download.ps1 +++ b/Scripts/devInstall/Windows/helper/Download.ps1 @@ -61,7 +61,7 @@ function Download( DownloadFileWebRequest -SourceFile $source -OutFile $destination -ExpectedSize $ExpectedSize } else { - DownloadFile -SourceFile $source -OutFile $destination + DownloadFileWebClient -SourceFile $source -OutFile $destination } return } @@ -130,7 +130,7 @@ function DownloadAndExtract( ){ $outFileName = Join-Path $tPath $fileName - DownloadFile -SourceFile $sAddress ` + DownloadFileWebClient -SourceFile $sAddress ` -OutFile $outFileName ` -tempFileName $fileName @@ -189,7 +189,7 @@ function DownloadFileWebRequest ( Remove-Item -path $TempFile -ErrorAction SilentlyContinue } -function DownloadFile( +function DownloadFileWebClient( [string] $SourceFile, [string] $OutFile, [int] $timeout = 600, @@ -203,7 +203,7 @@ function DownloadFile( #--------------- $startTime = Get-Date - Write-Host "Downloading [$SourceFile], please be patient...." + Write-Host "Downloading [$SourceFile], please be patient, no progress message is shown ..." if (-not $Execute) { Write-Host "$message ** Running in DEMOMODE - no download performed" return diff --git a/Scripts/devInstall/Windows/helper/Operations.ps1 b/Scripts/devInstall/Windows/helper/Operations.ps1 index f2980af24..7e1d87515 100644 --- a/Scripts/devInstall/Windows/helper/Operations.ps1 +++ b/Scripts/devInstall/Windows/helper/Operations.ps1 @@ -40,27 +40,6 @@ function OpAnacondaEnv34( } } -function OpBoost160( - [parameter(Mandatory=$true)][string] $cache, - [parameter(Mandatory=$true)][string] $targetFolder) -{ - $prodName = "Boost 1.60.0" - $prodFile = "boost_1_60_0-msvc-12.0-64.exe" - $prodSubDir = "boost_1_60_0" - $targetPath = join-path $targetFolder $prodSubDir - $downloadSource = "https://sourceforge.net/projects/boost/files/boost-binaries/1.60.0/boost_1_60_0-msvc-12.0-64.exe/download" - - @( @{Name = $prodName; ShortName = "BOOST160"; VerifyInfo = "Checking for $prodName in $targetPath"; ActionInfo = "Installing $prodName"; - Verification = @( @{Function = "VerifyDirectory"; Path = $targetPath }, - @{Function = "VerifyEnvironmentAndData"; EnvVar = "BOOST_INCLUDE_PATH"; Content = $targetPath }, - @{Function = "VerifyEnvironmentAndData"; EnvVar = "BOOST_LIB_PATH"; Content = "$targetPath\lib64-msvc-12.0" } ); - Download = @( @{Function = "Download"; Source = $downloadSource; Destination = "$cache\$prodFile" } ); - Action = @( @{Function = "SetEnvironmentVariable"; EnvVar = "BOOST_INCLUDE_PATH"; Content = "$targetPath" }, - @{Function = "SetEnvironmentVariable"; EnvVar = "BOOST_LIB_PATH"; Content = "$targetPath\lib64-msvc-12.0" }, - @{Function = "InstallExe"; Command = "$cache\$prodFile"; Param = "/dir=$targetPath /SP- /SILENT /NORESTART"; runAs=$false } ); - } ) -} - function OpBoost160VS15( [parameter(Mandatory=$true)][string] $cache, [parameter(Mandatory=$true)][string] $targetFolder) @@ -73,13 +52,14 @@ function OpBoost160VS15( $envVar = "BOOST_INCLUDE_PATH" $envVarLib = "BOOST_LIB_PATH" $envContentLib = "$targetPath\lib64-msvc-14.0" + $downloadSize = 0 @( @{Name = $prodName; ShortName = "BOOST160VS15"; VerifyInfo = "Checking for $prodName in $targetPath"; ActionInfo = "Installing $prodName"; - Verification = @( @{Function = "VerifyDirectory"; Path = $targetPath }, + Verification = @( @{Function = "VerifyDirectory"; Path = "$targetPath" }, @{Function = "VerifyEnvironmentAndData"; EnvVar = $envVar; Content = $targetPath }, @{Function = "VerifyEnvironmentAndData"; EnvVar = $envVarLib; Content = $envContentLib } ); - Download = @( @{Function = "Download"; Source = $downloadSource; Destination = "$cache\$prodFile" } ); - Action = @( @{Function = "SetEnvironmentVariable"; EnvVar = $envVar; Content = $targetPath }, + Download = @( @{Function = "Download"; Method = "WebClient"; Source = $downloadSource; Destination = "$cache\$prodFile"; ExpectedSize = $downloadSize } ); + Actionssssss = @( @{Function = "SetEnvironmentVariable"; EnvVar = $envVar; Content = $targetPath }, @{Function = "SetEnvironmentVariable"; EnvVar = $envVarLib; Content = $envContentLib }, @{Function = "InstallExe"; Command = "$cache\$prodFile"; Param = "/dir=$targetPath /SP- /SILENT /NORESTART"; runAs=$false } ); } ) @@ -92,37 +72,16 @@ function OpCMake362( $targetPath = join-path $env:ProgramFiles "cmake\bin" $cmakeName = "cmake-3.6.2-win64-x64.msi" $downloadSource = "https://cmake.org/files/v3.6/cmake-3.6.2-win64-x64.msi" + $downloadSize = 15771063 @( @{ShortName = "CMake362"; Name = $prodName; VerifyInfo = "Checking for $prodName in $targetPath"; ActionInfo = "Installing $prodName"; Verification = @( @{Function = "VerifyWinProductExists"; Match = "^CMake$"; Version = "3.6.2" } ); - Download = @( @{Function = "Download"; Source = $downloadSource; Destination = "$cache\$cmakeName" } ); + Download = @( @{Function = "Download"; Method = "WebRequest"; Source = $downloadSource; Destination = "$cache\$cmakeName"; ExpectedSize = $downloadSize } ); Action = @( @{Function = "InstallMsi"; MsiName = "$cmakeName" ; MsiDir = "$cache" } , @{Function = "AddToPath"; Dir = "$targetPath" } ); } ) } -function OpCNTKMKL2 - ([parameter(Mandatory=$true)][string] $cache, - [parameter(Mandatory=$true)][string] $targetFolder) -{ - $prodName = "CNTK Custom MKL Version 2" - $prodFile = "CNTKCustomMKL-Windows-2.zip" - $prodSubDir = "CNTKCustomMKL" - $targetPath = join-path $targetFolder $prodSubDir - $targetPathCurrenVersion = join-path $targetPath "2" - $envVar = "CNTK_MKL_PATH"; - $envValue = $targetPath - $downloadSource = "https://www.cntk.ai/mkl/$prodFile"; - - @( @{ShortName = "CNTKMKL2"; Name = $prodName; VerifyInfo = "Checking for $prodName in $targetPathCurrenVersion"; ActionInfo = "Installing $prodName"; - Verification = @( @{Function = "VerifyDirectory"; Path = $targetPathCurrenVersion }, - @{Function = "VerifyEnvironmentAndData"; EnvVar = $envVar; Content = $envValue } ); - Download = @( @{ Function = "Download"; Source = $downloadSource; Destination = "$cache\$prodFile" } ); - Action = @( @{Function = "ExtractAllFromZip"; zipFileName = "$cache\$prodFile"; destination = $localDir; destinationFolder = $prodSubDir }, - @{Function = "SetEnvironmentVariable"; EnvVar= $envVar; Content = $envValue } ); - } ) -} - function OpCNTKMKL3 ([parameter(Mandatory=$true)][string] $cache, [parameter(Mandatory=$true)][string] $targetFolder) @@ -135,100 +94,28 @@ function OpCNTKMKL3 $envVar = "CNTK_MKL_PATH"; $envValue = $targetPath $downloadSource = "https://www.cntk.ai/mkl/$prodFile"; + $downloadSize = 10331909 @( @{ShortName = "CNTKMKL3"; Name = $prodName; VerifyInfo = "Checking for $prodName in $targetPathCurrenVersion"; ActionInfo = "Installing $prodName"; Verification = @( @{Function = "VerifyDirectory"; Path = $targetPathCurrenVersion }, @{Function = "VerifyEnvironmentAndData"; EnvVar = $envVar; Content = $envValue } ); - Download = @( @{ Function = "Download"; Source = $downloadSource; Destination = "$cache\$prodFile" } ); - Action = @( @{Function = "ExtractAllFromZip"; zipFileName = "$cache\$prodFile"; destination = $localDir; destinationFolder = $prodSubDir }, + Download = @( @{ Function = "Download"; Method = "WebRequest"; Source = $downloadSource; Destination = "$cache\$prodFile"; ExpectedSize = $downloadSize } ); + Action = @( @{Function = "ExtractAllFromZip"; zipFileName = "$cache\$prodFile"; destination = $targetFolder; destinationFolder = $prodSubDir }, @{Function = "SetEnvironmentVariable"; EnvVar= $envVar; Content = $envValue } ); } ) } -function OpCygwin - ([parameter(Mandatory=$true)][string] $cache, - [parameter(Mandatory=$true)][string] $targetFolder) -{ - $prodName = "CygWin64" - $prodFile = "cygwinSetup_64.exe" - $prodSubDir = "cygwin64" - $targetPath = join-path $targetFolder $prodSubDir - $regkey = "Registry::HKEY_CURRENT_USER\SOFTWARE\Cygwin" - $downloadSource = "https://www.cygwin.com/setup-x86_64.exe" - $installParam = "--quiet-mode --no-admin --site http://mirrors.kernel.org/sourceware/cygwin/ --root $targetPath --local-package-dir $cache --packages python,python-yaml,python-numpy,diffutils" - $bFileName = "cygwinpip.bash" - $bashFileName = join-path $targetFolder $bFileName - $bashParmFile = Join-Path "\cygdrive\c" (split-path $bashFileName -NoQualifier) - $bashParmFile = $bashParmFile.replace("\","/") - $bashParam = "-l -c $bashParmFile" - - @( @{ShortName = "CYGWIN64"; Name = $prodName; VerifyInfo = "Checking for $prodName in $targetPath"; ActionInfo = "Installing $prodName"; - Verification = @( @{Function = "VerifyDirectory"; Path = "$targetPath" }, - @{Function = "VerifyRegistryKey"; Key = $regKey } ); - Download = @( @{ Function = "Download"; Source = $downloadSource; Destination = "$cache\$prodFile" } ); - Action = @( @{Function = "InstallExe"; Command = "$cache\$prodFile"; Param = $installParam; runAs=$false; WorkDir = $targetFolder}, - @{Function = "AddToPath"; Dir = "$targetPath\bin"; AtStart = $false }, - @{Function = "CreateCygwinBashScript"; FileName = $bashFileName }, - @{Function = "InstallExe"; Command = "$targetPath\bin\bash.exe"; Param = $bashParam; runAs=$false; WorkDir = $targetPath } ); - } ) -} - -function AddOpDisableJITDebug -{ - @( @{Name="Visual Studio Disable Just-In-Time Debugging"; ShortName = "JITVS2013"; VerifyInfo = "Checking for JIT Debugging registry keys"; ActionInfo = "Removing registry keys to disable JIT debugging, advisable for Jenkins machines"; - Verification = @( @{Function = "DeletedRegistryKeyName"; Key = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug"; RegName = "Debugger"; }, - @{Function = "DeletedRegistryKeyName"; Key = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework"; RegName = "DbgManagedDebugger" }, - @{Function = "DeletedRegistryKeyName"; Key = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug"; RegName = "Debugger" }, - @{Function = "DeletedRegistryKeyName"; Key = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework"; RegName = "DbgManagedDebugger" } ); - Action = @( @{Function = "RemoveRegistryKeyName"; Key = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug"; Elevated = $true; RegName = "Debugger" }, - @{Function = "RemoveRegistryKeyName"; Key = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework"; Elevated = $true; RegName = "DbgManagedDebugger" }, - @{Function = "RemoveRegistryKeyName"; Key = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug"; Elevated = $true; RegName = "Debugger" }, - @{Function = "RemoveRegistryKeyName"; Key = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework"; Elevated = $true; RegName = "DbgManagedDebugger" } ) - } ) - } - -function OpGit2101( - [parameter(Mandatory=$true)][string] $cache) -{ - $prodName = "Git" - $targetPath = join-path $env:ProgramFiles "Git\bin" - $prodFile = "Git-2.10.1-64-bit.exe" - $downloadSource = "https://github.com/git-for-windows/git/releases/download/v2.10.1.windows.1/$prodFile" - - @( @{ShortName = "GIT"; Name = $prodName; VerifyInfo = "Checking for $prodName in $targetPath"; ActionInfo = "Installing $prodName"; - Verification = @( @{Function = "VerifyRegistryKeyName"; Key = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\GitForWindows"; RegName = "CurrentVersion"; } ); - Download = @( @{ Function = "Download"; Source = $downloadSource; Destination = "$cache\$prodFile" } ); - Action = @( @{Function = "InstallExe"; Command = "$cache\$prodFile"; Param = "/SP- /SILENT /NORESTART"}, - @{Function = "AddToPath"; Dir = $targetPath; AtStart = $true; } ) - } ) -} - -function OpGitClone( - [parameter(Mandatory=$true)][string] $targetFolder, - [parameter(Mandatory=$true)][string] $targetDir, - [string] $repoTag = "master") -{ - $targetPath = join-path $targetFolder $targetDir - $downloadSource = "https://github.com/Microsoft/CNTK/"; - $appDir = join-path $env:ProgramFiles "Git\bin" - - @( @{Name = "Clone CNTK from Github"; ShortName = "CNTKCLONE"; VerifyInfo = "Checking for CNTK-Clone target directory $targetPath"; ActionInfo = "Cloneing CNTK from Github repository"; - Verification = @( @{Function = "VerifyDirectory"; Path = $targetPath } ); - Action = @( @{Function = "MakeDirectory"; Path = $targetFolder }, - @{Function = "ExecuteApplication"; AppName = "git.exe"; Param = "clone --branch $repoTag --recursive https://github.com/Microsoft/CNTK/"; AppDir = $appDir; UseEnvPath = $true; WorkDir = $targetFolder } ) - } ) -} - function OpMSMPI70([parameter( Mandatory=$true)][string] $cache) { $remoteFilename = "MSMpiSetup.exe" $localFilename = "MSMpiSetup70.exe" $downloadSource = "https://download.microsoft.com/download/D/7/B/D7BBA00F-71B7-436B-80BC-4D22F2EE9862/$remoteFilename"; + $downloadSize = 2285568 @( @{Name = "MSMPI Installation"; ShortName = "CNTK"; VerifyInfo = "Checking for installed MSMPI 70"; ActionInfo = "Installing MSMPI 70"; Verification = @( @{Function = "VerifyWinProductVersion"; Match = "^Microsoft MPI \(\d+\."; Version = "7.0.12437.6"; MatchExact = $false } ); - Download = @( @{Function = "Download"; Source = $downloadSource; Destination = "$cache\$localFilename" } ); + Download = @( @{Function = "Download"; Method = "WebRequest"; Source = $downloadSource; Destination = "$cache\$localFilename"; ExpectedSize = $downloadSize } ); Action = @( @{Function = "InstallExe"; Command = "$cache\$localFilename" ; Param = "/unattend" } ) } ) } @@ -239,11 +126,12 @@ function OpMSMPI70SDK( $remoteFilename = "msmpisdk.msi" $localFilename = "msmpisdk70.msi" $downloadSource = "https://download.microsoft.com/download/D/7/B/D7BBA00F-71B7-436B-80BC-4D22F2EE9862/$remoteFilename"; + $downloadSize = 5277808 @( @{Name = "MSMPI SDK70 Installation"; ShortName = "CNTK"; VerifyInfo = "Checking for installed MSMPI 70 SDK"; ActionInfo = "Install MSMPI 70 SDK"; Verification = @( @{Function = "VerifyWinProductVersion"; Match = "^Microsoft MPI SDK \(\d+\."; Version = "7.0.12437.6"; MatchExact = $false } ); #Verification = @( @{Function = "VerifyWinProductExists"; Match = "^Microsoft MPI SDK \(\d+\."; Compare = "^Microsoft MPI SDK \(7\.0\.12437\.6\)"; MatchExact = $false } ); - Download = @( @{Function = "Download"; Source = $downloadSource; Destination = "$cache\$localFilename" } ); + Download = @( @{Function = "Download"; Method = "WebRequest"; Source = $downloadSource; Destination = "$cache\$localFilename"; ExpectedSize = $downloadSize } ); Action = @( @{Function = "InstallMsi"; MsiName = "$localFilename" ; MsiDir = "$cache" } ) } ) } @@ -259,78 +147,17 @@ function OpNvidiaCub141( $envVar = "CUB_PATH"; $envValue = $targetPath $downloadSource = "https://codeload.github.com/NVlabs/cub/zip/1.4.1"; + $downloadSize = 51376046 @( @{ShortName = "CUB141"; VerifyInfo = "Checking for $prodName in $targetPath"; ActionInfo = "Installing $prodName"; Verification = @( @{Function = "VerifyDirectory"; Path = "$targetPath" }, @{Function = "VerifyEnvironmentAndData"; EnvVar = $envVar; Content = $envValue } ); - Download = @( @{Function = "Download"; Source = $downloadSource; Destination = "$cache\$prodFile" } ); + Download = @( @{Function = "Download"; Method = "WebRequest"; Source = $downloadSource; Destination = "$cache\$prodFile"; ExpectedSize = $downloadSize } ); Action = @( @{Function = "ExtractAllFromZip"; zipFileName = "$cache\$prodFile"; destination = "$targetFolder"; destinationFolder = $prodSubDir; zipSubTree= $prodSubDir }, @{Function = "SetEnvironmentVariable"; EnvVar= $envVar; Content = $envValue } ); } ) } -function OpNVidiaCuda75( - [parameter(Mandatory=$true)][string] $cache) -{ - $cudaDownload = "http://developer.download.nvidia.com/compute/cuda/7.5/Prod/local_installers" - $programPath = join-path $env:ProgramFiles "NVIDIA GPU Computing Toolkit\CUDA\v7.5" - - - @( @{Name="NVidia CUDA 7.5"; ShortName = "CUDA75"; VerifyInfo = "Checking for installed NVidia Cuda 75"; ActionInfo = "Installing CUDA 7.5"; - Verification = @( @{Function = "VerifyDirectory"; Path = $programPath }, - @{Function = "VerifyEnvironmentAndData"; EnvVar = "CUDA_PATH_V7_5"; Content = $programPath } ); - Download = @( @{Function = "DownloadForPLatform"; Platform = "^Microsoft Windows (7|8|Server 2008 R2|Server 2012 R2)"; Source = "$cudaDownload/cuda_7.5.18_windows.exe"; Destination = "$cache\cuda_7.5.18_windows.exe" }, - @{Function = "DownloadForPLatform"; Platform = "^Microsoft Windows 10"; Source = "$cudaDownload/cuda_7.5.18_win10.exe"; Destination = "$cache\cuda_7.5.18_win10.exe" } ); - Action = @( @{Function = "InstallExeForPlatform"; Platform = "^Microsoft Windows (7|8|Server 2008 R2|Server 2012 R2)"; Command = "$cache\cuda_7.5.18_windows.exe"; Param = "-s CUDAToolkit_7.5 CUDAVisualStudioIntegration_7.5 GDK"; Message = ".... This will take some time. Please be patient ...." } , - @{Function = "InstallExeForPlatform"; Platform = "^Microsoft Windows 10"; Command = "$cache\cuda_7.5.18_win10.exe"; Param = "-s CUDAToolkit_7.5 CUDAVisualStudioIntegration_7.5 GDK"; Message = ".... This will take some time. Please be patient ...." } ); - }) -} - -function OpNVidiaCuda80( - [parameter(Mandatory=$true)][string] $cache) -{ - $cudaDownload = "http://developer.download.nvidia.com/compute/cuda/8.0/secure/prod/local_installers" - $cudaFile = "cuda_8.0.44_windows.exe" - $cudaFileWin10 = "cuda_8.0.44_win10.exe" - $programPath = join-path $env:ProgramFiles "NVIDIA GPU Computing Toolkit\CUDA\v8.0" - $cudaInstallParam = "-s" - - @( @{Name="NVidia CUDA 8.0"; ShortName = "CUDA80"; VerifyInfo = "Checking for installed NVidia Cuda 80"; ActionInfo = "Installing CUDA 8.0"; - Verification = @( @{Function = "VerifyDirectory"; Path = $programPath }, - @{Function = "VerifyEnvironmentAndData"; EnvVar = "CUDA_PATH_V8_0"; Content = $programPath } ); - Download = @( @{Function = "DownloadForPLatform"; Platform = "^Microsoft Windows (7|8|Server 2008 R2|Server 2012 R2)"; Source = "$cudaDownload/$cudaFile"; Destination = "$cache\$cudaFile" }, - @{Function = "DownloadForPLatform"; Platform = "^Microsoft Windows 10"; Source = "$cudaDownload/$cudaFileWin10"; Destination = "$cache\$cudaFileWin10" } ); - Action = @( @{Function = "InstallExeForPlatform"; Platform = "^Microsoft Windows (7|8|Server 2008 R2|Server 2012 R2)"; Command = "$cache\$cudaFile"; Param = $cudaInstallParam } , - @{Function = "InstallExeForPlatform"; Platform = "^Microsoft Windows 10"; Command = "$cache\$cudaFileWin10"; Param = $cudaInstallParam } ); - }) -} - -function OpNVidiaCudnn5175( - [parameter(Mandatory=$true)][string] $cache, - [parameter(Mandatory=$true)][string] $targetFolder) - -{ - $prodName = "NVidia CUDNN 5.1 for CUDA 7.5" - $cudnnWin7 = "cudnn-7.5-windows7-x64-v5.1.zip" - $cudnnWin10 = "cudnn-7.5-windows10-x64-v5.1.zip" - - $prodSubDir = "cudnn-7.5-v5.1" - $targetPath = join-path $targetFolder $prodSubDir - $envVar = "CUDNN_PATH" - $envValue = join-path $targetPath "cuda" - $downloadSource = "http://developer.download.nvidia.com/compute/redist/cudnn/v5.1" - - @( @{ShortName = "CUDNN5175"; VerifyInfo = "Checking for $prodName in $targetPath"; ActionInfo = "Installing $prodName"; - Verification = @( @{Function = "VerifyDirectory"; Path = $targetPath }, - @{Function = "VerifyEnvironmentAndData"; EnvVar = $envVar; Content = $envValue } ); - Download = @( @{Function = "DownloadForPLatform"; Platform = "^Microsoft Windows 7"; Source = "$downloadSource/$cudnnWin7"; Destination = "$cache\$cudnnWin7" }, - @{Function = "DownloadForPLatform"; Platform = "^Microsoft Windows (8|10|Server 2008 R2|Server 2012 R2)"; Source = "$downloadSource/$cudnnWin10"; Destination = "$cache\$cudnnWin10" } ); - Action = @( @{Function = "ExtractAllFromZipForPlatform"; Platform = "^Microsoft Windows 7"; zipFileName = "$cache\$cudnnWin10"; destination = $targetFolder; destinationFolder = $prodSubDir }, - @{Function = "ExtractAllFromZipForPlatform"; Platform = "^Microsoft Windows (8|10|Server 2008 R2|Server 2012 R2)"; zipFileName = "$cache\$cudnnWin10"; destination = $targetFolder; destinationFolder = $prodSubDir }, - @{Function = "SetEnvironmentVariable"; EnvVar = $envVar; Content = $envValue } ); - }) -} - function OpNVidiaCudnn5180( [parameter(Mandatory=$true)][string] $cache, [parameter(Mandatory=$true)][string] $targetFolder) @@ -344,13 +171,15 @@ function OpNVidiaCudnn5180( $envVar = "CUDNN_PATH" $envValue = join-path $targetPath "cuda" $downloadSource = "http://developer.download.nvidia.com/compute/redist/cudnn/v5.1" + $downloadSizeWin7 = 0 + $downloadSizeWin10 = 54440432 @( @{ShortName = "CUDNN5180"; VerifyInfo = "Checking for $prodName in $targetPath"; ActionInfo = "Installing $prodName"; Verification = @( @{Function = "VerifyDirectory"; Path = $targetPath }, @{Function = "VerifyDirectory"; Path = $envValue }, @{Function = "VerifyEnvironmentAndData"; EnvVar = $envVar; Content = $envValue } ); - Download = @( @{Function = "DownloadForPlatform"; Platform = "^Microsoft Windows 7"; Source = "$downloadSource/$cudnnWin7"; Destination = "$cache\$cudnnWin7" }, - @{Function = "DownloadForPlatform"; Platform = "^Microsoft Windows (8|10|Server 2008 R2|Server 2012 R2)"; Source = "$downloadSource/$cudnnWin10"; Destination = "$cache\$cudnnWin10" } ); + Download = @( @{Function = "DownloadForPlatform"; Method = "WebRequest"; Platform = "^Microsoft Windows 7"; Source = "$downloadSource/$cudnnWin7"; Destination = "$cache\$cudnnWin7"; ExpectedSize = $downloadSizeWin7 }, + @{Function = "DownloadForPlatform"; Method = "WebRequest"; Platform = "^Microsoft Windows (8|10|Server 2008 R2|Server 2012 R2)"; Source = "$downloadSource/$cudnnWin10"; Destination = "$cache\$cudnnWin10"; ExpectedSize = $downloadSizeWin10 } ); Action = @( @{Function = "ExtractAllFromZipForPlatform"; Platform = "^Microsoft Windows 7"; zipFileName = "$cache\$cudnnWin10"; destination = $targetFolder; destinationFolder = $prodSubDir }, @{Function = "ExtractAllFromZipForPlatform"; Platform = "^Microsoft Windows (8|10|Server 2008 R2|Server 2012 R2)"; zipFileName = "$cache\$cudnnWin10"; destination = $targetFolder; destinationFolder = $prodSubDir }, @{Function = "SetEnvironmentVariable"; EnvVar = $envVar; Content = $envValue } ); @@ -363,36 +192,19 @@ function OpOpenCV31( { $prodName = "OpenCV-3.1" $prodFile = "opencv-3.1.0.exe" - $prodSubDir = "OpenCV310" - $targetPath = join-path $targetFolder $prodSubDir - $envVar = "OPENCV_PATH_V31"; - $envValue = "$targetPath\build" - $downloadSource = "https://netcologne.dl.sourceforge.net/project/opencvlibrary/opencv-win/3.1.0/opencv-3.1.0.exe" - - @( @{ShortName = "OPENCV310"; Name = $prodName; VerifyInfo = "Checking for $prodName in $targetPath"; ActionInfo = "Please perform a manual installation of $prodName from $cache"; - Verification = @( @{Function = "VerifyFile"; Path = "$cache\$prodFile" } ); - Download = @( @{ Function = "Download"; Source = $downloadSource; Destination = "$cache\$prodFile" } ); - } ) -} - -function OpOpenCVInternal( - [parameter(Mandatory=$true)][string] $server, - [parameter(Mandatory=$true)][string] $cache, - [parameter(Mandatory=$true)][string] $targetFolder) -{ - $prodName = "OpenCV-3.1" - $prodFile = "opencv-3.1.0.zip" $prodSubDir = "Opencv3.1.0" $targetPath = join-path $targetFolder $prodSubDir $envVar = "OPENCV_PATH_V31"; $envValue = "$targetPath\build" - $downloadSource = "$server\$prodFile" + $downloadSource = "https://netcologne.dl.sourceforge.net/project/opencvlibrary/opencv-win/3.1.0/opencv-3.1.0.exe" + $downloadSize = 115129966 + $archiveSubTree = "opencv" @( @{ShortName = "OPENCV310"; Name = $prodName; VerifyInfo = "Checking for $prodName in $targetPath"; ActionInfo = "Installing $prodName"; Verification = @( @{Function = "VerifyDirectory"; Path = "$targetPath" }, @{Function = "VerifyEnvironmentAndData"; EnvVar = $envVar; Content = $envValue } ); - Download = @( @{ Function = "LocalCopyFile"; Source = $downloadSource; Destination = "$cache\$prodFile" } ); - Action = @( @{Function = "ExtractAllFromZip"; zipFileName = "$cache\$prodFile"; destination = "$targetFolder"; destinationFolder = $prodSubDir; zipSubTree= $prodSubDir }, + Download = @( @{ Function = "Download"; Method = "WebRequest"; Source = $downloadSource; Destination = "$cache\$prodFile"; ExpectedSize = $downloadSize } ); + Action = @( @{Function = "Extract7zipSelfExtractingArchive"; archiveName = "$cache\$prodFile"; destination = "$targetFolder"; destinationFolder = $prodSubDir; archiveSubTree= $archiveSubTree }, @{Function = "SetEnvironmentVariable"; EnvVar= $envVar; Content = $envValue } ); } ) } @@ -417,10 +229,11 @@ function OpProtoBuf310VS15( $envVar = "PROTOBUF_PATH" $envValue = $targetPath $downloadSource = "https://github.com/google/protobuf/archive/v3.1.0.zip" + $downloadSize = 5648581 @( @{ShortName = "PROTO310VS15"; VerifyInfo = "Checking for $prodName in $targetPath"; ActionInfo = "Installing $prodName"; Verification = @( @{Function = "VerifyDirectory"; Path = $targetPath } ); - Download = @( @{ Function = "Download"; Source = $downloadSource; Destination = "$cache\$prodFile" } ); + Download = @( @{ Function = "Download"; Method = "WebRequest"; Source = $downloadSource; Destination = "$cache\$prodFile"; ExpectedSize = $downloadSize} ); Action = @( @{Function = "ExtractAllFromZip"; zipFileName = "$cache\$prodFile"; destination = $protoSourceDir; zipSubTree =$prodName; destinationFolder =$prodName }, @{Function = "MakeDirectory"; Path = $scriptDirectory }, @{Function = "CreateBuildProtobufBatch"; FileName = "$scriptDirectory\$batchFile"; SourceDir = (join-path $protoSourceDir $prodName); TargetDir = $targetPath } ); @@ -467,82 +280,17 @@ function OpSwig3010( $envVar = "SWIG_PATH" $envValue = $targetPath $downloadSource = "http://prdownloads.sourceforge.net/project/swig/swigwin/swigwin-3.0.10/swigwin-3.0.10.zip" + $downloadSize = 56429 @( @{ShortName = "SWIG3010"; VerifyInfo = "Checking for $prodName in $targetPath"; ActionInfo = "Installing $prodName"; Verification = @( @{Function = "VerifyDirectory"; Path = $targetPath }, @{Function = "VerifyEnvironmentAndData"; EnvVar = $envVar; Content = $envValue } ); - Download = @( @{ Function = "Download"; Source = $downloadSource; Destination = "$cache\$prodFile" } ); + Download = @( @{ Function = "Download"; Method = "WebRequest"; Source = $downloadSource; Destination = "$cache\$prodFile"; ExpectedSize = $downloadSize } ); Action = @( @{Function = "ExtractAllFromZip"; zipFileName = "$cache\$prodFile"; destination = $targetFolder; zipSubTree =$prodSubDir; destinationFolder =$prodSubDir }, @{Function = "SetEnvironmentVariable"; EnvVar = $envVar; Content = $envValue } ); } ) } -function OpSysinternals( - [parameter(Mandatory=$true)][string] $cache, - [parameter(Mandatory=$true)][string] $targetFolder) -{ - $prodName = "Sysinternal Suite" - $prodFile = "SysinternalSuite.zip" - $prodDependsFile = "depends22_x64.zip" - $prodSubDir = "SysInternal" - $targetPath = join-path $targetFolder $prodSubDir - $downloadSource = "https://download.sysinternals.com/files/SysinternalsSuite.zip" - $downloadDependsSource = "http://dependencywalker.com/depends22_x64.zip" - - - @( @{ShortName = "SYSINTERNAL"; VerifyInfo = "Checking for $prodName in $targetPath"; ActionInfo = "Installing $prodName, dependency walker"; - Verification = @( @{Function = "VerifyDirectory"; Path = $targetPath }, - @{Function = "VerifyFile"; Path = "$targetPath\depends.exe" }, - @{Function = "VerifyPathIncludes"; Path = $targetPath } ); - Download = @( @{ Function = "Download"; Source = $downloadSource; Destination = "$cache\$prodFile" }, - @{ Function = "Download"; Source = $downloadDependsSource; Destination = "$cache\$prodDependsFile" } ); - Action = @( @{Function = "ExtractAllFromZip"; zipFileName = "$cache\$prodFile"; destination = $targetFolder; destinationFolder =$prodSubDir }, - @{Function = "ExtractAllFromZip"; zipFileName = "$cache\$prodDependsFile"; destination = $targetFolder; destinationFolder =$prodSubDir; AddToDirectory=$true }, - @{Function = "AddToPath"; Dir = $targetPath; AtStart = $false; } - @{Function = "SetRegistryKey"; Elevated = $true; Key = "registry::HKEY_CURRENT_USER\SOFTWARE\Sysinternals" }, - @{Function = "SetRegistryKeyNameData"; Elevated = $true; Key = "registry::HKEY_CURRENT_USER\SOFTWARE\Sysinternals\Autologon"; RegName = "EulaAccepted"; data = 1; dataType = "DWord" }, - @{Function = "SetRegistryKeyNameData"; Elevated = $true; Key = "registry::HKEY_CURRENT_USER\SOFTWARE\Sysinternals\Handle"; RegName = "EulaAccepted"; data = 1; dataType = "DWord" }, - @{Function = "SetRegistryKeyNameData"; Elevated = $true; Key = "registry::HKEY_CURRENT_USER\SOFTWARE\Sysinternals\ProcDump"; RegName = "EulaAccepted"; data = 1; dataType = "DWord" } ) - } ) -} - -function OpTestData( - [parameter(Mandatory=$true)][string] $targetFolder, - [parameter(Mandatory=$true)][string] $remoteData) -{ - $prodName = "Testdata Environment" - @( @{ShortName = "TESTDATA"; VerifyInfo = "Checking for $prodName"; ActionInfo = "Setting up environment variable for $prodName"; - Verification = @( @{Function = "VerifyEnvironment"; EnvVar = "CNTK_EXTERNAL_TESTDATA_REMOTE_DIRECTORY" }, - @{Function = "VerifyEnvironment"; EnvVar = "CNTK_EXTERNAL_TESTDATA_SOURCE_DIRECTORY" } ); - Action = @( @{Function = "SetEnvironmentVariable"; EnvVar = "CNTK_EXTERNAL_TESTDATA_REMOTE_DIRECTORY"; Content = $remoteData }, - @{Function = "SetEnvironmentVariable"; EnvVar = "CNTK_EXTERNAL_TESTDATA_SOURCE_DIRECTORY"; Content = $targetFolder } ); - } ) -} - -function OpAddVS12Runtime([parameter(Mandatory=$true)][string] $cache) -{ - $prodName = "VS2012 Runtime" - - @( @{ShortName = "VS2012"; VerifyInfo = "Checking for $prodName"; ActionInfo = "Installing $prodName"; - Verification = @( @{Function = "VerifyWinProductExists"; Match = "^Microsoft Visual C\+\+ 2012 x64 Additional Runtime" }, - @{Function = "VerifyWinProductExists"; Match = "^Microsoft Visual C\+\+ 2012 x64 Minimum Runtime" } ); - Download = @( @{ Function = "Download"; Source = "http://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe"; Destination = "$cache\VSRuntime\11\vcredist_x64.exe" } ); - Action = @( @{Function = "InstallExe"; Command = "$cache\VSRuntime\11\vcredist_x64.exe"; Param = "/install /passive /norestart" } ) - } ) -} - -function OpAddVS13Runtime([parameter(Mandatory=$true)][string] $cache) -{ - $prodName = "VS2013 Runtime" - - @( @{ShortName = "VS2013"; VerifyInfo = "Checking for $prodName"; ActionInfo = "Installing $prodName"; - Verification = @( @{Function = "VerifyWinProductExists"; Match = "^Microsoft Visual C\+\+ 2013 x64 Additional Runtime" }, - @{Function = "VerifyWinProductExists"; Match = "^Microsoft Visual C\+\+ 2013 x64 Minimum Runtime" } ); - Download = @( @{ Function = "Download"; Source = "http://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe"; Destination = "$localCache\VSRuntime\12\vcredist_x64.exe" } ); - Action = @( @{Function = "InstallExe"; Command = "$localCache\VSRuntime\12\vcredist_x64.exe"; Param = "/install /passive /norestart" } ) - } ) -} - function OpCheckVS15Update3 { @( @{Name = "Verify Installation of VS2015, Update 3"; ShortName = "PREVS15U3"; VerifyInfo = "Checking for Visual Studio 2015, Update 3"; @@ -563,63 +311,6 @@ function OpCheckCuda8 } ) } -function OpZlib( - [parameter(Mandatory=$true)][string] $cache, - [parameter(Mandatory=$true)][string] $targetFolder) -{ - $prodName = "ZLib128" - $prodFile = "zlib128.zip" - $prodSubDir = "zlib-1.2.8" - $targetPath = join-path $targetFolder $prodSubDir - $downloadSource = "http://zlib.net/zlib128.zip" - - @( @{ShortName = "ZLIN128"; VerifyInfo = "Checking for $prodName in $targetPath"; ActionInfo = "Installing $prodName"; - Verification = @( @{Function = "VerifyDirectory"; Path = $targetPath } ); - Download = @( @{ Function = "Download"; Source = $downloadSource; Destination = "$cache\$prodFile" } ); - Action = @( @{Function = "ExtractAllFromZip"; zipFileName = "$cache\$prodFile"; destination = $targetFolder; zipSubTree =$prodSubDir; destinationFolder =$prodSubDir } ); - } ) -} - -function OpLibzip( - [parameter(Mandatory=$true)][string] $cache, - [parameter(Mandatory=$true)][string] $targetFolder) -{ - $prodName = "Libzip-1.1.3" - $prodFile = "libzip-1.1.3.tar.gz" - $prodSubDir = "libzip-1.1.3" - $targetPath = join-path $targetFolder $prodSubDir - $downloadSource = "https://nih.at/libzip/libzip-1.1.3.tar.gz" - - @( @{ShortName = "LIBZIP113"; VerifyInfo = "Checking for $prodName in $targetPath"; ActionInfo = "Installing $prodName"; - Verification = @( @{Function = "VerifyDirectory"; Path = $targetPath } ); - Download = @( @{ Function = "Download"; Source = $downloadSource; Destination = "$cache\$prodFile" } ); - Action = @( @{Function = "ExtractAllFromZip"; zipFileName = "$cache\$prodFile"; destination = $targetFolder; zipSubTree =$prodSubDir; destinationFolder =$prodSubDir } ); - } ) -} - - -function OpZLibInternal( - [parameter(Mandatory=$true)][string] $server, - [parameter(Mandatory=$true)][string] $cache, - [parameter(Mandatory=$true)][string] $targetFolder) -{ - $prodName = "ZLib Precompiled" - $prodFile = "zlib.zip" - $prodSubDir = "zlib" - $targetPath = join-path $targetFolder $prodSubDir - $envVar = "ZLIB_PATH" - $envValue = $targetPath - $downloadSource = "$server\$prodFile" - - @( @{ShortName = "LIBZIP113"; VerifyInfo = "Checking for $prodName in $targetPath"; ActionInfo = "Installing $prodName"; - Verification = @( @{Function = "VerifyDirectory"; Path = $targetPath }, - @{Function = "VerifyEnvironmentAndData"; EnvVar = $envVar; Content = $envValue } ); - Download = @( @{ Function = "Download"; Source = $downloadSource; Destination = "$cache\$prodFile" } ); - Action = @( @{Function = "ExtractAllFromZip"; zipFileName = "$cache\$prodFile"; destination = $targetFolder; destinationFolder =$prodSubDir }, - @{Function = "SetEnvironmentVariable"; EnvVar = $envVar; Content = $envValue } ); - } ) -} - function OpZlibVS15( [parameter(Mandatory=$true)][string] $cache, [parameter(Mandatory=$true)][string] $targetFolder) @@ -632,9 +323,12 @@ function OpZlibVS15( $zlibProdName = "zlib-1.2.8" $zlibFilename = "zlib128.zip" $zlibDownloadSource = "http://zlib.net/zlib128.zip" + $downloadSizeZlib = 0 + $libzipProdName = "libzip-1.1.3" $libzipFilename = "libzip-1.1.3.tar.gz" $libzipDownloadSource = "https://nih.at/libzip/libzip-1.1.3.tar.gz" + $downloadeSizeLibzip = 0 $prodSubDir = "zlib-vs15" $batchFile = "buildZlibVS15.cmd" @@ -649,8 +343,8 @@ function OpZlibVS15( Verification = @( @{Function = "VerifyDirectory"; Path = "$sourceCodeDir\$zlibProdName" }, @{Function = "VerifyDirectory"; Path = "$sourceCodeDir\$libzipProdName" }, @{Function = "VerifyFile"; Path = "$scriptDirectory\$batchFile" } ); - Download = @( @{ Function = "Download"; Source = $zlibDownloadSource; Destination = "$cache\$zlibFilename" }, - @{ Function = "Download"; Source = $libzipDownloadSource; Destination = "$cache\$libzipFilename" } ); + Download = @( @{ Function = "Download"; Source = $zlibDownloadSource; Destination = "$cache\$zlibFilename"; ExpectedSize = $downloadSizeZlib }, + @{ Function = "Download"; Source = $libzipDownloadSource; Destination = "$cache\$libzipFilename"; ExpectedSize = $downloadeSizeLibzip } ); Action = @( @{Function = "ExtractAllFromZip"; zipFileName = "$cache\$zlibFilename"; destination = $sourceCodeDir; zipSubTree =$zlibProdName; destinationFolder =$zlibProdName }, @{Function = "ExtractAllFromTarGz"; SourceFile = "$cache\$libzipFilename"; TargzFileName = "$libzipFilename"; destination = $sourceCodeDir }, @{Function = "MakeDirectory"; Path = $scriptDirectory },