Skip to content

2023

Bazzite Buzz No. 4

Welcome to Bazzite Buzz #4!

Bazzite is a custom image of Fedora 38 designed to bring the best in Linux gaming to your PCs, including the Steam Deck. This newsletter highlights all the work we are doing to bring gamers the best goodies for their PCs and handheld gaming devices.

If you are new to a Universal Blue project then here's some back filler. These images follow the continuous delivery methodology of development. That means we're constantly adding new things, so let's get started!

Today we have released a new batch of online ISOs. Our offline ISOs that we had released earlier had some issues with the Steam Deck's resolution, but eventually this will all be sorted out. When that happens we will release a new batch of offline ISOs in the future. In the meantime, grab the latest online ISO and make sure to connect to the internet in the installer.

We also now support Framework, Lenovo Legion, and ASUS devices with their own special images. Generic controller support for handheld PCs with our addition of hanygccs. In addition, Tailscale now has support out of the box and the GNOME images include the Tailscale status extension too. Fleek is temporary removed until the non-interactive installer is finished. KDE images can now share their screen properly on Wayland with the inclusion of xwaylandbridge. We also added android-udev-rules to the base image and a just command to add scrcpy. This can also give you access to guiscrcpy to mirror your Android phone.

Here is guiscrcpy mirroring an Android phone.

Adwaita Steam skin using Decky's CSS Loader plugin on a desktop Bazzite image.

(Yes it works on KDE Plasma too.)

We'd like to thank all of our contributors and those who are helping us troubleshoot any issues in our newer builds.

New Features

  • Added support for Framework devices - thanks for the inspiration pitstoptech!
  • Added support for ASUS devices - note that the Ally does not work yet, star that repository to follow along, we're pretty close!
  • Added support for Lenovo Legion devices.
  • Might as well remind you that we have Microsoft Surface images too
  • Added nct6687 driver for lm_sensors since it is needed on certain AMD B550 motherboards.
  • Added handygccs for handheld PCs.
  • Added Tailscale support out of the box.
  • Added Linux Mint's Web App Manager application.
  • Added Waydroid utilities.
  • Added Solaar and Resilio Sync to Bazzite Portal.
  • Oversteer is now added via udev rules so it does not have to be layered.
  • Removed AdwSteamGtk since it is recommended to install this theme via the CSS Loader Decky plugin.
  • vm.max_map_count increased to match SteamOS.
  • Signing is now removed from Bazzite Portal since it is now automatic.
  • Nvidia images now has a helpful message about secure boot.
  • GNOME images now play a sound when the battery is low.
  • GNOME images now include the gamerzilla-shell-extension
  • GNOME images now include the Tailscale status GNOME shell extension.
  • Steam Deck images will now build Steam RPM to avoid RPM Fusion dependency issues.
  • KDE color control is now added except for Nvidia images.
  • Corrected issue with Garry's Mod's just command.
  • Standardized nomenclature for just commands concerning game fixes.
  • Added a just command for installing Adwaita-for-Steam, will be automatically updated.
  • Added a just command to fix SteamVR on desktop images.
  • Added a just command to completely remove and reset bazzite-arch.
  • Added a just command xwaylandbridge for KDE Plasma images. This fixes screensharing issues.
  • Added a just command to add scrcpy.

Fixes

  • Fixed numerous issues with Steam.
  • Fixed numerous issues with Distrobox containers
  • Fixed hide/unhide GRUB just command.
  • Use current GRUB paths.
  • Added default-enabled option to disable TDP and other hardware controls on non-deck hardware. This should fix TDP issues on other devices.
  • Moved extest back on desktop images and is optional to use.
  • Fixed Steam Deck images having a broken "Return to Game Mode" shortcut if they had desktop auto-login enabled.
  • Fixed bazzite-hardware-setup executing every boot.
  • Fixed other auto-login issues on all images.
  • Adjustments to the bazzite-arch container.
  • Fixed justfile creation. Currently, this only gets written if the file exists. Create it when the file doesn't exist instead.
  • Reorganized just commands.
  • Lutris dependency for PCEM is now added.

Full changelog and ISOs for the 1.2.0 release here.

Universal Blue F39 builds are here!

After some hard work by our team members we were able to generate F39 builds of our images. Of course they are not stable yet, but if you feel the need you can already try them out. While working on this, we also introduced the gts tag which will enable you to cruise along on a steady stable pace. It will have your image follow along the latest-1 release. So you will have a rock solid machine. We currently pushing our free builders to the max with 57 images being generated. We hope you enjoy it as much as we do.

-- Universal Blue Team

Bazzite Buzz No. 3

Type "just" in a host terminal to see a list of custom convenience commands.


Welcome to Bazzite Buzz #3! Bazzite is a custom image of Fedora 38 designed to bring the best in Linux gaming to your PC and handheld devices. This newsletter highlights all the work we are working on over the past few weeks. If you are new to a Universal Blue project here's some back filler: These images follow the continuous delivery methodology of development. That means we're constantly adding new things, so let's get started!

IMPORTANT: Nvidia GPU users should recreate the bazzite-arch Distrobox container. Open a host terminal and enter: just install-bazzite-arch to do this. The issue stemmed from missing 32-bit libraries that require the user to remake the container. As a result of this, it unfortunately means this fix requires manual intervention.


New hardware support and a ton of general fixes have been the main focus over the last couple of weeks for Bazzite. Some notable features added were the inclusion of a new system resource monitor application and adding proper support for Microsoft Surface devices. We also were committed to fixing as many issues reported as we possibly can, and tidying up the project as usual.

A modern task manager.

As time goes on, we plan to release an image dedicated to the Asus ROG Ally. This device needs a specific kernel and some other tweaks to have Bazzite function correctly on it. Discussion on this can be found here, and for progress on general handheld controls take a look here.

Hippie Hacker has created this guide to get iimatey working on a Steam Deck installation of Bazzite for a command line approach to installing it. This may solve issues with the current GUI installer or for those who prefer this command line interface method for installation.

Finally, most of the new features from the SteamOS 3.5 preview are already available in the Bazzite Steam Deck images right now. This includes gamescope's new scaling and color options. We also are already using newer base packages than SteamOS 3.5.

New Gamescope improvements on the Steam Deck images.

Features

  • Microsoft Surface devices are now officially supported.
  • Broadcom's WL driver can be installed since it is needed by some hardware. Disabled by default. Enter just use-broadcom-wl to use it.
  • Added Mission Center as a preinstalled application.
  • Added Discover Overlay as a preinstalled application.
  • Use Valve's defaults in Mesa.
  • Mesa updated to 23.1.7
  • OpenRazer is now an option in Bazzite Portal.
  • Default fonts in the GNOME images match the defaults of SteamOS KDE.
  • Added the Ryzen SMU driver to load automatically on Steam Deck builds.
  • Added Steam soundfont when selecting a Valve-inspired theme for GNOME images.
  • The GNOME Steam Deck image now has a template for vkBasalt to give an example config available from the right click menu.
  • Gear Lever can now upgrade Greenlight when an update is available.
  • Added disk display information to neofetch.
  • Enabled Steam CEF port forwarding by default.
  • Steam Deck images now disable PEERNTP, so Network Time Security is always used.
  • Flatpak management is now improved through our flatpak-manager utility.
  • Users can perform system updates as root and allow updates per active user.
  • Increased vm.max_map_count for S&box and Counter-Strike 2 to function properly w/ Proton.
  • Added Nix garbage collection to just clean-system
  • Added a Just command for enabling theme integration with Flatpak applications.
  • Added a Just command to install OBS Studio Portable.
  • Added a Just command to disable uBlue gamepad drivers if desired. (Thanks lorduskordus!)
  • Added a Just command to disable sdgyrodsu.

Fixes

  • Older AMD GPUs will now be detected properly. (Thanks Action Retro!)
  • Hybrid GPUs using Nvidia + AMD/Intel should be working better now.
  • Hardware setup should only retrieve GPU hardware information once.
  • Fixed the GNOME Steam Deck image power profile to have sensible defaults.
  • Deck services should now be disabled on generic devices on the Steam Deck images.
  • Added workaround from ChimeraOS for Gamescope crashing if Steam hasn't been launched prior to switching to Game Mode.
  • Oversteer should now work properly once installed from Bazzite Portal or through Just.
  • Fixed Boilr installer not working in some scenarios.
  • Flatpak lists are now in /usr so changes won't be removed.
  • The desktop auto-login service has been removed from desktop images, and enhanced on Steam Deck images to check that Steam has been updated prior to starting gamescope session.
  • The Team Fortress 2 tcmalloc fix now works when Team Fortress 2 is installed on a microSD.
  • Hide GRUB Menu option from Bazzite Portal has been removed from the desktop images since the focus has shifted to the Steam Deck images for home theater PC setups.
  • pulseaudio-utils has been added since some third-party applications depend on this.
  • Fixed missing icon for Lutris.
  • Fixed the xdg-desktop-portals bug that affected the file picker.
  • Numerous fixes to fish shell.
  • Numerous fixes to Bazzite Portal.

Full changelog here.

Bazzite Buzz No. 2

Bazzite has hit over 1,000 commits in a little over 200 days since the project's inception! We now own the domains bazzite.gg and metrics.bazzite.gg for this project. Offline ISOs are mostly ready to go, check it out below!

All hail the cube.

Before we move on to the changes we've got a new installation video from Justin Garrison

Features and Fixes

Bazzite 1.1 is out!

Here's the quick summary:

New ISOs

Thanks to akdev1l we now have fresh offline ISOs available for testing!

Features

  • All images can now be signed through Bazzite Portal.
  • Added calibrated color profiles for matte & reflective Steam Deck displays.
  • Switch to using dedup service from SteamOS-BTRFS.
  • Added ROM Properties.
  • Added GModCEFCodecFix for Garry's Mod to resolve launch issues on the Linux port.
  • Oversteer can now be installed in the Bazzite Portal.
  • Toolbox is now restored.
  • Chinese input now works properly.
  • Changed the functionality of auto-start Big Picture Mode to auto-login on desktop images.
    • If you want the previous functionality back, enable "Start Steam in Big Picture Mode" in the Steam settings for previous behavior.
  • Added twitter-twemoji-fonts, matching SteamOS.
  • Nix package manager will now be added via the Determinate Systems Nix Installer.
  • Nix packages are now automatically updated.
  • Fleek is now an option for users using Nix.
  • Upgraded Greenlight to version 2.0.0.
  • Added PinApp to Bazzite Portal under "Utilities."
  • Memory Tuning option removed from Bazzite Portal on desktop images.
  • Steam Deck images now mimic SteamOS's volume levels.
  • Steam Deck images now uses the "flat" mouse acceleration profile to match SteamOS.
  • Steam Deck images now use the native package of Protontricks.
  • GNOME images will now use ProtonPlus over ProtonUp-qt by default.
  • GNOME images will also ship the AdwSteamGtk Flatpak for Steam.
  • Automatic updates for Firefox GNOME theme and Thunderbird GNOME theme.

Fixes

  • Updates are no longer triggered when checking for one on Steam Deck images. (Thanks ChimeraOS!)
  • Update progress bar's length is now longer and more granular on the Steam Deck images.
  • Tons of Waydroid fixes.
  • Tons of bazzite-arch distrobox container fixes.
  • Max volume is now reduced to prevent overamplification.
  • Fixed Steam reinstalling when switching to Game Mode.
  • Fixed Steam reverting beta client selection in Game Mode.
  • Fixed hardware detection in Bazzite Portal.
  • Fixed non-steam-deck hardware being limited to 15W.
  • Fixed updates not applying on Steam Deck images.
  • Fixed typo in just configure-waydroid.
  • Fixed auto-login in KDE images causing issues with the file picker.
  • Fixed ibus errors in the KDE images.
  • Fixed boot script slowdowns.
  • Fixed Steam Deck images having issues with Night Mode and other color issues from this PR.

Startingpoint rewrite heads-up – What you need to know

Note

This post was edited on 2023-09-09 to change some inaccurate details. The PR has now been merged.

Startingpoint, the 'template' repository for creating custom images that includes a simplified configuration format recipe.yml, has been going through a rewrite for almost a month now. The rewrite is going to be merged as soon as it and the documentation is ready and tested, and this post will guide you through the changes.

The rewrite brings startingpoint from a single build.sh where incrementally added features were piled up, to a collection of modules run by a very simple build script in the order specified in the recipe.yml configuration. This fundamental change makes startingpoint more extensible and customizable, allowing you to add and remove features as you please. It also allows for sharing of certain configuration, such as packages lists, between multiple images built in the same repository.

Unfortunately, breaking changes have been made to the configuration (recipe) and the script system.
For maintainers of custom images, there are a couple of ways to deal with this.

  • Create a new repository and port your changes
    • This approach will be easiest if you are not that familiar with git and your changes are small.
    • This approach has the advantage that you can keep using your old repository while porting all of your changes to the new one.
    • If your old repository is a fork of startingpoint, you might want to detach it from startingpoint. This would allow you to fork startingpoint again to create your new repository (GitHub allows only one fork per-repo per-account).
  • Do a manual merge of the rewrite into your repository
    • You'll need to be familiar with using some software that allows you to do manual git merges. You want to accept all incoming files that are not configuration files, and manually figure out the configuration files.
    • This approach has the advantage of keeping your git history, and allowing you to easily move all your custom scripts into the new build at once.
  • Do nothing
    • Perhaps you've got a great custom build system going, you've done a lot of changes to build.sh, you've added new features you need. Or you just can't be bothered? Cool! You don't need to keep up-to-date with the startingpoint template if you don't want to. You'll still get OS updates, your current setup won't break. You just won't be able to take advantage of new features that might get added to startingpoint.

Ok, but what actually changed?

Take a quick look at the new default recipe.yml.

## image will be published to ghcr.io/<user>/<name>
name: startingpoint
## description will be included in the image's metadata
description: A starting point for further customization of uBlue images. Make your own! https://ublue.it/making-your-own/

## the base image to build on top of (FROM) and the version tag to use
base-image: ghcr.io/ublue-os/silverblue-main
image-version: 38 # latest is also supported if you want new updates ASAP

## list of modules, executed in order
## you can include multiple instances of the same module
modules:

  - type: files
    files:
      - usr: /usr # copy static configurations
                  # configuration you wish to end up in /etc/ on the booted system should be 
                  # added into /usr/etc/ as that is the proper "distro" config directory on ostree
                  # read more in the files module's README

  - type: rpm-ostree
    repos:
      # - https://copr.fedorainfracloud.org/coprs/atim/starship/repo/fedora-%OS_VERSION%/atim-starship-fedora-%OS_VERSION%.repo
    install:
      # - micro
      # - starship
    remove:
      - firefox # default firefox removed in favor of flatpak
      - firefox-langpacks # langpacks needs to also be removed to prevent dependency problems

  - type: bling # configure what to pull in from ublue-os/bling
    install:
      - fonts # selection of common good free fonts
      - justfiles # add "!include /usr/share/ublue-os/just/bling.just"
                  # in your custom.just (added by default) or local justfile
      - nix-installer # shell shortcuts for determinate system's nix installers
      - ublue-os-wallpapers
      # - ublue-update # https://github.com/ublue-os/ublue-update
      # - dconf-update-service # a service unit that updates the dconf db on boot
      # - devpod # https://devpod.sh/ as an rpm


  - type: yafti # if included, yafti and it's dependencies (pip & libadwaita)
                #  will be installed and set up
    custom-flatpaks: # this section is optional
      # - Celluloid: io.github.celluloid_player.Celluloid
      # - Krita: org.kde.krita

  - type: script
    scripts:
      # this sets up the proper policy & signing files for signed images to work
      - signing.sh

You'll see that instead of top-level configuration keys like rpm: or firstboot:, there's one top-level array modules: that includes most of the previous configuration as modules. Modules are scripts, executed in the specified order, that take in yaml configuration from the recipe. Anyone can create a module by just putting a script in a subdirectory the modules/ directory. You can remove modules by just removing the entry in the modules: array, you can include multiple of the same type of module, and you can even share modules between recipes (images) using the - from-file: example.yml syntax.

This modular system changes the role of scripts a little. Scripts are no longer intended to read recipe.yml, instead they do a single (or a collection of) commands that are not intended to be configurable in the recipe. If you want to create a script that takes in configuration, create a module. Furthermore, scripts in the pre/ and post/ directories will no longer be executed by default, as there is no set "pre" and "post" phase with the modular system.

As a minor change, all user configuration has been moved into the config/ directory in the root of the repository. This might make manual merging from the old version a bit more convoluted, but should ease merges in the future.

When can I expect the PR to merge?

When it is fully ready, tested, and documentation changes have been PRd onto the documentation website. A while after the merge there'll be a more newcomer-friendly announcement post. The new version will be considered a '1.0', and the amount of breaking changes will be kept as zero for as long as possible.

To quicken or effect the process, feel free to give comments, read through, and help in testing the PR.

For post-release I have plans for a PR that would allow the configuration of multiple modules be included using the from-file: syntax, a PR that would allow an entire directory full of build scripts to be run at once, without having to specify each one individually, and a blog post that would showcase high-level technical details of the repository without needing to get in the weeds by reading source code.

Technically, it would also be possible to "reverse" the flow by "compiling" the recipe.yml into a Containerfile, which is something I'm interested in exploring.

Bazzite Buzz No. 1

Bazite 1.0 released last week, but the hum of progress continues! Welcome to the Bazzite Buzz, our newsletter for all the good things we hope to bring gamers over the next few months. If you are new to a Universal Blue project here's some back filler: These images follow the continuous delivery methodology of development.

We build on top of the Fedora base and then build our customizations on top every day and on every change. That means when we fix something or add a new feature everyone gets it. So if we fix one of your issues it can be in your device in less than 15 minutes, and usually faster. Neat. The more people help out, the greater the pace of features and goodies.

In order to help with that we'll start publishing these Bazzite notes regularly so you can keep pace with what's happening. Here's a great tour video from Hi-Tech Lo-Life showing off some Bazzite features.



Every issue we will go over some of the most exciting changes, and we'll always link to the Bazzite commits so you can inspect them for yourself. Ok let's get rolling:

Features

  • Added Gear Lever to manage AppImages.
  • Added equalizer settings for mic from SteamOS
  • Added NTP by default to fix inaccurate clock information like the time & date.
  • Added Valve's audio firmware from SteamOS.
  • Added wmctrl, useful for resizing windows in Game Mode.
  • Ignore microphones on headsets with microphones from SteamOS.
  • Added loopback audio sources.
  • Neofetch is now replaced with Hyfetch by default. (Neofetch is still available however.)
  • For GNOME variants: Added Hanabi for videos as desktop wallpapers.
  • Added new features and fixed issues with GNOME variants of Bazzite.
    • Removed unnecessary preinstalled applications.
    • Added Extension Manager to replace Extensions.
    • Fixed VRR not working.
    • Removed AppIndicator as a preinstalled extension.

Fixes

  • Preserve Decky launcher after updates.
  • Decky now uses the "release" branch as opposed to "pre-release" by default.
  • Added missing dependency for Lutris.
  • Added missing dependency for SteamTinkerLauncher.
  • Major Distrobox cleanup for a more stable experience.
  • Fixed battery limit service to match SteamOS.
  • Fixed fish shell not working system-wide.
  • Fixed Bazzite Portal not installing certain things and relaunching at every boot.
  • Multiple fixes to Waydroid.
  • The Steam Deck variant defaults to X11 in Desktop Mode by default to resolve issues. Wayland is still an option.

Bazzite 1.0

After 192 days of development we'd like to introduce Bazzite 1.0! Bazzite is a custom image of Fedora 38 designed to being the best in Linux gaming to your PCs, including the Steam Deck:

Vapor

KDE's Vapor Theme

Bazzite is built from ublue-os/main and ublue-os/nvidia using Fedora technology, which means expanded hardware support and built in drivers are included.

Game mode

Steam Game Mode

Additionally, Bazzite adds the following features:

Bazzite

  • Proprietary Nvidia drivers pre-installed.
  • Full hardware accelerated codec support for H264 decoding.
  • Full support for AMD's ROCM OpenCL/HIP run-times.
  • xpadneo driver for wireless Xbox One controllers.
  • Full support for DisplayLink.
  • Includes Valve's KDE themes from SteamOS.
  • LatencyFleX, vkBasalt, MangoHud, and OBS VkCapture installed and available by default
  • Support for Wallpaper Engine. (Only on KDE)
  • Distrobox preinstalled with automatic updates for created containers.
  • Automated duperemove services for reducing the disk space used by wine prefix contents.
  • System76-Scheduler preinstalled, providing automatic process priority tweaks to your focused application and keeping CPU time for background processes to a minimum.
  • Customized System76-Scheduler config with additional rules and CFS parameters from Linux-TKG.
  • Uses Google's BBR TCP congestion control by default.
  • Input Remapper preinstalled and enabled. (Available but default-disabled on the Deck variant)
  • Helpful first-start installer provides an easy way to install numerous applications and tweaks, including installing CoreCtrl and GreenWithEnvy.
  • Nix package manager optionally available.
  • Waydroid preinstalled for running Android apps. Future releases will offer to set this up for you. (Not available on Nvidia builds)

Waydroid

Waydroid
  • OpenRGB i2c-piix4 and i2c-nct6775 drivers for controlling RGB on certain motherboards.
  • GCAdapter_OC driver for overclocking Nintendo's Gamecube Controller Adapter to 1000hz polling.
  • Out of the box support for Wooting keyboards.

Bazzite Desktop

The desktop release also features the following:

  • Runs Steam and Lutris in a custom Arch Linux OCI via Distrobox.
  • Option to automatically launch Steam in Big Picture Mode on boot for HTPCs.

Bazzite on Deck

The Steam Deck release also features the following:

  • Directly boots to Gamemode matching SteamOS's behavior.
  • Automatic duperemove greatly trims the size of compatdata.
  • Latest version of Mesa creates smaller shader caches and does not require them to prevent stutter.
  • Able to be booted even if the drive is full.
  • Uses Wayland on the desktop with full support for Steam input.
  • Features ported versions of most SteamOS packages, including drivers, firmware updaters, and fan controllers from the evlaV repository.
  • Patched Mesa for proper framerate control from Gamescope.
  • Comes with patches from SteamOS BTRFS for full BTRFS support for the SD card by default.
  • Ships with a ported copy of SDGyroDSU, enabled by default.
  • Option to install Decky Loader, EmuDeck, and ProtonUp-Qt, among numerous other useful packages on installation.
  • Custom update system allows for the OS, Flatpaks, and Distrobox images to be updated directly from the Gamemode UI.
  • Built in support for Windows dual-boot thanks to Fedora's installation of GRUB being left intact.
  • Update break something? Easily roll back to the previous version of Bazzite thanks to rpm-ostree's rollback functionality. You can even select previous images at boot.
  • Steam and Lutris preinstalled on the image as layered packages.
  • Exclusively uses ZRAM by default with the option to switch back to a swap file and set a custom size if desired. (1GB by default)
  • BFQ I/O scheduler to prevent I/O starvation when installing games or during background duperemove processes.
  • TLS/SSL secured DNS and NTP by default. (This is a handheld PC you're likely to use on random public networks after all)
  • Applies SteamOS's kernel parameters and enables amd-pstate by default.
  • Default-disabled power-user features, including:
    • Service for low-risk undervolting of the Steam Deck via RyzenAdj, see ryzenadj.service and /etc/default/ryzenadj.
    • Service for limiting the max charge level of the battery, see batterylimit.service and /etc/default/batterylimit. (Works even when the device is off)
    • Built in support for display overclocking. For example, add GAMESCOPE_OVERRIDE_REFRESH_RATE=40,70 to /etc/environment.
    • Ability to switch back to X11 on the desktop if desired by editing /etc/default/desktop-wayland.
    • 32GB RAM mod your Steam Deck? Enjoy double the maximum VRAM amount, automatically applied. (Can you share your soldering skills?)

How to get it and current status

Start with the documentation and make sure you follow the installation instructions carefully! The installation process is still considered incomplete, we're hoping to eventually migrate to the new webui-based Anaconda installer which will be much nicer for our use case.

Like all Universal Blue images, Bazzite is using features that are on their way to Fedora, and are currently not considered stable. However with over 1.5 million image pulls over the last 9 months, we feel the model and method are proving to be reliable!

Download sizes are also currently less efficient than they should be. We're hoping that gamer interest in Fedora will bring in new ideas and contributors to help solve these issues.

Join the crew

Bazzite is an open source project, contributions and feedback accepted! Check out the Contributor's Guide to get started and join our Discord.

We are especially in need of people with knowledge of the Anaconda installer so that we can make proper offline ISOs.

Special Thanks

Bazzite is a community effort and wouldn't exist without everyone's support. Below are some of the people who've helped us along the way:

  • evlaV - For making Valve's code available and for being this person.
  • ChimeraOS - For gamescope-session and for valuable support along the way.
  • Jovian-NixOS - For supporting us with technical issues and for creating a similar project. Seriously, go check it out. It's our Nix-based cousin.
  • Steam Deck Homebrew - For choosing to support distributions other than SteamOS despite the extra work, and a special thanks to PartyWumpus for getting Decky Loader working with SELinux for us.
  • cyrv6737 - For the initial inspiration and the base that became bazzite-arch.

Sigstore signed images are now here

Universal Blue images have traditionally been signed by cosign so that you as a user can verify that the image you're booted into is the same one we make in GitHub.

This involves checking the key manually:

git clone https://github.com/ublue-os/nvidia 
cosign verify --key nvidia/cosign.pub ghcr.io/ublue-os/kinoite-nvidia

When you rebase to a Universal Blue image, you might have noticed something:

rpm-ostree rebase ostree-unverified-registry:ghcr.io/ublue-os/kinoite-nvidia:38

The ostree-unverified-registry section is something that we've had to use because we didn't have a way to run a signed image. You had to manually check the signature that we provide with cosign (as listed above).

Actions needed to move to signed images!

Thanks to the upstream efforts in rpm-ostree, we can now run fully signed images directly. In order to do this you need to rebase to a signed image:

rpm-ostree rebase ostree-image-signed:docker://ghcr.io/ublue-os/kinoite-nvidia:38

And then reboot.

Check the images page for updated rebase commands for your system. You'll now be on a signed image and be good to go, rpm-ostree and skopeo will handle the rest.

Upgrading from stock Fedora

The policies in stock Fedora don't support migrating to a signed Universal Blue image directly. For now we're recommending to rebase to an unsigned image first to get the right policies and keys in place, and then rebasing using the ostree-image-signed:docker:// snippet. If you have any ideas on how to make this smoother feel free to open a PR or file an issue!

Conclusion and Thanks!

We've updated the documentation to refer to this new command. You can of course continue to run on an unsigned image, but we recommend getting that sigstore goodness all the way to your device.

If you're sad about the URL becoming more complex, don't worry, soon it'll look like this: bootc switch ghcr.io/ublue-os/kinoite-nvidia:38. We'll let you know when that day arrives.

A huge shoutout to the sigstore and Fedora communities for their guidance and support. This is an important milestone for Universal Blue, one more requirement for moving out of beta is out of the way!

One Million Image Pulls - Happy Birthday to Us!

WE DID IT!

Today we crossed one million image pulls. Though Kinoite continues to dominate the leaderboard, our steady march forward continues.

If you've been kicking the tyres on this next generation of linux desktop, we thank you! This means that we've had a million upgrades, which isn't a bad start!

Project Status

  • Generally speaking things are pretty stable, the next major work item will be enabling F39 builds, which we'll do whenever RPMFusion starts to make builds.
  • Work continues on the ARM builders, we'd like to thank Equinix Metal's Open Source Program for their continued support.
  • Our images are now signed, we recommend moving to signed images as soon as you can!
  • No major obstacles to report, while we still consider these images beta they are proving to be quite robust!
  • You might want to check the current open issues to see how people are getting on.

And a quick call for help -- we're still in dire need of a more reliable ISO installation experience. If you are familiar with Anaconda we could use a hand, especially if you want to help bring the fancy new installer to our custom images.

It's also our birthday!

Though this project may seem new, the first commit on this journey is a little bit over two years old! At the time "ublue" was just an imperative script.

Later that year, in November 2021, the first edition of what became the OSTree Native Containers spec was committed to the Fedora wiki. This flipped the project on it's head and the rest is history! Continuously delivered OCI goodness is here!

We've picked July 21st as our birthday since it's coming up (and we also forgot). So today we're celebrating two years of cloud-native goodness, thanks for hanging out with us!

Akmods Image now Available

Since early in the Universal Blue project, our Nvidia repository has been building kernel modules(akmods), though only Nvidia drivers. While this approach worked great at first, it became apparent that the akmods would need to be split off into it's own layer:

image

This kicked off a nice community discussion where the team figured out an approach.

First we needed to migrate to a new signing key and then begin splitting the akmods into its own repository. Conveniently, this also allows us to include things like v4l2loopback so that Universal Blue users will have that working out of the box. Soon we hope to add more hardware enablement akmods like XBox Wireless controllers, OpenRazer, and some older Broadcom wireless drivers.

Current status:

  • The config repo provides just commands to import the new akmod key AND the older legacy nvidia key
  • The akmods repo signs kmods with new key (and provides key in an RPM)
  • The installer ISO installs BOTH the old and new keys
  • The nvidia repo is still signing the Nvidia kmods with the old key (and provides both old and new key in RPM)

Sometime on June 17th we will cutover nvidia to the new signing key so that existing users can migrate to the new key ahead of time.

Checking for the v4l2loopback module

You will see the update coming automatically in the background or if you do an rpm-ostree status:

Added:
  kmod-v4l2loopback-6.2.15-300.fc38.x86_64-0.12.7^20230503g2c9b670-1.fc38.x86_64
  ublue-os-akmods-key-0.1-1.fc38.noarch
  v4l2loopback-0.12.7^20230503g2c9b670-1.fc38.x86_64

After you reboot into your new deployment you can double check that the module exists:

$ ls /lib/modules/`uname -r`/extra
v4l2loopback

Special Thanks

This work was patiently prototyped by @dhoell over the course of many months while juggling a busy school schedule. Thanks for your contribution David!

Important Secure Boot Changes required for Nvidia Image Users

As part of our move to beta we've found a scaling issue that needs to be sorted; skip below if you just want the instructions.

Initially the Nvidia images were signed by a key scoped only to the ublue-os/nvidia repository. At the time, we didn't expect to grow much past that, but now we want to add more akmods (like OBS loopback camera, XBox Wireless Controllers, etc.) which we are building in a seperate ublue-os/akmods repository as a "new layer" if you will.

As part of our secrets management process, we are regenerating the keys used for Secure Boot signing our kernel modules. This means existing users must install a new key for all of Universal Blue akmods in addition to the key specific to Nvidia.

On June 17th, we will switch Secure Boot signing to use the new key; from that time on only the new new key will be required.

As of this morning the new key is on the images, so subsequent new installations will be fine.

Actions Needed

If you use Secure Boot with Nvidia you are likely on the outdated keys, you MUST run the following commands to add to the new key BEFORE JUNE 17th:

sudo mokutil --import /etc/pki/akmods/certs/akmods-ublue.der

Full instructions are in the README and we have fresh ISOs as well if you're interested in helping to test.

New installations will not be affected after May 20th 2023.

We apologize for the inconvenience that this may cause as we continue to improve our processes, thanks!

Custom Images can solve the "Third Party Repo" problem

Fedora's image-based variants are moving to OCI-based container images, which neatly solves third-party repository problems.

Over the past few weeks there have been multiple version and syncing issues between Fedora and RPMFusion, a recommended repository for multimedia codecs.

Hello world!

Welcome to Universal Blue, custom images based on Fedora.

We'll be posting news and updates in this blog section in the hopes of furthering discussion around cool new things this new sandbox provides. Here's our mission statement and values if you want to check them out.