The complete solution is:
Remaster a CD, ie, download a non graphical ubuntu installation ISO (server or alternate installation CD), mount it
$ sudo su -
# mkdir -p /mnt/iso
# mount -o loop ubuntu.iso /mnt/iso
Copy the relevant files to a different directory
# mkdir -p /opt/ubuntuiso
# cp -rT /mnt/iso /opt/ubuntuiso
Prevent the language selection menu from appearing
# cd /opt/ubuntuiso
# echo en >isolinux/lang
Use GUI program to add a kickstart file named ks.cfg
# apt-get install system-config-kickstart
# system-config-kickstart # save file to ks.cfg
To add packages for the installation, add a %package
section to the ks.cfg
kickstart file, append to the end of ks.cfg
file something like this.
%packages
@ ubuntu-server
openssh-server
ftp
build-essential
This will install the ubuntu-server "bundle", and will add the openssh-server
, ftp
and build-essential
packages.
Add a preseed file, to suppress other questions
# echo 'd-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition \
select Finish partitioning and write changes to disk
d-i partman/confirm boolean true' > ks.preseed
Set the boot command line to use the kickstart and preseed files
# vi isolinux/txt.cfg
Search for
label install
menu label ^Install Ubuntu Server
kernel /install/vmlinuz
append file=/cdrom/preseed/ubuntu-server.seed vga=788 initrd=/install/initrd.gz quiet --
add ks=cdrom:/ks.cfg
and preseed/file=/cdrom/ks.preseed
to the append line. You can remove the quiet
and vga=788
words. It should look like
append file=/cdrom/preseed/ubuntu-server.seed \
initrd=/install/initrd.gz \
ks=cdrom:/ks.cfg preseed/file=/cdrom/ks.preseed --
Now create a new iso
# 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
That's it. You'll have a CD that would install an Ubuntu system once you boot from it, without requiring a single keystroke.
I was able to figure out all of my issues except for preseeding the Edubuntu-specific questions, so I am going to resort to an Ubuntu vanilla install with the following customizations. I will be installing the Edubuntu packages and setting more things up with bash scripts that I will run from SSH.
- Keyboard layout is set with
keyboard-configuration/layoutcode=us and console-setup/ask_detect=false
boot parameters
- Packages are removed with
ubiquity ubiquity/success_command string in-target apt-get -y purge package
- Packages are installed with
ubiquity ubiquity/success_command string in-target apt-get -y install openssh-server;
- I was able to set the hostname with commands after
ubiquity ubiquity/success_command string
(see EBA.seed below)
isolinux/isolinux.cfg
# D-I config version 2.0
include menu.cfg
default vesamenu.c32
prompt 0
timeout 50
ui gfxboot bootlogo
isolinux/txt.cfg
default unattended-EBA-install
label unattended-EBA-install
menu label ^Install for EBA unattended
kernel /casper/vmlinuz.efi
append file=/cdrom/preseed/EBA.seed keyboard-configuration/layoutcode=us and console-setup/ask_detect=false boot=casper automatic-ubiquity noprompt initrd=/casper/initrd.lz --
label live
menu label ^Try Ubuntu without installing
kernel /casper/vmlinuz.efi
append file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash --
label live-install
menu label ^Install Ubuntu
kernel /casper/vmlinuz.efi
append file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity initrd=/casper/initrd.lz quiet splash --
label check
menu label ^Check disc for defects
kernel /casper/vmlinuz.efi
append boot=casper integrity-check initrd=/casper/initrd.lz quiet splash --
label memtest
menu label Test ^memory
kernel /install/mt86plus
label hd
menu label ^Boot from first hard disk
localboot 0x80
preseed/EBA.seed
#### Custom Preseed for EBA
### by Kevin
### Ubuntu/Edubuntu 14.04
##################################################################################
### General
###################
# Preseed empty to avoid the summary page
ubiquity ubiquity/summary string empty
# reboot automatically, add 'noprompt' to the kernel command line
ubiquity ubiquity/reboot boolean true
### Localization
####################
# Preseeding only locale sets language, country and locale.
d-i debian-installer/locale string en_US
# Keyboard selection
# Disable automatic (interactive) keymap detection.
d-i console-setup/ask_detect boolean false
d-i keyboard-configuration/xkb-keymap select us
ubiquity languagechooser/language-name select English
ubiquity countrychooser/shortlist select US
ubiquity localechooser/supported-locales en_US.UTF-8
ubiquity console-keymaps-at/keymap select us
### Network configuration
#############################
# Disable network configuration entirely. This is useful for cdrom
# installations on non-networked devices where the network questions,
# warning and long timeouts are a nuisance.
d-i netcfg/enable boolean false
# netcfg will choose an interface that has link if possible. This makes it
# skip displaying a list if there is more than one interface.
d-i netcfg/choose_interface select auto
# Disable that annoying WEP key dialog.
#d-i netcfg/wireless_wep string
# The wacky dhcp hostname that some ISPs use as a password of sorts.
#d-i netcfg/dhcp_hostname string radish
# If non-free firmware is needed for the network or other hardware, you can
# configure the installer to always try to load it, without prompting. Or
# change to false to disable asking.
d-i hw-detect/load_firmware boolean true
### Mirror settings
# If you select ftp, the mirror/country string does not need to be set.
#d-i mirror/protocol string ftp
#d-i mirror/country string manual
#d-i mirror/http/hostname string http.us.debian.org
#d-i mirror/http/directory string /debian
d-i mirror/http/proxy string http://proxy:8002
### Account setup
####################
# To create a normal user account.
d-i passwd/user-fullname string EBA Tech
d-i passwd/username string eba
d-i passwd/user-password-crypted password ****
### Clock and time zone setup
# Controls whether or not the hardware clock is set to UTC.
d-i clock-setup/utc boolean true
# You may set this to any valid setting for $TZ; see the contents of
# /usr/share/zoneinfo/ for valid values.
d-i time/zone string US/Eastern
# Controls whether to use NTP to set the clock during the install
d-i clock-setup/ntp boolean true
# NTP server to use. The default is almost always fine here.
#d-i clock-setup/ntp-server string ntp.example.com
### Partitioning
#####################
d-i partman-auto/method string lvm
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
# You can choose one of the three predefined partitioning recipes:
# - atomic: all files in one partition
# - home: separate /home partition
# - multi: separate /home, /var, and /tmp partitions
d-i partman-auto/choose_recipe select atomic
# This makes partman automatically partition without confirmation, provided
# that you told it what to do using one of the methods above.
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
### Base system installation
################################
### Apt setup
# You can choose to install restricted and universe software, or to install
# software from the backports repository.
#d-i apt-setup/backports boolean true
d-i apt-setup/extras boolean true
d-i apt-setup/multiverse boolean true
d-i apt-setup/partner boolean true
d-i apt-setup/restricted boolean true
d-i apt-setup/universe boolean true
# Use non-free packages
ubiquity ubiquity/use_nonfree boolean true
# Policy for applying updates. May be "none" (no automatic updates),
# "unattended-upgrades" (install security updates automatically), or
# "landscape" (manage system with Landscape).
d-i pkgsel/update-policy select unattended-upgrades
### Boot loader installation
# This is fairly safe to set, it makes grub install automatically to the MBR
# if no other operating system is detected on the machine.
d-i grub-installer/only_debian boolean true
### More Fun!
#############################
#ubiquity ubiquity/edubuntu-addon_fallback_install booolean false
#ubiquity ubiquity/edubuntu-addon_ltsp_install booolean false
#ubiquity ubiquity/edubuntu-addon_ltsp_interface select eth0
#ubiquity ubiquity/install/generate-blacklist multiselect ubuntu-edu-preschool ubuntu-edu-primary ubuntu-edu-tertiary
# Install/remove packages, set hostname, install wifi drivers
ubiquity ubiquity/success_command string \
in-target apt-get -y install openssh-server; \
in-target apt-get -y purge unity-scope-imdb unity-scope-musicstores unity-scope-zotero unity-scope-click-autopilot \
unity-scope-deviantart unity-scope-gallica unity-scope-gdocs unity-scope-github unity-scope-googlenews \
unity-scope-launchpad unity-scope-mediascanner unity-scope-onlinemusic unity-scope-openweathermap \
unity-scope-soundcloud unity-scope-sshsearch unity-scope-yahoostock unity-lens-photos unity-lens-video \
unity-scope-audacious unity-scope-chromiumbookmarks unity-scope-clementine unity-scope-click unity-scope-colourlovers \
unity-scope-gdrive unity-scope-gmusicbrowser unity-scope-gourmet unity-scope-guayadeque unity-scope-mediascanner2 \
unity-scope-musique unity-scope-openclipart unity-scope-texdoc unity-scope-tomboy unity-scope-video-remote \
unity-scope-virtualbox unity-scope-yelp unity-webapps-service account-plugin-ubuntuone ubuntu-purchase-service \
deja-dup indicator-messages empathy gwibber thunderbird transmission-gtk pidgin; \
if [ "$(cat /sys/class/dmi/id/chassis_asset_tag)" != "" ]; then \
in-target hostname $(cat /sys/class/dmi/id/chassis_asset_tag) ;\
in-target sed -i "1s/.*/$(cat /sys/class/dmi/id/chassis_asset_tag)/" /etc/hostname ; \
in-target sed -i "2s/.*/127.0.1.1\t$(cat /sys/class/dmi/id/chassis_asset_tag)/" /etc/hosts; \
else \
in-target hostname $(cat /sys/class/dmi/id/product_name) ;\
in-target sed -i "1s/.*/$(cat /sys/class/dmi/id/product_name)/" /etc/hostname ;\
in-target sed -i "2s/.*/127.0.1.1\t$(cat /sys/class/dmi/id/product_name)/" /etc/hosts; \
fi; \
if [ lspci -d 14e4:4315 ]; then \
in-target apt-get -qq install firmware-b43-installer || in-target apt-get -qq install firmware-b43-lpphy-installer; \
fi;
Best Answer
There is no real difference between server and desktop version despite the package-set being installed.
There is a meta-package called "ubuntu-desktop", bringing all packages installed with Ubuntu Desktop. There are also meta-packages for Kubuntu, Edubuntu, Lubuntu and Xubuntu available in default repositories.
Just use a tutorial for Ubuntu server and add this package to your kickstart-file instead of server-related packages (there are other meta-packages like "openssh-server" being installed depending on what services are chosen during installation). If none are chosen (or listed in kickstart-file), you get a minimal Ubuntu-system without anything.
Example for the relevant part in Preseed-file:
Example file found here
same for Kickstart-file:
Don't use @ubuntu-desktop, what means installing a package-group, but in deb-world a package-group is a meta-package which pulls other packages as dependencies.