From 03e6c0aeebe1aa5fe041b06ab60b81fb0eb36344 Mon Sep 17 00:00:00 2001 From: James Barnett Date: Tue, 27 Sep 2016 14:57:51 -0500 Subject: [PATCH] Add future-proof version checking to bash script. Fix a couple of text errors with Powershell script. --- build_win2008.ps1 | 4 +-- build_win2008.sh | 75 +++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 68 insertions(+), 11 deletions(-) diff --git a/build_win2008.ps1 b/build_win2008.ps1 index be4aa14..fd64e71 100644 --- a/build_win2008.ps1 +++ b/build_win2008.ps1 @@ -2,7 +2,7 @@ $ErrorActionPreference = "Stop" $packerMinVersion = "0.10.0" $vagrantMinVersion = "1.8.1" $virtualBoxMinVersion = "5.1.0" -$vagrantreloadMinVersion = "0.0.2" +$vagrantreloadMinVersion = "0.0.1" function CompareVersions ($actualVersion, $expectedVersion, $exactMatch = $False) { $actualVersion = $actualVersion.split(".") @@ -57,7 +57,7 @@ If ($(Test-Path "C:\HashiCorp\Vagrant\bin\vagrant.exe") -eq $True) { If (CompareVersions -actualVersion $vagrantVersion -expectedVersion $vagrantMinVersion -exactVersion True) { Write-Host "Compatible version of Vagrant found." } else { - Write-Host "Could not find a compatible version of Vagrant at C:\HashiCorp\Vagrant\bin\. Please download and install it from https://www.vagrantup.com/downloads.html." + Write-Host "Could not find a compatible version of Vagrant at C:\HashiCorp\Vagrant\bin\. At this time only $vagrantMinVersion is supported. Please download and install it from https://releases.hashicorp.com/vagrant/1.8.1/." exit } diff --git a/build_win2008.sh b/build_win2008.sh index 2035ca0..587b50d 100755 --- a/build_win2008.sh +++ b/build_win2008.sh @@ -1,32 +1,79 @@ #!/bin/bash -if [[ $(VBoxManage -v | cut -d'.' -f1) -ge "5" ]]; then +min_virtualbox_ver="5.1.0" +min_vagrant_ver="1.8.1" +min_vagrantreload_ver="0.0.1" +min_packer_ver="0.10.0" + +function compare_versions { + actual_version=$1 + expected_version=$2 + exact_match=$3 + + echo $actual_version + echo $expected_version + echo $exact_match + + if $exact_match; then + if [ "$actual_version" == "$expected_version" ]; then + echo "exact match" + return 0 + else + return 1 + fi + fi + + IFS='.' read -ra actual_version <<< "$actual_version" + IFS='.' read -ra expected_version <<< "$expected_version" + + echo ${expected_version[0]} + for ((i=0; i < ${#expected_version[@]}; i++)) + do + if [[ ${actual_version[$i]} -gt ${expected_version[$i]} ]]; then + echo "was bigger" + return 0 + fi + + if [[ ${actual_version[$i]} -lt ${expected_version[$i]} ]]; then + echo "was smaller" + return 1 + fi + done + return 0 +} + +if compare_versions $(VBoxManage -v | cut -d'r' -f1) $min_virtualbox_ver false; then echo "Compatible version of VirtualBox found." else echo "A compatible version of VirtualBox was not found. Please download and install it from here: https://www.virtualbox.org/wiki/Downloads" exit 1 fi -if packer -v | grep -q '0.10.0'; then +if compare_versions $(packer -v) $min_packer_ver false; then echo 'Compatible version of packer was found.' else echo "A compatible version of packer was not found. Please install from here: https://www.packer.io/downloads.html" exit 1 fi -if vagrant -v | grep -q '1.8.1'; then +if compare_versions $(vagrant -v | cut -d' ' -f2) $min_vagrant_ver true; then echo 'Correct version of vagrant was found.' else - echo "A compatible version of vagrant was not found. At this time only 1.8.1 is supported. Please install from here: https://releases.hashicorp.com/vagrant/1.8.1/" + echo "A compatible version of vagrant was not found. At this time only $min_vagrant_ver is supported. Please install from here: https://releases.hashicorp.com/vagrant/1.8.1/" exit 1 fi -if vagrant plugin list | grep -q 'vagrant-reload (0.0.1)'; then +if compare_versions $(vagrant plugin list | grep 'vagrant-reload' | cut -d' ' -f2 | tr -d '(' | tr -d ')') $min_vagrantreload_ver false; then echo 'Compatible version of vagrant-reload plugin was found.' else echo "A compatible version of vagrant-reload plugin was not found." echo "Attempting to install..." - vagrant plugin install vagrant-reload + if vagrant plugin install vagrant-reload; then + echo "Successfully installed the vagrant-reload plugin." + else + echo "There was an error installing the vagrant-reload plugin. Please see the above output for more information." + exit 1 + fi fi echo "All requirements found. Proceeding..." @@ -35,7 +82,12 @@ if ls | grep -q 'windows_2008_r2_virtualbox.box'; then echo "It looks like the vagrant box already exists. Skipping the Packer build." else echo "Building the Vagrant box..." - packer build windows_2008_r2.json + if packer build windows_2008_r2.json; then + echo "Box successfully built by Packer." + else + echo "Error building the Vagrant box using Packer. Please check the output above for any error messages." + exit 1 + fi fi echo "Attempting to add the box to Vagrant..." @@ -43,8 +95,13 @@ echo "Attempting to add the box to Vagrant..." if vagrant box list | grep -q 'metasploitable3'; then echo 'metasploitable3 already found in Vagrant box repository. Skipping the addition to Vagrant.' else - vagrant box add windows_2008_r2_virtualbox.box --name metasploitable3 - echo "Box successfully added to Vagrant." + if vagrant box add windows_2008_r2_virtualbox.box --name metasploitable3; then + echo "Box successfully added to Vagrant." + else + echo "Error adding box to Vagrant. See the above output for any error messages." + exit 1 + fi fi echo "SUCCESS: Run 'vagrant up' to provision and start metasploitable3." +echo "NOTE: The VM will need Internet access to provision properly."