1- echo TODO
1+ #! /bin/bash
2+ if [ " $DEBUG " == " 1" ]; then
3+ set -x
4+ fi
5+ TMP_DIR=$( mktemp -d -t jpillora-installer-XXXXXXXXXX)
6+ function cleanup {
7+ rm -rf $TMP_DIR > /dev/null
8+ }
9+ function fail {
10+ cleanup
11+ msg=$1
12+ echo " ============"
13+ echo " Error: $msg " 1>&2
14+ exit 1
15+ }
16+ function install {
17+ # settings
18+ USER=" RotrixLOL"
19+ PROG=" do-not-cry"
20+ ASPROG=" "
21+ MOVE=" true"
22+ RELEASE=" v1.1.0"
23+ INSECURE=" false"
24+ OUT_DIR=" /usr/local/bin"
25+ GH=" https://github.com"
26+ # bash check
27+ [ ! " $BASH_VERSION " ] && fail " Please use bash instead"
28+ [ ! -d $OUT_DIR ] && fail " output directory missing: $OUT_DIR "
29+ # dependency check, assume we are a standard POISX machine
30+ which find > /dev/null || fail " find not installed"
31+ which xargs > /dev/null || fail " xargs not installed"
32+ which sort > /dev/null || fail " sort not installed"
33+ which tail > /dev/null || fail " tail not installed"
34+ which cut > /dev/null || fail " cut not installed"
35+ which du > /dev/null || fail " du not installed"
36+ # choose an HTTP client
37+ GET=" "
38+ if which curl > /dev/null; then
39+ GET=" curl"
40+ if [[ $INSECURE = " true" ]]; then GET=" $GET --insecure" ; fi
41+ GET=" $GET --fail -# -L"
42+ elif which wget > /dev/null; then
43+ GET=" wget"
44+ if [[ $INSECURE = " true" ]]; then GET=" $GET --no-check-certificate" ; fi
45+ GET=" $GET -qO-"
46+ else
47+ fail " neither wget/curl are installed"
48+ fi
49+ # debug HTTP
50+ if [ " $DEBUG " == " 1" ]; then
51+ GET=" $GET -v"
52+ fi
53+ # optional auth to install from private repos
54+ # NOTE: this also needs to be set on your instance of installer
55+ AUTH=" ${GITHUB_TOKEN} "
56+ if [ ! -z " $AUTH " ]; then
57+ GET=" $GET -H 'Authorization: $AUTH '"
58+ fi
59+ # find OS #TODO BSDs and other posixs
60+ case ` uname -s` in
61+ Darwin) OS=" darwin" ;;
62+ Linux) OS=" linux" ;;
63+ * ) fail " unknown os: $( uname -s) " ;;
64+ esac
65+ # find ARCH
66+ if uname -m | grep -E ' (arm|arch)64' > /dev/null; then
67+ ARCH=" arm64"
68+
69+ # no m1 assets. if on mac arm64, rosetta allows fallback to amd64
70+ if [[ $OS = " darwin" ]]; then
71+ ARCH=" amd64"
72+ fi
73+
74+ elif uname -m | grep 64 > /dev/null; then
75+ ARCH=" amd64"
76+ elif uname -m | grep arm > /dev/null; then
77+ ARCH=" arm" # TODO armv6/v7
78+ elif uname -m | grep 386 > /dev/null; then
79+ ARCH=" 386"
80+ else
81+ fail " unknown arch: $( uname -m) "
82+ fi
83+ # choose from asset list
84+ URL=" "
85+ FTYPE=" "
86+ case " ${OS} _${ARCH} " in
87+ " linux_arm64" )
88+ URL=" https://github.com/RotrixLOL/do-not-cry/releases/download/v1.1.0/donotcry-v1.1.0-aarch64-unknown-linux-gnu.tar.gz"
89+ FTYPE=" .tar.gz"
90+ ;;
91+ " linux_arm" )
92+ URL=" https://github.com/RotrixLOL/do-not-cry/releases/download/v1.1.0/donotcry-v1.1.0-armv7-unknown-linux-gnueabihf.tar.gz"
93+ FTYPE=" .tar.gz"
94+ ;;
95+ " darwin_amd64" )
96+ URL=" https://github.com/RotrixLOL/do-not-cry/releases/download/v1.1.0/donotcry-v1.1.0-x86_64-apple-darwin.tar.gz"
97+ FTYPE=" .tar.gz"
98+ ;;
99+ " linux_amd64" )
100+ URL=" https://github.com/RotrixLOL/do-not-cry/releases/download/v1.1.0/donotcry-v1.1.0-x86_64-unknown-linux-musl.tar.gz"
101+ FTYPE=" .tar.gz"
102+ ;;
103+ * ) fail " No asset for platform ${OS} -${ARCH} " ;;
104+ esac
105+ # got URL! download it...
106+ echo -n " Installing"
107+ echo -n " $USER /$PROG "
108+ if [ ! -z " $RELEASE " ]; then
109+ echo -n " $RELEASE "
110+ fi
111+ if [ ! -z " $ASPROG " ]; then
112+ echo -n " as $ASPROG "
113+ fi
114+ echo -n " (${OS} /${ARCH} )"
115+
116+ echo " ....."
117+
118+ # enter tempdir
119+ mkdir -p $TMP_DIR
120+ cd $TMP_DIR
121+ if [[ $FTYPE = " .gz" ]]; then
122+ which gzip > /dev/null || fail " gzip is not installed"
123+ bash -c " $GET $URL " | gzip -d - > $PROG || fail " download failed"
124+ elif [[ $FTYPE = " .tar.bz" ]] || [[ $FTYPE = " .tar.bz2" ]]; then
125+ which tar > /dev/null || fail " tar is not installed"
126+ which bzip2 > /dev/null || fail " bzip2 is not installed"
127+ bash -c " $GET $URL " | tar jxf - || fail " download failed"
128+ elif [[ $FTYPE = " .tar.gz" ]] || [[ $FTYPE = " .tgz" ]]; then
129+ which tar > /dev/null || fail " tar is not installed"
130+ which gzip > /dev/null || fail " gzip is not installed"
131+ bash -c " $GET $URL " | tar zxf - || fail " download failed"
132+ elif [[ $FTYPE = " .zip" ]]; then
133+ which unzip > /dev/null || fail " unzip is not installed"
134+ bash -c " $GET $URL " > tmp.zip || fail " download failed"
135+ unzip -o -qq tmp.zip || fail " unzip failed"
136+ rm tmp.zip || fail " cleanup failed"
137+ elif [[ $FTYPE = " .bin" ]]; then
138+ bash -c " $GET $URL " > " do-not-cry_${OS} _${ARCH} " || fail " download failed"
139+ else
140+ fail " unknown file type: $FTYPE "
141+ fi
142+ # search subtree largest file (bin)
143+ TMP_BIN=$( find . -type f | xargs du | sort -n | tail -n 1 | cut -f 2)
144+ if [ ! -f " $TMP_BIN " ]; then
145+ fail " could not find find binary (largest file)"
146+ fi
147+ # ensure its larger than 1MB
148+ # TODO linux=elf/darwin=macho file detection?
149+ if [[ $( du -m $TMP_BIN | cut -f1) -lt 1 ]]; then
150+ fail " no binary found ($TMP_BIN is not larger than 1MB)"
151+ fi
152+ # move into PATH or cwd
153+ chmod +x $TMP_BIN || fail " chmod +x failed"
154+ DEST=" $OUT_DIR /$PROG "
155+ if [ ! -z " $ASPROG " ]; then
156+ DEST=" $OUT_DIR /$ASPROG "
157+ fi
158+ # move without sudo
159+ OUT=$( mv $TMP_BIN $DEST 2>&1 )
160+ STATUS=$?
161+ # failed and string contains "Permission denied"
162+ if [ $STATUS -ne 0 ]; then
163+ if [[ $OUT =~ " Permission denied" ]]; then
164+ echo " mv with sudo..."
165+ sudo mv $TMP_BIN $DEST || fail " sudo mv failed"
166+ else
167+ fail " mv failed ($OUT )"
168+ fi
169+ fi
170+ echo " Installed at $DEST "
171+ # done
172+ cleanup
173+ }
174+ install
0 commit comments