novaterm-bootstrap: added Ubuntu 'Lucid' support to v0.2
[webos-internals:bootstrap.git] / novaterm-bootstrap.sh
1 #!/bin/bash
2
3 # novaterm-bootstrap.sh
4 # version 0.2
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, Karmic, and Lucid) or Fedora box
19 # 2. Download novacom (if required)
20 # 3. Install novacom (if required)
21
22 # Additional Thoughts:
23 # 1. Detect and report if a Pre is connected via USB but is either:
24 #      a) in disk mode
25 #      b) not in developer mode
26 #
27 # 2. Should this script also install/configure mobi.optware.openssh for them?
28 #
29 # 3. Where to put the downloads?  My thoughts are:
30 #       1) $BOOTSTRAP_DL_DIR (if it exists)
31 #       2) ~/Downloads/ (if it exists)
32 #       3) ~/.novacom-bootstrap/
33 #
34 #    Regardless of where the files go, it should clearly tell the user where they're ending up.
35 #
36 # 4. This script will need root priv's at some point.  I'm thinking about requiring the script to
37 #    run as root, but it will run as much as it can without root priv's.  Still thinking about this one ...
38 #
39 # Changelog:
40 #
41 # 0.0.1 Initial skeleton, no usable functionality
42 # 0.0.2 Added Linux version detection
43 # 0.0.3 Cleaned up and fleshed out skeleton.  Added hard-coded file downloads.
44 # 0.0.4 Added support to re-use downloaded files if they exist.
45 # 0.0.5 Initial Java environment tests
46 # 0.0.6 Added "don't run as root" and sudo check, Java install on Fedora and Ubuntu
47 # 0.0.7 THE SHAME RELEASE -- realized that the SDK and Java are not required for novacom, removed that code
48 # 0.1   First alpha release with basic functionality complete
49 # 0.2   Added support for Ubuntu Lucid
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|Lucid" /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 # TODO: 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
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
94 # TODO: If we're scraping URLs, these MD5s will have to be optional
95 NOVA_32_MD5="69be6d7c6806f32b47a1e7794ea26ad8"
96 NOVA_64_MD5="04d6b299b1c7236eb947f5e41299c775"
97
98 ### END of VARIABLES
99
100 ### FUNCTIONS
101
102 # Name:        say
103 # Arguments:   Message
104 # Description: echoes message to the console and then logs message
105 say() {
106   echo "$@"
107   log "$@"
108 }
109
110 # Name:        log
111 # Arguments:   Message
112 # Description: logs Message to $LOG
113 log() {
114   echo "$@" >> $LOG
115   if [ "$?" -ne 0 ]; then
116      echo "Cannot write to ${LOG} -- script aborting."
117      exit 50
118   fi
119 }
120
121
122 # Name:        yesno
123 # Arguments:   Question
124 # Description: Asks a yes/no Question, returns 1 for yes, 0 for no
125 yesno() {
126   IN=""
127   until [ -n "$IN" ] ; do
128     read -p "${@} " IN
129     case "$IN" in
130       y|Y|yes|YES)  return 1;;
131       n|N|no|NO)    return 0;;
132       *)            IN="";;
133     esac
134   done
135 }
136
137
138 # Name:        error
139 # Arguments:   Message
140 # Description: Displays FAILED followed by Message
141   error() {
142   echo "FAILED"
143   log "ERROR: ${@}"
144   echo "$@"
145   echo
146   echo "Please paste the contents of ${LOG} to http://webos.pastebin.com/"
147   echo "and seek help in the IRC channel #webos-internals."
148   echo
149   echo "To view ${LOG}, type:"
150   echo
151   echo "cat ${LOG}"
152   echo
153   echo
154   return 1
155 }
156
157 ### END FUNCTIONS
158
159 say "Starting installation..."
160
161 USER=`id -u`
162
163 if [ "$USER" == "0" ]; then
164     say "Please do not run this script as root.  Run as a user with sudo privileges."
165     exit 97
166 fi
167
168 say "Checking for sudo privileges.  If you are prompted for your password, that prompt is coming from the 'sudo' command, not this script."
169
170 sudo -v
171
172 if [ "$?" -ne 0 ]; then
173    say "Sudo check failed.   Script aborting."
174    exit 96
175 fi
176
177 case $RELNAME in
178
179    "Unknown"|"RedHat"|"Debian")
180        say "Your OS is not supported.  Please run on Ubuntu (Hardy, Intrepid, Jaunty, or Karmic) or Fedora Linux."
181        ;;
182    "Fedora")
183        say "You are running Fedora Linux."
184        ;;
185    "hardy"|"intrepid"|"jaunty"|"karmic")
186        say "You are running Ubuntu Linux."
187        ;;
188 esac
189
190 echo "This is early pre-release software.  Do not run this unless you are fully prepared to deal with the consequences."
191 yesno "Is this okay with you?"
192 if [ "$?" -eq 0 ] ; then
193     say "I think saying 'no' was probably the correct thing to do."
194     exit 0
195 fi
196
197 # This early release does not yet check to see what steps are completed.  This is coming soon.
198
199 # TODO: basic connectivity/DNS checks here
200
201 NET_TEST=`dig +short www.webos-internals.org`
202
203 if [ "$?" -ne 0 ]; then
204    say "Could not verify Internet connectivity.  Please make sure you are connected to the Internet and that DNS is working."
205    exit 81
206 fi
207
208 if [ "$NET_TEST" = "" ]; then
209    say "Could not resolve www.webos-internals.org.  Please make sure you are connected to the Internet and that DNS is working."
210    exit 80
211 fi
212
213 # TODO: create / find appropriate temporary/working directory
214 # Until then, just use "~/Downloads"
215 DOWNLOAD_DIR="$HOME/Downloads"
216 mkdir -p $DOWNLOAD_DIR
217
218 # Download Novacom (if needed)
219 if [ "$ARCH" == "x86_64" ]; then
220    NOVA_FILE=$NOVA_64
221    NOVA_URL=$NOVA_64_URL
222    NOVA_MD5=$NOVA_64_MD5
223 else
224    NOVA_FILE=$NOVA_32
225    NOVA_URL=$NOVA_32_URL
226    NOVA_MD5=$NOVA_32_MD5
227 fi
228
229 # TODO: detect if novacomd is already installed.  This shouldn't be strictly necessary, as
230 # why would someone run this script if it is already installed -- but you would be
231 # surprised what people are capable of.
232
233 if [ -f $DOWNLOAD_DIR/$NOVA_FILE ]; then
234    MD5_TEST=`md5sum $DOWNLOAD_DIR/$NOVA_FILE | awk '{print $1}'`
235    if [ "$NOVA_MD5" == "$MD5_TEST" ]; then
236        say "Novacom is already downloaded."
237        NOVA_URL=""
238    else
239        say "Partial download detected.  Removing ...."
240        rm -f $DOWNLOAD_DIR/$NOVA_FILE
241    fi
242 fi
243
244 if [ "$NOVA_URL" != "" ]; then
245     pushd $DOWNLOAD_DIR > /dev/null
246     say "Downloading $NOVA_FILE to $DOWNLOAD_DIR"
247     wget $NOVA_URL
248     if [ "$?" -ne 0 ]; then
249         say "Failed downloading novacom.  Script aborting."
250         exit 40
251     fi
252     popd > /dev/null
253 fi
254
255 # Install novacom
256 if [ "$RELNAME" == "Fedora" ]; then
257     TMPDIR=`mktmp -d`
258     pushd $TMPDIR > /dev/null
259     ln -s $DOWNLOAD_DIR/$NOVA_FILE .
260     ar xv $NOVA_FILE
261     tar xzf data.tar.gz
262     sudo mv opt/Palm /opt/.
263     sudo mv usr/local/bin/* /usr/local/bin/.
264     sudo mv usr/share/doc/palm-novacom /usr/share/doc/.
265
266     tar zxf control.tar.gz
267
268     ./postinst
269
270     rm -fr debian-binary data.tar.gz control.tar.gz opt/ usr/ control md5sums postinst prerm
271
272     popd > /dev/null
273 else
274     # TODO: It has been reported that the init/upstart scripts in novacom are broken for some/all Ubuntu flavors.  
275     #    Verify whether or not this is true and fix.
276     sudo dpkg -i $DOWNLOAD_DIR/$NOVA_FILE
277 fi
278
279 say "Setup Complete!"
280 echo