Skip to content
This repository was archived by the owner on Feb 8, 2021. It is now read-only.

Commit ba6697a

Browse files
committed
[master] add hypercli-bootstrap.sh for install hypercli(Hyper Public Cloud)
1 parent fc14dff commit ba6697a

File tree

1 file changed

+180
-0
lines changed

1 file changed

+180
-0
lines changed

hypercli-bootstrap.sh

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
#!/bin/bash
2+
# Description: This script is used to install hyper cli and hyperd
3+
# Usage:
4+
# install from remote
5+
# wget -qO- https://cli.hyper.sh/install | bash
6+
# curl -sSL https://cli.hyper.sh/install | bash
7+
# install from local
8+
# ./bootstrap.sh
9+
WORK_DIR=$(pwd)
10+
BASE_DIR=$(cd "$(dirname "$0")"; pwd); cd ${BASE_DIR}
11+
SLEEP_SEC=10
12+
set -e
13+
########## Variable ##########
14+
CURRENT_USER=$(id -un 2>/dev/null || true)
15+
BOOTSTRAP_DIR="/tmp/hypercli-pkg-${CURRENT_USER}"
16+
BASH_C="bash -c"
17+
########## Parameter ##########
18+
S3_URL="http://hyper-install.s3.amazonaws.com"
19+
PKG_FILE_LINUX="hyper-1.10-x86_64.tar.gz"
20+
PKG_FILE_MACOSX="hyper-1.10-mac.bin.zip"
21+
SUPPORT_EMAIL="support@hyper.sh"
22+
#Color Constant
23+
RED=`tput setaf 1`
24+
GREEN=`tput setaf 2`
25+
YELLOW=`tput setaf 3`
26+
BLUE=`tput setaf 4`
27+
WHITE=`tput setaf 7`
28+
LIGHT=`tput bold `
29+
RESET=`tput sgr0`
30+
#Error Message
31+
ERR_NOT_SUPPORT_OS=(10 "Sorry, hypercli support Linux and MacOSX only!")
32+
ERR_FETCH_PKG_FAILED=(20 "Fetch hypercli package failed, please retry!")
33+
ERR_PKG_MD5_ERROR=(30 "Checksum of install package error, please retry!")
34+
ERR_UNKNOWN=99
35+
########## Helper Function Definition ##########
36+
display_support() {
37+
echo "Sorry, we are suffering from some technical issue($1), please contact ${SUPPORT_EMAIL}"
38+
if [ $# -eq 0 ];then exit ${ERR_UNKNOWN}
39+
else exit $1
40+
fi
41+
}
42+
command_exist() {
43+
type "$@" > /dev/null 2>&1
44+
}
45+
get_curl() {
46+
CURL_C=""; USE_WGET="false"
47+
if (command_exist curl);then
48+
CURL_C='curl -# -SL -o '
49+
elif (command_exist wget);then
50+
USE_WGET="true"
51+
CURL_C='wget -O '
52+
fi
53+
echo "${USE_WGET}|${CURL_C}"
54+
}
55+
show_message() {
56+
case "$1" in
57+
debug) echo -e "\n[${BLUE}DEBUG${RESET}] : $2";;
58+
info) echo -e -n "\n${WHITE}$2${RESET}" ;;
59+
warn) echo -e "\n[${YELLOW}WARN${RESET}] : $2" ;;
60+
done|success) echo -e "${LIGHT}${GREEN}$2${RESET}" ;;
61+
error|failed) echo -e "\n[${RED}ERROR${RESET}] : $2" ;;
62+
esac
63+
}
64+
########## Main Function Definition ##########
65+
main() {
66+
check_os_type
67+
fetch_hypercli
68+
extract_hypercli
69+
exit 0
70+
}
71+
check_os_type() {
72+
OS_TYPE=$(uname -a | awk '{print $1}')
73+
case "${OS_TYPE}" in
74+
Linux) PKG_FILE="${PKG_FILE_LINUX}";;
75+
Darwin) PKG_FILE="${PKG_FILE_MACOSX}";;
76+
*) show_message error "${ERR_NOT_SUPPORT_OS[1]}" && exit "${ERR_NOT_SUPPORT_OS[0]}"
77+
;;
78+
esac
79+
}
80+
fetch_hypercli() {
81+
show_message info "Fetch checksum and package...\n"
82+
set +e
83+
${BASH_C} "ping -c 3 -W 2 hyper-install.s3.amazonaws.com >/dev/null 2>&1"
84+
if [ $? -ne 0 ];then
85+
S3_URL="http://mirror-hyper-install.s3.amazonaws.com"
86+
else
87+
S3_URL="http://hyper-install.s3.amazonaws.com"
88+
fi
89+
local SRC_URL="${S3_URL}/${PKG_FILE}"
90+
local TGT_FILE="${BOOTSTRAP_DIR}/${PKG_FILE}"
91+
local USE_WGET=$(echo $(get_curl) | awk -F"|" '{print $1}')
92+
local CURL_C=$(echo $(get_curl) | awk -F"|" '{print $2}')
93+
show_message info "${SRC_URL} => ${TGT_FILE}\n"
94+
mkdir -p ${BOOTSTRAP_DIR} && cd ${BOOTSTRAP_DIR}
95+
if [ -s ${TGT_FILE} ];then
96+
if [ "${USE_WGET}" == "true" ];then
97+
${CURL_C} ${SRC_URL}.md5 2>&1 | grep --line-buffered "%" | sed -u -e "s,\.,,g" | awk '{printf("\b\b\b\b%4s", $2)}'
98+
else
99+
${CURL_C} ${TGT_FILE}.md5 ${SRC_URL}.md5
100+
fi
101+
if [ -s "${TGT_FILE}.md5" ];then
102+
case "${OS_TYPE}" in
103+
Linux)
104+
NEW_MD5=$(cat ${TGT_FILE}.md5 | awk '{print $1}')
105+
OLD_MD5=$(md5sum ${TGT_FILE} | awk '{print $1}')
106+
;;
107+
Darwin)
108+
NEW_MD5=$(cat ${TGT_FILE}.md5 | awk '{print $NF}')
109+
OLD_MD5=$(md5 ${TGT_FILE} | awk '{print $NF}')
110+
;;
111+
esac
112+
if [[ ! -z ${OLD_MD5} ]] && [[ ! -z ${NEW_MD5} ]] && [[ "${OLD_MD5}" != "${NEW_MD5}" ]];then
113+
show_message info "${LIGHT}Found new hypercli version, will download it now!\n"
114+
${BASH_C} "\rm -rf ${BOOTSTRAP_DIR}/*"
115+
elif [[ ! -z ${OLD_MD5} ]] && [[ "${OLD_MD5}" == "${NEW_MD5}" ]];then #no update
116+
echo -n
117+
else
118+
${BASH_C} "\rm -rf ${BOOTSTRAP_DIR}/*"
119+
fi
120+
fi
121+
elif [ -f ${TGT_FILE} ];then
122+
${BASH_C} "\rm -rf ${BOOTSTRAP_DIR}/*"
123+
fi
124+
if [ ! -f ${TGT_FILE} ];then
125+
\rm -rf ${TGT_FILE}.md5 >/dev/null 2>&1
126+
if [ "${USE_WGET}" == "true" ];then
127+
${CURL_C} ${SRC_URL}.md5 2>&1 | grep --line-buffered "%" | sed -u -e "s,\.,,g" | awk '{printf("\b\b\b\b%4s", $2)}'
128+
${CURL_C} ${SRC_URL} 2>&1 | grep --line-buffered "%" | sed -u -e "s,\.,,g" | awk '{printf("\b\b\b\b%4s", $2)}'
129+
else
130+
${CURL_C} ${TGT_FILE}.md5 ${SRC_URL}.md5
131+
${CURL_C} ${TGT_FILE} ${SRC_URL}
132+
fi
133+
if [ $? -ne 0 ];then
134+
show_message error "${ERR_FETCH_PKG_FAILED[1]}" && exit "${ERR_FETCH_PKG_FAILED[0]}"
135+
else
136+
case "${OS_TYPE}" in
137+
Linux) MD5_REMOTE=$(cat ${TGT_FILE}.md5 | awk '{print $1}')
138+
MD5_LOCAL=$(md5sum ${TGT_FILE} | awk '{print $1}')
139+
;;
140+
Darwin) MD5_REMOTE=$(cat ${TGT_FILE}.md5 | awk '{print $NF}')
141+
MD5_LOCAL=$(md5 ${TGT_FILE} | awk '{print $NF}')
142+
;;
143+
esac
144+
if [ ${MD5_REMOTE} != ${MD5_LOCAL} ];then
145+
echo "required checksum: ${MD5_REMOTE}, but downloaded package is ${MD5_LOCAL}"
146+
show_message error "${ERR_PKG_MD5_ERROR[1]}" && exit "${ERR_PKG_MD5_ERROR[0]}"
147+
fi
148+
fi
149+
fi
150+
set -e
151+
}
152+
extract_hypercli() {
153+
case "${OS_TYPE}" in
154+
Linux) PKG_FILE="${PKG_FILE_LINUX}"
155+
${BASH_C} "tar xzf ${BOOTSTRAP_DIR}/${PKG_FILE} -C ${WORK_DIR}"
156+
;;
157+
Darwin) PKG_FILE="${PKG_FILE_MACOSX}"
158+
${BASH_C} "unzip -o ${BOOTSTRAP_DIR}/${PKG_FILE} -d ${WORK_DIR}"
159+
;;
160+
*) show_message error "${ERR_NOT_SUPPORT_OS[1]}" && exit "${ERR_NOT_SUPPORT_OS[0]}"
161+
;;
162+
esac
163+
chmod +x ${WORK_DIR}/hyper
164+
cat <<EOF
165+
hypercli '${WORK_DIR}/hyper' is ready
166+
167+
QuickStart:
168+
./hyper --help
169+
./hyper config
170+
./hyper pull ubuntu
171+
./hyper images
172+
./hyper run --name hello -it ubuntu echo hello world
173+
./hyper ps -l
174+
175+
For more information, please go to https://docs.hyper.sh
176+
EOF
177+
}
178+
179+
#################
180+
main

0 commit comments

Comments
 (0)