blog-hugo/articles/2016-08-02-debianpreseed.md

83 lines
3.8 KiB
Markdown

---
title: Debian Preseeded install medium
date: 2016-08-02 09:00:00
---
After the configuration of my servers through Saltstack, I decided to
go furter and to also store the configuration to my laptops and home computed
into Saltstack and thus allow an easy way to format and get a fully configured
system back in place really easily and quickly.
First step was to get a quick way of formatting my computers without or
with only minimal human intervention. As I'm using Debian, it means preparing
a preseeded installation file so that everything is taken care of.
I tried some approaches to build manually an install image but as I went
along, I decided to scratch all that and script the build of this medium.
I looked around and found existing work by [acatton on GitHub](https://github.com/acatton/debian-preseeded-iso).
There were a number of problems I wanted to fix :
1. The hostname should be provided by the user on build
2. A default user account should be created
2. Or perhaps not and the user would have to input something during the install
3. I wanted an encrypted root partition by default
4. I wanted to install a Saltstack minion by default
5. I needed to copy default configuration files
The encryption and installation of a minion were easy tasks and only need
edition of the preseed file. The other points introduced the need for a
templating script that could generate different files as needed and using
user input during the generation of the medium.
As I already knew the Mustache syntax, I decided to use Mustache as a
templating engine to generate the needed preseed files. Instead of
copying the preseed file from the folder into the generated medium image,
I sent it through `mo` with various variables to get 4 different install
seeds.
cat "$PRESEED" | SUITE="jessie" TARGETNAME=$HOSTNAME CREATEUSER=1 ./mo > "$TMP/preseed-jessie-autouser.cfg"
cat "$PRESEED" | SUITE="stretch" TARGETNAME=$HOSTNAME CREATEUSER=1 ./mo > "$TMP/preseed-stretch-autouser.cfg"
unset CREATEUSER
cat "$PRESEED" | SUITE="jessie" TARGETNAME=$HOSTNAME ./mo > "$TMP/preseed-jessie-manualuser.cfg"
cat "$PRESEED" | SUITE="stretch" TARGETNAME=$HOSTNAME ./mo > "$TMP/preseed-stretch-manualuser.cfg"
And then, I changed the `isolinux/txt.cfg` configuration file to get an
entry for each configuration file.
cat >> isolinux/txt.cfg <<EOE
label install-jessie-manualuser
menu label ^Install Jessie $HOSTNAME (manual user)
kernel /install.amd/vmlinuz
append vga=788 initrd=/install.amd/initrd.gz auto=true file=/cdrom/preseed-jessie-manualuser.cfg
EOE
cat >> isolinux/txt.cfg <<EOE
label install-jessie-autouser
menu label ^Install Jessie $HOSTNAME (auto Valdor user)
kernel /install.amd/vmlinuz
append vga=788 initrd=/install.amd/initrd.gz auto=true file=/cdrom/preseed-jessie-autouser.cfg
EOE
cat >> isolinux/txt.cfg <<EOE
label install-stretch-autouser
menu label ^Install Stretch $HOSTNAME (manual user)
kernel /install.amd/vmlinuz
append vga=788 initrd=/install.amd/initrd.gz auto=true file=/cdrom/preseed-stretch-manualuser.cfg
EOE
cat >> isolinux/txt.cfg <<EOE
label install-stretch-autouser
menu label ^Install Stretch $HOSTNAME (auto Valdor user)
kernel /install.amd/vmlinuz
append vga=788 initrd=/install.amd/initrd.gz auto=true file=/cdrom/preseed-stretch-autouser.cfg
EOE
The Saltstack minion is installed by the preseed
`d-i pkgsel/include string salt-minion plymouth plymouth-themes` directive
and with the configuration file also copied at the end of the install
with `d-i preseed/late_command string cp -a /cdrom/preseed/minion /target/etc/salt/`.
The only manual interaction needed is to accept the minion key after the
reboot and let Saltstack up the newly installed computer.