[28205] in Source-Commits
scripts commit: Support PXE installs of Trusty
daemon@ATHENA.MIT.EDU (Jonathan D Reed)
Tue May 13 14:43:35 2014
Date: Tue, 13 May 2014 14:43:28 -0400
From: Jonathan D Reed <jdreed@MIT.EDU>
Message-Id: <201405131843.s4DIhSaK013251@drugstore.mit.edu>
To: source-commits@MIT.EDU
https://github.com/mit-athena/scripts/commit/1ed8a07553137c40f5be1dddcbbea37dc6551cae
commit 1ed8a07553137c40f5be1dddcbbea37dc6551cae
Author: Jonathan Reed <jdreed@mit.edu>
Date: Tue May 13 13:42:05 2014 -0400
Support PXE installs of Trusty
Initial checkin of PXE support for Trusty. Configuration
is mostly identical to Raring and Precise, except that we
no longer need to exclude .svn from tarballs.
installer/pxe/trusty/Makefile | 11 +
installer/pxe/trusty/debathena-loader.sh | 13 +
installer/pxe/trusty/debathena.preseed | 4 +
installer/pxe/trusty/debathena/check-disks.sh | 29 +++
installer/pxe/trusty/debathena/installer.sh | 170 ++++++++++++++
.../trusty/debathena/lvm-cluster-machine.partman | 12 +
installer/pxe/trusty/debathena/postinstall.sh | 44 ++++
installer/pxe/trusty/debathena/preseed.autoinstall | 248 ++++++++++++++++++++
installer/pxe/trusty/debathena/preseed.common | 36 +++
9 files changed, 567 insertions(+), 0 deletions(-)
diff --git a/installer/pxe/trusty/Makefile b/installer/pxe/trusty/Makefile
new file mode 100644
index 0000000..0b68e87
--- /dev/null
+++ b/installer/pxe/trusty/Makefile
@@ -0,0 +1,11 @@
+# This is pretty dangerous in a bunch of ways. Approach with caution.
+d=/afs/athena.mit.edu/system/athena10/installer/trusty
+
+default:
+ : Use "make install" to move this from where the installer will fetch it.
+
+install: ${d}/debathena.tar.gz
+
+${d}/debathena.tar.gz: debathena.preseed debathena-loader.sh debathena
+ tar czvf ${d}/debathena.tar.gz --exclude "*~" debathena
+ cp debathena.preseed debathena-loader.sh ${d}
diff --git a/installer/pxe/trusty/debathena-loader.sh b/installer/pxe/trusty/debathena-loader.sh
new file mode 100644
index 0000000..0c0342b
--- /dev/null
+++ b/installer/pxe/trusty/debathena-loader.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+# This could probably all just go in the preseed file, but what a mess!
+# 18.9.60.73 = athena10.mit.edu (formerly 18.92.2.195)
+
+cd /
+wget http://18.9.60.73/installer/trusty/debathena.tar.gz > /dev/tty5 2>&1
+tar xzf debathena.tar.gz
+chvt 5
+sh debathena/installer.sh < /dev/tty5 > /dev/tty5 2>&1
+chvt 1
+# Pick up the generated preseed file (if any):
+echo file://debathena/preseed
diff --git a/installer/pxe/trusty/debathena.preseed b/installer/pxe/trusty/debathena.preseed
new file mode 100644
index 0000000..b2c205f
--- /dev/null
+++ b/installer/pxe/trusty/debathena.preseed
@@ -0,0 +1,4 @@
+# Minimal preseed, designed to just punt to our own network-based installer.
+# 18.92.2.195 = athena10.mit.edu
+# 18.9.60.73 = new athena10.mit.edu
+d-i preseed/include_command string wget -q http://18.9.60.73/installer/trusty/debathena-loader.sh ; sh debathena-loader.sh
diff --git a/installer/pxe/trusty/debathena/check-disks.sh b/installer/pxe/trusty/debathena/check-disks.sh
new file mode 100644
index 0000000..4f4a774
--- /dev/null
+++ b/installer/pxe/trusty/debathena/check-disks.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+#
+# This is run by d-i before the partman step (e.g. d-i partman/early_command)
+
+MIN_DISK_SIZE=20000000
+
+youlose() {
+ chvt 5
+ # Steal STDIN and STDOUT back from the installer
+ exec < /dev/tty5 > /dev/tty5 2>&1
+ echo ""
+ echo "****************************"
+ echo "ERROR: $@"
+ echo "Installation cannot proceed. Press any key to reboot."
+ read foo
+ echo "Rebooting, please wait..."
+ reboot
+}
+
+first_disk=`list-devices disk | head -n1`
+if ! echo "$first_disk" | grep -q ^/dev; then
+ youlose "No disks found."
+fi
+if [ "$(sfdisk -s "$first_disk")" -lt $MIN_DISK_SIZE ]; then
+ youlose "Your disk is too small ($(( $MIN_DISK_SIZE / 1000000)) GB required)."
+fi
+# Tell partman which disk to use
+debconf-set partman-auto/disk "$first_disk"
+exit 0
diff --git a/installer/pxe/trusty/debathena/installer.sh b/installer/pxe/trusty/debathena/installer.sh
new file mode 100644
index 0000000..53c559a
--- /dev/null
+++ b/installer/pxe/trusty/debathena/installer.sh
@@ -0,0 +1,170 @@
+#!/bin/sh
+
+# Sigh. check-missing-firmware is too stupid to reconfigure the NIC after
+# removing and reloading the module. So we lose network in the middle
+# of the install. The card works just fine without firmware, so we
+# just convince hwdetect and friends that there is no missing firmware.
+# NOTE: Although the nic-firmware udeb does not include the Realtek
+# firmware, shipping the firmware ourselves does not fix the problem,
+# because check-missing-firmware still insists on reloading the module
+# and we lose the network configuration.
+if grep -q "^Vostro 320" /sys/class/dmi/id/product_name || lsmod | grep -q r8169; then
+ # This will break if the firmware eventually wants to live somewhere else
+ # This is possibly a bad idea if there are r8169-based cards that do need
+ # firmware, but if they do, it's not likely they made it this far in the
+ # installation process.
+ rm -f /dev/.udev/firmware-missing/rtl_nic*
+fi
+
+cd /debathena
+
+touch preseed
+
+pxetype=""
+
+# Using debconf here will hang, so parse the command line manually.
+# old options:
+# debathena/clusterforce: implies pxetype=cluster, don't recheck net
+# debathena/clusteraddr: address to use with above
+# new options:
+# debathena/pxetype: could be cluster, but could be other things
+
+# support for clusteraddr is now removed.
+
+pxetype=`sed -e 's/ /\n/g' < /proc/cmdline | grep da/pxe= | sed -e 's/.*=//'`
+installertype=`sed -e 's/ /\n/g' < /proc/cmdline | grep da/i= | sed -e 's/.*=//'`
+mirrorsite=`sed -e 's/ /\n/g' < /proc/cmdline | grep da/m= | sed -e 's/.*=//'`
+partitioning=`sed -e 's/ /\n/g' < /proc/cmdline | grep da/part= | sed -e 's/.*=//'`
+nodhcp=`sed -e 's/ /\n/g' < /proc/cmdline | grep netcfg/disable_dhcp= | sed -e 's/.*=//'`
+
+
+echo "Picked up values from command line:
+pxetype=$pxetype
+installertype=$installertype
+mirrorsite=$mirrorsite"
+
+# Apply some sane defaults
+if [ -z "$installertype" ]; then installertype=production ; fi
+if [ -z "$mirrorsite" ]; then mirrorsite="mirrors.mit.edu" ; fi
+
+# Sanity check
+if [ -z "$pxetype" ]; then
+ echo "ERROR: No pxetype on the command line."
+ echo "Cannot proceed. Reboot now, please."
+ read dummy
+fi
+
+# Color strings. I'd like to use tput, but the installer doesn't have it.
+esc=""
+nnn="${esc}[m" # Normal
+ccc="${esc}[36m" # Cyan
+rrr="${esc}[1;31m" # Bold and red
+ddd="${esc}[1;31;47m" # Plus gray background
+ddb="${esc}[1;31;47;5m" # Plus blinking
+
+# OK, we can arrive at this point in the installer through two
+# ways: from the stage1 installer or from athena-auto-upgrade
+# Anything else is an error and will not be supported.
+# The stage1 installer takes care of sanity-checking networking
+# so if we have a DHCP address here, it's either valid, or we got here
+# from an old athena-auto-upgrade that doesn't do full networking.
+# The latter would imply a very old installation, and reinstallation
+# from scratch is recommended.
+
+# We're not running netconfig here, but install-debathena.sh still
+# uses the information from the preseed. So convert information from
+# the kernel command line to the preseed file format.
+if [ "$nodhcp" = true ]; then
+ sed "s/ /\n/g" < /proc/cmdline | grep "^netcfg" | sed -e "s/^/d-i /" -e "s/=/ string /" >> preseed
+fi
+
+# We're at a point in the install process where we can be fairly sure
+# that nothing else is happening, so "killall wget" should be safe.
+(sleep 5; killall wget >/dev/null 2>&1) &
+if wget --spider http://$mirrorsite/ubuntu ; then
+ if ip address show to 18.0.0.0/8 | grep -q . && ! ip address show to 18.2.0.0/16 | grep -q . ; then
+ echo "Network config checks out. Proceeding..."
+ else
+ echo "Your computer seems not to be registered on MITnet, but the mirror"
+ echo "site $mirrorsite is accessible. Continuing anyway."
+ fi
+else
+ echo "${rrr}The mirror site $mirrorsite is NOT accessible in your current"
+ echo "network configuration. Cannot continue."
+ echo "Reboot now."
+ read dummy
+fi
+
+# Perferred hostname of mirror site
+# We want this here even for vanilla installs
+cat >> preseed <<EOF
+d-i apt-setup/hostname string $mirrorsite
+d-i mirror/http/hostname string $mirrorsite
+d-i mirror/country string manual
+d-i mirror/http/directory string /ubuntu
+d-i mirror/http/proxy string
+EOF
+
+if [ vanilla = "$pxetype" ] ; then
+ echo "Starting normal Ubuntu install in five seconds."
+ sleep 5
+ exit 0
+fi
+
+if [ cluster = "$pxetype" ]; then
+ if [ "$partitioning" != "manual" ]; then
+ cat << EOF
+************************************************************
+ ${ddb}DESTROYS${nnn}
+${rrr}THIS PROCEDURE ${ddd}DESTROYS${nnn}${rrr} THE CONTENTS OF THE HARD DISK.${nnn}
+ ${ddb}DESTROYS${nnn}
+
+IF YOU DO NOT WISH TO CONTINUE, REBOOT NOW.
+
+************************************************************
+
+EOF
+ echo "Installing autoinstall preseed file."
+ egrep -v '(^$|^#)' < preseed.autoinstall >> preseed
+ else
+ echo "Installing autoinstall preseed file without automated partitioning."
+ egrep -v '(^$|^#|partman)' < preseed.autoinstall >> preseed
+ fi
+fi
+
+# Shovel in the generically useful preseed stuff regardless.
+egrep -v '(^$|^#)' < preseed.common >> preseed
+
+
+# This is used by the final installer step.
+# A hardcoded number is used as DNS may still be iffy.
+echo "Fetching Debathena postinstaller."
+# 18.92.2.195 = OLD athena10.mit.edu
+# 18.9.60.73 = NEW athena10.mit.edu
+if [ "$installertype" = "beta" ]; then
+ wget http://18.9.60.73/install-debathena.beta.sh
+ mv install-debathena.beta.sh install-debathena.sh
+else
+ wget http://18.9.60.73/install-debathena.sh
+fi
+
+# Start up a minimal athinfod
+wget http://18.9.60.73/installer/athinfod && chmod 755 athinfod && ./athinfod
+# Give said athinfod some basic info
+cat > install-info <<EOF
+pxetype=$pxetype
+installertype=$installertype
+partitioning=$partitioning
+mirrorsite=$mirrorsite
+EOF
+
+
+# Let the postinstall know what we are up to.
+echo "$pxetype" > pxe-install-flag
+
+echo "Initial Debathena installer complete; exiting preconfig to start main install."
+if [ "$pxetype" != "cluster" ] || [ "$installertype" = "beta" ]; then
+ echo "Hit return to continue."
+ read r
+fi
+exit 0
diff --git a/installer/pxe/trusty/debathena/lvm-cluster-machine.partman b/installer/pxe/trusty/debathena/lvm-cluster-machine.partman
new file mode 100644
index 0000000..f5abddc
--- /dev/null
+++ b/installer/pxe/trusty/debathena/lvm-cluster-machine.partman
@@ -0,0 +1,12 @@
+cluster ::
+
+10000 100000 1000000000 ext3
+ $primary{ } $bootable{ }
+ $lvmok{ }
+ use_filesystem{ } filesystem{ ext3 }
+ method{ format } format{ }
+ mountpoint{ / } .
+
+1000 300% 300% linux-swap
+ $lvmok{ }
+ method{ swap } format{ } .
diff --git a/installer/pxe/trusty/debathena/postinstall.sh b/installer/pxe/trusty/debathena/postinstall.sh
new file mode 100644
index 0000000..8952e9f
--- /dev/null
+++ b/installer/pxe/trusty/debathena/postinstall.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+# This is only invoked when the relevant preseed entry is passed in
+# during the preinstall questioning. (Thus, not for vanilla installs.)
+
+cp /debathena/preseed /target/root/debathena.preseed
+cp /debathena/install-debathena.sh /target/root
+if test -f /debathena/pxe-install-flag ; then
+ cp /debathena/pxe-install-flag /target/root/pxe-install-flag
+fi
+
+. /lib/chroot-setup.sh
+
+chroot /target dpkg-divert --rename --add /usr/sbin/policy-rc.d
+if ! chroot_setup; then
+ logger -t postinstall.sh -- "Target system not usable. Can't install Debathena."
+ exit 1
+fi
+
+chvt 5
+
+# Something like this approach was once said to fail due to lingering
+# processes keeping the pipeline open and the script hung. According to
+# trac#225 this doesn't happen any more.
+(chroot /target sh /root/install-debathena.sh < /dev/tty5 2>&1 \
+ && touch /debathena/install-succeeded) \
+ | chroot /target tee /var/log/athena-install.log > /dev/tty5
+
+if ! [ -e /debathena/install-succeeded ]; then
+ echo "WARNING: your debathena postinstall has returned an error;" > /dev/tty5
+ echo "see above for details." > /dev/tty5
+ echo > /dev/tty5
+ echo "This shell is provided for debugging purposes. When you exit" > /dev/tty5
+ echo "the shell, your system will reboot into the newly-installed" > /dev/tty5
+ echo "system, though depending on the failure you may see continuing issues." > /dev/tty5
+ /bin/sh < /dev/tty5 > /dev/tty5 2>&1
+fi
+
+sleep 5
+
+chroot_cleanup
+chroot /target dpkg-divert --rename --remove /usr/sbin/policy-rc.d
+
+chvt 1
diff --git a/installer/pxe/trusty/debathena/preseed b/installer/pxe/trusty/debathena/preseed
new file mode 100644
index 0000000..e69de29
diff --git a/installer/pxe/trusty/debathena/preseed.autoinstall b/installer/pxe/trusty/debathena/preseed.autoinstall
new file mode 100644
index 0000000..7138f9b
--- /dev/null
+++ b/installer/pxe/trusty/debathena/preseed.autoinstall
@@ -0,0 +1,248 @@
+# Modified from Hardy's example-preseed.txt.
+
+# This is mildly parsed by the install script.
+
+# Locale and keyboard are set by PXELINUX via kernel options.
+
+##############################################################################
+##############################################################################
+# Stuff which looks bogus for custom installs is current split out up here
+# for later separation.
+d-i pkgsel/update-policy select none
+
+### Network configuration
+# netcfg will choose an interface that has link if possible. This makes it
+# skip displaying a list if there is more than one interface.
+d-i netcfg/choose_interface select auto
+
+##############################################################################
+##############################################################################
+
+# Any hostname and domain names assigned from dhcp take precedence over
+# values set here. However, setting the values still prevents the questions
+# from being shown, even if values come from dhcp.
+# d-i netcfg/get_hostname string unassigned-hostname
+# d-i netcfg/get_domain string unassigned-domain
+
+# Disable that annoying WEP key dialog.
+# d-i netcfg/wireless_wep string
+# The wacky dhcp hostname that some ISPs use as a password of sorts.
+# d-i netcfg/dhcp_hostname string radish
+
+### Partitioning
+# Use the whole disk. Any disk.
+# No, use the first disk (via a shell script that also does sanity checking
+d-i partman/early_command string sh /debathena/check-disks.sh
+# We could also do this to just pick the first disk
+#d-i partman/early_command string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"
+
+# The presently available methods are: "regular", "lvm" and "crypto"
+d-i partman-auto/method string lvm
+
+# Stomp old LVM config.
+d-i partman-auto/purge_lvm_from_device boolean true
+# Don't confirm writing LVM.
+d-i partman-lvm/confirm boolean true
+# ...and for overwriting the same thing from a previous install:
+d-i partman-lvm/device_remove_lvm boolean true
+# ...and for overwriting a completely zeroed disk:
+# This doesn't work when preseeded. It does work manually. Yay.
+# LP:154086 covers the basic problem, though not the nonpreseedability.
+# Except now it does work?
+d-i partman-lvm/confirm_nooverwrite boolean true
+
+# You can choose from any of the predefined partitioning recipes.
+# atomic: All files in one partition (recommended for new users)
+# home: Separate /home partition
+# multi: Separate /home, /usr, /var, and /tmp partitions
+# small_disk (alpha architecture only):
+# Small-disk (< 1GB) partitioning scheme
+# d-i partman-auto/choose_recipe select atomic
+
+# Or provide a recipe of your own...
+# The recipe format is documented in the file devel/partman-auto-recipe.txt.
+# If you have a way to get a recipe file into the d-i environment, you can
+# just point at it.
+d-i partman-auto/expert_recipe_file string /debathena/lvm-cluster-machine.partman
+# This is completely undocumented. Sigh.
+d-i partman-auto-lvm/new_vg_name string athena
+# As reported in Trac #253
+d-i partman-auto-lvm/guided_size string max
+# Don't punt for no-method filesystems. Another undocumented option.
+d-i partman-basicmethods/method_only boolean false
+# It's not 1999, GRUB is capable of booting LVM:
+d-i partman-auto-lvm/no_boot boolean true
+
+# This makes partman automatically partition without confirmation, provided
+# that you told it what to do using one of the methods above.
+d-i partman/confirm_write_new_label boolean true
+d-i partman/choose_partition select finish
+d-i partman/confirm boolean true
+d-i partman/confirm_nooverwrite boolean true
+
+### Base system installation
+# Select the initramfs generator used to generate the initrd for 2.6 kernels.
+#d-i base-installer/kernel/linux/initramfs-generators string yaird
+
+# The kernel image (meta) package to be installed; "none" can be used if no
+# kernel is to be installed.
+d-i base-installer/kernel/image linux-generic
+
+### Account setup
+# No user account; root account with standard password:
+d-i passwd/make-user boolean false
+d-i passwd/root-login boolean true
+d-i passwd/root-password password profroot
+d-i passwd/root-password-again password profroot
+
+# Normal user's password, either in clear text
+#d-i passwd/user-password password insecure
+#d-i passwd/user-password-again password insecure
+# or encrypted using an MD5 hash.
+#d-i passwd/user-password-crypted password [MD5 hash]
+# Create the first user with the specified UID instead of the default.
+#d-i passwd/user-uid string 1010
+
+# The user account will be added to some standard initial groups. To
+# override that, use this.
+#d-i passwd/user-default-groups string audio cdrom video
+
+### Apt setup
+# You can choose to install restricted and universe software, or to install
+# software from the backports repository.
+d-i apt-setup/restricted boolean true
+d-i apt-setup/universe boolean true
+# Stop configuring backports (originally needed for Jaunty on the 755s)
+# d-i apt-setup/backports boolean true
+# Uncomment this if you don't want to use a network mirror.
+#d-i apt-setup/use_mirror boolean false
+# Select which update services to use; define the mirrors to be used.
+# Values shown below are the normal defaults.
+#d-i apt-setup/services-select multiselect security
+#d-i apt-setup/security_host string security.ubuntu.com
+#d-i apt-setup/security_path string /ubuntu
+d-i apt-setup/country string US
+# Actual mirror host now taken care of (semi-secretly) by the installer script.
+# d-i apt-setup/hostname string mirrors.mit.edu
+d-i apt-setup/directory string /ubuntu
+d-i apt-setup/country US
+
+
+# Additional repositories, local[0-9] available
+#d-i apt-setup/local0/repository string \
+# http://local.server/ubuntu hardy main
+#d-i apt-setup/local0/comment string local server
+# Enable deb-src lines
+#d-i apt-setup/local0/source boolean true
+# URL to the public key of the local repository; you must provide a key or
+# apt will complain about the unauthenticated repository and so the
+# sources.list line will be left commented out
+#d-i apt-setup/local0/key string http://local.server/key
+
+# By default the installer requires that repositories be authenticated
+# using a known gpg key. This setting can be used to disable that
+# authentication. Warning: Insecure, not recommended.
+#d-i debian-installer/allow_unauthenticated string true
+
+### Package selection
+tasksel tasksel/first multiselect standard, ubuntu-desktop
+#tasksel tasksel/first multiselect standard, lamp-server
+#tasksel tasksel/first multiselect standard, kubuntu-desktop
+
+# Individual additional packages to install
+#d-i pkgsel/include string openssh-server build-essential
+
+# Language pack selection
+#d-i pkgsel/language-packs multiselect de, en, zh
+
+# Some versions of the installer can report back on what software you have
+# installed, and what software you use. The default is not to report back,
+# but sending reports helps the project determine what software is most
+# popular and include it on CDs.
+#popularity-contest popularity-contest/participate boolean false
+
+### Boot loader installation
+# Grub is the default boot loader (for x86). If you want lilo installed
+# instead, uncomment this:
+#d-i grub-installer/skip boolean true
+# To also skip installing lilo, and install no bootloader, uncomment this
+# too:
+#d-i lilo-installer/skip boolean true
+
+# This is fairly safe to set, it makes grub install automatically to the MBR
+# if no other operating system is detected on the machine.
+d-i grub-installer/only_debian boolean true
+
+# This one makes grub-installer install to the MBR if it also finds some other
+# OS, which is less safe as it might not be able to boot that other OS.
+d-i grub-installer/with_other_os boolean true
+
+# Alternatively, if you want to install to a location other than the mbr,
+# uncomment and edit these lines:
+#d-i grub-installer/only_debian boolean false
+#d-i grub-installer/with_other_os boolean false
+#d-i grub-installer/bootdev string (hd0,0)
+# To install grub to multiple disks:
+#d-i grub-installer/bootdev string (hd0,0) (hd1,0) (hd2,0)
+
+# On systems where unauthorized users have access at boot time, you may want
+# to set a GRUB password, either in clear text
+#d-i grub-installer/password password insecure
+#d-i grub-installer/password-again password insecure
+# or encrypted using an MD5 hash.
+#d-i grub-installer/password-crypted password [MD5 hash]
+
+### Finishing up the installation
+# Avoid that last message about the install being complete.
+d-i finish-install/reboot_in_progress note
+
+# This will prevent the installer from ejecting the CD during the reboot,
+# which is useful in some situations.
+#d-i cdrom-detect/eject boolean false
+
+# This is how to make the installer shutdown when finished, but not
+# reboot into the installed system.
+#d-i debian-installer/exit/halt boolean true
+
+### X configuration
+# X can detect the right driver for some cards, but if you're preseeding,
+# you override whatever it chooses. Still, vesa will work most places.
+#xserver-xorg xserver-xorg/config/device/driver select vesa
+
+# A caveat with mouse autodetection is that if it fails, X will retry it
+# over and over. So if it's preseeded to be done, there is a possibility of
+# an infinite loop if the mouse is not autodetected.
+#xserver-xorg xserver-xorg/autodetect_mouse boolean true
+
+# Monitor autodetection is recommended.
+xserver-xorg xserver-xorg/autodetect_monitor boolean true
+# Uncomment if you have an LCD display.
+#xserver-xorg xserver-xorg/config/monitor/lcd boolean true
+# X has three configuration paths for the monitor. Here's how to preseed
+# the "medium" path, which is always available. The "simple" path may not
+# be available, and the "advanced" path asks too many questions.
+xserver-xorg xserver-xorg/config/monitor/selection-method select medium
+xserver-xorg xserver-xorg/config/monitor/mode-list select 1024x768 @ 60 Hz
+
+### Preseeding other packages
+# Depending on what software you choose to install, or if things go wrong
+# during the installation process, it's possible that other questions may
+# be asked. You can preseed those too, of course. To get a list of every
+# possible question that could be asked during an install, do an
+# installation, and then run these commands:
+# debconf-get-selections --installer > file
+# debconf-get-selections >> file
+
+
+#### Advanced options
+### Running custom commands during the installation
+# d-i preseeding is inherently not secure. Nothing in the installer checks
+# for attempts at buffer overflows or other exploits of the values of a
+# preconfiguration file like this one. Only use preconfiguration files from
+# trusted locations! To drive that home, and because it's generally useful,
+# here's a way to run any shell command you'd like inside the installer,
+# automatically.
+
+# This first command is run as early as possible, just after
+# preseeding is read.
+#d-i preseed/early_command string anna-install some-udeb
diff --git a/installer/pxe/trusty/debathena/preseed.common b/installer/pxe/trusty/debathena/preseed.common
new file mode 100644
index 0000000..a341d5c
--- /dev/null
+++ b/installer/pxe/trusty/debathena/preseed.common
@@ -0,0 +1,36 @@
+# This contains only things which interactive installers are still likely to want.
+
+### Mirror settings
+# All of these are now set by installer.sh
+# d-i mirror/country string manual
+# d-i mirror/http/hostname string mirrors.mit.edu
+# d-i mirror/http/directory string /ubuntu
+# d-i mirror/http/proxy string
+
+# Suite to install.
+d-i mirror/suite string trusty
+# Suite to use for loading installer components (optional).
+#d-i mirror/udeb/suite string intrepid
+# Components to use for loading installer components (optional).
+#d-i mirror/udeb/components multiselect main, restricted
+
+### Clock and time zone setup
+# Controls whether or not the hardware clock is set to UTC.
+d-i clock-setup/utc boolean true
+
+# You may set this to any valid setting for $TZ; see the contents of
+# /usr/share/zoneinfo/ for valid values.
+d-i time/zone string US/Eastern
+
+# Controls whether to use NTP to set the clock during the install
+d-i clock-setup/ntp boolean true
+# NTP server to use. The default is almost always fine here.
+#d-i clock-setup/ntp-server ntp.example.com
+
+# This command is run just before the install finishes, but when there is
+# still a usable /target directory. You can chroot to /target and use it
+# directly, or use the apt-install and in-target commands to easily install
+# packages and run commands in the target system.
+#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh
+
+d-i preseed/late_command string sh /debathena/postinstall.sh