Debian unattended Installation using a preseed file
I find installing Debian via VNC a time consuming process. Luckily there is an option to install Debian "unattended". You can do so using a preseed file to feed the selections and able to include advanced script customizations. If you come from CentOs World, then think of it as a kickstart file.
This is not new information, I just wanted the wonderful LES community to be aware of this great time saver.
The official source is at https://wiki.debian.org/DebianInstaller/Preseed and a long file example at https://www.debian.org/releases/stable/example-preseed.txt
Requirements:
- A VM with Debian iso mounted e.g: Network install from a minimal CD
- The preseed file is uploaded in some webserver and reachable by the VM.
- The VM is online with vnc console support and is able to get an ip from your provider dhcp.
- The VM is booted from the iso, here are screen shots on how to get there:
Here is a working file "preseed-test.cfg" that partitions the entire first disk with lvm in auto mode.
##### save this file as preseed-test.cfg and upload to your webserver ## locals and keys d-i debian-installer/locale string en_US d-i console-setup/ask_detect boolean false d-i keyboard-configuration/xkb-keymap select fi d-i keymap select fi ## detect network-hostname and auto setup d-i netcfg/choose_interface select auto d-i netcfg/get_hostname string unassigned-hostname d-i netcfg/get_domain string unassigned-domain ## mirrors and proxy if needed d-i mirror/country string manual d-i mirror/http/hostname string deb.debian.org d-i mirror/http/directory string /debian d-i mirror/http/proxy string ## time and zone d-i time/zone string Europe/Helsinki d-i clock-setup/utc boolean true d-i clock-setup/ntp boolean true d-i clock-setup/ntp-server string pool.ntp.org ## Partion ::: use first disk , entire disk as one with lvm d-i partman/early_command string debconf-set partman-auto/disk "$(list-devices disk | head -n1)" d-i partman-auto/method string lvm d-i partman-md/device_remove_md boolean true d-i partman-lvm/device_remove_lvm boolean true d-i partman-md/confirm boolean true d-i partman-partitioning/confirm_write_new_label boolean true d-i partman/choose_partition select finish d-i partman-lvm/confirm boolean true d-i partman/confirm_nooverwrite boolean true d-i partman/confirm boolean true ## add root and user with passwords, change later d-i passwd/root-login boolean true d-i passwd/root-password password startSimple20 d-i passwd/root-password-again password startSimple20 d-i passwd/user-fullname string anthonySmith d-i passwd/username string ant d-i passwd/user-password password startSimple20 d-i passwd/user-password-again password startSimple20 d-i user-setup/allow-password-weak boolean true d-i user-setup/encrypt-home boolean false ## lets install a standard server with ssh tasksel tasksel/first multiselect standard,ssh-server # add your cool tools d-i pkgsel/include string ntp ssh wget curl ## upgrades unattended-upgrades unattended-upgrades/enable_auto_updates boolean false d-i pkgsel/update-policy select none popularity-contest popularity-contest/participate boolean false ## install grub d-i grub-installer/bootdev string default d-i grub-installer/only_debian boolean true d-i grub-installer/with_other_os boolean true ## eject and reboot d-i cdrom-detect/eject boolean true d-i finish-install/reboot_in_progress note
The installation will execute in auto mode and the result of the above file is shown next, ignore sdb I was testing with another disk.
Notes:
- I advise to read each section in the above preseed file and change accordingly to you needs for example; timezone, keyboard layout, passwords.... refer to references and source page.
- The partitioning can get tricky if you want to do a regular layout or exclude swap, but is doable.
You can add custom scripts before install upgrade section like this as an example:
my other scripts
d-i preseed/late_command string \
in-target sh -c 'sed -i "s/^#PermitRootLogin.*\$/PermitRootLogin yes/g" /etc/ssh/sshd_config'; \
in-target curl -sq http://othersite.fi/k8s/99-k8s.conf -o /etc/sysctl.d/99-k8s.conf ;
What else have fun.
References
- https://www.debian.org/releases/buster/arm64/apbs02.en.html
- https://www.packer.io/guides/automatic-operating-system-installs/preseed_ubuntu
- https://gist.github.com/ofrzeta/afeb53590c538fbddace
- https://gist.github.com/lorin/5140029
- https://github.com/delfer/debian-preseed-iso/blob/master/preseed.cfg
- https://gist.github.com/boxrick/3a4022d003daa63b7d27cca7f0f99894
- https://gist.github.com/styblope/2cf93a41662608f924de71fd0e91e0d1
- others i might forgot to add.
Comments
Excellent post, thanks @ehab for taking the time to write this up and share it!
https://inceptionhosting.com
Please do not use the PM system here for Inception Hosting support issues.
If you use netboot.xyz their menu for Debian has an option to specify a preseed file. Basically can do a semi-unattended install with no ISO mounted this way.
For folks who like to live on the edge a bit and open up root straight away:
d-i preseed/late_command string \ in-target sed -i 's/^.*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config
Also you shouldn't store your passwords plaintext. It is possible to store a hash instead.