source: trunk/debathena/scripts/installer/install-debathena.sh @ 24898

Revision 24898, 11.1 KB checked in by geofft, 14 years ago (diff)
install-debathena.sh: Add Maverick.
Line 
1#!/bin/sh
2# Athena installer script.
3# Maintainer: debathena@mit.edu
4# Based on original Debathena installer script by: Tim Abbott <tabbott@mit.edu>
5
6# Download this to a Debian or Ubuntu machine and run it as root.  It can
7# be downloaded with:
8#   wget -N http://debathena.mit.edu/install-debathena.sh
9
10set -e
11
12# If we run with the noninteractive frontend, mark Debconf questions as
13# seen, so you don't see all the suppressed questions next time you
14# upgrade that package, or worse, upgrade releases.
15export DEBCONF_NONINTERACTIVE_SEEN=true
16
17output() {
18  printf '\033[38m'; echo "$@"; printf '\033[0m'
19}
20
21error() {
22  printf '\033[31m'; echo "$@"; printf '\033[0m'
23}
24
25ask() {
26  answer=''
27  while [ y != "$answer" -a n != "$answer" ]; do
28    printf '\033[38m'; echo -n "$1"; printf '\033[0m'
29    read answer
30    [ Y = answer ] && answer=y
31    [ N = answer ] && answer=n
32    [ -z "$answer" ] && answer=$2
33  done
34  output ""
35}
36
37if [ `id -u` != "0" ]; then
38  error "You must run the Debathena installer as root."
39  if [ -x /usr/bin/sudo ]; then
40    error "Try running 'sudo $0'."
41  fi
42  exit 1
43fi
44
45echo "Welcome to the Debathena installer."
46echo ""
47echo "Please choose the category which best suits your needs.  Each category"
48echo "in this list includes the functionality of the previous ones.  See the"
49echo "documentation at http://debathena.mit.edu for more information."
50echo ""
51echo "  standard:        Athena client software and customizations"
52echo "                   Recommended for laptops and single-user computers."
53echo "  login:           Allow Athena accounts to log into your machine"
54echo "                   Recommended for private remote-access servers."
55echo "  login-graphical: Athena graphical login customizations"
56echo "                   Recommended for private multi-user desktops."
57echo "  workstation:     Graphical workstation with automatic updates"
58echo "                   Recommended for auto-managed cluster-like systems."
59echo ""
60
61category=""
62if test -f /root/pxe-install-flag ; then
63  pxetype=`head -1 /root/pxe-install-flag`
64  if [ cluster = "$pxetype" ] ; then
65    category=cluster ;
66    echo "PXE cluster install detected, so installing \"cluster\"."
67  fi
68fi
69while [ standard != "$category" -a login != "$category" -a \
70        login-graphical != "$category" -a workstation != "$category" -a \
71        cluster != "$category" ]; do
72  output -n "Please choose a category or press control-C to abort: "
73  read category
74done
75mainpackage=debathena-$category
76
77csoft=no
78tsoft=no
79resolvconfhack=no
80echo "The extra-software package installs a standard set of software"
81echo "determined to be of interest to MIT users, such as LaTeX.  It is pretty"
82echo "big (several gigabytes, possibly more)."
83echo ""
84echo "Note: by installing this package, you hereby agree with the license terms at:"
85echo "  <http://dlc.sun.com/dlj/DLJ-v1.1.txt> Sun's Operating System Distributor"
86echo "  License for Java version 1.1."
87echo ""
88if [ cluster = $category -o workstation = $category ] ; then
89  # See Trac #648 and LP:471975
90  resolvconfhack=yes
91  echo "The extra-software package is required for '$category' and will be installed."
92  csoft=yes
93  # Not setting tsoft=yes here; -cluster will pull it in anyway.
94else
95  ask "Do you want the extra-software package [y/N]? " n
96  if [ y = "$answer" ]; then
97    csoft=yes
98  fi
99fi
100if [ yes = "$csoft" ]; then
101    # Preseed an answer to the java license query, which license was already accepted
102    # at install time:
103    echo "sun-java6-bin shared/accepted-sun-dlj-v1-1 boolean true" |debconf-set-selections
104fi
105
106echo "A summary of your choices:"
107echo "  Category: $category"
108echo "  Extra-software package: $csoft"
109echo "  Third-party software package: $tsoft"
110echo ""
111if [ "$pxetype" ] ; then
112  # Setup for package installs in a chrooted immediately-postinstall environment.
113  echo "Setting locale."
114  export LANG
115  . /etc/default/locale
116  echo "LANG set to $LANG."
117  echo "Mounting /proc."
118  mount /proc 2> /dev/null || :
119  # Clear toxic environment settings inherited from the installer.
120  unset DEBCONF_REDIR
121  unset DEBIAN_HAS_FRONTEND
122  if [ cluster = "$pxetype" ] ; then
123    # Network, LVM, and display config that's specific to PXE cluster installs.
124    # If someone is installing -cluster on an already-installed machine, it's
125    # assumed that this config has already happened and shouldn't be stomped on.
126
127    # Configure network based on the preseed file settings, if present.
128    if test -f /root/debathena.preseed ; then
129      # Switch to canonical hostname.
130      ohostname=`cat /etc/hostname`
131      # Hack to avoid installing debconf-get for just this.
132      ipaddr=`grep netcfg/get_ipaddress /root/debathena.preseed|sed -e 's/.* //'`
133      netmask=`grep netcfg/get_netmask /root/debathena.preseed|sed -e 's/.* //'`
134      gateway=`grep netcfg/get_gateway /root/debathena.preseed|sed -e 's/.* //'`
135
136      hostname=`host $ipaddr | \
137          sed 's#^.*domain name pointer \(.*\)$#\1#' | sed 's;\.*$;;' | \
138          tr '[A-Z]' '[a-z]'`
139      if echo $hostname|grep -q "not found" ; then
140        hostname=""
141        printf "\a"; sleep 1 ; printf "\a"; sleep 1 ;printf "\a"
142        echo "The IP address you selected, $ipaddr, does not have an associated"
143        echo "hostname.  Please confirm that you're using the correct address."
144        while [ -z "$hostname" ] ; do
145          echo -n "Enter fully qualified hostname [no default]: "
146          read hostname
147        done
148      fi
149      echo ${hostname%%.*} > /etc/hostname
150      sed -e 's/\(127\.0\.1\.1[         ]*\).*/\1'"$hostname ${hostname%%.*}/" < /etc/hosts > /etc/hosts.new
151      mv -f /etc/hosts.new /etc/hosts
152      if grep -q dhcp /etc/network/interfaces ; then
153        sed -e s/dhcp/static/ < /etc/network/interfaces > /etc/network/interfaces.new
154        echo "  address $ipaddr" >> /etc/network/interfaces.new
155        echo "  netmask $netmask" >> /etc/network/interfaces.new
156        echo "  gateway $gateway" >> /etc/network/interfaces.new
157        echo "  dns-nameservers 18.72.0.3 18.70.0.160 18.71.0.151" >> /etc/network/interfaces.new
158        mv -f /etc/network/interfaces.new /etc/network/interfaces
159      fi
160      hostname ${hostname%%.*}
161    fi
162
163    # Free up designated LVM overhead.
164    lvremove -f /dev/athena/keep_2 || :
165
166  fi
167else
168  output "Press return to begin or control-C to abort"
169  read dummy
170fi
171
172if ! hash aptitude >/dev/null 2>&1; then
173  output "Installing Debathena installer dependency: aptitude"
174  apt-get -y install aptitude
175fi
176
177output "Installing Debathena installer dependencies: lsb-release, wget, and dnsutils"
178aptitude -y install lsb-release wget dnsutils
179if [ yes = "$resolvconfhack" ]; then
180  output "Installing resolvconf ahead of time"
181  aptitude -y install resolvconf
182fi
183distro=`lsb_release -cs`
184case $distro in
185lenny|squeeze)
186  ;;
187hardy|intrepid|jaunty|karmic|lucid|maverick)
188  ubuntu=yes
189  ;;
190*)
191  error "Your machine seems to not be running a supported Debian/Ubuntu release."
192  error "(New releases may not be supported immediately after their release)."
193  error "If you believe you are running a supported release, contact debathena@mit.edu"
194  exit 1
195  ;;
196esac
197
198output "Adding the Debathena repository to the apt sources"
199output "(This may cause the update manager to claim new upgrades are available."
200output "Ignore them until this script is complete.)"
201sourceslist=/etc/apt/sources.list.d/debathena.list
202clustersourceslist=/etc/apt/sources.list.d/debathena.clusterinfo.list
203if [ -z "$hostname" ] ; then hostname=`hostname` ; fi
204hescluster=$(dig +short +bufsize=2048 ${hostname}.cluster.ns.athena.mit.edu TXT \
205    |sed -e 's/"$//' -ne 's/^"apt_release //p') || hescluster=""
206
207if [ ! -e "$sourceslist" ] || ! grep -q debathena "$sourceslist"; then
208  if [ -e "$sourceslist" ]; then
209    echo "" >> $sourceslist
210  fi
211  echo "deb http://debathena.mit.edu/apt $distro debathena debathena-config debathena-system openafs" >> $sourceslist
212  echo "deb-src http://debathena.mit.edu/apt $distro debathena debathena-config debathena-system openafs" >> $sourceslist
213fi
214
215if [ development = "$hescluster" -o proposed = "$hescluster" ] ; then
216  echo "Adding $distro-proposed apt repository."
217  echo "# This file is automatically updated by debathena-auto-update" >> $clustersourceslist
218  echo "# based on your Hesiod cluster information. If you want to" >> $clustersourceslist
219  echo "# make changes, do so in another file." >> $clustersourceslist
220  echo "" >> $clustersourceslist
221
222  echo "deb http://debathena.mit.edu/apt $distro-proposed debathena debathena-config debathena-system openafs" >> $clustersourceslist
223  echo "deb-src http://debathena.mit.edu/apt $distro-proposed debathena debathena-config debathena-system openafs" >> $clustersourceslist
224fi
225
226if [ development = "$hescluster" ] ; then
227  echo "Adding $distro-development apt repository."
228  echo "deb http://debathena.mit.edu/apt $distro-development debathena debathena-config debathena-system openafs" >> $clustersourceslist
229  echo "deb-src http://debathena.mit.edu/apt $distro-development debathena debathena-config debathena-system openafs" >> $clustersourceslist
230fi
231
232if [ "$ubuntu" = "yes" ]; then
233  output "Making sure the universe repository is enabled"
234  sed -i 's,^# \(deb\(\-src\)* http://archive.ubuntu.com/ubuntu [[:alnum:]]* universe\)$,\1,' /etc/apt/sources.list
235fi
236
237output "Downloading the Debathena archive signing key"
238if ! wget -N http://debathena.mit.edu/apt/debathena-archive-keyring.asc ; then
239  error "Download failed; terminating."
240  exit 1
241fi
242echo "fa787714d1ea439c28458aab64962f755e2bdee7a3520919a72b641458757fa3586fd269cc1dae8d99047e00b3df88db0826f0c99a1f5a8771618b3c0be8e3bd  ./debathena-archive-keyring.asc" | \
243  sha512sum -c
244apt-key add debathena-archive-keyring.asc
245rm ./debathena-archive-keyring.asc
246
247apt-get update
248
249modules_want=$(dpkg-query -W -f '${Source}\t${Package}\n' 'linux-image-*' | \
250 sed -nre 's/^linux-(meta|latest[^\t]*)\tlinux-image-(.*)$/openafs-modules-\2/p')
251modules=
252for m in $modules_want; do
253  aptitude show $m > /dev/null && modules="$modules $m"
254done
255
256if [ -z "$modules" ]; then
257  error "An OpenAFS modules metapackage for your kernel is not available."
258  error "Please use the manual installation instructions at"
259  error "http://debathena.mit.edu/install"
260  error "You will need to compile your own AFS modules as described at:"
261  error "http://debathena.mit.edu/troubleshooting#openafs-custom"
262  exit 1
263fi
264
265output "Installing OpenAFS kernel metapackage"
266apt-get -y install $modules
267
268# Use the noninteractive frontend to install the main package.  This
269# is so that AFS and Zephyr don't ask questions of the user which
270# debathena packages will later stomp on anyway.
271output "Installing main Debathena metapackage $mainpackage"
272
273DEBIAN_FRONTEND=noninteractive aptitude -y install "$mainpackage"
274
275# Use the default front end and allow questions to be asked; otherwise
276# Java will fail to install since it has to present its license.
277if [ yes = "$csoft" ]; then
278  output "Installing debathena-extra-software"
279  DEBIAN_PRIORITY=critical aptitude -y install debathena-extra-software
280fi
281if [ yes = "$tsoft" ]; then
282  output "Installing debathena-thirdparty"
283  DEBIAN_PRIORITY=critical aptitude -y install debathena-thirdparty
284fi
285
286# Post-install cleanup for cluster systems.
287if [ cluster = "$category" ] ; then
288  # Force an /etc/adjtime entry so there's no confusion about whether the
289  # hardware clock is UTC or local.
290  echo "Setting hardware clock to UTC."
291  hwclock --systohc --utc
292fi
Note: See TracBrowser for help on using the repository browser.