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