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.
RevLine 
[23093]1#!/bin/sh
[23946]2# Athena installer script.
[23476]3# Maintainer: debathena@mit.edu
[23492]4# Based on original Debathena installer script by: Tim Abbott <tabbott@mit.edu>
[23093]5
[23492]6# Download this to a Debian or Ubuntu machine and run it as root.  It can
[23093]7# be downloaded with:
[23831]8#   wget -N http://debathena.mit.edu/install-debathena.sh
[23093]9
10set -e
11
[23946]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
[23093]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
[23492]38  error "You must run the Debathena installer as root."
[24010]39  if [ -x /usr/bin/sudo ]; then
[24009]40    error "Try running 'sudo $0'."
41  fi
[23492]42  exit 1
[23093]43fi
44
[23492]45echo "Welcome to the Debathena installer."
[23093]46echo ""
[23604]47echo "Please choose the category which best suits your needs.  Each category"
[23093]48echo "in this list includes the functionality of the previous ones.  See the"
[23957]49echo "documentation at http://debathena.mit.edu for more information."
[23093]50echo ""
[23967]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."
[23678]55echo "  login-graphical: Athena graphical login customizations"
[23967]56echo "                   Recommended for private multi-user desktops."
57echo "  workstation:     Graphical workstation with automatic updates"
[23969]58echo "                   Recommended for auto-managed cluster-like systems."
[23093]59echo ""
60
[23476]61category=""
62if test -f /root/pxe-install-flag ; then
63  pxetype=`head -1 /root/pxe-install-flag`
64  if [ cluster = "$pxetype" ] ; then
[23492]65    category=cluster ;
[23476]66    echo "PXE cluster install detected, so installing \"cluster\"."
67  fi
68fi
[23135]69while [ standard != "$category" -a login != "$category" -a \
[23797]70        login-graphical != "$category" -a workstation != "$category" -a \
71        cluster != "$category" ]; do
[23093]72  output -n "Please choose a category or press control-C to abort: "
73  read category
74done
75mainpackage=debathena-$category
76
[23187]77csoft=no
[23460]78tsoft=no
[24786]79resolvconfhack=no
[23247]80echo "The extra-software package installs a standard set of software"
[23093]81echo "determined to be of interest to MIT users, such as LaTeX.  It is pretty"
[23247]82echo "big (several gigabytes, possibly more)."
[23093]83echo ""
[24358]84echo "Note: by installing this package, you hereby agree with the license terms at:"
[23872]85echo "  <http://dlc.sun.com/dlj/DLJ-v1.1.txt> Sun's Operating System Distributor"
86echo "  License for Java version 1.1."
87echo ""
[24358]88if [ cluster = $category -o workstation = $category ] ; then
[24786]89  # See Trac #648 and LP:471975
90  resolvconfhack=yes
[24358]91  echo "The extra-software package is required for '$category' and will be installed."
[23187]92  csoft=yes
[23469]93  # Not setting tsoft=yes here; -cluster will pull it in anyway.
[23460]94else
95  ask "Do you want the extra-software package [y/N]? " n
96  if [ y = "$answer" ]; then
97    csoft=yes
[23492]98  fi
[23093]99fi
[23876]100if [ yes = "$csoft" ]; then
[23872]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
[23093]105
106echo "A summary of your choices:"
[23187]107echo "  Category: $category"
[23247]108echo "  Extra-software package: $csoft"
[23460]109echo "  Third-party software package: $tsoft"
[23093]110echo ""
[23476]111if [ "$pxetype" ] ; then
[23460]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
[23476]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.
[23093]126
[23479]127    # Configure network based on the preseed file settings, if present.
[23867]128    if test -f /root/debathena.preseed ; then
[23479]129      # Switch to canonical hostname.
130      ohostname=`cat /etc/hostname`
131      # Hack to avoid installing debconf-get for just this.
[23875]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/.* //'`
[23479]135
136      hostname=`host $ipaddr | \
[23476]137          sed 's#^.*domain name pointer \(.*\)$#\1#' | sed 's;\.*$;;' | \
138          tr '[A-Z]' '[a-z]'`
[23479]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
[23923]157        echo "  dns-nameservers 18.72.0.3 18.70.0.160 18.71.0.151" >> /etc/network/interfaces.new
[23479]158        mv -f /etc/network/interfaces.new /etc/network/interfaces
159      fi
160      hostname ${hostname%%.*}
[23476]161    fi
[23479]162
[23476]163    # Free up designated LVM overhead.
[23867]164    lvremove -f /dev/athena/keep_2 || :
[23476]165
[23460]166  fi
167else
168  output "Press return to begin or control-C to abort"
169  read dummy
170fi
171
[24891]172if ! hash aptitude >/dev/null 2>&1; then
173  output "Installing Debathena installer dependency: aptitude"
174  apt-get -y install aptitude
175fi
176
[24791]177output "Installing Debathena installer dependencies: lsb-release, wget, and dnsutils"
178aptitude -y install lsb-release wget dnsutils
[24786]179if [ yes = "$resolvconfhack" ]; then
180  output "Installing resolvconf ahead of time"
181  aptitude -y install resolvconf
182fi
[23093]183distro=`lsb_release -cs`
184case $distro in
[24326]185lenny|squeeze)
[23093]186  ;;
[24898]187hardy|intrepid|jaunty|karmic|lucid|maverick)
[23093]188  ubuntu=yes
189  ;;
190*)
[24897]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"
[23492]194  exit 1
[23093]195  ;;
196esac
197
[23492]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.)"
[24472]201sourceslist=/etc/apt/sources.list.d/debathena.list
[24791]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=""
[23093]206
207if [ ! -e "$sourceslist" ] || ! grep -q debathena "$sourceslist"; then
208  if [ -e "$sourceslist" ]; then
209    echo "" >> $sourceslist
210  fi
[23517]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
[23093]213fi
214
[24765]215if [ development = "$hescluster" -o proposed = "$hescluster" ] ; then
216  echo "Adding $distro-proposed apt repository."
[24791]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
[24765]224fi
225
226if [ development = "$hescluster" ] ; then
227  echo "Adding $distro-development apt repository."
[24791]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
[24765]230fi
231
[23093]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
[23492]237output "Downloading the Debathena archive signing key"
[23831]238if ! wget -N http://debathena.mit.edu/apt/debathena-archive-keyring.asc ; then
[23492]239  error "Download failed; terminating."
[23093]240  exit 1
241fi
[24334]242echo "fa787714d1ea439c28458aab64962f755e2bdee7a3520919a72b641458757fa3586fd269cc1dae8d99047e00b3df88db0826f0c99a1f5a8771618b3c0be8e3bd  ./debathena-archive-keyring.asc" | \
243  sha512sum -c
[23500]244apt-key add debathena-archive-keyring.asc
245rm ./debathena-archive-keyring.asc
[23093]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."
[23492]258  error "Please use the manual installation instructions at"
[23957]259  error "http://debathena.mit.edu/install"
[23492]260  error "You will need to compile your own AFS modules as described at:"
[23957]261  error "http://debathena.mit.edu/troubleshooting#openafs-custom"
[23492]262  exit 1
[23093]263fi
264
265output "Installing OpenAFS kernel metapackage"
266apt-get -y install $modules
267
[23187]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.
[23492]271output "Installing main Debathena metapackage $mainpackage"
[23460]272
[23187]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
[23247]278  output "Installing debathena-extra-software"
279  DEBIAN_PRIORITY=critical aptitude -y install debathena-extra-software
[23187]280fi
[23460]281if [ yes = "$tsoft" ]; then
282  output "Installing debathena-thirdparty"
283  DEBIAN_PRIORITY=critical aptitude -y install debathena-thirdparty
284fi
[23910]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.