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