Added Java check
[webos-internals:bootstrap.git] / novaterm-bootstrap.sh
1 #!/bin/bash
2
3 # novaterm-bootstrap.sh
4 # version 0.0.5
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 # 0.0.5 Initial Java environment tests
50
51 ### VARIABLES
52
53 SCRIPTNAME="$(basename $0)"                
54 LOG=/tmp/${SCRIPTNAME}.log
55 ARCH=$(uname -m)
56 if [ "$ARCH" == "armv7l" ] ; then
57   echo "Do not run this on your Pre.  This script is for Ubuntu or Fedora Linux.  Aborting."
58   exit 99
59 elif [ "$ARCH" == "armv6l" ] ; then
60   echo "Do not run this on your Pixi.  This script is for Ubuntu or Fedora Linux.  Aborting."
61   exit 98
62 else    
63     # TODO: Detect emulator
64
65     # Make sure this is a Ubuntu or Fedora box
66     RELNAME="Unknown"
67
68     if [ -f /etc/lsb-release ] ; then
69         # Check /etc/lsb-release for Ubuntu
70         RELTEST=`egrep -io "Hardy|Intrepid|Jaunty|Karmic" /etc/lsb-release`
71         if [ "$RELTEST" == "" ]; then
72             RELNAME="Debian"
73         else
74             RELNAME="$RELTEST"
75         fi
76     elif [ -f /etc/redhat-release ] ; then
77         # Check /etc/redhat-release for Fedora
78         RELTEST=`grep -o Fedora /etc/redhat-release`
79         if [ "$RELTEST" == "" ]; then
80             RELNAME="RedHat"
81         else
82             RELNAME="Fedora"
83         fi
84     fi
85 fi
86
87 # These URLs need to be scraped from the Palm website instead of hard-coded here
88 NOVA_32="palm-novacom_1.0.55_i386.deb"
89 NOVA_64="palm-novacom_1.0.55_amd64.deb"
90 PALM_SDK="palm-sdk_1.4.1-svn274946-sdk1436-pho427_i386.deb"
91
92 NOVA_32_URL="http://cdn.downloads.palm.com/sdkdownloads/1.4.1.427/sdkBinaries/$NOVA_32"
93 NOVA_64_URL="http://cdn.downloads.palm.com/sdkdownloads/1.4.1.427/sdkBinaries/$NOVA_64"
94 PALM_SDK_URL="http://cdn.downloads.palm.com/sdkdownloads/1.4.1.427/sdkBinaries/$PALM_SDK"
95
96 NOVA_32_MD5="69be6d7c6806f32b47a1e7794ea26ad8"
97 NOVA_64_MD5="04d6b299b1c7236eb947f5e41299c775"
98 PALM_SDK_MD5="b4f195433b04aa0778f19cef2c405447"
99
100 ### END of VARIABLES
101
102 ### FUNCTIONS
103
104 # Name:        say
105 # Arguments:   Message
106 # Description: echoes message to the console and then logs message
107 say() {
108   echo "$@"
109   log "$@"
110 }
111
112 # Name:        log
113 # Arguments:   Message
114 # Description: logs Message to $LOG
115 log() {
116   echo "$@" >> $LOG
117 }
118
119
120 # Name:        yesno
121 # Arguments:   Question
122 # Description: Asks a yes/no Question, returns 1 for yes, 0 for no
123 yesno() {
124   IN=""
125   until [ -n "$IN" ] ; do
126     read -p "${@} " IN
127     case "$IN" in
128       y|Y|yes|YES)  return 1;;
129       n|N|no|NO)    return 0;;
130       *)            IN="";;
131     esac
132   done
133 }
134
135
136 # Name:        error
137 # Arguments:   Message
138 # Description: Displays FAILED followed by Message
139   error() {
140   echo "FAILED"
141   log "ERROR: ${@}"
142   echo "$@"
143   echo
144   echo "Please paste the contents of ${LOG} to http://webos.pastebin.com/"
145   echo "and seek help in the IRC channel #webos-internals."
146   echo
147   echo "To view ${LOG}, type:"
148   echo
149   echo "cat ${LOG}"
150   echo
151   echo
152   return 1
153 }
154
155 ### END FUNCTIONS
156
157 say "Starting installation..."
158
159 case $RELNAME in
160
161    "Unknown"|"RedHat"|"Debian")
162        say "Your OS is not supported.  Please run on Ubuntu (Hardy, Intrepid, Jaunty, or Karmic) or Fedora Linux."
163        ;;
164    "Fedora")
165        say "You are running Fedora Linux."
166        ;;
167    "hardy"|"intrepid"|"jaunty"|"karmic")
168        say "You are running Ubuntu Linux."
169        ;;
170 esac
171
172 echo "This is early pre-release software.  Do not run this unless you are fully prepared to deal with the consequences."
173 yesno "Is this okay with you?"
174 if [ "$?" -eq 0 ] ; then
175     say "I think saying 'no' was probably the correct thing to do."
176     exit 0
177 fi
178
179 # This early release does not yet check to see what steps are completed.  This is coming soon.
180 # This early release assumes it can download files to the cwd.  This needs to change before the release.
181
182 # TODO: basic connectivity/DNS checks here
183
184 # TODO: create / find appropriate temporary/working directory
185 # Until then, just use "~/Downloads"
186 DOWNLOAD_DIR="$HOME/Downloads"
187 mkdir -p $DOWNLOAD_DIR
188
189 # TODO: Check for Java
190 JAVA_IN_PATH=`which java`
191 JAVA_VER=""
192
193 if [ "$JAVA_IN_PATH" != "" ]; then
194     JAVA_VER=`java -version 2>&1 | head -1 | grep -o "1.6."`
195 fi
196
197 if [ "$JAVA_VER" != "1.6." ]; then
198     say "You don't have JDK 1.6 installed.  Installing ..."
199 else
200     say "Suitable Java 1.6 environment found."
201 fi
202
203 # TODO: Install Java (if required)
204
205 # TODO: Check for ia32-libs
206
207 # TODO: Install ia32-libs (if reqiured)
208
209 if [ "$ARCH" == "x86_64" ]; then
210    NOVA_FILE=$NOVA_64
211    NOVA_URL=$NOVA_64_URL
212    NOVA_MD5=$NOVA_64_MD5
213 else
214    NOVA_FILE=$NOVA_32
215    NOVA_URL=$NOVA_32_URL
216    NOVA_MD5=$NOVA_32_MD5
217 fi
218
219 if [ -f $DOWNLOAD_DIR/$NOVA_FILE ]; then
220    MD5_TEST=`md5sum $DOWNLOAD_DIR/$NOVA_FILE | awk '{print $1}'`
221    if [ "$NOVA_MD5" == "$MD5_TEST" ]; then
222        say "Novacom is already downloaded."
223        NOVA_URL=""
224    else
225        say "Partial download detected.  Removing ...."
226        rm -f $DOWNLOAD_DIR/$NOVA_FILE
227    fi
228 fi
229
230 if [ "$NOVA_URL" != "" ]; then
231     pushd $DOWNLOAD_DIR > /dev/null
232     say "Downloading $NOVA_FILE to $DOWNLOAD_DIR"
233     wget $NOVA_URL
234     popd > /dev/null
235 fi
236
237 # TODO: write a "download if needed" function so this code isn't copied twice
238
239 if [ -f $DOWNLOAD_DIR/$PALM_SDK ]; then
240    MD5_TEST=`md5sum $DOWNLOAD_DIR/$PALM_SDK | awk '{print $1}'`
241    if [ "$PALM_SDK_MD5" == "$MD5_TEST" ]; then
242        say "Palm SDK is already downloaded."
243        PALM_SDK_URL=""
244    else
245        say "Partial download detected.  Removing ...."
246        rm -f $DOWNLOAD_DIR/$PALM_SDK
247    fi
248 fi
249
250 if [ "$PALM_SDK_URL" != "" ]; then
251     pushd $DOWNLOAD_DIR > /dev/null
252     say "Downloading $PALM_SDK_FILE to $DOWNLOAD_DIR"
253     wget $PALM_SDK_URL
254     popd > /dev/null
255 fi
256
257 say "Setup Complete!"
258 echo