Skip to content

OmegaSquad82/bluebuilds

Repository files navigation

OmegaSquad82/BlueBuilds  

image-build vuln-scan Dependabot Updates

See the BlueBuild docs for quick setup instructions for setting up your own repository based on this template.

Images

All images are built with a selection of common packages, flatpaks as well as some configuration.

It is a flavor of Bazzite Stable for ASUS Laptops with NVIDIA dGPU.

Bazzite Stable for either desktop or laptop gaming.

Bazzite Deck Stable for Steam Deck clone(s).

Fedora (Sericea/)Sway Atomic suitable for low resource footprint devices (e.g. netbooks).

Customizations

Podman

The podman.service is enabled on Buttgenbachit.

Flatpaks

All images

install
  • KeepassXC
  • LibreOffice
  • LibreWolf
  • Signal
  • SynologyDrive
  • Warehouse
uninstall
  • Mozilla Firefox

Bazzite images

  • Discord
  • OpenRGB

Select images

  • AusweisApp2
  • BoxBuddy
  • Calibre
  • Codium
  • HandHeldDaemon
  • LACT
  • Libation
  • MediaWriter
  • Obsidian
  • Ptyxis
  • Weasis

Utility packages

All images

install
  • byobu
  • htop
  • kitty
  • neovim

Select Images

uninstall
  • firefox

Manually

execute
  • brew install pdfgrep

464XLAT for IPv6-only

Fedora packages clatd to translate flows from an IPv6-only client to IPv4 hosts via NAT46, so it can be transmitted and then translated back via NAT64 in a PLAT device, e.g. at the edge in a CPE or in an ISP network. Although clatd is functional there was no actual testing in my networks, yet.

Swap on ZRAM

The ZRAM Linux kernel module is capable of creating compressed ram disks. Since being block devices they can be formatted with any filesystem. Fedora uses Swap on ZRAM by default on all Spins.

There exist several packages to configure compressed ZRAM drives and some are conveniently setting one up as swap. Fedora uses the systemd-zram-generator via its zram-generator-defaults package. Starting with v1.2.1 it supports (via systemd/zram-generator#178 and systemd/zram-generator#200) the configuration of secondary compression algorithms to recompress pages on a ZRAM drive. Furthermore ZRAM requires recompression to be triggered by touching a knob in sysfs, which is out of scope of the project.

It is important to know that in ZRAM terms incompressible (e.g. with one compression algorithm but not necessarily with another) pages are called huge; Linux's Memory Management subsystem also has a concept of huge pages but means something entirely different. On top of that marking pages as idle requires memory tracking which Fedora / Bazzite currently deactivates in production kernels. The actual implementation neither relies on either huge or idle pages.

Implementation

The Linux Memory Mangement subsystem has been heavily tilted in 20-zram-swap.conf for swapping out pages by setting swappiness=180 and the swap's page readahead was deactivated by setting page_cluster=0 to improve random IOPS with the cost of more page faults. Some synthetic benchmarks (see links below) measured ~2M IOPS with lz4 and ~820k IOPS with zstd1. Other values were essentially collected from the Arch Linux documentation and some blog posts I've also linked below.

Therefore ZRAM is configured in zram-generator.conf to use lz4 as a fast, low-latency compression algorithm and zstd1 as secondary one. The system will try to recompress some amount of pages once every few seconds. The exact amount of pages is scaled with the system's resources, depending on the total system memory per CPU core as a simple metric.

To actually facilitate recompression it uses a zram-recompression.timer to orchestrate the one-off execution of a zram-recompression.service. Since freed memory is likely to become fragmented over time another set of systemd units, a zram-compaction.service and a zram-compaction.timer have been created. The Service units are configured to trigger either compaction for all existing ZRAM devices or recompression for the ZRAM swap drive. Timers add a randomized delay of up to 10% to the cycle time.

Outcome

On an old device with less than 4 GiB of system memory, I've observed that the ZRAM swap converged from a ratio of minimum 2:1 to ratios of roughly 3:1 during "normal" and up to 4:1 during certain excessive usage scenarios (Browser, several Electron shells e.g. for code editing + communication, E-Mail, password databases, office application(s), file synchronization application(s), screen capture, image manipulation, ...) while the system stays mostly reactive, as much as one can expect from this outdated machine. With this configuration I try to achieve an amenable user experience, but the capabilities of my system are still limited. At the very least it is more fun and less frustrating to work with than ever before. ;c)

Just LZ4 and no recompression under heavier usage

ratio ~2.6:1

Using zstd:1 as recompression algorightm, from light to heavy usage

ratio ~4,1:1

ratio ~3,8:1

ratio ~3,2:1

Improvements

Regularly trying to recompress some fixed number of pages may not be sufficient. One next step could be to enable memory tracking which allows to set a duration after which an unused page would be marked as idle. Recompression could thus be limited to such idle pages which were swapped out for a time, limiting the chance to recompress pages which are going to be evicted qickly. More compression algorithms and levels could be added as well to account for remaining huge (=incompressible) pages, subsequently using zstd3 or lz4hc, for instance.

Blogs

Documentation

Github

Wikis

Installation

Warning
This is an experimental feature, try at your own discretion.

To rebase an existing atomic Fedora installation to the latest build:

  • First rebase to the unsigned image, to get the proper signing keys and policies installed:
    rpm-ostree rebase ostree-unverified-registry:ghcr.io/blue-build/template:latest
    
  • Reboot to complete the rebase:
    systemctl reboot
    
  • Then rebase to the signed image, like so:
    rpm-ostree rebase ostree-image-signed:docker://ghcr.io/blue-build/template:latest
    
  • Reboot again to complete the installation
    systemctl reboot
    

The latest tag will automatically point to the latest build. That build will still always use the Fedora version specified in recipe.yml, so you won't get accidentally updated to the next major version.

ISO

If build on Fedora Atomic, you can generate an offline ISO with the instructions available here. These ISOs cannot unfortunately be distributed on GitHub for free due to large sizes, so for public projects something else has to be used for hosting.

Verification

These images are signed with Sigstore's cosign. You can verify the signature by downloading the cosign.pub file from this repo and running the following command:

cosign verify --key cosign.pub ghcr.io/blue-build/template

About

Builds custom Fedora Atomic images on top of Universal Blue.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors 3

  •  
  •  
  •  

Languages