u(niversal )upd(ate)

January 26, 2026 ยท View on GitHub

Small update program written in golang intended for use in Universal Blue, updates flatpak apps, distrobox, brew, bootc and rpm-ostree (as a fallback)

Includes systemd timers and services for auto update

Installation

This program is now in the ublue-os/packages COPR

You can install it on Fedora by running:

Note dnf can be substituted for rpm-ostree or dnf5. The dnf COPR plugin must also be installed for the dnf copr command.

$ sudo dnf copr enable ublue-os/packages
$ sudo dnf install uupd

Note If you are on an image derived from uBlue main, you will need to remove or disable automatic updates with rpm-ostreed, to do this, you need to remove or change this line in the config file: AutomaticUpdatePolicy=stage (set to none if you don't want to remove the line)

Command Line

To run a complete system update you can use the command line

$ sudo uupd

This allows for passwordless system updates (user must be in wheel group)

$ sudo uupd

CLI Options

$ uupd --help

Configuration

Automatic updates are ran from the systemd service to edit basic options, you can edit /etc/uupd/config.json

{
    "checks": {
        "hardware": {
            "enable": true,
            "bat-min-percent": 20,
            "cpu-max-percent": 50,
            "mem-max-percent": 90,
            "net-max-bytes": 700000
        }
    },
    "modules": {
        "brew": {
            "disable": false
        },
        "distrobox": {
            "disable": false
        },
        "flatpak": {
            "disable": false
        },
        "system": {
            "disable": false
        }
    }
}

Options

modules

  • brew.disable: disable brew update module
  • distrobox.disable: disable distrobox update module
  • flatpak.disable: disable flatpak update module
  • system.disable: disable system update (bootc/rpm-ostree) module

checks.hardware

  • enable: enable hardware checks when running automatic updates (making sure wifi, etc is runnable)
  • bat-min-percent: minimum battery percentage for checks to pass
  • cpu-min-percent: maxmium cpu load percentage before checks fail
  • mem-max-percent: maximum memory usage percentage before checks fail
  • net-max-bytes: maximum amount of bytes transferred over the network before checks fail

Troubleshooting

You can check the uupd logs by running this command:

$ journalctl -exu 'uupd.service'

How do I build this?

For Testing

  1. just build will build this project and place the binary in output/uupd
  2. sudo ./output/uupd will run an update

Development System Installation

  1. just build-package will build uupd as a package and place it into output/rpms/uupd.rpm
  2. Install the rpm with a package manager of your choice or into a VM for testing

Devcontainer Usage

  1. When prompted, reopen the repository in Container
  2. Follow above building instructions
  3. Download uupd from container to host and run on your host

FAQ

Q: How do I add my own custom update script?

A: This is meant purely for updating the 'system' components of a Universal Blue image (Distrobox, Flatpak, Bootc, and Brew), anything outside of updating these core components is out of scope