Fedora CoreOS Setup¶

Fedora CoreOS works great on the BC-250. As a container optimized OS, use cockpit, podman, and quadlets to manage a single machine. I use Docker swarm to manage multiple nodes.
I won't go into ignition setup, but I can at least guide post installation setup for the BC-250 and my performance customizations.
Status: Fully Working
Difficulty: Specialized Setup (it's not a desktop, it's a headless server platform)
Operating System: This is the base that Bazzite is built upon, so one can easily 'rebase' to Bazzite in the future.
Kernel and Software Versions: As of this writing, Kernel 7.0.8 is the default kernel version. All customizations below are designed to persist through the Fedora Core automatic system upgrade via Zincati.
Why Choose Fedora CoreOS¶
Advantages¶
- Rolling release - Rolling Releases and Managed Upgrades
- Low RAM usage - Less than 640MB typical for a freshly provisioned machine.
- Immutable Base - All the rpm-ostree advantages.
- Built for Container Optimized Workloads - Some of my uses are: Games on Whales, Frigate, Home Assistant, *Claw, and llama-server.
BIOS Requirements¶
REQUIRED before installing:
-
Flash modified BIOS (P3.00 recommended)
-
Set VRAM allocation (512MB dynamic recommended)
-
Disable IOMMU (IOMMU is broken - MUST disable)
See BIOS Flashing Guide.
Fedora CoreOS Installation¶
Prerequisites¶
- USB drive (4GB+)
- Fedora CoreOS Live DVD ISO fedoraproject.org
- Familiarity with Linux command line
Installation Steps¶
Follow the Fedora CoreOS Installation Guides
Fedora CoreOS installation should be done following the official Fedora CoreOS Installation Guide. There are no specific deviations or customizations needed to install CoreOS on a BC-250. All customization is post-installation.
Post Installation Steps¶
Enable ACPI C-States and P-States¶
This will ensure the C-States and P-States settings will persist across CoreOS upgrades. Run these as the root user.
- Obtain the two .aml files from the bc250-acpi-fix github repository.
- Make the dracut directory containing the AML files
- copy the *.aml files into /etc/dracut.conf.d/acpi/
- create a new file /etc/dracut.conf.d/99-acpi-override.conf with the following content
- Enable InitramFS Generation
- Reboot
- Verify the ACPI Table Overrides are applied
Enable Cyan Skillfish Governor¶
This will allow you to throttle the GPU. 350 MHz to 2200 MHz was tested on my setup. Highly dependent on your cooling setup. Beware of setting the GPU speed above 2000 MHz and enabling all GPU Compute Units. On my setup, this resulted in system lock-ups.
- Download and place the COPR filippo/bazzite repo into your local system.
- Install the cyan-skillfish-governor-smu package
- Reboot
- Edit the configuration to your preferences
- Enable the cyan-skillfish-governor-smu service
- Verify the service is running and working
Enable Hardware Monitor¶
This allows the read-only hardware monitor functions to work.
- Create the configuration file to load the module.
- Create the configuration file for the options to load with the module.
- Reboot
- Verify the module was loaded
Enable Additional Core Unlock¶
As mentioned before CARE is needed when enabling the 40 Compute Units and cooling/power. This WILL cause issues if you're unprepared. It is recommended you keep the governor between 350 MHz and 1500 MHz if you enable this. This will need to be loaded once per reboot. As an alternative, you can reference a kernel patch to accomplish the same goal (which may be more involved in maintaining this patch for future updates).
- Install the AMD User Mode Register (UMR) Utility
- Reboot
- Create a new file for systemd with the following contents
cat <<EOF > /etc/systemd/system/gpu-unlock.service [Unit] Description=Unlock GPU Compute Units at Boot After=multi-user.target [Service] Type=oneshot RemainAfterExit=yes ExecStartPre=/usr/bin/sleep 10s ExecStart=/usr/bin/umr -w *.gfx1013.mmRLC_PG_ALWAYS_ON_WGP_MASK 0x1f ExecStart=/usr/bin/umr -w *.gfx1013.mmCC_GC_SHADER_ARRAY_CONFIG 0x0 ExecStart=/usr/bin/umr -w *.gfx1013.mmCC_GC_SHADER_ARRAY_CONFIG 0x0 -b 1 0 0xffffffff ExecStart=/usr/bin/umr -w *.gfx1013.mmCC_GC_SHADER_ARRAY_CONFIG 0x0 -b 1 1 0xffffffff ExecStart=/usr/bin/umr -w *.gfx1013.mmCC_GC_SHADER_ARRAY_CONFIG 0x0 -b 0 1 0xffffffff ExecStart=/usr/bin/umr -w *.gfx1013.mmCC_GC_SHADER_ARRAY_CONFIG 0x0 -b 0 0 0xffffffff ExecStart=/usr/bin/umr -w *.gfx1013.mmSPI_PG_ENABLE_STATIC_WGP_MASK 0x1f -b 0 0 0xffffffff ExecStart=/usr/bin/umr -w *.gfx1013.mmSPI_PG_ENABLE_STATIC_WGP_MASK 0x1f -b 0 1 0xffffffff ExecStart=/usr/bin/umr -w *.gfx1013.mmSPI_PG_ENABLE_STATIC_WGP_MASK 0x1f -b 1 0 0xffffffff ExecStart=/usr/bin/umr -w *.gfx1013.mmSPI_PG_ENABLE_STATIC_WGP_MASK 0x1f -b 1 1 0xffffffff [Install] WantedBy=multi-user.target EOF - Register, Enable and Start the Service
Enable 14.75GB Allocation of VRAM¶
This will allow you to allocate 14.75GB of RAM to the GPU for services like LLMs. Additional VRAM Configuration settings are available, please review the linked docs for additional information. As a reminder: in order to get the below allocation to work, you need to set the BIOS VRAM to 512MB Dynamic Allocation.
- Create the modprobe config with the following
- Force an initramfs sync
- Reboot
Turn off Spectre Mitigations¶
This allows for some CPU speed-ups.
- Configure kernel commandline settings
- reboot
Podman Expose GPU to Containers¶
I often expose the GPU for compute uses (e.g. LLMs) leveraging vulkan. In order to do so, in your podman command line, use the following:
Related Guides: - Fedora Setup - Bazzite Setup - CachyOS Setup - GPU Governor