tl;dr
How can I:
- Install Ubuntu on lots of PCs without burning lots of DVDs and installing manually
- Have a set of preconfigured options applied to all these PCs during (or right after) install
- Automate the way I apply configuration changes to all PCs simultaneously
What we need
We're migrating a school lab of a few dozen PCs from Windows to Ubuntu. All the PCs will have the same configuration (i.e., they might differ in hardware but will have exactly the same software, same user accounts, with same passwords, same system settings, same icons in same positions, etc). All non-maintenance users will be using the guest account.
Current scenario
Here's what I did
- Install Ubuntu 14.04 LTS on a VM.
- Set it with an admin account, a non-admin account and a guest account.
- Install all desired packages (ex:
java
,icedtea-plugin
,flashplugin-installer
). - Install
unattended-upgrades
- Use the non-admin account to:
- configure each software to the desired behaviour (ex: configure the Firefox start page, install AdBlock Plus and a couple addons, configure specific settings for those addons).
- Set the wallpaper and the Unity launcher icons and their positions. This includes a couple custom
.desktop
files with custom icons in~/.icons
, manually added to the launcher in specific positions.
- Set a symbolic link to use this non-admin account as a template for the guest account (every modification to it modifies the guest account).
- Set the guest account to autologin.
- Used remastersys'
backup
option to create an.iso
. For those who don't know remastersys, the backup option creates a live session ISO that behaves exactly like the desktop system, and upon install (manual install, using ubiquity installer), keeps the same settings, including user accounts and files.
Here's the next steps in this scenario
- Manually install this ISO in each lab computer.
- Build a local mirror and configure each PC with the yet undefined mirror IP. (I don't know if it's relevant to the question, but there will be a local Ubuntu mirror (yet to be built and have its IP defined), and the PCs will have only it on their
sources.list
file).
Problems I'm trying to solve (or find better alternatives)
- Before I even start installing Ubuntu on the lab PCs, I still need the extra steps of installing it on a VM, updating mirrors, upgrading packages, installing all the needed packages, setting up user accounts, changing wallpapers, installing firefox addons, configuring these addons, then creating an
.iso
with those settings. - Then I have to burn a lot of DVDs, and manually perform then install procedure for each PC lab. If there are not enough DVDs, I have to wait for the install to end on another computer so I can reuse a DVD. This can take a long time.
- Any configuration change -- anything, from changing the wallpaper, to modifying the admin account password, to installing a new package, to changing the local mirror IP, has to be made manually on each PC. Besides unoptimal, This can lead to inconsistency.
- Any updated software that performs some post-update procedure (ex: Firefox and its "testing addon compatibility" dialog) will keep repeating it on every guest login, until someone logins on the guest template account and runs the software.
What I have considered
I have heard one can use PXE to perform "boot installs" or "net installs", but not only I couldn't find any simple guide that I could understand, it looks like you need to extract a netboot folder from a "clean" ISO and use this to bootstrap the install; so it seems to me that all customizations I have done would go to waste and would have to be done post-install on each PC. From what I gathered you can't use a Live CD ISO to netboot, is that right? It also doesn't solve the problem of applying a single change automatically and simultaneously to all the machines when all the systems are already installed.
This calls for unattended installation! The Ubuntu documentation on preseeding and example preseed file should get you started. You can:
scp
orwget
.lightdm
using files added to/usr/share/lightdm/lightdm.conf.d/
(for example, to autologin the guest user) (again, perhaps bywget
).