Cleaned up and fleshed out skeleton. Added hard-coded file downloads.
[webos-internals:djcin7s-bootstrap.git] / novaterm-bootstrap.sh
1 #!/bin/bash
2
3 # novaterm-bootstrap.sh
4 # version 0.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, 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
49 ### VARIABLES
50
51 SCRIPTNAME="$(basename $0)"                
52 LOG=/tmp/${SCRIPTNAME}.log
53 ARCH=$(uname -m)
54 if [ "$ARCH" == "armv7l" ] ; then
55   echo "Do not run this on your Pre.  This script is for Ubuntu or Fedora Linux.  Aborting."
56   exit 99
57 elif [ "$ARCH" == "armv6l" ] ; then
58   echo "Do not run this on your Pixi.  This script is for Ubuntu or Fedora Linux.  Aborting."
59   exit 98
60 else    
61     # TODO: Detect emulator
62
63     # Make sure this is a Ubuntu or Fedora box
64     RELNAME="Unknown"
65
66     if [ -f /etc/lsb-release ] ; then
67         # Check /etc/lsb-release for Ubuntu
68         RELTEST=`egrep -io "Hardy|Intrepid|Jaunty|Karmic" /etc/lsb-release`
69         if [ "$RELTEST" == "" ]; then
70             RELNAME="Debian"
71         else
72             RELNAME="$RELTEST"
73         fi
74     elif [ -f /etc/redhat-release ] ; then
75         # Check /etc/redhat-release for Fedora
76         RELTEST=`grep -o Fedora /etc/redhat-release`
77         if [ "$RELTEST" == "" ]; then
78             RELNAME="RedHat"
79         else
80             RELNAME="Fedora"
81         fi
82     fi
83 fi
84
85 # These URLs need to be scraped from the Palm website instead of hard-coded here
86 NOVA_32="http://cdn.downloads.palm.com/sdkdownloads/1.4.1.427/sdkBinaries/palm-novacom_1.0.55_i386.deb"
87 NOVA_64="http://cdn.downloads.palm.com/sdkdownloads/1.4.1.427/sdkBinaries/palm-novacom_1.0.55_amd64.deb"
88 PALM_SDK="http://cdn.downloads.palm.com/sdkdownloads/1.4.1.427/sdkBinaries/palm-sdk_1.4.1-svn274946-sdk1436-pho427_i386.deb"
89
90 ### END of VARIABLES
91
92 ### FUNCTIONS
93
94 # Name:        log
95 # Arguments:   Message
96 # Description: logs Message to $LOG
97 log() {
98   echo "$@" >> $LOG
99 }
100
101
102 # Name:        yesno
103 # Arguments:   Question
104 # Description: Asks a yes/no Question, returns 1 for yes, 0 for no
105 yesno() {
106   IN=""
107   until [ -n "$IN" ] ; do
108     read -p "${@} " IN
109     case "$IN" in
110       y|Y|yes|YES)  return 1;;
111       n|N|no|NO)    return 0;;
112       *)            IN="";;
113     esac
114   done
115 }
116
117
118 # Name:        error
119 # Arguments:   Message
120 # Description: Displays FAILED followed by Message
121   error() {
122   echo "FAILED"
123   log "ERROR: ${@}"
124   echo "$@"
125   echo
126   echo "Please paste the contents of ${LOG} to http://webos.pastebin.com/"
127   echo "and seek help in the IRC channel #webos-internals."
128   echo
129   echo "To view ${LOG}, type:"
130   echo
131   echo "cat ${LOG}"
132   echo
133   echo
134   return 1
135 }
136
137 ### END FUNCTIONS
138
139 echo "Starting installation..."
140
141 case $RELNAME in
142
143    "Unknown"|"RedHat"|"Debian")
144        echo "Your OS is not supported.  Please run on Ubuntu (Hardy, Intrepid, Jaunty, or Karmic) or Fedora Linux."
145        ;;
146    "Fedora")
147        echo "You are running Fedora Linux."
148        ;;
149    "hardy"|"intrepid"|"jaunty"|"karmic")
150        echo "You are running Ubuntu Linux."
151        ;;
152 esac
153
154 echo "This is early pre-release software.  Do not run this unless you are fully prepared to deal with the consequences."
155 yesno "Is this okay with you?"
156 if [ "$?" -eq 0 ] ; then
157     echo "I think saying 'no' was probably the correct thing to do."
158     exit 0
159 fi
160
161 # This early release does not yet check to see what steps are completed.  This is coming soon.
162 # This early release assumes it can download files to the cwd.  This needs to change before the release.
163
164 # TODO: basic connectivity/DNS checks here
165
166 # TODO: create / find appropriate temporary/working directory
167
168 # TODO: Check for Java
169
170 # TODO: Install Java (if required)
171
172 # TODO: Check for ia32-libs
173
174 # TODO: Install ia32-libs (if reqiured)
175
176 if [ "$ARCH" == "x86_64" ]; then
177     wget $NOVA_64
178 else
179     wget $NOVA_32
180 fi
181
182 wget $PALM_SDK
183
184 echo "Setup Complete!"
185 echo