blob: 60ed0f788420280a2235a90097f882db42dd793e (
plain) (
blame)
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
|
#!/bin/bash
# Exit values are keyed as follows:
# 0 = No error
# 1 < 250 = Easy fix
# 250 <= 255 = Will not fix
#testing
#export PATH=/home/jhunk/.local/bin:/usr/lib64/qt-3.3/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/home/jhunk/bin:/usr/local/sbin:/usr/sbin
OS=`uname -s`
PLATFORM=`uname -p`
FETCH=
FETCH_ARGS=
CONTINUUM_BASE=https://repo.continuum.io/miniconda
CONTINUUM_RELEASE=Miniconda3
CONTINUUM_VERSION=latest
CONTINUUM_ARCH=x86_64
CONTINUUM_PLATFORM=
CONTINUUM_EXT=".sh"
STSCI_BASE=http://ssb.stsci.edu
STSCI_RELEASES=(
conda
conda-x
conda-dev
)
# Update this as needed. We cannot simply rely on "2" or "3" conventions here because of how repos store data.
PYTHON_VERSIONS=(
2.7
3.5
)
_VERSION=$(echo ${CONTINUUM_RELEASE} | awk '{print tolower($0)}')
_INSTALL_PATH="$HOME/$_VERSION"
INSTALL_PATH="$_INSTALL_PATH"
INSTALL_ALTERNATE_PATH="$HOME/$_VERSION"_stsci
function repo_alive
{
retval=1
local REPO="$1"
if [ -z "$REPO" ]; then
echo "repo_alive requires an argument." >&2
echo "usage: repo_alive {repo_url}" >&2
exit 1
fi
REPO_ALIVE="$REPO/repo_alive.txt"
ALIVE_FILE="$(basename $REPO_ALIVE)"
$FETCH $FETCH_ARGS $REPO_ALIVE &>/dev/null
if [ -f "$ALIVE_FILE" ]; then
rm -f "$ALIVE_FILE"
retval=0
fi
return $retval
}
function check_reinstall
{
# Note, we don't care about the "root" environment. People can install whatever they want.
local conflict=0
local ENVIRONMENTS=`conda env list | egrep -v '#|^_|^root' | awk '{ print $1 }'`
echo "Scanning Conda environment for conflicts:"
for environ in $ENVIRONMENTS
do
msg="NO CONFLICT"
conda list -n "$environ" -f '^stsci$|^stsci-.*' &>/dev/null
retval=$?
if [[ $retval > 0 ]]; then
continue
else
for release in "${STSCI_RELEASES[@]}"
do
if [[ "stsci-$release" == $environ ]]; then
((conflict++))
fi
done
fi
if [[ $conflict > 0 ]]; then
msg="CONFLICT"
fi
printf "+ %-20s:%20s\n" "$environ" "$msg"
done
echo
return $conflict
}
case "$OS" in
Linux)
CONTINUUM_PLATFORM=Linux
FETCH="wget"
FETCH_ARGS="-c"
;;
Darwin)
CONTINUUM_PLATFORM=MacOSX
FETCH="curl"
FETCH_ARGS="-O"
;;
esac
case "$PLATFORM" in
i*86)
CONTINUUM_ARCH=x86
;;
esac
if [[ $CONTINUUM_ARCH != x86_64 ]]; then
echo "STScI does not support '$ARCH' packages."
exit 255
fi
if [ -z "$CONTINUUM_PLATFORM" ]; then
echo "STScI does not support '$OS'."
exit 254
fi
if [ ! -x "`which $FETCH`" ]; then
echo "Please install '$FETCH'. Unable to continue."
exit 253
fi
INSTALLER="$CONTINUUM_RELEASE-$CONTINUUM_VERSION-$CONTINUUM_PLATFORM-$CONTINUUM_ARCH${CONTINUUM_EXT}"
CONTINUUM_URL="$CONTINUUM_BASE/$INSTALLER"
# Check for presence of [mini|ana]conda
CONDA=`which conda 2>/dev/null`
if [ -x "$CONDA" ]; then
echo "An Anaconda installation is present on your system: $CONDA"
echo
check_reinstall
found=$?
if [[ $found > 0 ]]; then
echo "To overwrite an existing installation:
./$(basename $0) --reinstall"
echo
echo "To squelch this behavior and perform a fresh installation:
./$(basename $0) --ignore-conflicts"
exit 4
fi
echo "Do you wish to use your existing conda installation? (recommended) [Y/n]"
read choice
case "$choice" in
N*|n*)
INSTALL_PATH="$INSTALL_ALTERNATE_PATH"
;;
*)
;;
esac
fi
if [[ $INSTALL_PATH != $_INSTALL_PATH ]]; then
# User picked an alternative installation
echo "Alternative installation path: $INSTALL_PATH"
# Do installation
$FETCH $FETCH_ARGS $CONTINUUM_URL
chmod +x "$INSTALLER"
./"$INSTALLER" -p "$INSTALL_PATH"
# This allows us to continue without having to recycle the environment:
export PATH="$INSTALL_PATH/bin:$PATH"
# Fall through to repository installation
fi
# Repository installation
for python_version in ${PYTHON_VERSIONS[@]}
do
for release in ${STSCI_RELEASES[@]}
do
STSCI_URL="$STSCI_BASE/$release"
release="stsci-$release-$python_version"
logfile="/tmp/install-${release}.log"
repo_alive "$STSCI_URL"
alive=$?
if [[ $alive < 1 ]]; then
echo "$release repository is up."
else
echo "$release repository is down. (installation skipped)"
continue
fi
/bin/echo -n "Installing $release (monitor progress with: tail -f $logfile) ... "
( conda create -y -n "$release" -c "$STSCI_URL" python=$python_version stsci 2>&1 ) > "$logfile"
retval=$?
if [[ $retval > 0 ]]; then
printf "failed\n\tA problem occurred while installing %s. Please review the installation log.\n" "$release"
echo
else
echo "done"
fi
done
done
|