diff --git a/.gitignore b/.gitignore
index 628caa9..d8e0330 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
packer_cache/
packer/builds/
resources/drivers/
+resources/windows_pre_downloads/
*.vfd
*.exe
*.msi
diff --git a/packer/answer_files/2008_r2/Autounattend.xml b/packer/answer_files/2008_r2/Autounattend.xml
index f9e1978..8ba893d 100644
--- a/packer/answer_files/2008_r2/Autounattend.xml
+++ b/packer/answer_files/2008_r2/Autounattend.xml
@@ -261,16 +261,6 @@
cmd.exe /c mkdir -p C:\vagrant\scripts
Create directory for vagrant files to avoid provisioner bug with packer.
26
-
-
- cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\install_dotnet45.ps1 -AutoStart
- 97
- Install .NET 4.5.1
-
-
- cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\install_wmf.ps1 -AutoStart
- 98
- Installing Windows Management Framework 5.0
diff --git a/packer/templates/windows_2008_r2.json b/packer/templates/windows_2008_r2.json
index 0aa5d5b..92dcc2f 100644
--- a/packer/templates/windows_2008_r2.json
+++ b/packer/templates/windows_2008_r2.json
@@ -18,8 +18,6 @@
"{{user `scripts_dir`}}/configs/microsoft-updates.bat",
"{{user `scripts_dir`}}/configs/win-updates.ps1",
"{{user `scripts_dir`}}/installs/openssh.ps1",
- "{{user `scripts_dir`}}/installs/install_dotnet45.ps1",
- "{{user `scripts_dir`}}/installs/install_wmf.ps1",
"{{user `resources_dir`}}/certs/oracle-cert.cer",
"{{user `resources_dir`}}/certs/gdig2.crt",
"{{user `resources_dir`}}/certs/comodorsadomainvalidationsecureserverca.crt",
@@ -56,8 +54,6 @@
"{{user `scripts_dir`}}/configs/microsoft-updates.bat",
"{{user `scripts_dir`}}/configs/win-updates.ps1",
"{{user `scripts_dir`}}/installs/openssh.ps1",
- "{{user `scripts_dir`}}/installs/install_dotnet45.ps1",
- "{{user `scripts_dir`}}/installs/install_wmf.ps1",
"{{user `resources_dir`}}/certs/oracle-cert.cer",
"{{user `resources_dir`}}/certs/gdig2.crt",
"{{user `resources_dir`}}/certs/comodorsadomainvalidationsecureserverca.crt",
@@ -99,8 +95,6 @@
"{{user `scripts_dir`}}/configs/microsoft-updates.bat",
"{{user `scripts_dir`}}/configs/win-updates.ps1",
"{{user `scripts_dir`}}/installs/openssh.ps1",
- "{{user `scripts_dir`}}/installs/install_dotnet45.ps1",
- "{{user `scripts_dir`}}/installs/install_wmf.ps1",
"{{user `resources_dir`}}/certs/oracle-cert.cer",
"{{user `resources_dir`}}/certs/gdig2.crt",
"{{user `resources_dir`}}/certs/comodorsadomainvalidationsecureserverca.crt",
@@ -150,8 +144,6 @@
"{{user `scripts_dir`}}/configs/microsoft-updates.bat",
"{{user `scripts_dir`}}/configs/win-updates.ps1",
"{{user `scripts_dir`}}/installs/openssh.ps1",
- "{{user `scripts_dir`}}/installs/install_dotnet45.ps1",
- "{{user `scripts_dir`}}/installs/install_wmf.ps1",
"{{user `resources_dir`}}/certs/oracle-cert.cer",
"{{user `resources_dir`}}/certs/gdig2.crt",
"{{user `resources_dir`}}/certs/comodorsadomainvalidationsecureserverca.crt",
@@ -184,6 +176,16 @@
}
],
"provisioners": [
+ {
+ "type": "shell-local",
+ "only_on": ["linux", "darwin"],
+ "inline": ["cd {{user `resources_dir`}} && {{user `resources_dir`}}/download-windows-files.sh"]
+ },
+ {
+ "type": "shell-local",
+ "only_on": ["windows"],
+ "inline": ["cd {{user `resources_dir`}} && powershell {{user `resources_dir`}}/download-windows-files.ps1"]
+ },
{
"type": "file",
"source": "{{user `scripts_dir`}}",
@@ -200,7 +202,6 @@
"execute_command": "{{.Vars}} cmd /c C:/Windows/Temp/script.bat",
"scripts": [
"{{user `scripts_dir`}}/configs/update_root_certs.bat",
- "{{user `scripts_dir`}}/configs/disable-auto-logon.bat",
"{{user `scripts_dir`}}/configs/enable-rdp.bat"
]
},
@@ -215,6 +216,25 @@
{
"type": "windows-restart"
},
+ {
+ "type": "powershell",
+ "scripts": [
+ "{{user `scripts_dir`}}/installs/install_dotnet45.ps1"
+ ]
+ },
+ {
+ "type": "windows-restart"
+ },
+ {
+ "type": "powershell",
+ "scripts": [
+ "{{user `scripts_dir`}}/installs/install_wmf.ps1"
+ ]
+ },
+ {
+ "type": "windows-restart",
+ "pause_before": "180s"
+ },
{
"type": "powershell",
"scripts": [
@@ -240,7 +260,9 @@
"remote_path": "C:/Windows/Temp/script.bat",
"execute_command": "{{.Vars}} cmd /c C:/Windows/Temp/script.bat",
"scripts": [
- "{{user `scripts_dir`}}/installs/install_boxstarter.bat",
+ "{{user `scripts_dir`}}/configs/disable-auto-logon.bat",
+ "{{user `scripts_dir`}}/chocolatey_installs/chocolatey-compatibility.bat",
+ "{{user `scripts_dir`}}/chocolatey_installs/boxstarter.bat",
"{{user `scripts_dir`}}/chocolatey_installs/7zip.bat",
"{{user `scripts_dir`}}/configs/apply_password_settings.bat",
"{{user `scripts_dir`}}/configs/create_users.bat",
@@ -267,7 +289,7 @@
"{{user `scripts_dir`}}/installs/install_wordpress.bat",
"{{user `scripts_dir`}}/installs/install_openjdk6.bat",
"{{user `scripts_dir`}}/installs/setup_jmx.bat",
- "{{user `scripts_dir`}}/installs/install_ruby.bat",
+ "{{user `scripts_dir`}}/chocolatey_installs/ruby.bat",
"{{user `scripts_dir`}}/installs/install_devkit.bat"
]
},
diff --git a/resources/download-windows-files.ps1 b/resources/download-windows-files.ps1
new file mode 100644
index 0000000..edd817f
--- /dev/null
+++ b/resources/download-windows-files.ps1
@@ -0,0 +1,23 @@
+$Logfile = "C:\Windows\Temp\wmf-install.log"
+function LogWrite {
+ Param ([string]$logstring)
+ $now = Get-Date -format s
+ Add-Content $Logfile -value "$now $logstring"
+ Write-Host $logstring
+}
+
+LogWrite "Downloading dotNet 4.5.2"
+try {
+ (New-Object System.Net.WebClient).DownloadFile('https://download.microsoft.com/download/E/2/1/E21644B5-2DF2-47C2-91BD-63C560427900/NDP452-KB2901907-x86-x64-AllOS-ENU.exe', 'windows_pre_downloads/dotnet.exe')
+} catch {
+ LogWrite $_.Exception | Format-List -force
+ LogWrite "Failed to download file."
+}
+
+LogWrite "Downloading Windows Management Framework 5.1"
+try {
+ (New-Object System.Net.WebClient).DownloadFile('https://download.microsoft.com/download/6/F/5/6F5FF66C-6775-42B0-86C4-47D41F2DA187/Win7AndW2K8R2-KB3191566-x64.zip', 'windows_pre_downloads/wmf.zip')
+} catch {
+ LogWrite $_.Exception | Format-List -force
+ LogWrite "Failed to download file."
+}
diff --git a/resources/download-windows-files.sh b/resources/download-windows-files.sh
new file mode 100755
index 0000000..de8a529
--- /dev/null
+++ b/resources/download-windows-files.sh
@@ -0,0 +1,3 @@
+#!/bin/bash -e
+curl -L --output windows_pre_downloads/dotnet.exe https://download.microsoft.com/download/E/2/1/E21644B5-2DF2-47C2-91BD-63C560427900/NDP452-KB2901907-x86-x64-AllOS-ENU.exe
+curl -L --output windows_pre_downloads/wmf.zip https://download.microsoft.com/download/6/F/5/6F5FF66C-6775-42B0-86C4-47D41F2DA187/Win7AndW2K8R2-KB3191566-x64.zip
diff --git a/resources/windows_pre_downloads/.gitkeep b/resources/windows_pre_downloads/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/scripts/installs/install_boxstarter.bat b/scripts/chocolatey_installs/boxstarter.bat
similarity index 100%
rename from scripts/installs/install_boxstarter.bat
rename to scripts/chocolatey_installs/boxstarter.bat
diff --git a/scripts/chocolatey_installs/chocolatey-compatibility.bat b/scripts/chocolatey_installs/chocolatey-compatibility.bat
new file mode 100644
index 0000000..b3c2c71
--- /dev/null
+++ b/scripts/chocolatey_installs/chocolatey-compatibility.bat
@@ -0,0 +1,4 @@
+chocolatey feature enable -n=allowGlobalConfirmation
+choco install chocolatey-compatibility.extension
+chocolatey feature disable -n=allowGlobalConfirmation
+exit
diff --git a/scripts/installs/install_ruby.bat b/scripts/chocolatey_installs/ruby.bat
similarity index 100%
rename from scripts/installs/install_ruby.bat
rename to scripts/chocolatey_installs/ruby.bat
diff --git a/scripts/installs/chocolatey.cmd b/scripts/installs/chocolatey.cmd
deleted file mode 100644
index 564707c..0000000
--- a/scripts/installs/chocolatey.cmd
+++ /dev/null
@@ -1 +0,0 @@
-@powershell -NoProfile -ExecutionPolicy Bypass -File "%systemdrive%\vagrant\scripts\installs\install_chocolatey.ps1"
\ No newline at end of file
diff --git a/scripts/installs/chocolatey.ps1 b/scripts/installs/chocolatey.ps1
index d75d56a..af27395 100644
--- a/scripts/installs/chocolatey.ps1
+++ b/scripts/installs/chocolatey.ps1
@@ -40,12 +40,17 @@ function Invoke-CLR4PowerShellCommand {
}
+if (!(Test-Path -Path $PROFILE)) {
+ New-Item -ItemType File -Path $PROFILE -Force
+}
+
$ErrorActionPreference = 'Stop'
Set-StrictMode -Version Latest
$isWin8 = wmic os get caption | find /i '" 8 "'
$isWin2012 = wmic os get caption | find /i '" 2012 "'
+$env:chocolateyVersion = '0.10.13'
# skip wrapping for 8 or 2012?
if ($isWin8 -or $isWin2012){
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
diff --git a/scripts/installs/install_dotnet45.ps1 b/scripts/installs/install_dotnet45.ps1
index 8bcd188..3ce8572 100644
--- a/scripts/installs/install_dotnet45.ps1
+++ b/scripts/installs/install_dotnet45.ps1
@@ -6,17 +6,9 @@ function LogWrite {
Write-Host $logstring
}
-LogWrite "Downloading dotNet 4.5.1"
-try {
- (New-Object System.Net.WebClient).DownloadFile('http://download.microsoft.com/download/1/6/7/167F0D79-9317-48AE-AEDB-17120579F8E2/NDP451-KB2858728-x86-x64-AllOS-ENU.exe', 'C:\Windows\Temp\dotnet.exe')
-} catch {
- LogWrite $_.Exception | Format-List -force
- LogWrite "Failed to download file."
-}
-
LogWrite "Starting installation process..."
try {
- Start-Process -FilePath "C:\Windows\Temp\dotnet.exe" -ArgumentList "/I /q /norestart" -Wait -PassThru
+ Start-Process -FilePath "C:\vagrant\resources\windows_pre_downloads\dotnet.exe" -ArgumentList "/I /q /norestart" -Wait -PassThru
} catch {
LogWrite $_.Exception | Format-List -force
LogWrite "Exception during install process."
diff --git a/scripts/installs/install_wmf.ps1 b/scripts/installs/install_wmf.ps1
index 4556136..94d8388 100644
--- a/scripts/installs/install_wmf.ps1
+++ b/scripts/installs/install_wmf.ps1
@@ -5,19 +5,31 @@ function LogWrite {
Add-Content $Logfile -value "$now $logstring"
Write-Host $logstring
}
-
-LogWrite "Downloading Windows Management Framework 5.0"
-try {
- (New-Object System.Net.WebClient).DownloadFile('https://download.microsoft.com/download/2/C/6/2C6E1B4A-EBE5-48A6-B225-2D2058A9CEFB/Win7AndW2K8R2-KB3134760-x64.msu', 'C:\Windows\Temp\wmf.msu')
-} catch {
- LogWrite $_.Exception | Format-List -force
- LogWrite "Failed to download file."
+
+
+LogWrite "Extracting Archive..."
+
+$extractLocation = "C:\vagrant\resources\windows_pre_downloads\wmf_install"
+New-Item -Path $extractLocation -ItemType Directory
+
+$shell = New-Object -ComObject shell.application
+$zip = $shell.NameSpace("C:\vagrant\resources\windows_pre_downloads\wmf.zip")
+foreach ($item in $zip.items()) {
+ $shell.Namespace($extractLocation).CopyHere($item)
}
+Set-Location -Path $extractLocation -PassThru
+$installCmd = "powershell.exe -ExecutionPolicy Bypass -Command " + '"' + ${extractLocation} + "\Install-WMF5.1.ps1 -AcceptEula" + '"'
+
LogWrite "Starting installation process..."
-try {
- Start-Process -FilePath "wusa.exe" -ArgumentList "C:\Windows\Temp\wmf.msu /quiet /norestart" -Wait -PassThru
-} catch {
- LogWrite $_.Exception | Format-List -force
- LogWrite "Exception during install process."
-}
+
+New-Item C:\vagrant\resources\windows_pre_downloads\wmf_install\install_wmf.bat -ItemType "file"
+Set-Content C:\vagrant\resources\windows_pre_downloads\wmf_install\install_wmf.bat $installCmd
+
+$Taskname = "updatepsh"
+
+SCHTASKS /CREATE /sc ONCE /st 00:00 /TN $Taskname /RU SYSTEM /RL HIGHEST /TR "C:\vagrant\resources\windows_pre_downloads\wmf_install\install_wmf.bat"
+schtasks /Run /TN $Taskname
+start-sleep -s 5
+schtasks /delete /tn $Taskname /f
+start-sleep -s 30