Purpose
I want to install Ubuntu Desktop 16.04.1 LTS completely unattended. Put ISO CD in and walk away.
Issues
- Boot parameters incorrect
- Questions still being asked and needing mouse clicks
- Convoluted answers using kickstart/preseed
- Documentation examples no working as stated, specifically from partman and ubunutu
I came across this post here and it was close to what I needed but didn't quite accomplish what I needed since it was for Ubuntu Server. The post suggests using a "non-graphical" Ubuntu install, but I couldn't find a non-graphical install for Ubuntu Desktop, which makes sense. I tried to adapt the steps and get it working for Ubuntu Desktop 16.04.1 LTS.
Documentation Used
I have used all the following resources…
Apparently I can't include all of my resources because askubuntu doesn't allow more than 2 links. Well that's not very helpful – so here is just a list:
- AskUbuntu
- Ubuntu install.en.pdf
- Preseed Examples
- Ubiquity Installer Documentation
- Partman Documentation and Examples
- Partition Recipe Explaination of the 3 numbers and their weighting
- A More Complex Preseed Example
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.
### Partitioning
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
# This makes partman automatically partition without confirmation
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
# Locale
d-i debian-installer/locale string en_US
d-i console-setup/ask_detect boolean false
d-i console-setup/layoutcode string us
# Network
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain
d-i netcfg/choose_interface select auto
# Clock
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
# Packages, Mirrors, Image
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
# Users
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
# Grub
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
# 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.
Questions
Should I have to be editing the isolinux/isolinux.cfg
file?
In the other post, it seems they are able to edit the isolinux/txt.cfg
file and are able to make that work. I tried for about an hour to use the isolinux/txt.cfg
, but it did not work.
Does anyone have a working more complex partman recipe which directly specifies partitions? Or a working LVM setup?
I tried to use a simple LVM setup, but it after reboot it wouldn't boot and would just sit a black screen. Also, not a single one of the preseed examples I listed in the documentation worked either.
Thank you for any help.
Best Answer
Answering
I gave it some time from originally asking my question to see if there were any other solutions, but it looks like the solution I came up with while waiting is the only viable solution I've seen so far.
Misconception
Since this was the source of a lot of confusion, I will try to clear it up. It seems that some of the answers tried to use the Ubuntu 16 Server image when I was specifically trying to create an unattended Ubuntu 16 Desktop image install. The issue arises because of the implementation differences of d-i (debian installer) and ubiquity. Since the Server image will pay attention and use all of the d-i commands in the preseed file, most of the questions I asked are irrelevant to the Server image. However, due to the implementation of ubiquity as the installer of the Desktop image a lot of d-i commands are ignored and you are very limited and a lot of documentation is missing.
Documentation Links Found
Successful Process
Here is my process for successfully creating an unattended Ubuntu Desktop 16.04 LTS iso.
Mount Ubuntu ISO
You will need to mount the ISO files so that you can edit the pertinent files.
Copy ISO Files
We will need to copy the files in mounted ISO to a different directory so that we can edit them. Feel free to use any directory you like, I chose the /opt directory due to another how-to, but /tmp could just as easily be used.
Edit the txt.cfg File
Here we will edit the /opt/ubuntuiso/isolinux/txt.cfg file and customize our boot parameters to get a completely unattended install which will include a preseed file. Use any editor of your choice:
Please take note of a few things:
Use or Create a Preseed File
Use an already existing preseed file with caution! I have not found any that just work. This isn’t to say they don’t exist, I just didn’t find any with quite a bit of searching. There are many ways to configure a preseed file, but I found many options to be ignored, outlined in the Ubiquity Documentation I linked above and in the link for preseed/late_command vs ubiquity/success_command. I am including my simple working preseed file that works with the above txt.cfg file.
For netcfg/get_hostname string and netcfg/get_domain string you can put whatever you want it to be. I used unassigned-hostname and unassigned-domain since I will just change it later through a scripting process.
For any custom command you want to run after installation you need to use the:
Followed by any command you want to run. Pay attention to continuing the strings with ";\" and using the "/target" to change anything pertaining to the new system installed.
Please note these things as I left them in for illustrative purposes and they will likely be different in your preseed command.
Create New ISO
Create the ISO so you can test out your preseed file. If you use one or make your own, you will need to test it as this will LIKELY be the place your process will fail. I wrote a script for quick testing, but you could just point the preseed file at an http:// hosted preseed file and test very quickly that way.
Feel free to change the output name and the the directory in which you will save it.
Burn ISO
I would suggest testing on virtualbox or the like and once you have it working, then burn it to a DVD. You should now have a working unattended Ubuntu Desktop 16.04 LTS install DVD.
Feedback, Corrections, Errors
I wrote this all in one go and there may be errors, typos, or things that got messed up along the way. If anyone tries this, please let me know if you encounter an error in the process. And please remember that if you create your own preseed file, I will probably not be able to answer why your unattended install is broken and not working since ubiquity likes to ignore and not do certain things in the preseed file. I hope this helpful to someone.