-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathdownload.sh
More file actions
executable file
·141 lines (135 loc) · 4.09 KB
/
Copy pathdownload.sh
File metadata and controls
executable file
·141 lines (135 loc) · 4.09 KB
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
#!/bin/bash
TMP_DIR="/tmp/blstmpdir"
function cleanup {
echo rm -rf $TMP_DIR > /dev/null
}
function fail {
cleanup
msg=$1
echo "============"
echo "Error: $msg" 1>&2
exit 1
}
function install {
#settings
USER="txlabs"
PROG='bls'
MOVE="true"
RELEASE="latest"
INSECURE="false"
OUT_DIR="/usr/local/bin"
GH="https://github.com"
#bash check
[ ! "$BASH_VERSION" ] && fail "Please use bash instead"
# Check if $OUT_DIR exists, if not create it
if [ ! -d $OUT_DIR ]; then
mkdir -p $OUT_DIR || fail "Failed to create directory: $OUT_DIR"
fi
#dependency check, assume we are a standard POISX machine
which find > /dev/null || fail "find not installed"
which xargs > /dev/null || fail "xargs not installed"
which sort > /dev/null || fail "sort not installed"
which tail > /dev/null || fail "tail not installed"
which cut > /dev/null || fail "cut not installed"
which du > /dev/null || fail "du not installed"
GET=""
if which curl > /dev/null; then
GET="curl"
if [[ $INSECURE = "true" ]]; then GET="$GET --insecure"; fi
GET="$GET --fail -# -L"
elif which wget > /dev/null; then
GET="wget"
if [[ $INSECURE = "true" ]]; then GET="$GET --no-check-certificate"; fi
GET="$GET -qO-"
else
fail "neither wget/curl are installed"
fi
#find OS #TODO BSDs and other posixs
case `uname -s` in
Darwin) OS="darwin";;
Linux) OS="linux";;
*) fail "unknown os: $(uname -s)";;
esac
#find ARCH
if uname -m | grep 64 | grep arm > /dev/null; then
ARCH="arm64"
elif uname -m | grep 64 | grep aarch > /dev/null; then
ARCH="arm64"
elif uname -m | grep 64 > /dev/null; then
ARCH="amd64"
elif uname -m | grep arm > /dev/null; then
ARCH="arm" #TODO armv6/v7
elif uname -m | grep 386 > /dev/null; then
ARCH="386"
else
fail "unknown arch: $(uname -m)"
fi
#choose from asset list
URL=""
FTYPE=""
DEFAULT_VERSION="latest"
VERSION=${1:-$DEFAULT_VERSION}
case "${OS}_${ARCH}" in
"darwin_amd64")
URL="https://github.com/BlocklessNetwork/cli/releases/download/${VERSION}/bls-macos-x64-blockless-cli.tar.gz"
FTYPE=".tar.gz"
;;
"darwin_arm64")
URL="https://github.com/BlocklessNetwork/cli/releases/download/${VERSION}/bls-macos-arm64-blockless-cli.tar.gz"
FTYPE=".tar.gz"
;;
"linux_amd64")
URL="https://github.com/BlocklessNetwork/cli/releases/download/${VERSION}/bls-linux-x64-blockless-cli.tar.gz"
FTYPE=".tar.gz"
;;
"linux_arm64")
URL="https://github.com/BlocklessNetwork/cli/releases/download/${VERSION}/bls-linux-arm64-blockless-cli.tar.gz"
FTYPE=".tar.gz"
;;
*) fail "No asset for platform ${OS}-${ARCH}";;
esac
#got URL! download it...
echo -n "Installing $PROG $VERSION"
echo "....."
#enter tempdir
mkdir -p $TMP_DIR
cd $TMP_DIR
if [[ $FTYPE = ".gz" ]]; then
which gzip > /dev/null || fail "gzip is not installed"
#gzipped binary
NAME="${PROG}_${OS}_${ARCH}.gz"
GZURL="$GH/releases/download/$RELEASE/$NAME"
#gz download!
bash -c "$GET $URL" | gzip -d - > $PROG || fail "download failed"
elif [[ $FTYPE = ".tar.gz" ]] || [[ $FTYPE = ".tgz" ]]; then
#check if archiver progs installed
which tar > /dev/null || fail "tar is not installed"
which gzip > /dev/null || fail "gzip is not installed"
bash -c "$GET $URL" | tar zxf - || fail "download failed"
elif [[ $FTYPE = ".zip" ]]; then
which unzip > /dev/null || fail "unzip is not installed"
bash -c "$GET $URL" > tmp.zip || fail "download failed"
unzip -o -qq tmp.zip || fail "unzip failed"
rm tmp.zip || fail "cleanup failed"
elif [[ $FTYPE = "" ]]; then
bash -c "$GET $URL" > "blockless-chain_${OS}_${ARCH}" || fail "download failed"
else
fail "unknown file type: $FTYPE"
fi
#search subtree largest file (bin)
TMP_BIN=$(find . -type f | xargs du | sort -n | tail -n 1 | cut -f 2)
if [ ! -f "$TMP_BIN" ]; then
fail "could not find find binary (largest file)"
fi
#ensure its larger than 1MB
if [[ $(du -m $TMP_BIN | cut -f1) -lt 1 ]]; then
fail "no binary found ($TMP_BIN is not larger than 1MB)"
fi
#move into PATH or cwd
chmod +x $TMP_BIN || fail "chmod +x failed"
mv $TMP_BIN $OUT_DIR/$PROG || fail "mv failed" #FINAL STEP!
echo "Installed $PROG $VERSION at $OUT_DIR/$PROG"
#done
cleanup
}
install $1