Calamares Plans for Debian 11
Brief history of Calamares in Debian
Before Debian 9 was released, I was preparing a release for a derivative of Debian that was a bit different than other Debian systems I’ve prepared for redistribution before. This was targeted at end-users, some of whom might have used Ubuntu before, but otherwise had no Debian related experience. I needed to find a way to make Debian really easy for them to install. Several options were explored, and I found that Calamares did a great job of making it easy for typical users to get up and running fast.
After Debian 9 was released, I learned that other Debian derivatives were also using Calamares or planning to do so. It started to make sense to package Calamares in Debian so that we don’t do duplicate work in all these projects. On its own, Calamares isn’t very useful, if you ran the pure upstream version in Debian it would crash before it starts to install anything. This is because Calamares needs some configuration and helpers depending on the distribution. Most notably in Debian’s case, this means setting the location of the squashfs image we want to copy over, and some scripts to either install grub-pc or grub-efi depending on how we boot. Since I already did most of the work to figure all of this out, I created a package called calamares-settings-debian, which contains enough configuration to install Debian using Calamares so that derivatives can easily copy and adapt it to their own calamares-settings-* packages for use in their systems.
In Debian 9, the live images were released without an installer available in the live session. Unfortunately the debian-installer live session that was used in previous releases had become hard to maintain and had a growing number of bugs that didn’t make it suitable for release, so Steve from the live team suggested that we add Calamares to the Debian 10 test builds and give it a shot, which surprised me because I never thought that Calamares would actually ship on official Debian media. We tried it out, and it worked well so Debian 10 live media was released with it. It turned out great, every review of Debian 10 I’ve seen so far had very good things to say about it, and the very few problems people have found have already been fixed upstream (I plan to backport those fixes to buster soon).
Plans for Debian 11 (bullseye)
New slideshow
If I had to choose a biggest regret regarding the Debian 10 release, this slideshow would probably be it. It’s just the one slide depicted above. The time needed to create a nice slideshow was one constraint, but another was that I also didn’t have enough time to figure out how its translations work and do a proper call for translations in time for the hard freeze. I consider the slideshow a golden opportunity to explain to new users what the Debian project is about and what this new Debian system they’re installing is capable of, so this is basically a huge missed opportunity that I don’t want to repeat again.
I intend to pull in some help from the web team, publicity team and anyone else who might be interested to cover slides along the topics of (just a quick braindump, final slides will likely have significantly different content):
- The Debian project, and what it’s about
- Who develops Debian and why
- Cover the social contract, and perhaps touch on the DFSG
- Who uses Debian? Mention notable users and use cases
- Big and small commercial companies
- Educational institutions
- …even NASA?
- What Debian can do
- Explain vast package library
- Provide some tips and tricks on what to do next once the system is installed
- Where to get help
- Where to get documentation
- Where to get additional help
It shouldn’t get to heavy and shouldn’t run longer than a maximum of three minutes or so, because in some cases that might be all we have during this stage of the installation.
Try out RAID support
Calamares now has RAID support. It’s still very new and as far as I know it’s not yet widely tested. It needs to be enabled as a compile-time option and depends on kpmcore 4.0.0, which Calamares uses for its partitioning backend. kpmcore 4.0.0 just entered unstable this week, so I plan to do an upload to test this soon.
RAID support is one of the biggest features missing from Calamares, and enabling it would make it a lot more useful for typical office environments where RAID 1 is typically used on worktations. Some consider RAID on desktops somewhat less important than it used to be. With fast SSDs and network provisioning with gigabit ethernet, it’s really quick to recover from a failed disk, but you still have downtime until the person responsible pops over to replace that disk. At least with RAID-1 you can avoid or drastically decrease downtime, which makes the cost of that extra disk completely worth while.
Add Debian-specific options
The intent is to keep the installer simple, so adding new options is a tricky business, but it would be nice to cover some Debian-specific options in the installer just like debian-installer does. At this point I’m considering adding:
- Choosing a mirror. Currently it just default to writing a sources.list file that uses deb.debian.org, which is usually just fine.
- Add an option to enable popularity contest (popcon). As a Debian developer I find popcon stats quite useful. Even though just a small percentage of people enable it, it provides enough data to help us understand how widely packages are used, especially in relation to other packages, and I’m slightly concerned that desktop users who now use Calamares instead of d-i who forget to enable popcon after installation, will result in skewing popcon results for desktop packages compared to previous releases.
Skip files that we’re deleting anyway
At DebConf19, I gave a lightning talk titled “Is it possible to install Debian in a lightning talk slot?”. The answer was sadly “No.”. The idea is that you should be able to install a full Debian desktop system within 5 minutes. In my preparations for the talk, I got it down to just under 6 minutes. It ended up taking just under 7 minutes during my lightnight talk, probably because I forgot to plug in my laptop into a power source and somehow got throttled to save power. Under 7 minutes is fast, but the exercise got me looking at what wasted the most time during installation.
Of the avoidable things that happen during installation, the thing that takes up the most time by a large margin is removing packages that we don’t want on the installed system. During installation, the whole live system is copied from the installation media over to the hard disk, and then the live packages (including Calamares) is removed from that installation. APT (or actually more speficically dpkg) is notorious for playing it safe with filesystem operations, so removing all these live packages takes quite some time (more than even copying them there in the first place).
The contents of the squashfs image is copied over to the filesystem using rsync, so it is possible to provide an exclude list of files that we don’t want. I filed a bug in Calamares to add support for such an exclude list, which was added in version 3.2.15 that was released this week. Now we also need to add support in the live image build scripts to generate these file lists based on the packages we want to remove, but that’s part of a different long blog post all together.
This feature also opens the door for a minimal mode option, where you could choose to skip non-essential packages such as LibreOffice and GIMP. In reality these packages will still be removed using APT in the destination filesystem, but it will be significantly faster since APT won’t have to remove any real files. The Ubuntu installer (Ubiquity) has done something similar for a few releases now.
Add a framebuffer session
As is the case with most Qt5 applications, Calamares can run directly on the Linux framebuffer without the need for Xorg or Wayland. To try it out, all you need to do is run “sudo calamares -platform linuxfb” on a live console and you’ll get Calamares right there in your framebuffer. It’s not tested upstream so it looks a bit rough. As far as I know I’m the only person so far to have installed a system using Calamares on the framebuffer.
The plan is to create a systemd unit to launch this at startup if ‘calamares’ is passed as a boot parameter. This way, derivatives who want this who uses a calamares-settings-debian (or their own fork) can just create a boot menu entry to activate the framebuffer installation without any additional work. I don’t think it should be too hard to make it look decent in this mode either,
Calamares on the framebuffer might also be useful for people who ship headless appliances based on Debian but who still need a simple installer.
Document calamares-settings-debian for derivatives
As the person who put together most of calamares-settings-debian, I consider it quite easy to understand and adapt calamares-settings-debian for other distributions. But even so, it takes a lot more time for someone who wants to adapt it for a derivative to delve into it than it would to just read some quick documentation on it first.
I plan to document calamares-settings-debian on the Debian wiki that covers everything that it does and how to adapt it for derivatives.
Improve Scripts
When writing helper scripts for Calamares in Debian I focused on getting it working, reliably and in time for the hard freeze. I cringed when looking at some of these again after the buster release, it’s not entirely horrible but it can use better conventions and be easier to follow, so I want to get it right for Bullseye. Some scripts might even be eliminated if we can build better images. For example, we install either grub-efi or grub-pc from the package pool on the installation media based on the boot method used, because in the past you couldn’t have both installed at the same time so they were just shipped as additional available packages. With changes in the GRUB packaging (for a few releases now already) it’s possible to have grub-efi and grub-pc-bin installed at the same time, so if we install both at build time it may be possible to simplify those pieces (and also save another few precious seconds of install time).
Feature Requests
I’m sure some people reading this will have more ideas, but I’m not in a position to accept feature requests right now, Calamares is one of a whole bunch of areas in Debian I’m working on in this release. If you have ideas or feature requests, rather consider filing them in Calamares’ upstream bug tracker on GitHub or get involved in the efforts. Calamares has an IRC channel on freenode (#calamares), and for Debian specific stuff you can join the Debian live channel on oftc (#debian-live).
feature requests… I have a couple short ones
let me use Calamares a couple more times, I will be back
user@debian:~$ sudo calamares -platform linuxfb
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to ‘/tmp/runtime-root’
14:13:14 [2]: WARNING: Required settings.conf key disable-cancel is missing.
14:13:14 [2]: WARNING: Branding module-setting *windowExpanding* interpreted as “normal”
14:13:14 [2]: WARNING: the branding component “/etc/calamares/branding/debian” does not ship translations.
14:13:14 [2]: WARNING: RequirementsChecker entry ‘internetCheckUrl’ is undefined in welcome.conf,reverting to default (http://example.com).
14:13:14 [2]: WARNING: RequirementsChecker configuration map:
check : storage, ram, power, root
required : storage, ram, root
requiredRam : 1
requiredStorage : 10
14:13:15 [2]: WARNING: Partition-module setting *defaultFileSystemType* is missing, using ext4
14:13:16 [0]: blkid: unknown file system type “” on “/dev/sda3”
10:13:17 [0]: blkid: unknown file system type “” on “/dev/sdb10”
10:13:26 [2]: WARNING: Could not read fstab from mounted fs
10:13:27 [0]: QObject::setParent: Cannot set parent, new parent is in a different thread
10:15:18 [0]: Could not parse stylesheet of object 0x5596e994ff40
10:15:18 [0]: Could not parse stylesheet of object 0x5596e994d860
10:15:18 [0]: Could not parse stylesheet of object 0x5596e9a1c0c0
10:15:18 [0]: QString::arg: Argument missing: Este dispositivo tiene un % 1 tabla de particiones., MBR
==========================^stalled^=====================
user@debian:~$ sudo calamares -platform linuxfb
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to ‘/tmp/runtime-root’
Calamares is already running, shutting down.
Other running Calamares instances:
true 1810 (“calamares”)
true 6115 (“calamares”)
user@debian:~$
========================================================
user@debian:~$ pkill calamares
pkill: killing pid 1810 failed: Operation not permitted
user@debian:~$ calamares
KDSingleApplicationGuard: Could neither create nor attach to shared memory segment.
QSharedMemomry::create() failed: QSharedMemoryPrivate::initKey: unable to set key on lockQSharedMemomry::attach() failed: QSharedMemoryPrivate::initKey: unable to set key on lock
KDSingleApplicationGuard::instances: need to be operational to report on other instances
Calamares is already running, shutting down.
user@debian:~$
calamares wish list
preserve Live session panel and app settings
manual partitioning:
unable to see existing partition labels
not able to create new partition labels
unable to deselect existing swap partitions
not able to create separate root and user accounts