Skip to content

Unattended Debian Installations (or How I Learned to Stop Worrying and Love the preseed.cfg)

A CMR project recently bought 12 new Dell PowerEdge SC1435 servers to replace some of our aging compute cluster systems. In previous server rollouts, I’d generally get one system installed and configured, image it with SystemImager, and then PXE-boot the rest of the systems to pull that image. However, it’s tough to audit exactly what got installed, and how. It’s also arguably a waste of space to keep images of all the types of cluster systems we have (PowerEdge 2650, PowerEdge 1850, PowerEdge 1855, Dimension 9200, etc.). So enter Debian Preseeding. With preseeding, I can make a text file that describes what packages I want installed, debconf configurations that vary from the default, how I want the partitioning done, copy configuration files from web or ftp servers to the target drive, etc. It took a few days to get going, but the long-term payoff should be enormous.

The resulting installation timeline for a PowerEdge SC1435 (relative to power-on in HH:MM:SS):

  • 00:00:25 – Power-on self tests have completed enough to allow me to hit F12 for PXE boot.
  • 00:01:20 – Rest of power-on self tests have completed, PXE boot process starts. All installation parameters are passed in from the pxelinux.cfg file on the DHCP server or the preseed.cfg file on a nearby ftp server.
  • 00:04:50 – Base and standard task packages installed. openssh-server and puppet packages are installed. puppet defaults file is downloaded. System starts formatting a 500GB SATA drive for /tmp space.
  • 00:08:20 – System finishes formatting /tmp, and reboots since that was the last step of the unattended install.
  • 00:09:30 – System is at login prompt. Root password works. puppet will take over installing miscellaneous packages and other post-installation configuration tasks. Once puppet has finished copying over root@adminserver’s public key, I can log in from adminserver without being prompted for a password.

Total number of keypresses from power-up to login: 1. Annotated preseed and pxelinux files after the jump.


PXELinux config file (amd64 version, i386 would be nearly identical — the contents of the “append” line should be all on one line. It’s broken here for readability.)

default preseed
label preseed
kernel debian-installer/amd64/linux
append initrd=debian-installer/amd64/initrd.gz ramdisk_size=10800 root=/dev/rd/0 rw auto
  url=http://REDACTED/./preseed.cfg console-keymaps-at/keymap=us locale=en_US interface=eth0
  hostname=x domain=x netcfg/dhcp_timeout=60 --
prompt 1
timeout 1

Changes versus the default configuration:

  1. Removed display command for splash screen. At one point, I was running out of parameter space on the append line, and removing ‘vga=normal’ was one space saver. I didn’t expect the splash screen to work once that was removed, so I dumped it as well.
  2. Removed F1, F2, … , F9, F0 commands for online help. Optional.
  3. Changed ‘default install’ to ‘default preseed’.
  4. Added preseed stanza, with default kernel, but much different append options.
  5. At the time I started this, the default pxelinux config file had entries for the ramdisk size and root device; these do not appear in the current Debian config file, and I’ll remove mine once I verify that they’re unneeded.
  6. Added append option ‘auto url=http://REDACTED/./preseed.cfg’ to define location of preseed configuration file.
  7. Added append options ‘console-keymaps-at/keymap=us’ and ‘locale=en_US’ to define basic localization for the installation.
  8. Addd append options ‘interface=eth0’, ‘hostname=x’, ‘domain=x’, and ‘netcfg/dhcp_timeout=60’ to get the networking configured. The ‘hostname=x’ and ‘domain=x’ parameters were one of the last tricky bits. I had wrongly assumed that specifying that I’d be using DHCP to get my address would make it pass over asking for a hostname and domain. Preseeding dummy values for each gets past the questions, and DHCP overrides the dummy values as soon as the DHCP negotiation is done.
  9. Changed ‘timeout 0’ to ‘timeout 1’ to allow the installer to proceed without me manually selecting any configurations. Obviously, you may want to increase the timeout to some larger value if you need more time to hit a key to override something for testing.

preseed.cfg (the contents of the “d-i preseed/late_command” line should be all on one line. It’s broken here for readability.):

### References:
###  http://d-i.alioth.debian.org/manual/en.amd64/install.en.pdf
###  http://d-i.alioth.debian.org/manual/example-preseed.txt
###  http://www.hands.com/d-i/etch/classes/

### This file needs to be at
### http://REDACTED/preseed.cfg and
### referenced via boot arguments as
### http://REDACTED/./preseed.cfg

### Generic settings applicable to all CAE Debian systems

d-i debian-installer/locale string en_US
d-i console-tools/archs select at
d-i console-keymaps-at/keymap select American English
d-i debian-installer/keymap string us
d-i netcfg/choose_interface select eth0
d-i netcfg/dhcp_timeout string 60
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_hostname seen true
d-i netcfg/get_domain string unassigned-domain
d-i netcfg/get_domain seen true
d-i netcfg/dhcp_options select Retry network autoconfiguration
d-i mirror/codename string etch
d-i mirror/country string enter information manually
d-i mirror/http/countries select enter information manually
d-i mirror/http/directory string /debian/
d-i mirror/http/hostname string ftp.cae.tntech.edu
d-i mirror/http/proxy string
d-i clock-setup/utc boolean false
d-i time/zone string US/Central
d-i apt-setup/security_host string
d-i apt-setup/local0/repository string http://ftp.cae.tntech.edu/debian-security etch/updates main

# XXX -- TEMPORARY HACK UNTIL WE GET A SIGNED LOCAL REPOSITORY
d-i debian-installer/allow_unauthenticated string true

d-i passwd/make-user boolean false
d-i passwd/root-password-crypted password $1$REDACTED
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
tasksel tasksel/first multiselect standard
d-i pkgsel/include string puppet lsb-release openssh-server
d-i finish-install/reboot_in_progress note

popularity-contest popularity-contest/participate boolean false

### Less generic settings

# Partitioning:
# sda1: 40-100MB for /boot
# sda2: majority of remaining space for /
# sda3: 64MB-(2*RAM) for swap
d-i partman-auto/disk string /dev/sda
d-i partman-auto/method string regular
d-i partman-auto/expert_recipe string 
  boot-root :: 
    40 50 100 ext3 
      $primary{ } $bootable{ } 
      method{ format } format{ } 
      use_filesystem{ } filesystem{ ext3 } 
      mountpoint{ /boot } 
    . 
    500 10000 1000000000 ext3 
      method{ format } format{ } 
      use_filesystem{ } filesystem{ ext3 } 
      mountpoint{ / } 
    . 
    64 512 200% linux-swap 
      method{ swap } format{ } 
    .
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select Finish partitioning and write changes to disk
d-i partman/confirm boolean true

# Some systems may vary on /tmp -- many have separate disks for it
# (/dev/sdb1), some may have a separate partition on the sda
# drive. This needs to be split out into a system-specific file and
# chained in via class tmp_on_sdb1
# Only applicable for hosts with separate /tmp disk on /dev/sdb1 --
# PE1855 blades (ch226-11...-19), SC1435 servers (ch226-21...-32), old
# ch208a
d-i preseed/late_command string wget -O /target/etc/default/puppet http://REDACTED/puppet ; 
  wget -O /target/root/caeftp_key.asc http://REDACTED/caeftp_key.asc ;
  in-target apt-key add /root/caeftp_key.asc ; echo ';' | sfdisk /dev/sdb ; mke2fs -j -q /dev/sdb1 ;
  echo '/dev/sdb1 /tmp ext3 defaults 0 2' >> /target/etc/fstab; cp /var/log/syslog /target/root

I’m not going to run through every change made in the preseed.cfg file, since the options are well-documented and what’s useful in one environment won’t necessarily translate to another. But I am mildly proud of the late_command at the end: this does two things that were minor pains on a normal preseed installation:

  1. Bootstraps a basic puppet defaults file over to the target drive. Grabbing /etc/default/puppet from a remote site before rebooting makes sure that when puppetd starts up, that it can contact the central server for key signing, and work normally afterwards.
  2. Partitions and formats /dev/sdb to be my /tmp directory. Debian-installer’s partman can’t partition more than one disk automatically, but each of these new systems had a second drive I had planned on using for /tmp. Sfdisk comes to the rescue. The input format description in the sfdisk man page indicates that if you give it a line with no values specified, it will make a partition from the first nonassigned sector to the maximum size, and set the ID to 83 for a Linux partition. So the first time I run this, I go from a drive with an empty partition table to one with a giant partition 1, exactly what I wanted. Subsequent times I run this, it should leave the partition table unmodified, which is also fine. I can’t find the original hint I found for this use of sfdisk.

My /etc/default/puppet is:

# Puppet doesn't like starting before it can contact the puppetmaster.
# Wait up to 30 seconds before continuing.

for n in `seq 1 30`; do
  ping -c 1 REDACTED >& /dev/null && break
  echo -n " $n"
  sleep 1
done
DAEMON_OPTS="--server REDACTED --factsync"

You may be able to avoid putting in the 30-second sleep, but at one point, with some puppet version, it was helpful on DHCP-managed systems. The critical thing to override on Debian, though, is the -w 0 flag in the default DAEMON_OPTS in /etc/init.d/puppetd. Removing it ensures that puppetd will start up, contact the gold server for key signing, and wait for the signing to happen, rather than immediately exit.

{ 27 } Comments

  1. movers dubai | July 3, 2019 at 11:50 am | Permalink

    good post

  2. NZ assignment help | July 4, 2019 at 7:44 am | Permalink

    StudentsAssignmentHelp.com provides NZ assignment help to the students of New Zealand. They have a vast knowledge of subjects and always ready to give you the best and plagiarism free assignment help services.

  3. Reflective Essay | July 5, 2019 at 2:04 am | Permalink

    Do you have a flight to catch? Are you running short on time? When a mass of these factors is burdening you, then rather than getting stressed or perplexed, what becomes important is for the student to make use of one of the Reflective Essay Writing UK , which is Buy Online Essay.

  4. Shareit | July 5, 2019 at 4:31 am | Permalink

    Thanks for sharing informative post…

  5. Shareit Download | July 5, 2019 at 4:31 am | Permalink

    informative post…love it

  6. Shareit Download | July 5, 2019 at 4:32 am | Permalink

    love it

  7. Coursework help | July 6, 2019 at 4:52 am | Permalink

    Best and qualified writers at Students Assignment Help are providing coursework help services to the students. We never miss any of the deadlines. Our professional and expert writers are available online always for help the students.

  8. nanny services | July 7, 2019 at 6:51 am | Permalink

    Good post thanks for sharing

  9. Sofa Cleaning Servic | July 8, 2019 at 3:49 am | Permalink

    l like a real post. I can make a text file that describes what packages I want to be installed, configurations that vary from the default, how I want the partitioning done, copy configuration files from web or FTP servers to the target drive, etc. It took a few days to get going, but the long-term payoff should be enormous.

  10. Sofa Cleaning Servic | July 8, 2019 at 3:50 am | Permalink

    l like a real post. I can make a text file that describes what packages I want to be installed, configurations that vary from the default, how I want the partitioning done, copy configuration files from web or FTP servers to the target drive, etc. but the long-term payoff should be enormous.

  11. Business Assignemnt | July 8, 2019 at 10:59 pm | Permalink

    I am really impressed with you for the selecting of a new and unique topic and also the well-written blog on it. Thanks for sharing with us. We also provide blog Assignment Help services in Australia.

  12. Marketing Assignment | July 8, 2019 at 11:02 pm | Permalink

    I found some useful information in your blog, it was awesome to read, thanks for sharing this great content to my vision, keep sharing.

  13. iOS App Development | July 9, 2019 at 2:38 am | Permalink

    This topic “Unattended Debian Installations” really helped me stop worrying. Thanks for sharing this. Looking forward to reading more.

  14. Sharp TV Repair Duba | July 9, 2019 at 5:46 am | Permalink

    Is your Sharp TV not operating properly? troubled thanks to the inferior quality of the picture? Won’t be able to determine the explanation for the low volume on your TV? Its time that you simply leave all those worries behind and eradicate that repetitive issue with our skillful and qualified professionals in Dubai

  15. assignment | July 10, 2019 at 1:54 am | Permalink

    Avail academic writing services from the expert assignment helpers of IrelandAssignmentHelp.com and score well in your academic career. We offer every assignment help to the students of all educational level.

  16. Dissertation Topic | July 10, 2019 at 6:50 am | Permalink

    Get Help with Dissertation Research Project Topics related to Finance, Marketing, HR, Research Ideas and Free Consultation from UK dissertation experts.

  17. Assignment Help | July 11, 2019 at 4:20 am | Permalink

    I am the assignment help provider at My assignment help. I have done P.hD in the computers if a student has an issue regarding the assignment writing then may take help from the assignment assistance services.

  18. samsung mobile repai | July 12, 2019 at 4:09 am | Permalink

    Perfectly composed articles, thank you for the information.

  19. samsung mobile repai | July 12, 2019 at 4:09 am | Permalink

    Perfectly composed articles, thank you for the information.

  20. samsung mobile repai | July 12, 2019 at 4:10 am | Permalink

    Thanks for this information. I will make sure I use your suggestions and tips. Keep posting, I’m waiting for your next post.

  21. fluid bed processor | July 12, 2019 at 12:31 pm | Permalink

    Nice sharing amazing one keep sharing more thanks for all lovely one

  22. FrontechChina | July 12, 2019 at 4:04 pm | Permalink

    I read your blog post and this is nice blog post.. thanks for taking the time to share with us. have a nice day

  23. Roche indexing plung | July 15, 2019 at 12:51 pm | Permalink

    Such a great blog is very difficult to get. I am very happy to join this Blog in today

  24. Assignment help USA | July 19, 2019 at 2:30 am | Permalink

    Hire students assignment help expert for getting the best assignment help USA at a very low price. We offer a 10% discount on your first order of assignment service. For assurance of our work, you can check our sample work on our website.

  25. Writers Homework | July 20, 2019 at 4:53 am | Permalink

    l like a genuine post. I can make a content document that depicts what bundles I need to be introduced, arrangements that change from the default, how I need the parceling done, duplicate design records from web or FTP servers to the objective drive, and so forth. It took a couple of days to get moving, yet the long haul result ought to be tremendous.

  26. assignment | July 22, 2019 at 12:47 am | Permalink

    Ireland Assignment Help has the expert team of assignment help experts who are ready to complete Write my assignments services for the learners of any academic level. We offer assignment support for writing a thesis, management assignments, and dissertation writing for the students. You can visit us at http://www.irelandassignmenthelp.com

  27. Juhu Escorts | July 22, 2019 at 4:36 pm | Permalink

    Quality escort service by Charu Garg she is area no.1 escort girl assure you 100% relaxation and romance. If your eye searching elite escort girl in Juhu then contact me I am too busty girl giving you end to end sexual pleasure and joyful moments so any time hire me as a Juhu escorts.

Post a Comment

Your email is never published nor shared. Required fields are marked *