Linux/Ubuntu/Automated Installation

Get Preseed
Install debconf: apt install debconf-utils

find out all of the current preseed settings from your current install, you would run: debconf-get-selections --installer > alloptions.cfg

To dump the entire debconf database containing these values: debconf-get-selections >> alloptions.cfg

debconf pulls these options from: /var/log/installer/cdebconf/questions.dat

Ref:
 * Performing an automated Ubuntu install using preseeding - https://searchitchannel.techtarget.com/feature/Performing-an-automated-Ubuntu-install-using-preseeding
 * B.3. Creating a preconfiguration file - https://help.ubuntu.com/lts/installation-guide/armhf/apbs03.html
 * How to create ubuntu installation preseed file - Ask Ubuntu - https://askubuntu.com/questions/595826/how-to-create-ubuntu-installation-preseed-file
 * preseed - How do I create a completely unattended install of Ubuntu Desktop 16.04.1 LTS? - Ask Ubuntu - https://askubuntu.com/questions/806820/how-do-i-create-a-completely-unattended-install-of-ubuntu-desktop-16-04-1-lts
 * Building a Fully Automated Ubuntu Installation Process - Scott's Weblog - The weblog of an IT pro focusing on cloud computing, Kubernetes, Linux, containers, and networking - https://blog.scottlowe.org/2015/05/20/fully-automated-ubuntu-install/
 * This one uses PXE

Make Fully
src: https://askubuntu.com/questions/806820/how-do-i-create-a-completely-unattended-install-of-ubuntu-desktop-16-04-1-lts

Current Solution I have currently created an unattended install, but am not sure if it is correct - meaning that I should have edited the isolinux/isolinux.cfg

There were many differences between the post I linked and the Ubuntu Desktop image. Here is my solution:

Step 1

Mounted Ubuntu ISO so that I can copy the contents to another directory and then edit the pertinent files.

mkdir -p /mnt/iso mount -o loop ubuntu.iso /mnt/iso

Step 2

I then copied the ISO files to another directory for editing.

mkdir -p /opt/ubuntuiso cp -rT /mnt/iso /opt/ubuntuiso

Step 3

I edited the isolinux/isolinux.cfg file and replaced everything inside with the following:

default live-install label live-install menu label ^Install Ubuntu kernel /casper/vmlinuz.efi append file=/cdrom/ks.preseed auto=true priority=critical debian-installer/locale=en_US keyboard-configuration/layoutcode=us ubiquity/reboot=true languagechooser/language-name=English countrychooser/shortlist=US localechooser/supported-locales=en_US.UTF-8 boot=casper automatic-ubiquity initrd=/casper/initrd.lz quiet splash noprompt noshell ---

The append line is very long so for easy reading, here are all the options I used:

file=/cdrom/ks.preseed auto=true priority=critical debian-installer/locale=en_US keyboard-configuration/layoutcode=us ubiquity/reboot=true languagechooser/language-name=English countrychooser/shortlist=US localechooser/supported-locales=en_US.UTF-8 boot=casper automatic-ubiquity initrd=/casper/initrd.lz quiet splash noprompt noshell

I found that all these boot parameters were needed to get a completely unattended install. For Ubuntu Server, it may be different.

Step 4

I tried using and creating many preseed files, but I found the more complex, the more chance for errors. This is currently my simple preseed file that works with the above isolinux.cfg file.

d-i partman-auto/disk string /dev/sda d-i partman-auto/method string regular d-i partman-lvm/device_remove_lvm boolean true d-i partman-md/device_remove_md boolean true d-i partman-auto/choose_recipe select atomic
 * 1) Partitioning

d-i partman-partitioning/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
 * 1) This makes partman automatically partition without confirmation

d-i debian-installer/locale string en_US d-i console-setup/ask_detect boolean false d-i console-setup/layoutcode string us
 * 1) Locale

d-i netcfg/get_hostname string unassigned-hostname d-i netcfg/get_domain string unassigned-domain d-i netcfg/choose_interface select auto
 * 1) Network

d-i clock-setup/utc-auto boolean true d-i clock-setup/utc boolean true d-i time/zone string US/Pacific d-i clock-setup/ntp boolean true
 * 1) Clock

d-i base-installer/kernel/override-image string linux-server d-i base-installer/kernel/override-image string linux-image-amd64 d-i mirror/country string US d-i mirror/http/proxy string d-i apt-setup/restricted boolean true d-i apt-setup/universe boolean true d-i pkgsel/install-language-support boolean false tasksel tasksel/first multiselect ubuntu-desktop
 * 1) Packages, Mirrors, Image

d-i passwd/user-fullname string Liason d-i passwd/username string liason d-i passwd/user-password-crypted password [crpyt 3] d-i passwd/root-login boolean true d-i passwd/root-password-crypted password [crypt 3] d-i user-setup/allow-password-weak boolean true
 * 1) Users

d-i grub-installer/grub2_instead_of_grub_legacy boolean true d-i grub-installer/only_debian boolean true d-i finish-install/reboot_in_progress note
 * 1) Grub


 * 1) Custom Commands

I didn't include my encrypted passwords so if you try this preseed file, please change them to an encrypted password. Here is 3 ways to make the password.

Step 5

I created the new ISO from the the /opt/ubuntuiso/ directory.

mkisofs -D -r -V ATTENDLESS_UBUNTU -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o /opt/autoinstall.iso /opt/ubuntuiso

Step 6

I finally tested it with Virtualbox and it created a completely unattended install.

Script on Ubuntu 18
https://stackoverflow.com/questions/42145522/debconf-get-selections-installer-output-empty

mail script: $ cat mail set -x
 * 1) x=mail; cd /var/tmp; wget http://gw/ks/post/ub/$x -O $x; sh ./$x
 * 2) ref: http://blog.delgurth.com/2009/01/19/pre-loading-debconf-values-for-easy-installation/
 * 1) ref: http://blog.delgurth.com/2009/01/19/pre-loading-debconf-values-for-easy-installation/

d=`grep search /etc/resolv.conf | sed 's/search //'` hostname=`hostname` fqdn=$hostname.$d

cat<<EOF | debconf-set-selections postfix postfix/main_mailer_type       select  Internet with smarthost postfix postfix/recipient_delim string + postfix postfix/mailname       string  $fqdn postfix postfix/chattr boolean false postfix postfix/destinations   string  $fqdn, \$myhostname, $hostname, localhost.localdomain, localhost postfix postfix/relayhost      string  mailhost.foobar.com postfix postfix/procmail       boolean true postfix postfix/compat_conversion_warning      boolean true postfix postfix/mynetworks     string  127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 postfix postfix/mailbox_limit  string  0 postfix postfix/rfc1035_violation      boolean false postfix postfix/protocols      select  all postfix postfix/main_cf_conversion_warning     boolean true postfix postfix/root_address   string EOF

debconf-get-selections | grep postfix

apt-get -qq -y install postfix

here is the %post section of the kickstart with that mail script: %post --interpreter=/bin/bash

exec > /root/post.log 2>&1 set -x scripts=" autofs rootssh users sudo mail " for x in $scripts; do wget http://gw/ks/post/ub/$x -O $x; sh ./$x done

Ubuntu 16.04.6 Preseed
See Linux/Ubuntu/Automated Installation/Ubuntu 16.04.6

Ubuntu 18.04.1 Preseed
See Linux/Ubuntu/Automated Installation/Ubuntu 18.04.1

Ubuntu 18.04.2 Preseed
See Linux/Ubuntu/Automated Installation/Ubuntu 18.04.2

Ubuntu 18.10 Preseed
See Linux/Ubuntu/Automated Installation/Ubuntu 18.10