= Reducing the Essential set = The Essential:yes set poses problems in scenarios where size is limited (such as minimal containers or chroots), or when bootstrapping a distribution. It also makes some problems related to dependencies harder as these are implicit and cannot change semantics. /* Expand on the rationale. */ Packages can either be moved out of the pseudo-essential set or they can be marked as Protected:yes (see [[Teams/Dpkg/Spec/ProtectedField]]) /* The sizes might be outdated. */ * bash (~1 MiB) * We have dash, see [[Proposals/RemoveBashFromEssential]]. * diffutils (~1.5 MiB) * Used at least by dpkg conffile prompt. Make the diff item optional, demote to lower priority? * findutils (~1.5 MiB) * Used at least by dpkg-maintscript-helper (but that script should eventually go away), used by many maintscripts probably. * tar (~2.8 MiB) * Used at least by dpkg, once that is switched to an internal implementation it could be dropped? * mawk (~200 KiB) (via awk virtual package through base-files) * Pseudo-essential through base-files, on purpose via a virtual package to avoid hard-coding a specific implementation. * awk is used in many scripts, so awk needs to be pseudo-essential. Hence base-files Pre-Depends: awk. * debootstrap cannot resolve virtual dependencies, so mawk has Priority: required to ensure debootstrap downloads and installs it. * Could be replaced by original-awk, but debootstrap currently has mawk hardcoded (DebianBug:861343). * perl-base (~4.7 MiB) * Once no perl scripts in pseudo-essential, this would also make the interpreter problem more tractable. * bsdutils (~150 KiB) * DebianMan:logger is used by many packages in the archive which would need to grow a dependency. * login * Involved in the boot sequence, and could be switched to Protected:yes. * Probably su? nologin? * See also DebianBug:833256 (util-linux's su is 96 KiB, while login su is 40 KiB. Entire login package is around 2.5 MiB installed size though.) * Also, runuser is available as essential.... use that instead? * sysvinit-utils (DebianBug:851747) * If everything using init-d-script just adds a dependency, making it non-essential might be possible. (Alternatively, sysvinit grows a dependency on sysvinit-utils and then everything shipping an init-d-script based init script *must* ship a masking systemd unit file.) * Very commonly used "pidof" utility currently shipped in sysvinit-utils, move to using procps implementation and ship a separate essential procps-base package? DebianBug:810018 ; What's the point of this shuffling (instead of a possible elimination) of Essential packages, besides possibly getting rid of sysvinit packages from the system? * init-system-helpers * Involved in the boot sequence, and could be switched to Protected:yes. = Reducing transitive dependencies = * (libcrypto + libssl) vs (libhogweed + libnettle + libp11-kit + libtasn + libidn2 + libunistring + libgnutls) * We could switch to libssl (from openssl 3.x), given the new license. For example getting rid of the GnuTLS stack would amount to something like an additional 8 MiB. * libcap vs libcap-ng * While these are tiny, they are doing similar things, so we could try to unify on libcap, which seems more flexible to use and has no global state which is annoying when being used from a library. * libaudit uses libcap-ng, as its from the same upstream author. * See also <> * libsystemd0 * libsystemd0 brings in liblz4-1, libgcrypt20 + libgpg-error0 (and liblzma5 together with dpkg). * libsystemd0 needed by lslogins (util-linux) and logger (bsdutils). * lslogins is new and virtually unused, maybe it can be moved to a non-essential package to get rid of util-linux dep on libsystemd0. * bsdutils maybe can be made non-essential, but logger is used by very many packages in the archive which would then need to add a dep on bsdutils. * libdb5.3 DebianBug:1032207 = Reducing size/content = * Executables statically linked against glibc (/sbin/ldconfig in the essential set) could be built against musl or so, for >900KB savings a pop. * Removing caches after installation. {{{ $ rm -f /var/cache/debconf/*.dat-old $ rm -f /var/cache/debconf/templates.dat }}} * Trimming changelogs. * One problem with this approach, is that this affects all users of the package as it loses data. * Moving extra documentation to separate packages. * If these packages are not depended on, this can leave systems with necessary documentation, or might generate excess packages in the archive. * This seems unnecessary complexity for something that Debian policy explicitly mentions packages should not rely on, and as such can be removed at any time, and when we can already use dpkg path-exclude support, which can be optionally used only when needed. * Consider splitting locales out of some/all of minbase/required packages: * Originally suggested at https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=474540#77 * See 'util-linux' for a package where this scheme is already implemented. * Reason would be to give a better "out of the box" minbase experience/size, while still relying on localepurge for the full generic solution (dpkg has built-in support to filter these, debootstrap or similar could install a dpkg config file fragment with --exclude-path for minbase setups). Also the arguments presented in the e2fsprogs bug are not comparable to the reduction in Essential, as locales are self-contained data, to be used by a reduced set of packages, while the functionality from Essential can be used by anything else, and having no explicit depends makes it very difficult to know if something requires it or not. * Same concern as with extra docs above. = Demoted = * sensible-utils (~150 KiB) * Out of pseudo-essential through debianutils depends. * e2fsprogs (once fsck out, findfs replaced by --(blkid)-- lsblk, ~2.1 MiB) [[https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=nonessentiale2fsprogs;users=helmutg@debian.org|removal]] * mount (in util-linux 2.29.2-3). = See also = For a historical tracking of packages that got removed from the pseudo-essential set, see [[BusterPriorityRequalification]].