2.1 KiB
2.1 KiB
Bazzite Post-Upgrade Automation
Problem
Bazzite is an immutable OS (Fedora Atomic/ublue-os based). After every major ujust update or rpm-ostree upgrade, /usr/ is replaced with a new image, wiping:
- Packages installed via
dnf install(not layered) ujustcommand results- Decky plugins that got wiped from
/usr/
What survives upgrades
| Path | Survives? | Examples |
|---|---|---|
/etc/ |
Yes | oberon-config.yaml, modules-load.d, udev rules, systemd enablements |
/home/ |
Yes | Scripts, flatpaks, Decky loader plugins, fgmod |
/var/ |
Yes | Toolbox containers, rpm-ostree deployments |
/usr/ |
No (replaced) | dnf-installed packages |
| rpm-ostree layers | Yes | coolercontrol, liquidctl, solaar |
| rpm-ostree kargs | Yes | mitigations=off, bluetooth.disable_ertm=1 |
Solution
setup-bazzite (deployed to ~/post-upgrade.sh on the Bazzite server at 192.168.1.40) is an idempotent script that handles everything. Run after each major upgrade:
ssh -t bazzite@192.168.1.40 sudo ~/post-upgrade.sh
The -t flag is required for sudo password prompts.
What the script does
- Layers packages with
rpm-ostree install(survives upgrades): coolercontrol, liquidctl, solaar, mangohud, lm_sensors - Sets kernel args (survives upgrades): mitigations=off, bluetooth.disable_ertm=1
- Kernel modules: nct6687 sensor chip via
/etc/modules-load.d/ - Oberon GPU governor: Installs and enables oberon-governor.service
- Services: Enables coolercontrold, sshd
- Firewall: Opens SSH port
- ujust tweaks: enable-ryzenadj-max-performance, get-decky-bazzite-buddy
- SimpleDeckyTDP: Decky plugin for TDP control
- SSH key: Authorized key from cachyos-otter
Files
| File | Location |
|---|---|
setup-bazzite |
Repo root, backup copy |
~/post-upgrade.sh |
Live script on Bazzite server (192.168.1.40) |
/etc/oberon-config.yaml |
GPU governor config (persists) |
/etc/modules-load.d/nct6687.conf |
Sensor module config (persists) |
/etc/udev/rules.d/99-ryzenadj-power-source-change.rules |
Power source udev rule (persists) |