Debian Preseeded install medium
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.
There were a number of problems I wanted to fix :
- The hostname should be provided by the user on build
- A default user account should be created
- Or perhaps not and the user would have to input something during the install
- I wanted an encrypted root partition by default
- I wanted to install a Saltstack minion by default
- 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.