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