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

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