-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.sh
executable file
·104 lines (89 loc) · 4.24 KB
/
build.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/bin/bash -e
echo "Executing $0 ..."
export BUILD_PARENT_BOX_CHECK=true
. config.sh quiet
command -v vagrant >/dev/null 2>&1 || { echo "Command 'vagrant' required but it's not installed. Aborting." >&2; exit 1; }
command -v packer >/dev/null 2>&1 || { echo "Command 'packer' required but it's not installed. Aborting." >&2; exit 1; }
command -v wget >/dev/null 2>&1 || { echo "Command 'wget' required but it's not installed. Aborting." >&2; exit 1; }
BUILD_PARENT_BOX_OVF="$HOME/.vagrant.d/boxes/$BUILD_PARENT_BOX_NAME/0/virtualbox/box.ovf"
BUILD_PARENT_BOX_VAGRANTCLOUD_PATHNAME=`echo "$BUILD_PARENT_BOX_VAGRANTCLOUD_NAME" | sed "s|/|-VAGRANTSLASH-|"`
BUILD_PARENT_BOX_VAGRANTCLOUD_OVF="$HOME/.vagrant.d/boxes/$BUILD_PARENT_BOX_VAGRANTCLOUD_PATHNAME/$BUILD_PARENT_BOX_VAGRANTCLOUD_VERSION/virtualbox/box.ovf"
if [ -f $BUILD_PARENT_BOX_OVF ]; then
export BUILD_PARENT_OVF=$BUILD_PARENT_BOX_OVF
echo "An existing local '$BUILD_PARENT_BOX_NAME' box was detected. Skipping download ..."
else
export BUILD_PARENT_OVF=$BUILD_PARENT_BOX_VAGRANTCLOUD_OVF
if [ -f $BUILD_PARENT_BOX_VAGRANTCLOUD_OVF ]; then
echo "An existing '$BUILD_PARENT_BOX_VAGRANTCLOUD_NAME' box download with version '$BUILD_PARENT_BOX_VAGRANTCLOUD_VERSION' was detected."
read -p "Do you want to delete it and download again (y/N)? " choice
case "$choice" in
y|Y ) echo "Deleting existing '$BUILD_PARENT_BOX_VAGRANTCLOUD_NAME' box ..."
vagrant box remove $BUILD_PARENT_BOX_VAGRANTCLOUD_NAME --box-version $BUILD_PARENT_BOX_VAGRANTCLOUD_VERSION
;;
* ) echo "Will keep existing '$BUILD_PARENT_BOX_VAGRANTCLOUD_NAME' box.";;
esac
fi
if [ -f $BUILD_PARENT_BOX_VAGRANTCLOUD_OVF ]; then
echo "'$BUILD_PARENT_BOX_VAGRANTCLOUD_NAME' box already present, no need for download."
else
echo "Downloading '$BUILD_PARENT_BOX_VAGRANTCLOUD_NAME' box with version '$BUILD_PARENT_BOX_VAGRANTCLOUD_VERSION' ..."
vagrant box add -f $BUILD_PARENT_BOX_VAGRANTCLOUD_NAME --box-version $BUILD_PARENT_BOX_VAGRANTCLOUD_VERSION --provider virtualbox
fi
fi
if [ -d "keys" ]; then
echo "Ok, key dir exists."
else
echo "Creating key dir ..."
mkdir -p keys
fi
if [ -f "keys/vagrant" ]; then
echo "Ok, private key exists."
else
echo "Downloading default private key ..."
wget https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant -O keys/vagrant
if [ $? -ne 0 ]; then
echo "Could not download the private key. Exit code from wget was $?."
exit 1
fi
fi
if [ -f "keys/vagrant.pub" ]; then
echo "Ok, public key exists."
else
echo "Downloading default public key ..."
wget https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub -O keys/vagrant.pub
if [ $? -ne 0 ]; then
echo "Could not download the public key. Exit code from wget was $?."
exit 1
fi
fi
# TODO include version info from file (copy to scripts?)
. config.sh
mkdir -p packages || true
export PACKER_LOG_PATH="$PWD/packer.log"
export PACKER_LOG="1"
packer validate virtualbox.json
packer build virtualbox.json
echo "------------------------------------------------------------------------"
echo " OPTIMIZING BOX SIZE"
echo "------------------------------------------------------------------------"
if [ -f "$BUILD_OUTPUT_FILE_TEMP" ]; then
echo "Suspending any running instances ..."
vagrant suspend
echo "Destroying current box ..."
vagrant destroy -f || true
echo "Removing '$BUILD_BOX_NAME' ..."
vagrant box remove -f "$BUILD_BOX_NAME" 2>/dev/null || true
echo "Adding '$BUILD_BOX_NAME' ..."
vagrant box add --name "$BUILD_BOX_NAME" "$BUILD_OUTPUT_FILE_TEMP"
echo "Powerup and provision '$BUILD_BOX_NAME' (running only 'shell' scripts) ..."
vagrant --provision up --provision-with net_debug,export_packages,cleanup_kernel,cleanup || { echo "Unable to startup '$BUILD_BOX_NAME'."; exit 1; }
echo "Exporting intermediate box to '$BUILD_OUTPUT_FILE_INTERMEDIATE' ..."
vagrant package --output "$BUILD_OUTPUT_FILE_INTERMEDIATE"
echo "Removing temporary box file ..."
rm -f "$BUILD_OUTPUT_FILE_TEMP"
# TODO rename packer.log for backup
echo "Please run 'finalize.sh' to finish configuration and create the final box file."
else
echo "There is no box file '$BUILD_OUTPUT_FILE_TEMP' in the current directory."
exit 1
fi