fixed bugs. might work now.
This commit is contained in:
118
build.ps1
118
build.ps1
@@ -1,3 +1,5 @@
|
|||||||
|
#Requires -Version 4.0
|
||||||
|
|
||||||
<#
|
<#
|
||||||
.Synopsis
|
.Synopsis
|
||||||
This script is used to deploy a fresh install of DetectionLab
|
This script is used to deploy a fresh install of DetectionLab
|
||||||
@@ -24,7 +26,8 @@ Param(
|
|||||||
# Vagrant provider to use.
|
# Vagrant provider to use.
|
||||||
[ValidateSet('virtualbox', 'vmware_workstation')]
|
[ValidateSet('virtualbox', 'vmware_workstation')]
|
||||||
[string]$ProviderName,
|
[string]$ProviderName,
|
||||||
[string]$PackerPath = 'C:\Hashicorp\packer.exe'
|
[string]$PackerPath = 'C:\Hashicorp\packer.exe',
|
||||||
|
[swtich]$VagrantOnly
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -55,7 +58,17 @@ function install_checker {
|
|||||||
return $false
|
return $false
|
||||||
}
|
}
|
||||||
|
|
||||||
function check_packer_and_vagrant {
|
function check_packer {
|
||||||
|
#Check for packer at $PackerPath
|
||||||
|
if (!(Get-Item $PackerPath)) {
|
||||||
|
Write-Error "Packer not found at $PackerPath"
|
||||||
|
Write-Output 'Re-run the script setting the PackerPath parameter to the location of packer'
|
||||||
|
Write-Output "Example: build.ps1 -PackerPath 'C:\packer.exe'"
|
||||||
|
Write-Output 'Exiting..'
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function check_vagrant {
|
||||||
# Check if vagrant is in path
|
# Check if vagrant is in path
|
||||||
try {
|
try {
|
||||||
Get-Command vagrant.exe -ErrorAction Stop
|
Get-Command vagrant.exe -ErrorAction Stop
|
||||||
@@ -72,18 +85,9 @@ function check_packer_and_vagrant {
|
|||||||
if ($vagrant_version -lt $version_comparison) {
|
if ($vagrant_version -lt $version_comparison) {
|
||||||
Write-Warning 'It is highly recommended to use Vagrant 2.0.0 or above before continuing'
|
Write-Warning 'It is highly recommended to use Vagrant 2.0.0 or above before continuing'
|
||||||
}
|
}
|
||||||
|
|
||||||
#Check for packer at $PackerPath
|
|
||||||
if (!(Get-Item $PackerPath)) {
|
|
||||||
Write-Error "Packer not found at $PackerPath"
|
|
||||||
Write-Output 'Re-run the script setting the PackerPath parameter to the location of packer'
|
|
||||||
Write-Output "Example: build.ps1 -PackerPath 'C:\packer.exe'"
|
|
||||||
Write-Output 'Exiting..'
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Returns 0 if not installed or 1 if installed
|
# Returns false if not installed or true if installed
|
||||||
function check_virtualbox_installed {
|
function check_virtualbox_installed {
|
||||||
Write-Verbose '[check_virtualbox_installed] Running..'
|
Write-Verbose '[check_virtualbox_installed] Running..'
|
||||||
if (install_checker -Name "VirtualBox") {
|
if (install_checker -Name "VirtualBox") {
|
||||||
@@ -107,29 +111,33 @@ function check_vmware_workstation_installed {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#TODO: Verify that the plugin is called 'vagrant-vmware-workstation'
|
|
||||||
function check_vmware_vagrant_plugin_installed {
|
function check_vmware_vagrant_plugin_installed {
|
||||||
Write-Verbose '[check_vmware_vagrant_plugin_installed] Running..'
|
Write-Verbose '[check_vmware_vagrant_plugin_installed] Running..'
|
||||||
if (!(vagrant plugin list | Select-String 'vagrant-vmware-workstation')) {
|
if (vagrant plugin list | Select-String 'vagrant-vmware-workstation') {
|
||||||
Write-Output 'VMWare Workstation is installed, but the Vagrant plugin is not.'
|
|
||||||
Write-Output 'Visit https://www.vagrantup.com/vmware/index.html#buy-now for more information on how to purchase and install it'
|
|
||||||
Write-Output 'VMWare Workstation will not be listed as a provider until the Vagrant plugin has been installed.'
|
|
||||||
return $false
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Write-Verbose '[check_vmware_vagrant_plugin_installed] VMware vagrant plugin found.'
|
Write-Verbose '[check_vmware_vagrant_plugin_installed] VMware vagrant plugin found.'
|
||||||
return $true
|
return $true
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
Write-Host 'VMWare Workstation is installed, but the Vagrant plugin is not.'
|
||||||
|
Write-Host 'Visit https://www.vagrantup.com/vmware/index.html#buy-now for more information on how to purchase and install it'
|
||||||
|
Write-Host 'VMWare Workstation will not be listed as a provider until the Vagrant plugin has been installed.'
|
||||||
|
return $false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function list_providers {
|
function list_providers {
|
||||||
|
[cmdletbinding()]
|
||||||
|
param()
|
||||||
|
|
||||||
Write-Output 'Available Providers: '
|
Write-Output 'Available Providers: '
|
||||||
if (check_virtualbox_installed) {
|
if (check_virtualbox_installed) {
|
||||||
Write-Output '[*] virtualbox'
|
Write-Output '[*] virtualbox'
|
||||||
}
|
}
|
||||||
if (check_vmware_workstation_installed) {
|
if (check_vmware_workstation_installed) {
|
||||||
|
if (check_vmware_vagrant_plugin_installed) {
|
||||||
Write-Output '[*] vmware_workstation'
|
Write-Output '[*] vmware_workstation'
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ((-Not (check_virtualbox_installed)) -and (-Not (check_vmware_workstation_installed))) {
|
if ((-Not (check_virtualbox_installed)) -and (-Not (check_vmware_workstation_installed))) {
|
||||||
Write-Error 'You need to install a provider such as VirtualBox or VMware Workstation to continue.'
|
Write-Error 'You need to install a provider such as VirtualBox or VMware Workstation to continue.'
|
||||||
break
|
break
|
||||||
@@ -142,9 +150,62 @@ function list_providers {
|
|||||||
return $ProviderName
|
return $ProviderName
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function download_boxes {
|
||||||
|
Write-Verbose '[download_boxes] Running..'
|
||||||
|
if ($ProviderName -eq 'virtualbox') {
|
||||||
|
$win10Filename = 'windows_10_virtualbox.box'
|
||||||
|
$win2016Filename = 'windows_2016_virtualbox.box'
|
||||||
|
$win10Hash = '30b06e30b36b02ccf1dc5c04017654aa'
|
||||||
|
$win2016Hash = '614f984c82b51471b5bb753940b59d38'
|
||||||
|
}
|
||||||
|
if ($ProviderName -eq 'vmware') {
|
||||||
|
$win10Filename = 'windows_10_vmware.box'
|
||||||
|
$win2016Filename = 'windows_2016_vmware.box'
|
||||||
|
$win10Hash = '174ad0f0fd2089ff74a880c6dadac74c'
|
||||||
|
$win2016Hash = '1511b9dc942c69c2cc5a8dc471fa8865'
|
||||||
|
}
|
||||||
|
|
||||||
|
$wc = New-Object System.Net.WebClient
|
||||||
|
Write-Verbose "[download_boxes] Downloading $win10Filename"
|
||||||
|
$wc.DownloadFile("https://www.detectionlab.network/$win10Filename", "$DL_DIR\Boxes\$win10Filename")
|
||||||
|
Write-Verbose "[download_boxes] Downloading $win2016Filename"
|
||||||
|
$wc.DownloadFile("https://www.detectionlab.network/$win2016Filename", "$DL_DIR\Boxes\$win2016Filename")
|
||||||
|
$wc.Dispose()
|
||||||
|
|
||||||
|
if (-Not (Test-Path "$DL_DIR\Boxes\$win2016Filename")) {
|
||||||
|
Write-Error 'Windows 2016 box is missing from the Boxes directory. Qutting.'
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if (-Not (Test-Path "$DL_DIR\Boxes\$win10Filename")) {
|
||||||
|
Write-Error 'Windows 10 box is missing from the Boxes directory. Qutting.'
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Verbose "[download_boxes] Getting filehash for: $win10Filename"
|
||||||
|
$win10Filehash = Get-FileHash -Path "$DL_DIR\Boxes\$win10Filename" -Algorithm MD5
|
||||||
|
Write-Verbose "[download_boxes] Getting filehash for: $win2016Filename"
|
||||||
|
$win2016Filehash = Get-FileHash -Path "$DL_DIR\Boxes\$win2016Filename" -Algorithm MD5
|
||||||
|
|
||||||
|
Write-Verbose '[download_boxes] Checking Filehashes..'
|
||||||
|
if ($win10hash -ne $win10Filehash) {
|
||||||
|
Write-Error 'Hash mismatch on windows_10_virtualbox.box'
|
||||||
|
}
|
||||||
|
if ($win2016hash -ne $win2016Filehash) {
|
||||||
|
Write-Error 'Hash mismatch on windows_2016_virtualbox.box'
|
||||||
|
}
|
||||||
|
Write-Verbose '[download_boxes] Finished.'
|
||||||
|
}
|
||||||
|
|
||||||
function preflight_checks {
|
function preflight_checks {
|
||||||
Write-Verbose '[preflight_checks] Running..'
|
Write-Verbose '[preflight_checks] Running..'
|
||||||
# Check to see that no boxes exist
|
# Check to see that no boxes exist
|
||||||
|
if (-Not ($VagrantOnly)) {
|
||||||
|
Write-Verbose '[preflight_checks] Checking if packer is installed'
|
||||||
|
check_packer
|
||||||
|
}
|
||||||
|
Write-Verbose '[preflight_checks] Checking if vagrant is installed'
|
||||||
|
check_vagrant
|
||||||
|
|
||||||
Write-Verbose '[preflight_checks] Checking for pre-existing boxes..'
|
Write-Verbose '[preflight_checks] Checking for pre-existing boxes..'
|
||||||
if ((Get-ChildItem "$DL_DIR\Boxes\*.box").Count -gt 0) {
|
if ((Get-ChildItem "$DL_DIR\Boxes\*.box").Count -gt 0) {
|
||||||
Write-Error 'You appear to have already built at least one box using Packer. This script does not support pre-built boxes. Please either delete the existing boxes or follow the build steps in the README to continue.'
|
Write-Error 'You appear to have already built at least one box using Packer. This script does not support pre-built boxes. Please either delete the existing boxes or follow the build steps in the README to continue.'
|
||||||
@@ -318,17 +379,22 @@ if ($ProviderName -eq $Null) {
|
|||||||
preflight_checks
|
preflight_checks
|
||||||
|
|
||||||
# Build Packer Boxes
|
# Build Packer Boxes
|
||||||
packer_build_box -Box 'windows_2016'
|
if ($VagrantOnly) {
|
||||||
packer_build_box -Box 'windows_10'
|
download_boxes
|
||||||
|
}
|
||||||
# Move Packer Boxes
|
else {
|
||||||
move_boxes
|
packer_build_box -Box 'windows_2016'
|
||||||
|
packer_build_box -Box 'windows_10'
|
||||||
|
# Move Packer Boxes
|
||||||
|
move_boxes
|
||||||
|
}
|
||||||
|
|
||||||
# Vagrant up each box and attempt to reload one time if it fails
|
# Vagrant up each box and attempt to reload one time if it fails
|
||||||
forEach ($VAGRANT_HOST in $LAB_HOSTS) {
|
forEach ($VAGRANT_HOST in $LAB_HOSTS) {
|
||||||
Write-Verbose "[main] Running vagrant_up_host for: $VAGRANT_HOST"
|
Write-Verbose "[main] Running vagrant_up_host for: $VAGRANT_HOST"
|
||||||
$result = vagrant_up_host -VagrantHost $VAGRANT_HOST
|
$result = vagrant_up_host -VagrantHost $VAGRANT_HOST
|
||||||
if ($result -eq 0) {
|
Write-Verbose "[main] vagrant_up_host finished. Exitcode: $result"
|
||||||
|
if ($result -eq '0') {
|
||||||
Write-Output "Good news! $VAGRANT_HOST was built successfully!"
|
Write-Output "Good news! $VAGRANT_HOST was built successfully!"
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
Reference in New Issue
Block a user