How Trisquel is Made
The process for building Trisquel starts by doing a local mirror of Ubuntu and cleaning it. We update the mirror every night with reprepro and some cron scripts, and then it gets cleaned using a blacklist of non-free packages.
The resultant repository is then used as the real upstream for the development Trisquel mirror, which also includes replacements for some of the removed packages (like the kernel, or pieces that need rebranding) and a set of packages that tune up the distro, and which includes artwork, configs, and metapackages.
To update the system, we just need to sync the devel mirror against the freed Ubuntu one. Then we check that the changes work by updating our own computers, and then we rsync the devel repository with the official one at http://archive.trisquel.info.
Our packagesWe include our own modifications for some packages, and it's explained in the package-helpers page.
Building up an ISO imageTrisquel is built using debootstrap, using a script that also installs a metapackage and its dependencies (to build each edition of the distro), compresses it into a squashfs image and builds the .iso using isolinux. The script also applies some changes to the debootstrap directory, to allow it to run in a live environment.
The makedistro script also builds a set of source code DVDs.
A fully-free kernelTrisquel does not include the vanilla Linux kernel you can find at the Linux project servers, but a cleaned up version of Ubuntu's version of the kernel. Both the upstream versions include non-free binary-only firmware files, and also a lot of binary blobs hidden in .c and .h files in the form of huge sequences of numbers. To provide our users with a fully free kernel we use a set of scripts based in the ones from Linux-libre, with some modifications of our own.
We start with the kernel from the Ubuntu repositories (rather than the latest vanilla version, to assure compatibility with the rest of the system), including the modifications done by Ubuntu in the form of a huge patch. We then apply the Linux-libre deblob script for the matching version, and as a final step, the latest Linux-libre script, modified to allow it to be run against older kernels. This step double-checks the code, and also adds the latest Linux-libre features to the package.
As a result of this procedure, we are not only removing the non-free blobs, we also make sure that no piece of the kernel requires a non-free program to work. We also make use of the latest check scripts from Linux-libre, to assure the cleaning of the Ubuntu modifications (which are not managed by the Linux-libre deblob scripts). This often requires checking for false positives such as data tables comprising long lists of numbers, and the addition of extra cleaning procedures to the deblob scripts, if real positives are spotted.