5

I would like to make a completely unattended installation of Ubuntu Server 14.04 from an USB drive where I extracted the ubuntu-14.04.2-server.iso

In /syslinux/txt.cfg of the USB drive, I added the following section

menu label ^Unattended Ubuntu Server installation
kernel /install/vmlinuz
append noprompt cdrom-detect/try-usb=true auto=true priority=critical url=http://website.com/preseed.cfg vga=788 initrd=/install/initrd.gz quiet --

But when I tried it, even before this menu shows up, I have to select a language (and therefore force me to have a manual intervention by pressing enter).

I found a similar question where it suggests to echo en >syslinux/langlist but I still get the language selection menu (with only one item).

How can I avoid this intervention ?

  • Use the search term 'preseed ubuntu install' to learn how to get a fully automated install. Also see en.wikipedia.org/wiki/Preseed – cremefraiche Apr 17 '15 at 21:49
  • Thank you, I did this already, but I didn't find the solution to my problem (yet). – Jav Apr 20 '15 at 8:32
  • @cremefraiche: I wrote the answer, could you up-vote it in order to increase it's visibility? thanks! – Jav May 4 '15 at 12:56
5

Doing what py4on suggested does simply shorten the list of available languages (to the extend of having one single element: en), but does not automate the language selection. It was probably working on older versions of Ubuntu but the requirement is for the Ubuntu Server 14.04. On 16.04 the instructions below may change to isolinux and isolinux.cfg instead of syslinux depending how you create the media.

In order to avoid this intervention at the language selection menu, the option timeout of syslinux should be set to a strictly positive value. After the specified timeout, the default language will be selected and the default booting entry of syslinux will be selected. The timeout parameter of syslinux represents a time in deci-seconds, and the default value is 0, corresponding to an "infinite timeout".

Therefore, one could set timeout 10 to make syslinux wait 1 second before proceeding with the default value. The best place to put the parameter is in syslinux/syslinux.cfg. For example:

echo "timeout 10" >> syslinux/syslinux.cfg

In order to have a different language than en, I would suggest to proceed as py4on suggested by leaving only the chosen language in the syslinux/langlist file. For example:

echo "fr" > syslinux/langlist

References:

  • It worked but after the timeout it also selected the default option from the install menu automatically. – Katu Jul 8 '16 at 11:03
  • @Katu this is the expected behavior of setting the timeout to a non-zero value. If you want your preseed to be the default option (for a zero touch imaging) you need to rewrite it as the first entry in the isolinux/isolinux.cfg when creating your ISO/USB. – dragon788 Jul 10 '17 at 22:18
3

Before creating the ISO, follow the steps listed on the link below - I've done this myself. For preselecting language specifically do:

# cd /opt/ubuntuiso
# echo en >isolinux/lang

Source: https://askubuntu.com/a/122506

  • Actually, I don't have a isolinux directory, neither a lang file. But I have a syslinux directory and a langlist file. I did put the en only on that file but I still have to press enter to select the only item in the list : English – Jav Apr 20 '15 at 8:32
  • Ok.. In case you haven't consulted it already, here's the relevant Ubuntu setup guide for preseeding. See especially this example preconfig file. They do however state: "How to get the preconfiguration file included in the initrd is outside the scope of this document; please consult the developers' documentation for debian-installer." If this helps let me know and I'll update the answer for others. – py4on Apr 20 '15 at 9:59
  • Ok @Jav, this should fix it for you - when you've put that preconfig file together as you want it (based on the one I've linked to above) then follow the steps here to edit the ISO. As above, please tell me if you're successful with this so I can update the answer and delete these comments. – py4on Apr 20 '15 at 10:04
  • Thanks for the answer. However, I don't want to modify the initrd.gz because I need to put my custom preseed.cfg in the cloud (in order to change it after the CD creation). And anyway, the language selection that bothers me here occurs before the selection of the entry in syslinu/txt.cfg that loads the initrd.gz you suggest me to modify – Jav Apr 20 '15 at 10:21
  • Hi, it seems that your answer was not complete. I assembled the things to do in one answer. Could you up-vote it in order to increase it's visibility? Thanks. – Jav May 4 '15 at 12:53
1

I had been looking for a way to do the same, only just now found an answer to this.

I've only tried this with Ubuntu 16.04, but I suspect the answer will be the same for most Ubuntu versions - the /isolinux folder might be /syslinux for some versions I suspect.

The trick is to modify the /isolinux/bootlogo file, which is an uncompressed cpio archive.

What you need to do is extract the installer CD image to a directory I'll refer to as ${CDDIR}. Then create a temporary folder in which we will store the bootlogo file contents, change to it and then:

Extract the original bootlogo file to the current folder:

cat ${CDDIR}/isolinux/bootlogo | cpio --extract --make-directories --no-absolute-filenames

Remove all non-English files:

ls *.hlp *.tr | grep -v "^en\." | xargs rm

Only keep "en" in the language list:

echo "en" > langlist

Auto-select "en" as the language choice:

echo "en" > lang

After this, I create the new bootlogo file with:

find . | cpio -o > /tmp/bootlogo.new

After this - you can copy your /tmp/bootlogo.new to the directory where your ISO was extracted, overwriting the original bootlogo file:

cp /tmp/bootlogo.new ${CDDIR}/isolinux/bootlogo

Now rebuild your image from the ${CDDIR} contents, and you should not get a language choice anymore.

I was inspired by this post, which customizes the splash-screen: https://askubuntu.com/questions/412707/splash-screen-before-ubiquity-install

  • It is generally a really bad idea to parse the output of ls. You should probably look into either using find or simple shell globbing to get your list of files to process. Extensive further reading on the subject can be found here. – DopeGhoti Jan 4 '18 at 17:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.