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

Revision 25106, 12.6 KB checked in by geofft, 13 years ago (diff)
install-debathena: Prefer openafs-modules-dkms to our modules (Trac: #243)
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
[24912]30    [ Y = "$answer" ] && answer=y
31    [ N = "$answer" ] && answer=n
[23093]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 ""
[24937]84echo "Note: This package may include software with additional license terms."
85echo "      By installing it, you are agreeing to the terms of these licenses."
86echo "      For more information, please see http://debathena.mit.edu/licensing"
[23872]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
[24903]112  # Divert the default background and install our own so that failed machines
113  # are more conspicuous
114  echo "Diverting default background..."
115  bgimage=/usr/share/backgrounds/warty-final-ubuntu.png
116  divertedbg=no
117  if dpkg-divert --divert ${bgimage}.debathena --rename $bgimage; then
118      divertedbg=yes
119      if ! wget -N -O $bgimage http://debathena.mit.edu/error-background.png; then
120          echo "Hrm, that didn't work.  Oh well..."
121          dpkg-divert --rename --remove $bgimage
122          divertedbg=no
123      fi
124  fi
125
[23460]126  # Setup for package installs in a chrooted immediately-postinstall environment.
127  echo "Setting locale."
128  export LANG
129  . /etc/default/locale
130  echo "LANG set to $LANG."
131  echo "Mounting /proc."
132  mount /proc 2> /dev/null || :
133  # Clear toxic environment settings inherited from the installer.
134  unset DEBCONF_REDIR
135  unset DEBIAN_HAS_FRONTEND
[23476]136  if [ cluster = "$pxetype" ] ; then
137    # Network, LVM, and display config that's specific to PXE cluster installs.
138    # If someone is installing -cluster on an already-installed machine, it's
139    # assumed that this config has already happened and shouldn't be stomped on.
[23093]140
[23479]141    # Configure network based on the preseed file settings, if present.
[23867]142    if test -f /root/debathena.preseed ; then
[23479]143      # Switch to canonical hostname.
144      ohostname=`cat /etc/hostname`
145      # Hack to avoid installing debconf-get for just this.
[23875]146      ipaddr=`grep netcfg/get_ipaddress /root/debathena.preseed|sed -e 's/.* //'`
147      netmask=`grep netcfg/get_netmask /root/debathena.preseed|sed -e 's/.* //'`
148      gateway=`grep netcfg/get_gateway /root/debathena.preseed|sed -e 's/.* //'`
[23479]149
150      hostname=`host $ipaddr | \
[23476]151          sed 's#^.*domain name pointer \(.*\)$#\1#' | sed 's;\.*$;;' | \
152          tr '[A-Z]' '[a-z]'`
[23479]153      if echo $hostname|grep -q "not found" ; then
154        hostname=""
155        printf "\a"; sleep 1 ; printf "\a"; sleep 1 ;printf "\a"
156        echo "The IP address you selected, $ipaddr, does not have an associated"
157        echo "hostname.  Please confirm that you're using the correct address."
158        while [ -z "$hostname" ] ; do
159          echo -n "Enter fully qualified hostname [no default]: "
160          read hostname
161        done
162      fi
163      echo ${hostname%%.*} > /etc/hostname
164      sed -e 's/\(127\.0\.1\.1[         ]*\).*/\1'"$hostname ${hostname%%.*}/" < /etc/hosts > /etc/hosts.new
165      mv -f /etc/hosts.new /etc/hosts
166      if grep -q dhcp /etc/network/interfaces ; then
167        sed -e s/dhcp/static/ < /etc/network/interfaces > /etc/network/interfaces.new
168        echo "  address $ipaddr" >> /etc/network/interfaces.new
169        echo "  netmask $netmask" >> /etc/network/interfaces.new
170        echo "  gateway $gateway" >> /etc/network/interfaces.new
[23923]171        echo "  dns-nameservers 18.72.0.3 18.70.0.160 18.71.0.151" >> /etc/network/interfaces.new
[23479]172        mv -f /etc/network/interfaces.new /etc/network/interfaces
173      fi
174      hostname ${hostname%%.*}
[23476]175    fi
[23479]176
[23476]177    # Free up designated LVM overhead.
[23867]178    lvremove -f /dev/athena/keep_2 || :
[23476]179
[23460]180  fi
181else
182  output "Press return to begin or control-C to abort"
183  read dummy
184fi
185
[24925]186apt-get update
187
188output "Verifying machine is up to date..."
189pattern='^0 upgraded, 0 newly installed, 0 to remove'
190if ! apt-get --simulate --assume-yes dist-upgrade | grep -q "$pattern"; then
[24958]191    if [ -n "$pxetype" ] ; then
192        output "Forcing an upgrade"
193        apt-get --assume-yes dist-upgrade
194    else
195        error "Your system is not up to date.  Proceeding with an install at"
196        error "this time could render your system unusable."
197        error "Please run 'apt-get dist-upgrade' as root or use the GUI update"
198        error "manager to ensure your system is up to date before continuing."
199        exit 1
200    fi
[24925]201fi
202
[24891]203if ! hash aptitude >/dev/null 2>&1; then
204  output "Installing Debathena installer dependency: aptitude"
205  apt-get -y install aptitude
206fi
207
[24791]208output "Installing Debathena installer dependencies: lsb-release, wget, and dnsutils"
209aptitude -y install lsb-release wget dnsutils
[24786]210if [ yes = "$resolvconfhack" ]; then
211  output "Installing resolvconf ahead of time"
212  aptitude -y install resolvconf
213fi
[23093]214distro=`lsb_release -cs`
215case $distro in
[24326]216lenny|squeeze)
[23093]217  ;;
[24898]218hardy|intrepid|jaunty|karmic|lucid|maverick)
[23093]219  ubuntu=yes
220  ;;
221*)
[24897]222  error "Your machine seems to not be running a supported Debian/Ubuntu release."
223  error "(New releases may not be supported immediately after their release)."
224  error "If you believe you are running a supported release, contact debathena@mit.edu"
[23492]225  exit 1
[23093]226  ;;
227esac
228
[25106]229if aptitude show openafs-modules-dkms > /dev/null; then
230  openafs_component=" openafs"
231  modules="openafs-modules-dkms"
232fi
233
[23492]234output "Adding the Debathena repository to the apt sources"
235output "(This may cause the update manager to claim new upgrades are available."
236output "Ignore them until this script is complete.)"
[24472]237sourceslist=/etc/apt/sources.list.d/debathena.list
[24791]238clustersourceslist=/etc/apt/sources.list.d/debathena.clusterinfo.list
239if [ -z "$hostname" ] ; then hostname=`hostname` ; fi
240hescluster=$(dig +short +bufsize=2048 ${hostname}.cluster.ns.athena.mit.edu TXT \
241    |sed -e 's/"$//' -ne 's/^"apt_release //p') || hescluster=""
[23093]242
243if [ ! -e "$sourceslist" ] || ! grep -q debathena "$sourceslist"; then
244  if [ -e "$sourceslist" ]; then
245    echo "" >> $sourceslist
246  fi
[25106]247  echo "deb http://debathena.mit.edu/apt $distro debathena debathena-config debathena-system$openafs_component" >> $sourceslist
248  echo "deb-src http://debathena.mit.edu/apt $distro debathena debathena-config debathena-system$openafs_component" >> $sourceslist
[23093]249fi
250
[24765]251if [ development = "$hescluster" -o proposed = "$hescluster" ] ; then
252  echo "Adding $distro-proposed apt repository."
[24791]253  echo "# This file is automatically updated by debathena-auto-update" >> $clustersourceslist
254  echo "# based on your Hesiod cluster information. If you want to" >> $clustersourceslist
255  echo "# make changes, do so in another file." >> $clustersourceslist
256  echo "" >> $clustersourceslist
257
[25106]258  echo "deb http://debathena.mit.edu/apt $distro-proposed debathena debathena-config debathena-system$openafs_component" >> $clustersourceslist
259  echo "deb-src http://debathena.mit.edu/apt $distro-proposed debathena debathena-config debathena-system$openafs_component" >> $clustersourceslist
[24765]260fi
261
262if [ development = "$hescluster" ] ; then
263  echo "Adding $distro-development apt repository."
[25106]264  echo "deb http://debathena.mit.edu/apt $distro-development debathena debathena-config debathena-system$openafs_component" >> $clustersourceslist
265  echo "deb-src http://debathena.mit.edu/apt $distro-development debathena debathena-config debathena-system$openafs_component" >> $clustersourceslist
[24765]266fi
267
[23093]268if [ "$ubuntu" = "yes" ]; then
269  output "Making sure the universe repository is enabled"
270  sed -i 's,^# \(deb\(\-src\)* http://archive.ubuntu.com/ubuntu [[:alnum:]]* universe\)$,\1,' /etc/apt/sources.list
271fi
272
[23492]273output "Downloading the Debathena archive signing key"
[23831]274if ! wget -N http://debathena.mit.edu/apt/debathena-archive-keyring.asc ; then
[23492]275  error "Download failed; terminating."
[23093]276  exit 1
277fi
[24334]278echo "fa787714d1ea439c28458aab64962f755e2bdee7a3520919a72b641458757fa3586fd269cc1dae8d99047e00b3df88db0826f0c99a1f5a8771618b3c0be8e3bd  ./debathena-archive-keyring.asc" | \
279  sha512sum -c
[23500]280apt-key add debathena-archive-keyring.asc
281rm ./debathena-archive-keyring.asc
[23093]282
283apt-get update
284
[25106]285if [ -z "$modules" ]; then
286  modules_want=$(dpkg-query -W -f '${Source}\t${Package}\n' 'linux-image-*' | \
287   sed -nre 's/^linux-(meta|latest[^\t]*)\tlinux-image-(.*)$/openafs-modules-\2/p')
288  modules=
289  for m in $modules_want; do
290    aptitude show $m > /dev/null && modules="$modules $m"
291  done
292fi
[23093]293
294if [ -z "$modules" ]; then
295  error "An OpenAFS modules metapackage for your kernel is not available."
[23492]296  error "Please use the manual installation instructions at"
[23957]297  error "http://debathena.mit.edu/install"
[23492]298  error "You will need to compile your own AFS modules as described at:"
[23957]299  error "http://debathena.mit.edu/troubleshooting#openafs-custom"
[23492]300  exit 1
[23093]301fi
302
303output "Installing OpenAFS kernel metapackage"
304apt-get -y install $modules
305
[23187]306# Use the noninteractive frontend to install the main package.  This
307# is so that AFS and Zephyr don't ask questions of the user which
308# debathena packages will later stomp on anyway.
[23492]309output "Installing main Debathena metapackage $mainpackage"
[23460]310
[23187]311DEBIAN_FRONTEND=noninteractive aptitude -y install "$mainpackage"
312
313# Use the default front end and allow questions to be asked; otherwise
314# Java will fail to install since it has to present its license.
315if [ yes = "$csoft" ]; then
[23247]316  output "Installing debathena-extra-software"
317  DEBIAN_PRIORITY=critical aptitude -y install debathena-extra-software
[23187]318fi
[23460]319if [ yes = "$tsoft" ]; then
320  output "Installing debathena-thirdparty"
321  DEBIAN_PRIORITY=critical aptitude -y install debathena-thirdparty
322fi
[23910]323
324# Post-install cleanup for cluster systems.
[24903]325if [ "$divertedbg" = "yes" ]; then
326    rm -f $bgimage
327    if ! dpkg-divert --rename --remove $bgimage; then
328        echo "Failed to remove diversion of background.  You probably don't care."
329    fi
330fi
331
[23910]332if [ cluster = "$category" ] ; then
333  # Force an /etc/adjtime entry so there's no confusion about whether the
334  # hardware clock is UTC or local.
335  echo "Setting hardware clock to UTC."
336  hwclock --systohc --utc
337fi
Note: See TracBrowser for help on using the repository browser.