User:Maffblaster/Drafts/Skinny Gentoo

From Gentoo Wiki
Jump to:navigation Jump to:search

This article tracks various techniques for making Gentoo consume less disk space (shrinking the size of the Gentoo base installation). This is useful when trying to trim the size of a Gentoo down to an irreducible size.

Techniques

Limit installed packages

In order to prevent bloat, the system should contain the lowest number of packages possible. This image will be on a strict diet so that it can stay skinny.

Bare minimums may change based on the purpose of the image. Containers do not need to contain a kernel, whereas a kernel is a necessary part of virtual machine images.

Container images

No kernel necessary, which will reduce space requirements significantly.

Virtual machine images

kernel .config

Kernel configuration should be kept to the lower possible numbers of features... perhaps review the Gentoo profile structure.

make.conf

/etc/portage/make.conf can be adjusted to remove unnecessary files.

FILE /etc/portage/make.confRemoving components system wide
FEATURES="nodoc noinfo noman"

Then recompile the @world set.

Replacing userspace binaries with a single binary implementation

Many of the functional core utilities in Gentoo can be replaced with a smaller, single binary implementation such as sys-apps/busybox (with make-symlinks USE flag enabled) or sys-apps/toybox.

Most of the files in /bin, /usr/bin, and /usr/sbin should be symlinks to the single binary.

Changing out the C lib

Use sys-libs/musl instead. This is possible by selecting the default/linux/amd64/17.0/musl profile.

root #eselect profile set default/linux/amd64/17.0/musl

Removing transient cache files

The following directories are ethereal / transient and can be removed before shipping an image: /var/tmp/portage, /var/db/repos/*, /var/cache/distfiles/*

Experimental: Removing the package manager

Problem: Portage and its reverse dependencies (such as the python implementation) is likely one of the biggest disk space consumers by percentage in a skinny image. Is it possible to remove Portage, and then reinstall via simple a simple scripted function later? The idea would be to leave the existing package database in place (and potentially compress it to squashfs or another readable format), then reverse this operation if/when the package manager is reinstalled. This is essentially gutting Gentoo of what makes it Gentoo, but should be very beneficial in terms of disk space gains.

Size of image with Portage and reverse deps: TODO Size of image with Portage and reverse deps stripped: TODO

Experiments to explore:

  • Can Portage remove its reverse dependencies and then remove itself?
    • Would a secondary package manager be needed to perform this step? Something that can read the EAPI and the package database.
  • Can Portage (or a similar tool) operate (mainly interested in --search) from a read-only package database (/var/db/pkg)?
  • Do vulnerability tools (such as OpenVAS) read version information /var/db/pkg directly, or do they mostly scan the filesystem and interact with in-image binaries directly?

Additional considerations:

  • Can anything be done to shrink python code on disk? IE instead of .py files, compile/compress these files?
  • Change out the interpreter to pypy, pyston, or?
  • Can a new version of