Install with recommends, and add gh and glab #2

Merged
sebastian merged 2 commits from recommends-and-forge-clis into main 2026-08-23 14:06:51 +02:00
Owner

Drops --no-install-recommends from every install in stage 2, and adds gh and glab.

Why

The flag is server practice: on a server a lean root is the point. This is a desktop, and enough of what makes a desktop work is recommended rather than depended on that the flag was silently costing us things we'd otherwise have to discover and add one at a time.

What turning recommends on actually brings in:

intel-microcode, amd64-microcode recommended by firmware-linux; CPU microcode updates
firmware-intel-graphics, -intel-misc, -mediatek, -nvidia-graphics recommended by firmware-misc-nonfree
shim-signed Secure Boot
passt, slirp4netns, aardvark-dns, catatonit, fuse-overlayfs, containers-storage podman's rootless networking — uidmap alone was not enough
gir1.2-spiceclientgtk-3.0, qemu-system-gui, qemu-system-modules-spice/-opengl virt-manager's console and qemu's display
xxd, python3-pynvim neovim
nftables, mdadm, efibootmgr, apparmor

What it costs

Measured, not estimated: I resolved both configurations against the real trixie main/contrib/non-free-firmware indices with apt-get --simulate in an offline apt root, group by group, in Containerfile order.

packages installed size
before 2387 ~5.89 GiB
after (incl. gh, glab) 2570 ~6.62 GiB
delta +183 +746 MiB

The bulk of the increase is two things, both on the terminal-tooling line:

  • a C toolchain (~180 MiB) reached through npmnode-gypbuild-essential, dragging gcc-14, g++-14, binutils, libc6-dev, plus node-tap and nodejs-doc
  • buildah (~126 MiB), recommended by podman

If 746 MiB per image pull is more than you want, the cheap carve-out is to split npm onto its own --no-install-recommends line — that recovers roughly 250 MiB and loses nothing the desktop uses. Say the word and I'll add it; I left it out to keep the rule uniform.

initramfs-tools

Worth stating explicitly, since it is the one thing that could have broken the boot path: intel-microcode recommends initramfs-tools with no alternative, and amd64-microcode recommends initramfs-tools | dracut | tiny-initramfs. Because dracut declares Conflicts: initramfs-tools, apt drops that recommend rather than installing a second initramfs generator. Confirmed absent in the simulated result.

gh and glab

Both are in trixie maingh 2.46.0-3, glab 1.53.0-1 — so neither needs GitHub's or GitLab's apt repo, contrary to what the README claimed. Those rows are removed.

The Gitea CLI is not the same story and stays a release binary: Debian does ship a package called tea, but it is an unrelated GUI text editor.

Also corrected in the README

  • steam-installer is in contrib, which this image already enables — not non-free. Only i386 multiarch is missing.
  • The rpmfusion-codecs row overstated things: trixie's ffmpeg already links libx264 and libx265, so H.264/H.265 playback was never the gap.
  • chromium is in main, noted next to the Chrome row.

Not in this PR

Recommends do not close the biggest gap I found while comparing against os3: no wifi or audio firmware is installed. firmware-iwlwifi, firmware-realtek, firmware-atheros, firmware-brcm80211 and firmware-sof-signed are recommended by nothing in the tree, so they stay absent — on a laptop image whose apt-sources.sh enables non-free-firmware specifically so that wifi comes up. That wants its own one-line commit; happy to send it separately.

Other os3 parity gaps, same story: gstreamer1.0-plugins-ugly, the domain-client set (sssd, realmd, adcli, krb5-user, oddjob-mkhomedir), LibreOffice for os3's lxqt-office, printer drivers (printer-driver-gutenprint, hplip), virt-viewer, thermald, systemd-zram-generator.

Testing

Not built. The resolution is verified against the archive as described above, but nothing here has been through podman build or booted.

Drops `--no-install-recommends` from every install in stage 2, and adds `gh` and `glab`. ## Why The flag is server practice: on a server a lean root is the point. This is a desktop, and enough of what makes a desktop work is *recommended* rather than *depended on* that the flag was silently costing us things we'd otherwise have to discover and add one at a time. What turning recommends on actually brings in: | | | | --- | --- | | `intel-microcode`, `amd64-microcode` | recommended by `firmware-linux`; CPU microcode updates | | `firmware-intel-graphics`, `-intel-misc`, `-mediatek`, `-nvidia-graphics` | recommended by `firmware-misc-nonfree` | | `shim-signed` | Secure Boot | | `passt`, `slirp4netns`, `aardvark-dns`, `catatonit`, `fuse-overlayfs`, `containers-storage` | podman's rootless networking — `uidmap` alone was not enough | | `gir1.2-spiceclientgtk-3.0`, `qemu-system-gui`, `qemu-system-modules-spice`/`-opengl` | virt-manager's console and qemu's display | | `xxd`, `python3-pynvim` | neovim | | `nftables`, `mdadm`, `efibootmgr`, `apparmor` | | ## What it costs Measured, not estimated: I resolved both configurations against the real trixie `main`/`contrib`/`non-free-firmware` indices with `apt-get --simulate` in an offline apt root, group by group, in Containerfile order. | | packages | installed size | | --- | --- | --- | | before | 2387 | ~5.89 GiB | | after (incl. `gh`, `glab`) | 2570 | ~6.62 GiB | | delta | **+183** | **+746 MiB** | The bulk of the increase is two things, both on the terminal-tooling line: - a C toolchain (~180 MiB) reached through `npm` → `node-gyp` → `build-essential`, dragging `gcc-14`, `g++-14`, `binutils`, `libc6-dev`, plus `node-tap` and `nodejs-doc` - `buildah` (~126 MiB), recommended by `podman` If 746 MiB per image pull is more than you want, the cheap carve-out is to split `npm` onto its own `--no-install-recommends` line — that recovers roughly 250 MiB and loses nothing the desktop uses. Say the word and I'll add it; I left it out to keep the rule uniform. ### initramfs-tools Worth stating explicitly, since it is the one thing that could have broken the boot path: `intel-microcode` recommends `initramfs-tools` with no alternative, and `amd64-microcode` recommends `initramfs-tools | dracut | tiny-initramfs`. Because `dracut` declares `Conflicts: initramfs-tools`, apt drops that recommend rather than installing a second initramfs generator. Confirmed absent in the simulated result. ## gh and glab Both are in trixie `main` — `gh` 2.46.0-3, `glab` 1.53.0-1 — so neither needs GitHub's or GitLab's apt repo, contrary to what the README claimed. Those rows are removed. The Gitea CLI is not the same story and stays a release binary: Debian *does* ship a package called `tea`, but it is an unrelated GUI text editor. ## Also corrected in the README - `steam-installer` is in `contrib`, which this image already enables — not `non-free`. Only i386 multiarch is missing. - The rpmfusion-codecs row overstated things: trixie's `ffmpeg` already links `libx264` and `libx265`, so H.264/H.265 playback was never the gap. - `chromium` is in `main`, noted next to the Chrome row. ## Not in this PR Recommends do **not** close the biggest gap I found while comparing against os3: no wifi or audio firmware is installed. `firmware-iwlwifi`, `firmware-realtek`, `firmware-atheros`, `firmware-brcm80211` and `firmware-sof-signed` are recommended by nothing in the tree, so they stay absent — on a laptop image whose `apt-sources.sh` enables `non-free-firmware` specifically so that wifi comes up. That wants its own one-line commit; happy to send it separately. Other os3 parity gaps, same story: `gstreamer1.0-plugins-ugly`, the `domain-client` set (`sssd`, `realmd`, `adcli`, `krb5-user`, `oddjob-mkhomedir`), LibreOffice for os3's `lxqt-office`, printer drivers (`printer-driver-gutenprint`, `hplip`), `virt-viewer`, `thermald`, `systemd-zram-generator`. ## Testing Not built. The resolution is verified against the archive as described above, but nothing here has been through `podman build` or booted.
Install with recommends, and add gh and glab
Some checks failed
Publish / build (pull_request) Has been cancelled
7ddc536226
Drop --no-install-recommends from every install in stage 2 and add gh and
glab to the terminal-tooling line.

The flag was inherited from server practice, where a lean root is the goal.
This image is a desktop, and enough of what makes a desktop work is
recommended rather than depended on that the flag was quietly costing us
things we would otherwise have to notice one at a time:

  * intel-microcode and amd64-microcode, recommended by firmware-linux
  * firmware-intel-graphics, -intel-misc, -mediatek, -nvidia-graphics
  * shim-signed
  * podman's rootless networking: passt, slirp4netns, aardvark-dns,
    plus catatonit, fuse-overlayfs, containers-storage
  * virt-manager's SPICE console and qemu's display/OpenGL modules
  * neovim's xxd and python3-pynvim

Measured against the trixie indices with apt --simulate: +183 packages and
+746 MiB installed, gh and glab included. The bulk of that is a C toolchain
pulled through npm -> node-gyp -> build-essential (~180 MiB) and buildah
from podman (~126 MiB).

dracut Conflicts: initramfs-tools, so the microcode packages' recommend on
initramfs-tools is dropped by apt rather than installing a second initramfs
generator alongside the one this image uses. Verified in the simulation.

gh and glab are both in trixie main -- no third-party repo needed, contrary
to what the README said. The Gitea CLI still needs its release binary:
Debian's `tea` package is an unrelated text editor.

Stage 1 keeps the flag. Nothing there is shipped -- only /output is copied
into stage 2 -- so recommends there would cost build time and buy the image
nothing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FTfEFdtzmNidPVTQ6X5bLK
Install the wifi, bluetooth and audio-DSP firmware
All checks were successful
Publish / build (pull_request) Successful in 26m25s
Publish / build (push) Successful in 56m59s
3a5f344972
firmware-linux pulls only firmware-misc-nonfree and firmware-amd-graphics,
and with recommends on, the intel/mediatek/nvidia graphics blobs. Nothing in
the image recommends the wifi firmware, so a laptop booting this had no
network until it was plugged in -- on an image whose apt-sources.sh enables
non-free-firmware specifically so that wifi comes up.

Fedora has one linux-firmware package, so os3 never had to name any of this.
Debian splits the tree per vendor, so it gets named:

  firmware-iwlwifi       111 MiB  Intel wifi + Intel bluetooth
  firmware-atheros        95 MiB  ath9k/10k/11k + QCA bluetooth
  firmware-sof-signed      34 MiB  Intel SOF audio DSP
  firmware-realtek         19 MiB  RTL wifi/bluetooth/ethernet
  firmware-brcm80211       18 MiB  Broadcom wifi/bluetooth
  firmware-cirrus           5 MiB  Cirrus smart amps
  firmware-intel-sound      4 MiB  pre-SOF Intel audio DSP

+7 packages, +286 MiB, verified against the trixie indices with apt
--simulate; no other package is added or displaced.

Not "every firmware-* in non-free-firmware": that is ~944 MiB, and the bulk
of it is enterprise NICs plus firmware-qcom-soc, 298 MiB of Qualcomm SoC
blobs for machines this amd64 image cannot boot on.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FTfEFdtzmNidPVTQ6X5bLK
sebastian deleted branch recommends-and-forge-clis 2026-08-23 14:06:51 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
sebastian/os4!2
No description provided.