Added support to re-use downloaded files if they exist.
[webos-internals:bootstrap.git] / novaterm-bootstrap.sh
1 #!/bin/bash
2
3 # novaterm-bootstrap.sh
4 # version 0.0.4
5 #
6 # Script to install novaterm and it's prerequisites.  This script is intended for stand-alone use
7 # and to be packaged on a LiveCD for easy terminal access to a Pre.
8 #
9 # by Drew DeNardo (nt4cats)
10 # drew at denardo dot com
11 #
12 # Special thanks to sbromwich and rwhitby for the idea/inspiration to put this script together
13
14 # This script re-uses significant parts of Daniel Beames' (dBsooner's) preware-bootstrap.sh script.
15 # Most notably, the overall structure and many of the the helper/utility functions are his.
16 #
17 # Features:
18 # 1. Make sure the script is running on a Ubuntu (Hardy, Intrepid, Jaunty, and Karmic) or Fedora box
19 # 2. Install Java (if required)
20 # 3. Install ia32-libs (if required)
21 # 4. Download novacom (if required)
22 # 5. Download SDK (if required)
23 # 6. Install the SDK (if required)
24 # 7. Install novacom (if required)
25
26 # Additional Thoughts:
27 # 1. Detect and report if a Pre is connected via USB but is either:
28 #      a) in disk mode
29 #      b) not in developer mode
30 #
31 # 2. Should this script also install/configure mobi.optware.openssh for them?
32 #
33 # 3. Where to put the downloads?  My thoughts are:
34 #       1) $BOOTSTRAP_DL_DIR (if it exists)
35 #       2) ~/Downloads/ (if it exists)
36 #       3) ~/.novacom-bootstrap/
37 #
38 #    Regardless of where the files go, it should clearly tell the user where they're ending up.
39 #
40 # 4. This script will need root priv's at some point.  I'm thinking about requiring the script to
41 #    run as root, but it will run as much as it can without root priv's.  Still thinking about this one ...
42 #
43 # Changelog:
44 #
45 # 0.0.1 Initial skeleton, no usable functionality
46 # 0.0.2 Added Linux version detection
47 # 0.0.3 Cleaned up and fleshed out skeleton.  Added hard-coded file downloads.
48 # 0.0.4 Added support to re-use downloaded files if they exist.
49
50 ### VARIABLES
51
52 SCRIPTNAME="$(basename $0)"                
53 LOG=/tmp/${SCRIPTNAME}.log
54 ARCH=$(uname -m)
55 if [ "$ARCH" == "armv7l" ] ; then
56   echo "Do not run this on your Pre.  This script is for Ubuntu or Fedora Linux.  Aborting."
57   exit 99
58 elif [ "$ARCH" == "armv6l" ] ; then
59   echo "Do not run this on your Pixi.  This script is for Ubuntu or Fedora Linux.  Aborting."
60   exit 98
61 else    
62     # TODO: Detect emulator
63
64     # Make sure this is a Ubuntu or Fedora box
65     RELNAME="Unknown"
66
67     if [ -f /etc/lsb-release ] ; then
68         # Check /etc/lsb-release for Ubuntu
69         RELTEST=`egrep -io "Hardy|Intrepid|Jaunty|Karmic" /etc/lsb-release`
70         if [ "$RELTEST" == "" ]; then
71             RELNAME="Debian"
72         else
73             RELNAME="$RELTEST"
74         fi
75     elif [ -f /etc/redhat-release ] ; then
76         # Check /etc/redhat-release for Fedora
77         RELTEST=`grep -o Fedora /etc/redhat-release`
78         if [ "$RELTEST" == "" ]; then
79             RELNAME="RedHat"
80         else
81             RELNAME="Fedora"
82         fi
83     fi
84 fi
85
86 # These URLs need to be scraped from the Palm website instead of hard-coded here
87 NOVA_32="palm-novacom_1.0.55_i386.deb"
88 NOVA_64="palm-novacom_1.0.55_amd64.deb"
89 PALM_SDK="palm-sdk_1.4.1-svn274946-sdk1436-pho427_i386.deb"
90
91 NOVA_32_URL="http://cdn.downloads.palm.com/sdkdownloads/1.4.1.427/sdkBinaries/$NOVA_32"
92 NOVA_64_URL="http://cdn.downloads.palm.com/sdkdownloads/1.4.1.427/sdkBinaries/$NOVA_64"
93 PALM_SDK_URL="http://cdn.downloads.palm.com/sdkdownloads/1.4.1.427/sdkBinaries/$PALM_SDK"
94
95 NOVA_32_MD5="69be6d7c6806f32b47a1e7794ea26ad8"
96 NOVA_64_MD5="04d6b299b1c7236eb947f5e41299c775"
97 PALM_SDK_MD5="b4f195433b04aa0778f19cef2c405447"
98
99 ### END of VARIABLES
100
101 ### FUNCTIONS
102
103 # Name:        log
104 # Arguments:   Message
105 # Description: logs Message to $LOG
106 log() {
107   echo "$@" >> $LOG
108 }
109
110
111 # Name:        yesno
112 # Arguments:   Question
113 # Description: Asks a yes/no Question, returns 1 for yes, 0 for no
114 yesno() {
115   IN=""
116   until [ -n "$IN" ] ; do
117     read -p "${@} " IN
118     case "$IN" in
119       y|Y|yes|YES)  return 1;;
120       n|N|no|NO)    return 0;;
121       *)            IN="";;
122     esac
123   done
124 }
125
126
127 # Name:        error
128 # Arguments:   Message
129 # Description: Displays FAILED followed by Message
130   error() {
131   echo "FAILED"
132   log "ERROR: ${@}"
133   echo "$@"
134   echo
135   echo "Please paste the contents of ${LOG} to http://webos.pastebin.com/"
136   echo "and seek help in the IRC channel #webos-internals."
137   echo
138   echo "To view ${LOG}, type:"
139   echo
140   echo "cat ${LOG}"
141   echo
142   echo
143   return 1
144 }
145
146 ### END FUNCTIONS
147
148 echo "Starting installation..."
149
150 case $RELNAME in
151
152    "Unknown"|"RedHat"|"Debian")
153        echo "Your OS is not supported.  Please run on Ubuntu (Hardy, Intrepid, Jaunty, or Karmic) or Fedora Linux."
154        ;;
155    "Fedora")
156        echo "You are running Fedora Linux."
157        ;;
158    "hardy"|"intrepid"|"jaunty"|"karmic")
159        echo "You are running Ubuntu Linux."
160        ;;
161 esac
162
163 echo "This is early pre-release software.  Do not run this unless you are fully prepared to deal with the consequences."
164 yesno "Is this okay with you?"
165 if [ "$?" -eq 0 ] ; then
166     echo "I think saying 'no' was probably the correct thing to do."
167     exit 0
168 fi
169
170 # This early release does not yet check to see what steps are completed.  This is coming soon.
171 # This early release assumes it can download files to the cwd.  This needs to change before the release.
172
173 # TODO: basic connectivity/DNS checks here
174
175 # TODO: create / find appropriate temporary/working directory
176 # Until then, just use "~/Downloads"
177 DOWNLOAD_DIR="$HOME/Downloads"
178 mkdir -p $DOWNLOAD_DIR
179
180 # TODO: Check for Java
181
182 # TODO: Install Java (if required)
183
184 # TODO: Check for ia32-libs
185
186 # TODO: Install ia32-libs (if reqiured)
187
188 if [ "$ARCH" == "x86_64" ]; then
189    NOVA_FILE=$NOVA_64
190    NOVA_URL=$NOVA_64_URL
191    NOVA_MD5=$NOVA_64_MD5
192 else
193    NOVA_FILE=$NOVA_32
194    NOVA_URL=$NOVA_32_URL
195    NOVA_MD5=$NOVA_32_MD5
196 fi
197
198 if [ -f $DOWNLOAD_DIR/$NOVA_FILE ]; then
199    MD5_TEST=`md5sum $DOWNLOAD_DIR/$NOVA_FILE | awk '{print $1}'`
200    if [ "$NOVA_MD5" == "$MD5_TEST" ]; then
201        echo "Novacom is already downloaded."
202        NOVA_URL=""
203    else
204        echo "Partial download detected.  Removing ...."
205        rm -f $DOWNLOAD_DIR/$NOVA_FILE
206    fi
207 fi
208
209 if [ "$NOVA_URL" != "" ]; then
210     pushd $DOWNLOAD_DIR > /dev/null
211     wget $NOVA_URL
212     popd > /dev/null
213 fi
214
215 # TODO: write a "download if needed" function so this code isn't copied twice
216
217 if [ -f $DOWNLOAD_DIR/$PALM_SDK ]; then
218    MD5_TEST=`md5sum $DOWNLOAD_DIR/$PALM_SDK | awk '{print $1}'`
219    if [ "$PALM_SDK_MD5" == "$MD5_TEST" ]; then
220        echo "Palm SDK is already downloaded."
221        PALM_SDK_URL=""
222    else
223        echo "Partial download detected.  Removing ...."
224        rm -f $DOWNLOAD_DIR/$PALM_SDK
225    fi
226 fi
227
228 if [ "$PALM_SDK_URL" != "" ]; then
229     pushd $DOWNLOAD_DIR > /dev/null
230     wget $PALM_SDK_URL
231     popd > /dev/null
232 fi
233
234 echo "Setup Complete!"
235 echo