-
Notifications
You must be signed in to change notification settings - Fork 46
/
Copy pathscript.sh
103 lines (91 loc) · 3.94 KB
/
script.sh
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
#!/bin/bash
set -
if [ "" = "${JAVA_HOME}" ] ; then
JAVA_HOME=/usr
fi
BASE_URL="https://www.supermicro.com/en/support/resources"
INFO_URL="${BASE_URL}/downloadcenter/smsdownload\?category\=IPMI"
API_URL="https://www.supermicro.com/support/resources/getfile.php?SoftwareItemID=DLID&type=serversoftwarefile"
if which curl >/dev/null; then
# this area is subject to problems if SuperMicro changes their page format
DL_ID=$(curl -s ${INFO_URL} | grep "data-sms-name=\"Linux\".*sms_radio_buttons_IPMIView" | cut -d"'" -f4)
DL_URL=$(echo $API_URL | sed "s/DLID/${DL_ID}/")
DOWNLOAD_URL=$(curl -s -i ${DL_URL} | grep 'location' | awk -F': ' '{print $2}' | tr -d '[:space:]')
CHECKSUM_URL=$(dirname "${DOWNLOAD_URL}")/CheckSum.txt
DOWNLOAD_FILENAME=$(basename "${DOWNLOAD_URL}")
if [ -z ${DOWNLOAD_FILENAME} ]; then
echo "[WARNING!] Problem parsing latest version..."
echo "Falling back to last known version."
echo "Please file an issue at https://github.com/TheCase/IPMIView.app/issues regarding latest version discovery."
DOWNLOAD_FILENAME="IPMIView_2.21.1_build.230720_bundleJRE_Linux_x64.tar.gz"
fi
LOCAL_DOWNLOAD_LOCATION="./SM_download"
# if LOCAL_DOWNLOAD_LOCATION doesn't exist, create it
if [ ! -d "${LOCAL_DOWNLOAD_LOCATION}" ]; then
mkdir -p ${LOCAL_DOWNLOAD_LOCATION}
fi
echo "Downloading CheckSum.txt [${CHECKSUM_URL}]"
if [ -f "${LOCAL_DOWNLOAD_LOCATION}/CheckSum.txt" ]; then
read -p "Checksum file exists. Overwrite existing file? [y/N] " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo ok, skipping download...
echo
SKIP=1
fi
fi
if [ -z $SKIP ]; then
curl --progress-bar -o ${LOCAL_DOWNLOAD_LOCATION}/CheckSum.txt ${CHECKSUM_URL}
fi
unset SKIP
echo "Downloading latest version of IPMIView [${DOWNLOAD_URL}]"
if [ -f "${LOCAL_DOWNLOAD_LOCATION}/${DOWNLOAD_FILENAME}" ]; then
read -p "Application file exists. Overwrite existing file? [y/N] " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo ok, skipping download...
echo
SKIP=1
fi
fi
if [ -z $SKIP ]; then
curl --progress-bar -o ${LOCAL_DOWNLOAD_LOCATION}/${DOWNLOAD_FILENAME} ${DOWNLOAD_URL}
fi
# Check MD5
EXPECTED_CHECKSUM=$(\grep -A3 "tar.gz" "${LOCAL_DOWNLOAD_LOCATION}/CheckSum.txt" | grep MD5 | cut -d':' -f2 | tr -d "[:space:]" | tr '[:upper:]' '[:lower:]')
ACTUAL_CHECKSUM=$(md5 -r "${LOCAL_DOWNLOAD_LOCATION}"/${DOWNLOAD_FILENAME} | cut -d' ' -f1 | tr -d "[:space:]" | tr '[:upper:]' '[:lower:]')
if ! diff <(echo "${EXPECTED_CHECKSUM}") <(echo "${ACTUAL_CHECKSUM}"); then
echo "Checksum is not as expected; download may be corrupted."
echo "Expected: [${EXPECTED_CHECKSUM}]"
echo "Actual: [${ACTUAL_CHECKSUM}]"
echo "Exiting."
exit 1
fi
else
echo "WARNING: 'curl' command not found."
echo
echo "Please visit ${DOWNLOAD_URL} to download the latest version of IPMIView and copy the archive into $(pwd)/${LOCAL_DOWNLOAD_LOCATION}/"
echo
# shellcheck disable=SC2034,SC2162
echo "Press [Enter] to continue" && read answer
fi
echo "Extracting contents of downloaded IPMIView archive..."
if [[ -d Contents/Resources/IPMIView ]]; then
rm -rf Contents/Resources/IPMIView
fi
mkdir -p Contents/Resources/IPMIView/Contents/Home/bin
tar -zxf "${LOCAL_DOWNLOAD_LOCATION}"/IPMIView*.tar* --strip=1 -C ./Contents/Resources/IPMIView/. ||
{ echo "Something went wrong, check download of IPMIView archive" && exit 1; }
echo "Linking 'java' and 'jre'..."
ln -s "${JAVA_HOME}/bin/java" Contents/Resources/IPMIView/Contents/Home/bin/java
rm -rf Contents/Resources/IPMIView/jre/*
pushd Contents/Resources/IPMIView/jre/ >/dev/null &&
ln -s ../Contents . &&
popd >/dev/null || exit
echo "Copying IPMIView.app over to ~/Applications directory..."
pushd .. >/dev/null &&
rsync -ar --exclude=.git --exclude=Contents/Resources/IPMIView/jre IPMIView.app ~/Applications &&
popd >/dev/null || exit
echo "Completed."
echo
echo "You can now open ~/Applications/IPMIView.app"