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

Revision 24925, 12.3 KB checked in by geofft, 13 years ago (diff)
install-debathena.sh: Really don't break Maverick (Trac: #755) The check needs to happen after we run apt-get update, since the issue at hand is with a system that all of a sudden tries to process new updates from Ubuntu. It also needs to happen before we install dnsutils, because that's where the first breakage is (see Debian #610845). So we move it earlier and run apt-get once again before we add our repo. However, now that it happens before aptitude is installed, we need to use apt-get for the check, since that's all we can count on existing. This updates r24922 "Don't break 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  # 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
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
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.
140
141    # Configure network based on the preseed file settings, if present.
142    if test -f /root/debathena.preseed ; then
143      # Switch to canonical hostname.
144      ohostname=`cat /etc/hostname`
145      # Hack to avoid installing debconf-get for just this.
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/.* //'`
149
150      hostname=`host $ipaddr | \
151          sed 's#^.*domain name pointer \(.*\)$#\1#' | sed 's;\.*$;;' | \
152          tr '[A-Z]' '[a-z]'`
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
171        echo "  dns-nameservers 18.72.0.3 18.70.0.160 18.71.0.151" >> /etc/network/interfaces.new
172        mv -f /etc/network/interfaces.new /etc/network/interfaces
173      fi
174      hostname ${hostname%%.*}
175    fi
176
177    # Free up designated LVM overhead.
178    lvremove -f /dev/athena/keep_2 || :
179
180  fi
181else
182  output "Press return to begin or control-C to abort"
183  read dummy
184fi
185
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
191     error "Your system is not up to date.  Proceeding with an install at"
192     error "this time could render your system unusable."
193     error "Please run 'aptitude full-upgrade' or use the GUI update manager"
194     error "to ensure your system is up to date before continuing."
195     exit 1
196fi
197
198if ! hash aptitude >/dev/null 2>&1; then
199  output "Installing Debathena installer dependency: aptitude"
200  apt-get -y install aptitude
201fi
202
203output "Installing Debathena installer dependencies: lsb-release, wget, and dnsutils"
204aptitude -y install lsb-release wget dnsutils
205if [ yes = "$resolvconfhack" ]; then
206  output "Installing resolvconf ahead of time"
207  aptitude -y install resolvconf
208fi
209distro=`lsb_release -cs`
210case $distro in
211lenny|squeeze)
212  ;;
213hardy|intrepid|jaunty|karmic|lucid|maverick)
214  ubuntu=yes
215  ;;
216*)
217  error "Your machine seems to not be running a supported Debian/Ubuntu release."
218  error "(New releases may not be supported immediately after their release)."
219  error "If you believe you are running a supported release, contact debathena@mit.edu"
220  exit 1
221  ;;
222esac
223
224output "Adding the Debathena repository to the apt sources"
225output "(This may cause the update manager to claim new upgrades are available."
226output "Ignore them until this script is complete.)"
227sourceslist=/etc/apt/sources.list.d/debathena.list
228clustersourceslist=/etc/apt/sources.list.d/debathena.clusterinfo.list
229if [ -z "$hostname" ] ; then hostname=`hostname` ; fi
230hescluster=$(dig +short +bufsize=2048 ${hostname}.cluster.ns.athena.mit.edu TXT \
231    |sed -e 's/"$//' -ne 's/^"apt_release //p') || hescluster=""
232
233if [ ! -e "$sourceslist" ] || ! grep -q debathena "$sourceslist"; then
234  if [ -e "$sourceslist" ]; then
235    echo "" >> $sourceslist
236  fi
237  echo "deb http://debathena.mit.edu/apt $distro debathena debathena-config debathena-system openafs" >> $sourceslist
238  echo "deb-src http://debathena.mit.edu/apt $distro debathena debathena-config debathena-system openafs" >> $sourceslist
239fi
240
241if [ development = "$hescluster" -o proposed = "$hescluster" ] ; then
242  echo "Adding $distro-proposed apt repository."
243  echo "# This file is automatically updated by debathena-auto-update" >> $clustersourceslist
244  echo "# based on your Hesiod cluster information. If you want to" >> $clustersourceslist
245  echo "# make changes, do so in another file." >> $clustersourceslist
246  echo "" >> $clustersourceslist
247
248  echo "deb http://debathena.mit.edu/apt $distro-proposed debathena debathena-config debathena-system openafs" >> $clustersourceslist
249  echo "deb-src http://debathena.mit.edu/apt $distro-proposed debathena debathena-config debathena-system openafs" >> $clustersourceslist
250fi
251
252if [ development = "$hescluster" ] ; then
253  echo "Adding $distro-development apt repository."
254  echo "deb http://debathena.mit.edu/apt $distro-development debathena debathena-config debathena-system openafs" >> $clustersourceslist
255  echo "deb-src http://debathena.mit.edu/apt $distro-development debathena debathena-config debathena-system openafs" >> $clustersourceslist
256fi
257
258if [ "$ubuntu" = "yes" ]; then
259  output "Making sure the universe repository is enabled"
260  sed -i 's,^# \(deb\(\-src\)* http://archive.ubuntu.com/ubuntu [[:alnum:]]* universe\)$,\1,' /etc/apt/sources.list
261fi
262
263output "Downloading the Debathena archive signing key"
264if ! wget -N http://debathena.mit.edu/apt/debathena-archive-keyring.asc ; then
265  error "Download failed; terminating."
266  exit 1
267fi
268echo "fa787714d1ea439c28458aab64962f755e2bdee7a3520919a72b641458757fa3586fd269cc1dae8d99047e00b3df88db0826f0c99a1f5a8771618b3c0be8e3bd  ./debathena-archive-keyring.asc" | \
269  sha512sum -c
270apt-key add debathena-archive-keyring.asc
271rm ./debathena-archive-keyring.asc
272
273apt-get update
274
275modules_want=$(dpkg-query -W -f '${Source}\t${Package}\n' 'linux-image-*' | \
276 sed -nre 's/^linux-(meta|latest[^\t]*)\tlinux-image-(.*)$/openafs-modules-\2/p')
277modules=
278for m in $modules_want; do
279  aptitude show $m > /dev/null && modules="$modules $m"
280done
281
282if [ -z "$modules" ]; then
283  error "An OpenAFS modules metapackage for your kernel is not available."
284  error "Please use the manual installation instructions at"
285  error "http://debathena.mit.edu/install"
286  error "You will need to compile your own AFS modules as described at:"
287  error "http://debathena.mit.edu/troubleshooting#openafs-custom"
288  exit 1
289fi
290
291output "Installing OpenAFS kernel metapackage"
292apt-get -y install $modules
293
294# Use the noninteractive frontend to install the main package.  This
295# is so that AFS and Zephyr don't ask questions of the user which
296# debathena packages will later stomp on anyway.
297output "Installing main Debathena metapackage $mainpackage"
298
299DEBIAN_FRONTEND=noninteractive aptitude -y install "$mainpackage"
300
301# Use the default front end and allow questions to be asked; otherwise
302# Java will fail to install since it has to present its license.
303if [ yes = "$csoft" ]; then
304  output "Installing debathena-extra-software"
305  DEBIAN_PRIORITY=critical aptitude -y install debathena-extra-software
306fi
307if [ yes = "$tsoft" ]; then
308  output "Installing debathena-thirdparty"
309  DEBIAN_PRIORITY=critical aptitude -y install debathena-thirdparty
310fi
311
312# Post-install cleanup for cluster systems.
313if [ "$divertedbg" = "yes" ]; then
314    rm -f $bgimage
315    if ! dpkg-divert --rename --remove $bgimage; then
316        echo "Failed to remove diversion of background.  You probably don't care."
317    fi
318fi
319
320if [ cluster = "$category" ] ; then
321  # Force an /etc/adjtime entry so there's no confusion about whether the
322  # hardware clock is UTC or local.
323  echo "Setting hardware clock to UTC."
324  hwclock --systohc --utc
325fi
Note: See TracBrowser for help on using the repository browser.