-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgetit
executable file
·146 lines (121 loc) · 3.57 KB
/
getit
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/usr/bin/env bash
# A script to download and install the latest Cloudseal alpha.
#
# This will install the following files on the system:
#
# /usr/cloudseal/
# /usr/bin/cloudseal -> /usr/cloudseal/bin/cloudseal
# /usr/bin/cs -> /usr/cloudseal/bin/cs
#
# You can find the latest version of this script at:
#
# https://cloudseal.io/getit
#
# You may also run this script with:
#
# curl -sSLf https://cloudseal.io/getit | sudo bash
#
# or to install to a custom location:
#
# curl -sSLf https://cloudseal.io/getit | bash -s custom_dir
#
# Yes, you're right that running shell scripts off the internet with sudo is
# evil. Don't be lazy and please read through this script before running it.
#
# When packages for each distro are available, please install those instead.
set -Eeou pipefail
TARNAME="cloudseal_alpha_021-858.tbz"
TARURL="https://www.cloudseal.io/s/$TARNAME"
# Default root for the installation
INSTALL_ROOT="${INSTALL_ROOT:-/usr}"
# Fully resolved root:
RESOLVED_ROOT=""
usage() {
cat 1>&2 <<EOF
A script to download and install the latest Cloudseal alpha.
USAGE:
getit [--help] [root]
FLAGS:
-h, --help Prints help information.
POSITIONAL ARGUMENTS:
root: Root of the installation directory. [default: "$INSTALL_ROOT"]
EOF
}
# Create a temporary directory to extract the files to.
TEMPDIR=$(mktemp -d)
# Cleanup after an install
cleanup() {
echo ":: Cleaning up..."
rm -rf -- "$TEMPDIR"
}
abort_install() {
cleanup
if [ -d "$RESOLVED_ROOT/cloudseal" ]; then
echo ":: Removing partially installed files, if any."
if [ -e "$RESOLVED_ROOT/bin/cloudseal" ]; then
rm "$RESOLVED_ROOT/bin/cloudseal"
fi
if [ -e "$RESOLVED_ROOT/cloudseal" ]; then
rm -rf "$RESOLVED_ROOT/cloudseal"
fi
fi
}
# This need not be idempotent as it should only be called once.
handle_exit() {
local _prev=$?
if [ "$_prev" != 0 ]; then
echo ":: Caught error. A command exited with code $_prev"
abort_install
echo ":: Install failed due to above errors."
exit 255
fi
}
handle_interuption() {
echo ":: Install script interrupted, cleaning up."
abort_install
echo ":: Install failed due to interruption."
trap - EXIT
exit 255
}
main() {
local _positional=()
for arg in "$@"; do
case "$arg" in
-h|--help)
usage
exit 0
;;
-*)
echo "Error: Unknown option '$arg' specified."
exit 1
;;
*)
if [[ ${#_positional[*]} -gt 0 ]]; then
echo "Error: Too many positional arguments given."
exit 1
fi
_positional+=("$arg")
shift
;;
esac
done
RESOLVED_ROOT="${_positional[0]:-$INSTALL_ROOT}"
echo ":: Downloading..."
# Download and extract to a temporary directory.
curl -sfSL "$TARURL" | tar -xjf - -C "$TEMPDIR"
if [ -e "$RESOLVED_ROOT/cloudseal" ]; then
echo ":: Removing previous Cloudseal installation..."
rm -rf "$RESOLVED_ROOT/cloudseal"
fi
echo ":: Installing to '$RESOLVED_ROOT'..."
cp -r "$TEMPDIR/cloudseal" "$RESOLVED_ROOT/cloudseal"
# The determinism-only alpha uses a "cloudseal" CLI.
mkdir -p -- "$RESOLVED_ROOT/bin"
ln -sf "../cloudseal/bin/cloudseal" "$RESOLVED_ROOT/bin/cloudseal"
}
# Clean up our mess if anything fails or is interrupted.
trap handle_exit EXIT
trap handle_interuption INT TERM
main "$@"
cleanup
echo ":: Done."