Page MenuHomeLubuntu Development

ISO Building
Updated 1,339 Days AgoPublic

This page is meant to fully document all current knowledge about the Lubuntu ISO, including how it's built, what the ISO is made of, and what tooling to look at to make changes if needed. Please add new information as you come across it.

ISO Build Process

The ISO build process is handled by several pieces of tooling. ubuntu-cdimage is the tooling which triggers the entire process. It interacts with Launchpad, handles ISO publishing, etc. livecd-rootfs is what handles the creation of the squashfs, and this is done on Launchpad itself. debian-cd, as forked by Ubuntu, is what handles wrapping up the squashfs and adding metadata. This section breaks down each part and their role.

Nusakan vs Launchpad

A common point of confusion is where the ISOs are actually built. The ISO images and the building of the final ISO is done on a machine called Nusakan, named after the second brightest star in the Corona Borealis. Canonical employees have direct SSH access to this machine and can use it to manually trigger builds, as well as doing final publishing.

The only thing Launchpad is used for is the building of the squashfs using livecd-rootfs. We very rarely trigger builds using Launchpad, but we do use it to view the logs of the livefs build.

Nusakan outputs its ISO building logs to - here you can also find links to the livefs build within each respective build log. will always give you the latest output of the livefs builds if you do not want to find the Nusakan logs first.


What ubuntu-cdimage specifically handles is the creation of the index pages for each published ISO, and triggering of each build. The code can be found here, and if you ever need someone with direct SSH access to tweak something, file a bug against the project here. One example where we had to do this was updated CSS after our custom CSS was deployed.


Ubuntu's fork of debian-cd takes the produced squashfs and wraps it up in an ISO file. The code can be found here.

In tools/boot/CODENAME/boot-ARCH is where you can find the boot parameters and entries for the ISOs. Of note are two boot parameters; maybe-ubiquity and only-ubiquity. Ubiquity then intercepts this and can act accordingly, however, they are fairly useless for us until Calamares gains that functionality.

In data/CODENAME/ you can find the theming for the boot menu on BIOS systems for the live CD. We recently customized this when the logo changed.


livecd-rootfs handles the actual creation of the squashfs. This squashfs is not only the one that is used on the live CD, it is the initial image that is installed on the system prior to customization. You can find the code here.

Using livecd-rootfs, you can install files which are not in any package, and add customization scripts that are also not in any package.

Casper's Role

Casper is a middle ground between customization done directly on the squashfs and ISO-level customization done by debian-cd. It is a set of scripts ran immediately after the ISO is booted which affects the squashfs only when viewed on the ISO and not on the installed system. This is where the live user is created, among other modifications. You can find the code here.

Last Author
Last Edited
Sep 27 2019, 4:10 PM

Event Timeline

tsimonq2 created this object with edit policy "Development Team (Project)".
tsimonq2 published a new version of this document.