Siduction Linux 2024.1.0 (Shine On) Review [KDE Plasma Edition]

Feb. 21, 2025, 8:20 p.m.

Siduction Linux is a rolling release distribution based on the unstable branch of Debian, permanently assigned the codename Sid, from which the name of the distribution is derived.

The distribution provides installation images featuring the KDE Plasma, LXQt and, Xfce desktop environments, as well as an X Window System only version without a DE and minimal version without even the X Window System.

The standout feature of the current incarnation of Siduction is the default use of the Btrfs filesystem with a subvolume layout compatible with Snapper which is fully configured out-of-the box.

This article reviews the 2024.1.0 release of Siduction Linux KDE Plasma Edition.

Introduction

Early in my second Linux career, when I was regularly distrohopping, I converted a Debian based distribution to use the Debian Testing repositories in order to have access to more current software. The installation eventually broke because of the Debian testing and release process. At some point later, I discovered Siduction, a rolling release distribution based on the Debian Unstable branch. Besides a few minor problems, I found it to be extremely stable without the breakage I experienced with the distribution converted to Debian Testing.

Now, I decided to review the current release of Siduction because, after having installed it on my secondary laptop -- a Dell G5 with Nvidia Optimus (Dell G5-5587 Review for Linux Users [G5-5587-7037RED-PUS]) -- I was impressed with how it does not suffer from some problems with resuming from suspend that began about six months ago, as do some other distributions on the same laptop. In that period all the distributions on that laptop (except openSUSE Tumbleweed) including Fedora and Arch based distributions, such as EndeavourOS and CachyOS, had problems resuming from suspend. Among the resume problems was an extremely long delay before displaying the greeter after resuming, and in the case of CachyOS, even being unstable after finally being able to log in.

Besides not being subject to whatever problems the Arch based distributions and Fedora have related to resuming, the distribution is excellent (apart from a few minor issues). This prompted me to also install it on my newer primary laptop, a Lenovo Legion 5i Pro (Lenovo LEGION 5i PRO 16ITH6 Review [82JF002RUS] ), also with Nvidia Optimus technology.

Review Summary

A full review of Siduction Linux 2024.1.0 KDE Plasma Edition is presented below. (A supplementary article which describes fixes and enhancements I made to the installation is presented in Siduction Linux 2024.1.0 (Shine On) Review [KDE Plasma Edition] Supplement: Fixes and Enhancements.) For readers short on time, my observations of the distribution are summarized here.

  • The obvious observation is that it provides Linux users who prefer Debian, its architecture, its administrative programs, its infrastructure, its community, etc., a distribution that offers not only current versions of software as with regular release distributions with short intervals between releases, but a rolling release.
  • The default installation is on a Btrfs filesystem with a layout, while not as complicated as openSUSE's layout due to its additional levels of hierarchy, is compatible with both GRUB and Snapper, which is fully configured. Snapper snapshots are accessible from the GRUB menu. After rollbacks the new system root subvolume is accurately mounted without any user intervention to the GRUB configuration. I had an opportunity to test the reliability of the rollback using the snapper rollback command and can say it works as it should, with the most minimal effort of issuing a single Snapper command.
  • The KDE Plasma Edition provides a vanilla Plasma desktop with theme based on the default Breeze styles. The preinstalled applications are plentiful such that for most users there may not be a need to install any additional software.
  • Both X11 and Wayland sessions are pre-installed and selectable from the SDDM greeter. Both session types worked as they should, although I almost exclusively used the X11 session. Unlike the latest release of Kubuntu, even Plasma's newest advanced tiling feature works in both session types and not only in Wayland sessions.
  • The distribution is excellent for both pre-Turing generation and post-Turing generation Nvidia Optimus laptops. If the non-free component of Debian repositories are enabled, either during installation or after, the proprietary Nvidia drivers are installable directly from Debian repos. The only addition users will have to make (if using X11) is the installation of the distribution agnostic EnvyControl Optimus management utlity after ownloading its deb package from the project's Github release page. This allows setting the graphics mode to one of Hybrid, Discrete, or Integrated in pre-Turing Optimus laptops, and to one of Hybrid or Discrete graphics mode in post-Turing Optimus laptops. (For the seeming limitation in post-Turing laptops see Nvidia Optimus on Linux.)
  • Package management is typical of a Debian based distribution, with the Synaptic Package Manager and Discover from KDE preinstalled. However, neither of these GUIs are recommended for use by the distibution. They are also not integrated with the APT configuration which causes Snapper to be executed and the Snapper plugin that creates pre and post transactions snapshots.
    Nala Package Manager, which among other features privides more informative and better formatted output, is also preinstalled. As it is an interface to APT using an API provided by APT itself, it is completely compatible with Siduction's configuration that enables automatic pre and post snappshots during package management transactions.
    Unfortunately, Nala, while it works well most of the time, and I prefer using it over apt, is unstable. In certain cases it fails with an error -- including a very nicely formatted and colorful Python traceback, while the same operation that causes an error completes successfully with apt.
  • The most serious problem I experienced -- which I used as an opportunity to test the rollback functionality -- was a dependency problem when installing VirtualBox and KMyMoney with one of sub packages of Python after an upgrade of the initial installation's Python 3.12.x to Python 3.13.x. Had I read the apt output, I could easily have solved the problem with the appropriate apt command, one that I have never had to use as long time Ubuntu user. The command,
    apt --fix-broken install
    is recommended on new installtions of Debian Sid.
  • The Siduction installation includes the powerfull firewall management program firewalld, which supports such advanced features as zones. Its basic functionality and activities, as with other supported firewall managemnt applications, such as UFW, can be accessed from the Firewall component of Plasma's System Settings. Its optioinal GUI, Firewall Config, is also powerfull, allowing easy zone changes and enablement or disablement of traffic by service from a selectable list of services within the application. Unfortunately, the firewalld installation is broken, forcing me to replace it with UFW.
  • A simple but important problem I found was that the distribution does not provide a way to verify the authenticity of downloaded ISO images with GPG signatures; it only provides MD5 and SHA256 checksums at the same URI as ISO images for download integrity verification.
  • GTK applications such as Inkscape and others which use GTK components such as Visual Studio Code do not display menus in Plasma's Global Menu widget in Siduction's KDE Plasma Edition. This is usually enabled in other distributions which have a KDE Plasma Edition with the simple inclusion of the appropriate GTK components.

Review

Pre-Installation

The pre-installation experience, as usual, when considering installing a new distribution, centers around the distribution's website and online resources. It seems the Siduction main website has received an update which improves it since the last time I installed Siduction. The download links for installation media was easy to find by selecting the "Installation Media" item from the "Download" drop-down menu in the top menu bar. This dorp down also has items, Packages and Mirrors which, respectively, link to a page providing the repository URI's for Siduction's own repositories -- extra and fixes, and to a list of mirrors for its own repositories.

The other items of interest on Siduction's website are the links to its forum and the Siduction manual. Besides these, the distribution's website and online resources are basic if not lacking what other distributions provide. But this is not an issue when considering the manual (see below) is adequate for addressing nearly all issues a Siduction user may face and Debian's online resources are complete, for example, including the online package search portal.

The only negative aspect of the pre-installation experience, one that can be easily corrected is that the distribution does not provide a way to verify the authenticity of downloaded ISO images with GPG signatures; it only provides MD5 and SHA256 checksums at the same URI as ISO images for download integrity verification.

  • The Siduction website home.
  • The Siduction website home.
  • The Siduction website home.
  • The Siduction website home.
  • The Siduction website home.
  • The Siduction website home.
The Siduction Web Site
The third image shows the installation media download page with download links for each flavor of Siduction installation media. Each has a download link for a mirror in the US and the EU.

The Live ISO Environment

After powering on the laptop and selecting the USB from the firmware interface, the Siduction live ISO environment presents a a GRUB menu customized with the release's default wallpaper that has items for setting the time zone, the keyboard map -- which, in my case, were correctly preselected, as well as other items for editing the kernel command line to insert kernel parameters, for detecting firmware boot managers, and for accessing help. Unfortunately, I did not investigate these items, and booted.

The Live Installation Medium GRUB Menu
The menu has items for setting the timezone, keyboard map, language, and for editing the kernel commandline.

The KDE Plasma Edition's live ISO environment look and feel is based on a standard Plasmashell layout with a modified default Breeze theme and a wallpaper that based on the default current KDE Plasma wallpaper with additional elements added by the distribution to reflect its identity and the identity of the release, namely a watermark that contains the distribution name and the release codename, and a prominent diamond. The SDDM greeter theme, shown later in the article in Review->First Boot, also has the same visual theme, but the fields for username and password, and controls for session type selection and other control elements are unique to Siduction.

  • The Linux 2024.1.0 (Shine on ...). KDE Plasma Edition desktop.
  • The look and feel of Siduction Linux 2024.1.0 (Shine on ...). KDE Plasma Edition
The Siduction Live ISO Look and Feel
The look and feel of the live ISO environment is a standard upstream Plasmashell layout where the only custom theme elements are a modification of the default plasma wallpaper and a Breeze based theme.

The live ISO environment is filled with the most extensive set of software I have seen recently in any live ISO environment, making it very usable without additional package installations. The software available in the live ISO, which is shown in the following set of images of the application launcher, is also made available out-of-the-box in the installed system.

Applications Available in the Live ISO Environment
The selection of available applications is large, and should be adequate for most users, especially if using the live ISO without installing Siduction. The applications available in the live ISO medium are also installed when installing Siduction permanently on a system.
Click on any of the thumbnails to view a slideshow of the images.

Installation

Siduction, like many Linux distributions, uses the Calamares installer. The installation process, which is shown in the following set of screenshots, was simple and quick. The most notable item of the installation is that Siduction adds one screen to the standard progression of screens or components in the installer, namely one that allows users to specify whether non-free software repositories should be enabled by adding them to the APT sources configuration. This is necessary in order to install, for example, Nvidia proprietary drivers.

The only other notable item is that in my installation on the Dell G5, preselected locale was set to en_GB, although the preselected time-zone was correctly pre selected to Americas/New_York, however, in my installation on the Lenovo Legion 5i Pro, the locale was also set correctly.

Siduction Linux 2024.1.0 (Shineon) KDE Plasma Edition Installation
Siduction uses the Calamares installer almost universally used by Linux distributions. The only notable items of the installer is that the default filesystem is Btrfs and that it prompts whether to activate Debian's non-free repositories.
Click on any of the thumbnails to view a slideshow of the images.

First Boot

Upon rebooting after the installation completed, I was presented with a GRUB that used the same theme as the live ISO and a desktop environment exactly the same as the live ISO, with the same applications. The biggest issue for most users at this point is that Siduction does not preconfigure sudo. The reasons for this are stated in the Siduction manual, the primary one being that it prevents an attacker who has learned the password of a user with sudo privileges, they will have rights to the entire system, wheras, if the password of a regular user without sudo privieleges is compromised, the attacker will only have the same access as a regular user and can not make changes to the system.

The distribution suggests only using su to switch to root when using a terminal -- which uses the shell typical on most distributions -- Bash. Siduction does, however, provide doas, a lightweight alternative to sudo, but is not configured out-of-the-box. They also suggest su-to-root for providing elevated privileges to graphical applications, which is not necessary or supported in Plasma as it prompts for a root password when necessary. For users who want sudo for convenience or because they have become accustomed to using it, the distribution provides instructions to enable it.

The following set of screenshots were taken during my initial use of Siduction, immediately after the installation. Note the number of package updates, and the contents of /etc/fstab.

Siduction Linux 2024.1.0 (Shine On ...) KDE Plasma Edition Immediately After Installation
The SDDM theme (featured image, Images 2&3) adds a customization by Siduction that displays the current snapshot that is mounted as the system root, which is updated after each rollback. Image 6 shows a Konsole window with /etc/fstab. Image 7 shows the first update after installation with 993 packages selected for update.
Click on any of the thumbnails to view a slideshow of the images.

Btrfs

The Btrfs filesystem has gained popularity in recent years as distributions' default filesystem format. Siduction has also adopted the filesystem as its default format. It is the preselected filesystem format for existing partitions, except the EFI System Partition, when configuring storage targets for the installation is Btrfs.

Siduction not only uses Btrfs for the installation, but also makes the subvolume layout compatible with Snapper for system snapshots and rollbacks, including integration with the default CLI package manager for automatic snapshots during package management transactions, and integration with GRUB for producing a GRUB submenu for selecting snapshots into which to boot as a first step in initiating a rollback. The details of the various aspects of the Btrfs/Snapper/GRUBi configuration is discussed below.

Siduction's Subvolume Layout

The Siduction installation on Btrfs is unlike most distribution's which use Btrfs as the default subvolume or provide it as an option. Some distributions, such as Fedora as of release 39, format a partition with Btrfs and place the installation on the main subvolume (subvolid 5) created when the partition is formatted with Btrfs. Some other distributions create a set of subvolumes within the top level subvolume one of them being an @ subvolume to be mounted at /, and others for filesystem hierarchy paths to be excluded from Btrfs snapshots, such as /var/log. Of these distributions, those which include Snapper integration will also create a snapshots subvolume under the subvolume to be mounted at /, as required by Snapper.

Siduction's subvolume layout, as illustrated in the following image, goes further in the direction of openSUSE's -- the Btrfs pioneer -- subvolume layout, by creating a subvolume (subvolid=256) under the top level subvolume, and placing all other subvolumes in this subvolume. In the initial state of the system, illustrated in the left pane of the image, before any rollbacks are performed, the @ subvolume (subvolid=256; subvolume path /@; the first subvolume created after the top level subvolume, itself created automatically by the Btrfs formatting operation) is mounted at /. At the initial state the default Btrfs subvolume is not set, as is necessarily the case with openSUE because of their customization of GRUB and their installation of the filesystem hierarchy, with the exception of paths to be excluded from snapshots, into a manually created Snapshot #1. (See An Arch Linux Installation on a Btrfs Filesystem with Snapper for System Snapshots and Rollbacks which describes the openSUSE layout, as well as A Fedora Installation with an openSUSE Style Btrfs Subvolume Layout and Snapper Integration for System Snapshots and Rollbacks and Converting an Existing Ubuntu 24.10 Installation on Ext4 to Btrfs with an openSUSE Style Subvolume Layout and Snapper Integration for System Snapshot Management, which describe, respectively, converting a Fedora Btrfs installation and an Ubuntu ext4 installation to openSUSE's Btrfs/Snapper configuration.)

The Siduction 2024.1.0 (Shine On ...) Btrfs Subvolume Layout
The subvolume layout places subvolumes for the filesystem hierarchy root (/), the snapshots subvolume, and subvolumes for filesystem hierarchy paths (/root, and /var/log) in subvolume under the main Btrfs subvolume.

When a Snapper rollback is performed, the initial state of the subvolume changes in that the @ subvolume will no longer be mounted at /, but the new read-write snapshot -- a copy of the snapshot to which the system is rolled back -- created as part of the rollback process. The new read-write snapshot is also set as the default Btrfs subvolume. This state is illustrated in the right pane of the above image. Subsequent rollbacks will repeat this process such that the new read-write snapshot created by the rollback will be mounted at the filesystem hierarchy root and will be set as the default Btrfs subvolume.

In my opinion this subvolume layout is the best of any distribution that I have used that also incorporates Snapper, except perhaps, openSUSE's. It is fully compatible with Snapper, but, while creating a subvolume below the top level to contain all other subvolumes, it reduces the complication of openSUSE's layout by reducing the level of subvolumes by one.

Snapper

The subvolume layout described above is compatible with Snapper in that it has a @snapshots subvolume and that it is mounted under the subvolume mounted at the root of the filesystem hierarchy (accessible at /.snapshots). This allows snapshots at snapper, whether automatically through Snapper/APT integration, systemd units, or manually to be created under ./snapshots.

But unlike distribution's like Garuda, which also integrate Snapper with a Btrfs filesystem, Siduction fully uses Snapper for both snapshot creation and rollbacks. When a Garuda system is rolled back, it uses btrfs commands to move the current system subvolume to a backup and then copies the read-only snapshot to which to rollback to a subvolume named @ at subvolume path /@, replacing the former system subvolume. In a Siduction system, the snapper rollback command can be used, which makes the two new snapshots mentioned earlier, a read-only copy of the current system and a read-write copy of snapshot to which to rollback, also setting it as the default Btrfs subvolume.

Siduction adds several scripts as part of its own siduction-btrfs package to enhance Snapper functionality, three of which are executed by Siduction's Snapper plug-in at /usr/lib/snapper/plugins/50-siduction.sh. These scripts perform actions such as modifying Snapper's snapshot descriptions with information from APT logs when snapshots are created as a result of an APT package management transactions.

Snapper/APT Integration

Snapper also integrated with APT in Siduction's Btrfs/Snapper configuration, such that pre and post snapshots transactions are created with each package management transaction. In the process used to convert an Ubuntu system originally installed on an ext4 filesystem as described in Converting an Existing Ubuntu 24.10 Installation on Ext4 to Btrfs with an openSUSE Style Subvolume Layout and Snapper Integration for System Snapshot Management, this functionality relied on the apt-btrfs-snapshots package which contained the APT configuration file /etc/apt/apt.conf.d/80-btrfs-snapshot and the Python package apt_btrfs_snapshot.py. The configuration causes the Python program to execute the Snapper commands to create snapshots before and after APT package management transactions.

This package does not exist in Debian's package repositories, neither does anything similar exist in Siduction's Fixes or Extras deb repositories or in its Github repositories. However, the APT configuration file, /etc/apt/apt.conf.d/snapper, with contents as shown below.

# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=770938
  DPkg::Pre-Invoke  { "if [ -e /etc/default/snapper ]; then . /etc/default/snapper; fi; if [ -x /usr/bin/snapper ] && [ ! x$DISABLE_APT_SNAPSHOT = 'xyes' ] && [ -e /etc/snapper/configs/root ]; then rm -f /var/tmp/snapper-apt || true ; snapper create -d apt -c number -t pre -p > /var/tmp/snapper-apt || true ; snapper cleanup number || true ; fi"; };
  DPkg::Post-Invoke { "if [ -e /etc/default/snapper ]; then . /etc/default/snapper; fi; if [ -x /usr/bin/snapper ] && [ ! x$DISABLE_APT_SNAPSHOT = 'xyes' ] && [ -e /var/tmp/snapper-apt ]; then snapper create -d apt -c number -t post --pre-number=`cat /var/tmp/snapper-apt` || true ; snapper cleanup number || true ; fi"; };

The DPkg::Pre-Invoke and DPkg::Post-Invoke configuration parameters in this file cause a snapper create command to be executed, respectively, before and after each package management transaction. The following image of a split Konsole window displays in the top pane, the file /etc/apt/apt.conf.d/80snapper.conf open in a vim instance. The bottom pane of the Konsole window shows the output of snapper list; note the snapshot description fields which indicate that they are the created by package management transactions. As we see later in the article the descriptions are actually modified by Siduction's own scripts to reflect the same information as the APT log.

Snapper/APT Integration
The top pane of the Konsole window shows /etc/apt/apt.conf.d/80snapper.conf with the DPkg::Pre-Invoke and DPkg::Post-Invoke configuration parameters. The bottom pane of the Konsole window shows the output of snapper list; note the snapshot description fields which indicate that they are the created by package management transactions.

Btrfs/Snapper/GRUB Integration

GRUB integration is also complete. Snapshots are automatically detected during package management transactions by the grub-btrfs program, as illustrated in the following listing showing an excerpt of the output of a package management transactions. (For more on grub-btrfs, see Upgrading a Fedora 39 Installation on a Btrfs Filesystem with an openSUSE Style Subvolume Layout to Fedora 40)

Generating grub configuration file ...
Found theme: /usr/share/grub/themes/shine-on/theme.txt
Found linux image: /boot/vmlinuz-6.12.11-1-siduction-amd64
Found initrd image: /boot/initrd.img-6.12.11-1-siduction-amd64
Found linux image: /boot/vmlinuz-6.12.10-1-siduction-amd64
Found initrd image: /boot/initrd.img-6.12.10-1-siduction-amd64
Found linux image: /boot/vmlinuz-6.12.6-1-siduction-amd64
Found initrd image: /boot/initrd.img-6.12.6-1-siduction-amd64
Found memtest86+ 64bit EFI image: /boot/memtest86+x64.efi
Found memtest86+ 32bit EFI image: /boot/memtest86+ia32.efi
Found memtest86+ 64bit image: /boot/memtest86+x64.bin
Found memtest86+ 32bit image: /boot/memtest86+ia32.bin
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
Found Windows Boot Manager on /dev/nvme1n1p1@/EFI/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for UEFI Firmware Settings ...
Detecting snapshots ...
Found snapshot: 2025-01-24 23:34:23 | @snapshots/33/snapshot | pre  | apt                              |
Found snapshot: 2025-01-23 19:05:14 | @snapshots/32/snapshot | post | Upgrade                          |
Found snapshot: 2025-01-23 19:04:52 | @snapshots/31/snapshot | pre  | Upgrade                          |
Found snapshot: 2025-01-23 18:25:50 | @snapshots/30/snapshot | post | Install biber +132 pkg           |
Found snapshot: 2025-01-23 18:24:57 | @snapshots/29/snapshot | pre  | Install biber +132 pkg           |
Found snapshot: 2025-01-23 18:04:44 | @snapshots/28/snapshot | post | Install kdevelop +26 pkg         |
Found snapshot: 2025-01-23 18:04:32 | @snapshots/27/snapshot | pre  | Install kdevelop +26 pkg         |
Found snapshot: 2025-01-23 17:58:17 | @snapshots/26/snapshot | post | Install bison +3 pkg             |
Found snapshot: 2025-01-23 17:58:13 | @snapshots/25/snapshot | pre  | Install bison +3 pkg             |
Found snapshot: 2025-01-23 17:48:23 | @snapshots/24/snapshot | post | Install perl-tk                  |
Found snapshot: 2025-01-23 17:48:20 | @snapshots/23/snapshot | pre  | Install perl-tk                  |
Found snapshot: 2025-01-23 17:47:55 | @snapshots/22/snapshot | post | Install tk9.0 +2 pkg             |
Found snapshot: 2025-01-23 17:47:53 | @snapshots/21/snapshot | pre  | Install tk9.0 +2 pkg             |
Found snapshot: 2025-01-23 17:38:45 | @snapshots/20/snapshot | post | Install starship                 |
Found snapshot: 2025-01-23 17:38:43 | @snapshots/19/snapshot | pre  | Install starship                 |
Found snapshot: 2025-01-23 17:38:32 | @snapshots/18/snapshot | post | Install fish +3 pkg              |
Found snapshot: 2025-01-23 17:38:28 | @snapshots/17/snapshot | pre  | Install fish +3 pkg              |
Found snapshot: 2025-01-23 17:34:26 | @snapshots/16/snapshot | post | Install tree-sitter-cli +102 pkg |
Found snapshot: 2025-01-23 17:34:03 | @snapshots/15/snapshot | pre  | Install tree-sitter-cli +102 pkg |
Found snapshot: 2025-01-23 17:32:08 | @snapshots/14/snapshot | post | Install fzf                      |
Found snapshot: 2025-01-23 17:32:06 | @snapshots/13/snapshot | pre  | Install fzf                      |
Found snapshot: 2025-01-23 17:20:56 | @snapshots/12/snapshot | post | Install neovim +12 pkg           |
Found snapshot: 2025-01-23 17:20:52 | @snapshots/11/snapshot | pre  | Install neovim +12 pkg           |
Found snapshot: 2025-01-22 23:40:53 | @snapshots/10/snapshot | post | Upgrade                          |
Found snapshot: 2025-01-22 23:23:24 | @snapshots/9/snapshot  | pre  | Upgrade                          |
Found snapshot: 2025-01-22 23:14:13 | @snapshots/8/snapshot  | post | Install firefox +1 pkg           |
Found snapshot: 2025-01-22 23:14:06 | @snapshots/7/snapshot  | pre  | Install firefox +1 pkg           |
Found snapshot: 2025-01-22 22:53:29 | @snapshots/6/snapshot  | post | Install code                     |
Found snapshot: 2025-01-22 22:24:18 | @snapshots/5/snapshot  | pre  | Install code                     |
Found snapshot: 2025-01-22 20:45:57 | @snapshots/4/snapshot  | post | Install python3                  |
Found snapshot: 2025-01-22 20:45:56 | @snapshots/3/snapshot  | pre  | Install python3                  |
Found snapshot: 2025-01-22 20:45:15 | @snapshots/2/snapshot  | post | Install libnvidia +90 pkg        |
Found snapshot: 2025-01-22 20:43:47 | @snapshots/1/snapshot  | pre  | Install libnvidia +90 pkg        |
Found 33 snapshot(s)
Unmount /tmp/grub-btrfs.Gzlc9GT7Vv .. Success
done
Setting up libzxing3:amd64 (2.3.0-2+b2) ...
Setting up libpathplan4:amd64 (2.42.4-2+b4) ...
Setting up firefox-beta (135.0b9~build1) ...
Setting up usbmuxd (1.1.1-6) ...
usbmuxd.service is a disabled or a static unit not running, not starting it.
Setting up libspdlog1.15:amd64 (1:1.15.0+ds-2+b1) ...
Setting up libglapi-mesa:amd64 (24.3.4-1) ...
Setting up weechat-core (4.5.1-1+b2) ...
Setting up xserver-xorg-video-vesa (1:2.6.0-2) ...
Setting up linux-headers-siduction-amd64 (6.12-11) ...
Setting up weechat-curses (4.5.1-1+b2) ...
Setting up tree-sitter-cli (0.20.8-6+b2) ...

The detected snapshots are added to a Snapshots GRUB submenu item which opens to a list of available read-only snapshots into which the system can be booted to initiate a system rollback.

The Siduction GRUB Menu
Image 1
The top level GRUB menu before any rollbacks. Note that menu item to boot Siduction includes the subvolume that contains the current system. Also note the siduction snapshots menu item.
Image 2
When selecting the siduction snapshots menu a list of the available snapshots into which the system can be booted is displayed. Selecting any of the snapshots will display the available kernels for that snapshot. Selecting one of the available kernels will boot the system into the selected snapshot with that kernel.
Image 4
The list of snapshots when there are more snapshots.
Image 5
The top level GRUB menu when multiple kernels are available. At the time this image was captured, a rollback has been performed, so the heading indicates the snapshot that is the root of the system; it is now Snapshot#36, whereas before it was not a snapshot but the original installation subvolume at subvolume path /@/.

Setting up grub-btrfs (4.11-1~1siduction1) ...

Configuration file '/etc/default/grub-btrfs/config'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** config (Y/I/N/O/D/Z) [default=N] ? d
--- /etc/default/grub-btrfs/config      2025-01-22 20:20:07.444551167 -0500
+++ /etc/default/grub-btrfs/config.dpkg-new     2025-01-06 10:44:38.000000000 -0500
@@ -6,7 +6,7 @@

 # Name appearing in the Grub menu.
 # Default: "Use distribution information from /etc/os-release."
-GRUB_BTRFS_SUBMENUNAME="siduction snapshots"
+#GRUB_BTRFS_SUBMENUNAME="Arch Linux snapshots"

 # Custom title.
 # Shows/Hides "date" "snapshot" "type" "description" in the Grub menu, custom order available.

Configuration file '/etc/default/grub-btrfs/config'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** config (Y/I/N/O/D/Z) [default=N] ?
Progress: [ 68%] [███████████████████████████████████████████████████████████████████████████████████████████████████▋

GRUB Kernel Image Path and / Mounting

The GRUB Btrfs integration also ensures that the initial installed system subvolume at subvolume path /@ is used in the path to the kernel image in kernel command line in GRUB. When the system is rolled back, the kernel command line is modified for subsequent boots to reflect the subvolume that contains the new system (the read-write snapshot that is a copy of the snapshot to which the system was rolled back created during the rollback). In the following listing displaying the kernel command line after the system has been rolled back, the kernel image path uses the absolute subvolume path to Snapshot #36.

󰂄 89%  19:05:20  USER: brook HOST: Legion-Siduction   
PCD: 22h46m31s ~  ❯$ cat /proc/cmdline
BOOT_IMAGE=/@snapshots/36/snapshot/boot/vmlinuz-6.13.3-1-siduction-amd64 root=UUID=3b0b2b91-34d0-4559-a1ec-88b4a54b34e5 ro rootflags=subvol=@snapshots/36/snapshot quiet resume=UUID=980ddbbf-9b79-4390-be21-850e62b7ebb2 systemd.show_status=1

The kernel command line also shows that the GRUB variable rootflags is used and is set to the snapshot that is to be used as the current root of the system, specified with the subvol mount option with a value of the snapshot expressed as a subvolume path, subvol=@snapshots/36/snapshot. In openSUSE's GRUB/Snapper configuration, emulated in An Arch Linux Installation on a Btrfs Filesystem with Snapper for System Snapshots and Rollbacks, this parameter is not used and its purpose is fulfilled instead by the default subvolume attribute of the Btrfs filesystem.

In distribution's such as Garuda which do not set a default Btrfs subvolume and copy the snapshot to which to roll back to the /@ subvolume, as described earlier, the rootflags parameter is always set to /@.

The fact that rootflags is used by Siduction, and that it is not set to /@, except initially before any rollbacks, may be a recent change in GRUB that allows this. Expect an article on this site after investigating this.

Rollback

To reverse the package dependency issue -- described below -- created by an upgrade, which prevented the installation of VirtualBox, I used the Snapper rollback capability, which in addition to solving the problem, allowed me to test the functionality. The standard Snapper process is to first boot into the read-only snapshot to which to rollback the system by selecting it in the GRUB menu, then after the system has booted into the snapshot, issue the Snapper rollback command. The following image depicts a Konsole window showing the output of snapper list and the execution of the Snapper rollback command, in this case:

sudo snapper --ambit classic rollback 2

specifying that the system should be rolled back to Snapshot #2.

Initiating a Rollback After Booting Into a Read-Only Snapshot to which to Rollback
After booting into Snapshot #2, the command used was
snapper --ambit classic rollback

The rollback comleted successfully, with all related aspects of the system modified correctly, including the GRUB configuration. The effect of the rollback on the system is shown in the following image.

Item 1
The output of snapper list shows that the rollback creates two new snapshots, Snapshot #35 which is a read-only backup snapshot of the pre-rollback system, and Snapshot #36 a read-weite copy of the snapshot to which to rollback. Snapshot #36 becomes the new subvolume to be mounted at the filesystem hierarchy root.
Item 2
The output of cat /proc/cmdline shows that the path of the kernel image is now at subvolume path /@snapshots/36/snapshot/boot/vmlinuz-6.12.6-1-siduction-amd64 wheras before it was at /@/boot/vmlinuz- ..., within the subvolume originally used as the root of the system during installation. After the next rollback, the "36" in the subvolume path will be replaced by whatever snapshot is created as the read-write copy of the snapshot to which to rollback.
Item 3
The GRUB configuration is automatically updated by Siduction's scripts executed by its Snapper plugin. In this case, GRUB's linux and initrd commands reflect the new snapshot at the root of the filesystem hierarchy, /@snapshots/36/snapshot/boot/vmlinuz-6.12.6-1-siduction-amd64 wheras before it was at /@/boot/vmlinuz- ....
Item 4
The output of btrfs subvolume list / shows the new subvolumes created as part of the rollback, Subvolume ID 294 the backup of the pre-rollback system and, Subvolume ID 295 the new root of the filesystem hierarchy.
The state of the system with respect to Btrfs/Snapper related characteristics.
Snapper created two new snapshots, a read-only backup of the pre-rollback system and a read-write duplicate snapshot of the snapshot to which to rollback, which became the new system after reboot. The GRUB configuration also was modified to boot into the new system,

Snapper GUI

Siduction pre-installs a GUI application to manage Snapper snapshots called Snapper GUI, shown in the following set of images. It provides a listing of snapshots. It is also capable of creating and deleting snapshots. It's most useful feature is the ability to display the files that have changed between two snapshots, even to the level of seening a diff between the pre snapshot and post snapshot state of files. Unlike opemSUSE's YaST component for similar functionality, it is not able to rollback individual files. In addition to this missing functionaloity, some users, like me, will not like the fact that it not only uses the GTK toolkit, it appears to be a GNOME application, creating a visual clash with the overall cohesive look of Plasma, KDE applications, and even other GTK (not GNOME) appls like Inkscape,

Snapper GUI.
The apt modernize-sources command converted the format. The Microsoft installation did not provide GPG verification files, so this resulted in an error which was resolved as shown in Fixes and Enhancements.

Nvidia Graphics

The Siduction installer does not have an option for booting with Nvidia drivers enabled which will cause Nvidia drivers to be available in the installed system. It uses Nouveau by default, with the option to install Nvidia drivers from Debian repositories if the non-free component of Debian's repositories were enabled during installation, or if enabled afterward.

The default opsn-source Nouveau drivers had no issues on the Dell G5, even when connected to an external monitor (a 4k UHD TV) connected by HDMI. It also had no issues during my brief use of the Lenovo Legion 5i Pro, before installing the Nvidia driver, although I did not connect to the external AOpen portable monitor I ususally connect to this laptop.

On both lapthops I installed the proprietary Nvidia driver, as described below in Section Fixes adn Enhancements->Installing Nvidia Proprietary Drivers. As both of these laptops are Optimus laptops, I also needed a way to switch/set the graphics mode easily, so I installed the distribution agnostic EnvyControl, a tool similar to Optimus Manager for Arch based distributions, which can switch between Discrete, Integrated, and Hybrid modes laptops with pre-Turing Nvidia GPUs, and between Discrete and Hybrid modes in laptops with post-Turing Nvidia GPUs. This application is not available in Debian's or Siduction's repositpries, so the installation -- described in Section Fixes and Enahancements->Installing EnvyControl -- required downloading a deb package from the project's Github.

The following image shows the execution of the EnvyControlcommand to set the graphics mode to Hybrid on the Lenovo Legion which has a post-Turing Nvidia GPU capable of Run Time (ACPI) D3 power management. (See Nvidia Optimus on Linux for a description of ACPI power states).

Installing and Using EnvyControl
The first image shows the command to set the graphics mode to Hybrid on a post-Tuding Optimus laptop, where RTD3 is available. The second image shows the completion of the Nvidia installation, prior to installing EnvyControl, and the usage description on the project's Github.

Package Management

Package management on Siduction KDE Plasma Edition are typical of Debian and Debian based distributions. The most common apt-xxx CLI programs are available by default, as well as aptitude -- which I attempted to use for manual package dependency resolution for the dependency problem described below -- and the preferred interactive CLI tool apt. Various GUI package management tools are also available besides the standard Debian CLI tools, including both Synaptic Package Manager and KDE's Discover. The Siduction community, as indicated in some forum posts does not recommend using Discover for package management, although it can be used to install Plasma and KDE application add-ons. I did attempt to use Discover for an upgrade to see what would happen, but the operation failed with an error.

There was one notable addition to the suite of package management tools in Siduction, however. The Nala package manager, a front-end to APT, specifically, libapt-pkg, interfaced through APT's python-apt API. Nala improves on available APT tools such as apt-get and apt by providing more informative and better formatted output produced by package management operations, as well as some other functional improvements, such as use of parallel downloads when retrieving packages, mirror testing and sorting, and storing package management history for redoing or reversing transactions.

As an example of Nala's improved usability, the following listing shows using Nala to search for installed packages matching a pattern in the package name; apt does not have such a feature but requires using its search command with a pipe to grep for the pattern " installed. As further examples of its improved visual appeal and informational output, the following set of images show Nala being used to upgrade Siduction.

Using Nala to Upgrade Siduction
Nala is TUI interface to APT with an emphasis in on improved usability with better formatting of output comapred to apt.
Click on any of the thumbnails to view a slideshow of the images.

It seems that Nala package management transactions, like apt transactions, cause pre and post transaction snapshots to be created through the Siduction Snapper plugin (see Section Review->Btrfs->Snapper). The Nala operation shown in the above set of images completes at -- according to the fish prompt -- 19:00:24 after a duration of 9m48s. The following image showing the Snapper snapshots and the Nala history, Nala recorded a package management transaction at 19:00:24.

The Output of snapper list and nala history
Snapshots #91 and #92 were created during the Nala package management transaction.

During the package management transaction, Snapper is actively working, as shown in the following excerpt of the Snapper log, beginning at 18:53:22, presumably after the download phase of the package management transaction has completed.


... excised ...
2025-02-24 21:41:17 MIL libsnapper(53847) snapperd.cc(main):315 - Exiting
2025-02-25 18:53:22 MIL libsnapper(93745) snapperd.cc(main):283 - Requesting DBus name
2025-02-25 18:53:22 MIL libsnapper(93745) snapperd.cc(main):298 - Loading snapper configs
2025-02-25 18:53:22 MIL libsnapper(93745) Snapper.cc(getConfigs):299 - Snapper get-configs
2025-02-25 18:53:22 MIL libsnapper(93745) Snapper.cc(getConfigs):300 - libsnapper version 0.10.6
2025-02-25 18:53:22 MIL libsnapper(93745) AsciiFile.cc(reload):922 - loading file /etc/default/snapper
2025-02-25 18:53:22 MIL libsnapper(93745) AsciiFile.cc(get_value):1078 - key:SNAPPER_CONFIGS value:root home
2025-02-25 18:53:22 MIL libsnapper(93745) AsciiFile.cc(reload):922 - loading file /etc/snapper/configs/root
2025-02-25 18:53:22 MIL libsnapper(93745) AsciiFile.cc(get_value):1078 - key:SUBVOLUME value:/
2025-02-25 18:53:22 MIL libsnapper(93745) AsciiFile.cc(reload):922 - loading file /etc/snapper/configs/home
2025-02-25 18:53:22 MIL libsnapper(93745) AsciiFile.cc(get_value):1078 - key:SUBVOLUME value:/home
2025-02-25 18:53:22 MIL libsnapper(93745) AsciiFile.cc(get_value):1078 - key:ALLOW_USERS value:
2025-02-25 18:53:22 MIL libsnapper(93745) AsciiFile.cc(get_value):1078 - key:ALLOW_GROUPS value:users
2025-02-25 18:53:22 MIL libsnapper(93745) AsciiFile.cc(get_value):1078 - key:ALLOW_USERS value:
2025-02-25 18:53:22 MIL libsnapper(93745) AsciiFile.cc(get_value):1078 - key:ALLOW_GROUPS value:users
2025-02-25 18:53:22 MIL libsnapper(93745) snapperd.cc(main):311 - Listening for method calls and signals
2025-02-25 18:53:22 MIL libsnapper(93745) Snapper.cc(Snapper):97 - Snapper constructor
2025-02-25 18:53:22 MIL libsnapper(93745) Snapper.cc(Snapper):98 - snapper version 0.10.6
2025-02-25 18:53:22 MIL libsnapper(93745) Snapper.cc(Snapper):99 - libsnapper version 7.2.0
2025-02-25 18:53:22 MIL libsnapper(93745) Snapper.cc(Snapper):100 - config_name:root root_prefix:/ disable_filters:false
2025-02-25 18:53:22 MIL libsnapper(93745) AsciiFile.cc(reload):922 - loading file /etc/snapper/configs/root
2025-02-25 18:53:22 MIL libsnapper(93745) AsciiFile.cc(get_value):1078 - key:SUBVOLUME value:/
2025-02-25 18:53:22 MIL libsnapper(93745) AsciiFile.cc(get_value):1078 - key:FSTYPE value:btrfs
2025-02-25 18:53:22 MIL libsnapper(93745) AsciiFile.cc(get_value):1078 - key:QGROUP value:
2025-02-25 18:53:22 MIL libsnapper(93745) AsciiFile.cc(get_value):1078 - key:SYNC_ACL value:yes
2025-02-25 18:53:22 MIL libsnapper(93745) AsciiFile.cc(get_value):1078 - key:ALLOW_USERS value:
2025-02-25 18:53:22 MIL libsnapper(93745) AsciiFile.cc(get_value):1078 - key:ALLOW_GROUPS value:users
2025-02-25 18:53:22 MIL libsnapper(93745) Snapper.cc(Snapper):130 - subvolume:/ filesystem:btrfs
2025-02-25 18:53:22 MIL libsnapper(93745) Snapper.cc(loadIgnorePatterns):204 - number of ignore patterns:8
2025-02-25 18:53:22 MIL libsnapper(93745) Snapshot.cc(read):335 - found 53 snapshots
2025-02-25 18:53:22 WAR libsnapper(93745) FileUtils.cc(SDir):88 - THROW: open failed path://.snapshots/91 errno:2 (No such file or directory)
2025-02-25 18:53:22 WAR libsnapper(93745) Btrfs.cc(checkSnapshot):490 - CAUGHT: open failed path://.snapshots/91 errno:2 (No such file or directory)
2025-02-25 18:53:22 MIL libsnapper(93745) SystemCmd.cc(SystemCmd):48 - constructor SystemCmd:"/usr/lib/snapper/plugins/50-siduction.sh 'create-snapshot-pre' '/' 'btrfs' '91'"
2025-02-25 18:53:22 MIL libsnapper(93745) SystemCmd.cc(execute):84 - SystemCmd Executing:"/usr/lib/snapper/plugins/50-siduction.sh 'create-snapshot-pre' '/' 'btrfs' '91'"
2025-02-25 18:53:22 MIL libsnapper(93745) SystemCmd.cc(doExecute):176 - stopwatch 0.004661s for "/usr/lib/snapper/plugins/50-siduction.sh 'create-snapshot-pre' '/' 'btrfs' '91'"
2025-02-25 18:53:22 MIL libsnapper(93745) SystemCmd.cc(doExecute):190 - system() Returns:0
2025-02-25 18:53:23 MIL libsnapper(93745) SystemCmd.cc(SystemCmd):48 - constructor SystemCmd:"/usr/lib/snapper/plugins/50-siduction.sh 'create-snapshot' '/' 'btrfs' '91'"
2025-02-25 18:53:23 MIL libsnapper(93745) SystemCmd.cc(execute):84 - SystemCmd Executing:"/usr/lib/snapper/plugins/50-siduction.sh 'create-snapshot' '/' 'btrfs' '91'"
2025-02-25 18:53:23 MIL libsnapper(93745) SystemCmd.cc(doExecute):176 - stopwatch 0.003307s for "/usr/lib/snapper/plugins/50-siduction.sh 'create-snapshot' '/' 'btrfs' '91'"
2025-02-25 18:53:23 MIL libsnapper(93745) SystemCmd.cc(doExecute):190 - system() Returns:0
2025-02-25 18:53:23 MIL libsnapper(93745) SystemCmd.cc(SystemCmd):48 - constructor SystemCmd:"/usr/lib/snapper/plugins/50-siduction.sh 'create-snapshot-post' '/' 'btrfs' '91'"
2025-02-25 18:53:23 MIL libsnapper(93745) SystemCmd.cc(execute):84 - SystemCmd Executing:"/usr/lib/snapper/plugins/50-siduction.sh 'create-snapshot-post' '/' 'btrfs' '91'"
18:53:23 Plugin 50-siduction: Inside create-snapshot-post
2025-02-25 18:53:24 MIL libsnapper(93745) SystemCmd.cc(doExecute):176 - stopwatch 1.000960s for "/usr/lib/snapper/plugins/50-siduction.sh 'create-snapshot-post' '/' 'btrfs' '91'"
2025-02-25 18:53:24 MIL libsnapper(93745) SystemCmd.cc(doExecute):190 - system() Returns:0
2025-02-25 18:53:24 WAR libsnapper(93745) Snapper.cc(calculateUsedSpace):852 - THROW: quota rescan or sync failed
2025-02-25 18:53:24 WAR libsnapper(93745) Client.cc(dispatch):2001 - CAUGHT: quota rescan or sync failed
18:53:24 snapshot-description: No complete apt action.
2025-02-25 18:53:54 MIL libsnapper(93745) Snapper.cc(~Snapper):142 - Snapper destructor
2025-02-25 18:54:24 MIL libsnapper(93745) snapperd.cc(main):315 - Exiting
2025-02-25 18:59:49 MIL libsnapper(112801) snapperd.cc(main):283 - Requesting DBus name
2025-02-25 18:59:49 MIL libsnapper(112801) snapperd.cc(main):298 - Loading snapper configs
2025-02-25 18:59:49 MIL libsnapper(112801) Snapper.cc(getConfigs):299 - Snapper get-configs
2025-02-25 18:59:49 MIL libsnapper(112801) Snapper.cc(getConfigs):300 - libsnapper version 0.10.6
2025-02-25 18:59:49 MIL libsnapper(112801) AsciiFile.cc(reload):922 - loading file /etc/default/snapper
2025-02-25 18:59:49 MIL libsnapper(112801) AsciiFile.cc(get_value):1078 - key:SNAPPER_CONFIGS value:root home
2025-02-25 18:59:49 MIL libsnapper(112801) AsciiFile.cc(reload):922 - loading file /etc/snapper/configs/root
2025-02-25 18:59:49 MIL libsnapper(112801) AsciiFile.cc(get_value):1078 - key:SUBVOLUME value:/
2025-02-25 18:59:49 MIL libsnapper(112801) AsciiFile.cc(reload):922 - loading file /etc/snapper/configs/home
2025-02-25 18:59:49 MIL libsnapper(112801) AsciiFile.cc(get_value):1078 - key:SUBVOLUME value:/home
2025-02-25 18:59:49 MIL libsnapper(112801) AsciiFile.cc(get_value):1078 - key:ALLOW_USERS value:
2025-02-25 18:59:49 MIL libsnapper(112801) AsciiFile.cc(get_value):1078 - key:ALLOW_GROUPS value:users
2025-02-25 18:59:49 MIL libsnapper(112801) AsciiFile.cc(get_value):1078 - key:ALLOW_USERS value:
2025-02-25 18:59:49 MIL libsnapper(112801) AsciiFile.cc(get_value):1078 - key:ALLOW_GROUPS value:users
2025-02-25 18:59:49 MIL libsnapper(112801) snapperd.cc(main):311 - Listening for method calls and signals
2025-02-25 18:59:49 MIL libsnapper(112801) Snapper.cc(Snapper):97 - Snapper constructor
2025-02-25 18:59:49 MIL libsnapper(112801) Snapper.cc(Snapper):98 - snapper version 0.10.6
2025-02-25 18:59:49 MIL libsnapper(112801) Snapper.cc(Snapper):99 - libsnapper version 7.2.0
2025-02-25 18:59:49 MIL libsnapper(112801) Snapper.cc(Snapper):100 - config_name:root root_prefix:/
disable_filters:false
2025-02-25 18:59:49 MIL libsnapper(112801) AsciiFile.cc(reload):922 - loading file /etc/snapper/configs/root
2025-02-25 18:59:49 MIL libsnapper(112801) AsciiFile.cc(get_value):1078 - key:SUBVOLUME value:/
2025-02-25 18:59:49 MIL libsnapper(112801) AsciiFile.cc(get_value):1078 - key:FSTYPE value:btrfs
2025-02-25 18:59:49 MIL libsnapper(112801) AsciiFile.cc(get_value):1078 - key:QGROUP value:
2025-02-25 18:59:49 MIL libsnapper(112801) AsciiFile.cc(get_value):1078 - key:SYNC_ACL value:yes
2025-02-25 18:59:49 MIL libsnapper(112801) AsciiFile.cc(get_value):1078 - key:ALLOW_USERS value:
2025-02-25 18:59:49 MIL libsnapper(112801) AsciiFile.cc(get_value):1078 - key:ALLOW_GROUPS value:users
2025-02-25 18:59:49 MIL libsnapper(112801) Snapper.cc(Snapper):130 - subvolume:/ filesystem:btrfs
2025-02-25 18:59:49 MIL libsnapper(112801) Snapper.cc(loadIgnorePatterns):204 - number of ignore patterns:8
2025-02-25 18:59:49 MIL libsnapper(112801) Snapshot.cc(read):335 - found 54 snapshots
2025-02-25 18:59:49 WAR libsnapper(112801) FileUtils.cc(SDir):88 - THROW: open failed path://.snapshots/92 errno:2 (No
such file or directory)
2025-02-25 18:59:49 WAR libsnapper(112801) Btrfs.cc(checkSnapshot):490 - CAUGHT: open failed path://.snapshots/92
errno:2 (No such file or directory)
2025-02-25 18:59:49 MIL libsnapper(112801) SystemCmd.cc(SystemCmd):48 - constructor
SystemCmd:"/usr/lib/snapper/plugins/50-siduction.sh 'create-snapshot-pre' '/' 'btrfs' '92'"
2025-02-25 18:59:49 MIL libsnapper(112801) SystemCmd.cc(execute):84 - SystemCmd
Executing:"/usr/lib/snapper/plugins/50-siduction.sh 'create-snapshot-pre' '/' 'btrfs' '92'"
2025-02-25 18:59:49 MIL libsnapper(112801) SystemCmd.cc(doExecute):176 - stopwatch 0.006479s for
"/usr/lib/snapper/plugins/50-siduction.sh 'create-snapshot-pre' '/' 'btrfs' '92'"
2025-02-25 18:59:49 MIL libsnapper(112801) SystemCmd.cc(doExecute):190 - system() Returns:0
2025-02-25 18:59:49 MIL libsnapper(112801) SystemCmd.cc(SystemCmd):48 - constructor
SystemCmd:"/usr/lib/snapper/plugins/50-siduction.sh 'create-snapshot' '/' 'btrfs' '92'"
2025-02-25 18:59:49 MIL libsnapper(112801) SystemCmd.cc(execute):84 - SystemCmd
Executing:"/usr/lib/snapper/plugins/50-siduction.sh 'create-snapshot' '/' 'btrfs' '92'"
2025-02-25 18:59:49 MIL libsnapper(112801) SystemCmd.cc(doExecute):176 - stopwatch 0.004314s for
"/usr/lib/snapper/plugins/50-siduction.sh 'create-snapshot' '/' 'btrfs' '92'"
2025-02-25 18:59:49 MIL libsnapper(112801) SystemCmd.cc(doExecute):190 - system() Returns:0
2025-02-25 18:59:49 MIL libsnapper(112801) SystemCmd.cc(SystemCmd):48 - constructor
SystemCmd:"/usr/lib/snapper/plugins/50-siduction.sh 'create-snapshot-post' '/' 'btrfs' '92'"
2025-02-25 18:59:49 MIL libsnapper(112801) SystemCmd.cc(execute):84 - SystemCmd
Executing:"/usr/lib/snapper/plugins/50-siduction.sh 'create-snapshot-post' '/' 'btrfs' '92'"
18:59:49 Plugin 50-siduction: Inside create-snapshot-post
2025-02-25 18:59:50 MIL libsnapper(112801) SystemCmd.cc(doExecute):176 - stopwatch 1.001424s for
"/usr/lib/snapper/plugins/50-siduction.sh 'create-snapshot-post' '/' 'btrfs' '92'"
2025-02-25 18:59:50 MIL libsnapper(112801) SystemCmd.cc(doExecute):190 - system() Returns:0
2025-02-25 18:59:50 MIL libsnapper(112801) AsciiFile.cc(get_value):1078 - key:BACKGROUND_COMPARISON value:yes
2025-02-25 18:59:50 MIL libsnapper(112801) Comparison.cc(Comparison):60 - num1:91 num2:92
2025-02-25 18:59:50 MIL libsnapper(112801) Comparison.cc(load):272 - num1:91 num2:92
2025-02-25 18:59:50 MIL libsnapper(112801) Comparison.cc(create):141 - num1:91 num2:92
2025-02-25 18:59:50 MIL libsnapper(112801) Btrfs.cc(cmpDirs):1366 - special btrfs cmpDirs
2025-02-25 18:59:50 MIL libsnapper(112801) Btrfs.cc(process):1337 - dir1:'//.snapshots/91/snapshot'
dir2:'//.snapshots/92/snapshot'
2025-02-25 18:59:50 WAR libsnapper(112801) Snapper.cc(calculateUsedSpace):852 - THROW: quota rescan or sync failed
2025-02-25 18:59:50 WAR libsnapper(112801) Client.cc(dispatch):2001 - CAUGHT: quota rescan or sync failed
2025-02-25 18:59:50 WAR libsnapper(112801) Client.cc(check_config_in_use):503 - THROW: config in use
2025-02-25 18:59:50 WAR libsnapper(112801) Client.cc(dispatch):1911 - CAUGHT: config in use
2025-02-25 18:59:50 WAR libsnapper(112801) Snapper.cc(calculateUsedSpace):852 - THROW: quota rescan or sync failed
2025-02-25 18:59:50 WAR libsnapper(112801) Client.cc(dispatch):2001 - CAUGHT: quota rescan or sync failed
18:59:51 snapshot-description: Change snapper's description of snapshots 91 and 92.
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(SystemCmd):48 - constructor
SystemCmd:"/usr/lib/snapper/plugins/50-siduction.sh 'modify-snapshot-pre' '/' 'btrfs' '91'"
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(execute):84 - SystemCmd
Executing:"/usr/lib/snapper/plugins/50-siduction.sh 'modify-snapshot-pre' '/' 'btrfs' '91'"
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(doExecute):176 - stopwatch 0.003369s for
"/usr/lib/snapper/plugins/50-siduction.sh 'modify-snapshot-pre' '/' 'btrfs' '91'"
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(doExecute):190 - system() Returns:0
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(SystemCmd):48 - constructor
SystemCmd:"/usr/lib/snapper/plugins/50-siduction.sh 'modify-snapshot' '/' 'btrfs' '91'"
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(execute):84 - SystemCmd
Executing:"/usr/lib/snapper/plugins/50-siduction.sh 'modify-snapshot' '/' 'btrfs' '91'"
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(doExecute):176 - stopwatch 0.004689s for
"/usr/lib/snapper/plugins/50-siduction.sh 'modify-snapshot' '/' 'btrfs' '91'"
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(doExecute):190 - system() Returns:0
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(SystemCmd):48 - constructor
SystemCmd:"/usr/lib/snapper/plugins/50-siduction.sh 'modify-snapshot-post' '/' 'btrfs' '91'"
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(execute):84 - SystemCmd
Executing:"/usr/lib/snapper/plugins/50-siduction.sh 'modify-snapshot-post' '/' 'btrfs' '91'"
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(doExecute):176 - stopwatch 0.003146s for
"/usr/lib/snapper/plugins/50-siduction.sh 'modify-snapshot-post' '/' 'btrfs' '91'"
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(doExecute):190 - system() Returns:0
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(SystemCmd):48 - constructor
SystemCmd:"/usr/lib/snapper/plugins/50-siduction.sh 'modify-snapshot-pre' '/' 'btrfs' '92'"
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(execute):84 - SystemCmd
Executing:"/usr/lib/snapper/plugins/50-siduction.sh 'modify-snapshot-pre' '/' 'btrfs' '92'"
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(doExecute):176 - stopwatch 0.003154s for
"/usr/lib/snapper/plugins/50-siduction.sh 'modify-snapshot-pre' '/' 'btrfs' '92'"
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(doExecute):190 - system() Returns:0
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(SystemCmd):48 - constructor
SystemCmd:"/usr/lib/snapper/plugins/50-siduction.sh 'modify-snapshot' '/' 'btrfs' '92'"
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(execute):84 - SystemCmd
Executing:"/usr/lib/snapper/plugins/50-siduction.sh 'modify-snapshot' '/' 'btrfs' '92'"
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(doExecute):176 - stopwatch 0.004153s for
"/usr/lib/snapper/plugins/50-siduction.sh 'modify-snapshot' '/' 'btrfs' '92'"
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(doExecute):190 - system() Returns:0
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(SystemCmd):48 - constructor
SystemCmd:"/usr/lib/snapper/plugins/50-siduction.sh 'modify-snapshot-post' '/' 'btrfs' '92'"
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(execute):84 - SystemCmd
Executing:"/usr/lib/snapper/plugins/50-siduction.sh 'modify-snapshot-post' '/' 'btrfs' '92'"
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(doExecute):176 - stopwatch 0.003263s for
"/usr/lib/snapper/plugins/50-siduction.sh 'modify-snapshot-post' '/' 'btrfs' '92'"
2025-02-25 18:59:51 MIL libsnapper(112801) SystemCmd.cc(doExecute):190 - system() Returns:0
2025-02-25 19:00:08 MIL libsnapper(112801) Btrfs.cc(cmpDirs):1378 - stopwatch 17.904720s for comparing directories
2025-02-25 19:00:08 MIL libsnapper(112801) Comparison.cc(save):318 - num1:91 num2:92
2025-02-25 19:00:39 MIL libsnapper(112801) Snapper.cc(~Snapper):142 - Snapper destructor
2025-02-25 19:00:51 MIL libsnapper(112801) snapperd.cc(main):315 - Exiting
2025-02-26 15:56:17 MIL libsnapper(123247) snapperd.cc(main):283 - Requesting DBus name
... truncated ...

This change resulted in a warning for each sources.list about missing specification of the Signed-By parameter, as shown in the following listing.

󰁹 100%  23:23:37  USER: brook HOST: Legion-Siduction   
~  ❯$ sudo apt update
[sudo] password for brook: 
Hit:1 https://packages.microsoft.com/repos/code stable InRelease                                                                                                                                     
Hit:2 https://packages.mozilla.org/apt mozilla InRelease                                                                                                                                             
Hit:3 https://deb.debian.org/debian unstable InRelease              
Hit:4 https://ftp.snt.utwente.nl/pub/linux/siduction/extra unstable InRelease
Hit:5 https://ftp.snt.utwente.nl/pub/linux/siduction/fixes unstable InRelease
52 packages can be upgraded. Run 'apt list --upgradable' to see them.
Notice: Missing Signed-By in the sources.list(5) entry for 'https://deb.debian.org/debian'
Notice: Missing Signed-By in the sources.list(5) entry for 'https://ftp.snt.utwente.nl/pub/linux/siduction/extra'
Notice: Missing Signed-By in the sources.list(5) entry for 'https://ftp.snt.utwente.nl/pub/linux/siduction/fixes'
Notice: Missing Signed-By in the sources.list(5) entry for 'https://packages.microsoft.com/repos/code'
Notice: Consider migrating all sources.list(5) entries to the deb822 .sources format
Notice: The deb822 .sources format supports both embedded as well as external OpenPGP keys
Notice: See apt-secure(7) for best practices in configuring repository signing.

󰁹 100%  23:23:46  USER: brook HOST: Legion-Siduction   
PCD: 6s ~  ❯$ 

Shortly after I installed Siduction, Debian updated the format of the deb sources files, which specify the URIs of repositories, as well as the extension of these files from .list to .sources. The new format called deb822 replaces the single line format of the previous format with a set of key-value pairs, similar to the format of analogous files in other package management formats. The following image shows a comparison of the previous format with the new format, for Debian repositories, i.e., it compares /etc/apt/sources.list.d/debian.list with /etc/apt/sources.list.d/debian.sources.

A Comparison of deb822 Sources File Format with the Previous Format
The new format is a set of key-value pairs -- one for each repository, one of which specifies the GPG key or signature verifying the authenticity of packages in the repository

This issue was resolved for the Debian and Mozilla repositories on the system by, as suggested in the Notice messages shown in the above listing, by "migrating all sources.list(5) entries to the deb822 .sources format". Another message from apt suggested using apt modernize-sources to convert the format of each sources.list file. The suggestion from apt and the execution and output of apt modernize-sources is shown in the following set of images.

Converting APT Sources to deb822.
The apt modernize-sources command converted the format. The Microsoft installation did not provide GPG verification files, so this resulted in an error which was resolved as shown in Fixes and Enhancements.

The most notable item of my experience with Siduction with regard to package management was actually a serious issue which resulted in my disappointment with Siduction was a package dependency issue with Python, described below along with the other problems I experienced with Siduction.

Problems/Issues Requiring Attention

Siduction is a good distribution, with a sophisticated Btrfs subvolume layout which fully integrates Snapper for snapshots and rollbacks, that is further enhanced by Siduction's own scripts. It also has a unique position in the Linux ecosystem as the only one -- as far as I am aware -- that provides a Debian distribution with current software and as a rolling update distribution. However, it does have some problems, the two most problematic for me being that there were some package dependency issues that were ultimately resolved easily, and the lack of support -- at least during my initial use -- for OAuth2 authentication, which is required for using Microsoft's Outlook web mail service. Another serious issue, one that indicates an area in which the distribution actually fails -- or inherits a problem from Debian -- is with the preinstalled firewalld firewall management application. These and other problems are described below.

It seems that some of these problems, including the OAuth2 issue, were somehow resolved after upgrades and using the apt --fix-broken install, which as mentioned above in Section Review->Package Management, is necessary in new Siduction installations.

While not actual problems, there were other issues which required attention. These included enabling sudo, enabling hibernation, installing the Kvantum application theme engine manually, and installing EnvyControl.

All of the problems and issues are described below, with their solutions described in the supplementary article, Siduction Linux 2024.1.0 (Shine On) Review [KDE Plasma Edition] Supplement: Fixes and Enhancements

Python Dependency Issues After Upgrade from Python 3.12 to Python 3.13

The first serious issue I encountered was a dependency issue that could have been resolved easily by a user who is very knowledgeable with APT and the features and options of its tools, or someone who carefully reads messages provided in program output. The dependency problem prevented me from installing VirtualBox. After the first upgrade of Siduction, the system Python version was upgraded from Python 3.12.x to Python 3.13.x. When I attempted to install VirtualBox from the default repositories, not from a package downloaded from Oracle, I was confronted with an error that indicated that VirtualBox required Python 3.12 or lower, as shown in the following image, and the following listing.

VirtualBox Could Not Be Installed
VirtualBox could not be installed because it expected lower version of Python, instead of the installed version.

󰁹 100%  23:35:30  USER: brook HOST: Legion-Siduction
PCD: 1m31s ~  ❯$ sudo apt install virtualbox
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

Unsatisfied dependencies:
 virtualbox : Depends: python3 (< 3.13) but 3.13.1-2 is to be installed
              Recommends: virtualbox-qt (= 7.0.20-dfsg-1.1) but it is not going to be installed
Error: Unable to correct problems, you have held broken packages.

From some comments on various forums, the suggested fix described in the output, is one that is typically necessary in initial use of new installations of Siduction. Google's AI also suggests this:

While it's not strictly necessary to run apt install --fix-broken on every new Debian Sid installation, it's highly recommended to do so as a precautionary step, as Sid (the unstable branch) can sometimes have package dependency issues due to its rapidly evolving nature, and running this command can help identify and resolve any potential problems early on in your setup.
If I had seen this I could have easily resolved the issue, which I ultimately did by performing the suggested action of executing
apt --fix-broken install

But before that, I used the opportunity to test the Siduction rollback feature (which was proven to work well, as discussed in Section Review->Btrfs->Rollbacks of this article) to rollback the system to the point where the system Python version was 3.12.x, then install VirtualBox.

The immediate problem of not being able to install VirtualBox was solved, but my next package installation attempt resulted in the same Python dependency error. This issue also prevented future attempts to upgrade the system.

Although, in this case, I could have resolved the issue, besides not paying attention to the output, I expected package dependency problems from my brief use, many years ago, of a Voyager Debian Edition converted to use first, the Debian Testing repositories, then the DebianUnstable repositories. I was also blinded by the fact that there is an Upgrade Warnings thread on the Siduction Forum, which reinforced my expectation of dependency issues. My expectation was, however, not realized as there were no further dependency issues, except for packages being held back during upgrade, a normal situation for any Debian based distribution, including Ubuntu, and another issue caused by conflicts when I installed Xfce using task-xfce-desktop, something someone more familiar with Debian may not have done.

firewalld

Siduction, like Debian, uses the powerfull firewalld firewall management application. The GUI for firewalld provided by the package firewall-config is not pre-installed. Instead the most basic firewalld operations can be performed with the Plasma System Settings component Firewall.

Unfortunately, the firewalld installation and configuration is broken. The systemd service that manages it is disabled, despite the fact that its preset is "enabled". The following set of images shows various aspects of Siduction related to firewalld.

The first image shows the default state of firewalld as reflected by the Firewall component of System Settings, which shows that it is disabled. Toggling the control to enable it (second image) causes a prompt to enter the administrator password to be displayed. After entering the password, firewalld is seemingly enabled (third image). Attempting to change the Default Incoming Policy (fourth image) causes an error originating from firewalld. In investigating the problem, I saw that the systemd service, firewalld.service was not enabled (fifth image). Image 6 shows the root of the problem: a firewalld configuration file, apparently containing firewall rules including default rules, required by a subsidiary program of firewalld, python-nftables, is missing. This error has been in occuring at each boot since the very first after installation of the distribution. The final image in the set shows the firewalld GUI, titled Firewall Configuration, failing to connect to firewalld.

Although firewalld is a powerful application, with such advanced features as zones, which make different rules for different networks possible, and has a GUI application that allows easily modifying the configuration, for example, allowing traffic or denying traffic by service selectable in the application (usefull for allowing KDEConnect), I decided to replace firewalld with UFW, which did not have any issues whatsoever. The installation and immediate enablement of ufw, as well as its managemnt in the Firewall component of System Settings is described in Siduction Linux 2024.1.0 (Shine On) Review [KDE Plasma Edition] Supplement: Fixes and Enhancements.

Siduction Pre-Installs firewalld but It Is Broken
The systemd service firewalld.service can not start without errors.
Click on any of the thumbnails to view a slideshow of the images.

Kmail/Kwallet

Another minor issue in my use of Siduction involved KWallet, which is necessary to store email account passwords with encryption for use by KMail KDE's email client application, which is preinstalled by the distribution. First, the KDE Wallet System was not enabled by Siduction. This may be as a result of a decision by the distribution to avoid the prompts produced by the KWallet system to select an encryption method and select the key to be used for encryption.

When first attempting to add accounts which do not use OAuth2 authentication, this caused a prompt to be shown that indicated that the KDE Wallet System is not enabled, with a button to enable it, as shown in the following image.

The KDE Wallet System Is Not Enabled
It can be enabled from the prompt produced by applications which attempt to use it, from the KWallet Manager, or the KDE System Settings component KDE Wallet.

Enabling it, then creating the GPG key caused various new errors in creating the accounts, such as an

Encryption error while attempting to save the wallet kdewallet. Error code is 55 (Invalid value). Please fix your system configuration, then try again. This error may occur if you are not using a full trust GPG key. Please ensure you have the secret key for the key you are using.

So before adding any accounts to KMail it is probably best to first create a GPG key pair with

gpg --generatue-key
, then enable KDE Wallet System with either KWallet Manager or the KDE Wallet component of Plasma's System Settings, and finally add accounts to KMail. Some of this process is shown in the Siduction Linux 2024.1.0 (Shine On) Review [KDE Plasma Edition] Supplement: Fixes and Enhancements. The prompt to select an encryption method by KWallet as a result of KMail's request and the KDE Wallet Component of Plasma System Settings are also shown in that article.

sudo chown -R ord-userone:www-data static/distribution-reviews/siduction/202410-shineon/siduction-linux-202410-shineon-review-kde-plasma-edition/images/ On a related note, when adding an account which requires the SASL OAuth2 authentication mechanism, there is a delay in retreiving account information. This led me to believe that Siduction did not include the necessary libraries for this type of authentication, a similar issue as in Kubuntu which promptly allows opening a web page to enter Gmail OAuth2 credentials, but fails to show an Outlook page for entering credentials for its service.

GTK Applications and Plasma Global Menu

Sometimes a distribution which features the KDE Plasma Desktop does not fully integrate GTK applications into the Plasma Desktop. This could mean that the file dialogs, instead of using the native KDE file dialog provided by KDE Frameworks, use the one provided by GTK, a common situation in all distributions. Not so common is that the necessary packages to display GTK applications' menus in the Global Menu Plasma widget are not included in the distribution by default.

Whenever I encountered this problem in other distributions, correcting this issue was simply a matter of installing the appropriate packages, most importantly, appmenu-gtk3-module. This fixes the problem such that GTK applications' menus -- except Firefox's --are properly displayed. Unfortunately, Siduction does not include this package by default, and caused the problem of GTK menus not being displayed in the global menu. Strangely, this did not affect all GTK applications. Inkscape's menu was properly displayed, however, GIMP's menu was not displayed.

When I initially attempted to correct this issue by installing appmenu-gtk3-module, the Python dependency problem discussed above prevented the installation, as shown in the following listing.

󰂄 91%  19:30:15  USER: brook HOST: Legion-Siduction   
 ~  ❯$ sudo apt -f install appmenu-gtk3-module
You might want to run 'apt --fix-broken install' to correct these.
Unsatisfied dependencies:
 appmenu-gtk3-module : Depends: libappmenu-gtk3-parser0 (>= 24.05-1.1) but it is not going to be installed
                       Depends: appmenu-gtk-module-common (>= 24.05-1.1) but it is not going to be installed
 virtualbox : Depends: python3 (< 3.13) but 3.13.1-2 is to be installed
Error: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).

󰂄 94%  19:34:50  USER: brook HOST: Legion-Siduction   
 ~  ❯$

After finally applying the action suggested by apt, as mentioned in Section Review->Package Management, I was able to install appmenu-gtk3-module and the problem was solved.

Documentation

The documentation provided by Siduction is one of it standout features. The distribution installs a 300+ page manual in PDF format, which is also available on its website. The manual covers all aspects of administering the distribution that a new Siduction user, or even a novice Linux user could wish to learn. It begins with an introduction to system administration in Siduction, for example, describing its reasons for not including sudo, and continues to package management concepts, etc.

The manual is continuously updated, and the PDF installed in the system, is also updated as with any other package. In the approximately one month that I have been using Siduction, the manual was updated to reflect changes to the Debain .list files, and to include instructions on how to update the existing files, as mentioned in Section Review->Package Management and the supplement to this article, Siduction Linux 2024.1.0 (Shine On) Review [KDE Plasma Edition] Supplement: Fixes and Enhancements.

Support

TBA

Conclusion

Siduction is an excellent distribution. Its excellence is partly due to its Debian base, whose unstable branch (code named Sid) Siduction uses in order to provide current software. Despite its name this branch of Debian is more stable than its Testing branch and unlike Testing will always have packages continuously added to it.

Its excellence is also partly due to the distribution's refined use of the Btrfs filesystem by default, configured with a rational subvolume layout scheme, simialr to openSUSE's but without the added complication of an additonal subvolume hierarchy levels. It also configures Snapper for system snapshots and fully uses it to perform rollbacks, unlike some distributions which only configure a flat subvolume layout and use btrfscommands to copy and replace the subvolume mounted at the filesystem hierarchy root. This Btrfs/Snapper configuration is further refined by Siduction's own Snapper plugin-activated scripts.

The distribution also provides a 300+ page manual as a PDF, installed on the system and available on their website. The manual is continuously updated, with the installed version also updated as needed. It covers all aspects of administering a Siduction system, suitable for those new to Siduction and even novice Linux users.

I intend to keep Siduction on both of my laptops indefinately. On the Dell G5, it is one of the distribution I've tried recently that does not have problems during resuming from sleep, so it will definitely stay on that laptop. If I have to make room on my five-boot Legion, I will probably replace Kubuntu before I replace Siduction.

I recommend Siduction, however, new users have to be prepared for periods when upgrades are temporarily not possible when new versions of large, complicated software with many component packages are added to Debian Sid. Also, users have deeper knowledge of APT and its tools, and even the lower level dpkg, than is necessary when using Ubuntu or its derivatives.