Easily Install UCore OS / Fedora Core OS

Installing operating systems that need ignition might sound challenging, but don’t worry—with this guide, it'll be easy! The steps are simple, even if you’re a beginner.
UCore OS boots in about one-third of the time it takes for Ubuntu Server to boot on a VM in my Proxmox server.
Understanding Fedora Core OS and UCore OS
Fedora Core OS (CoreOS) is an OS optimized for containers (like Podman and Docker) with automatic updates, security, and a minimal design for high speed. While great, it may lack some tools for homelabs, like Cockpit, Docker as an option over Podman, and SMB. UCore OS (GitHub) bundles these tools into an efficient package that’s perfect for homelab environments, available in standard, minimal and other versions.
Step 1: Generate SSH Key and Password Hash
SSH Key
ssh-keygen -t ed25519
Press Enter to accept the default file path (~/.ssh/id_ed25519
). Choose a passphrase (optional).
The public key is saved in ~/.ssh/id_ed25519.pub
. To view it:
cat ~/.ssh/id_ed25519.pub
Password Hash
Generate a password hash using:
openssl passwd -6
Step 2: Create Butane Configuration File
In the Butane configuration file, add the entire SSH key code in the ssh_authorized_keys:
field and the password hash in the password_hash:
field.
(Optional) If you want to install fedora core os without ucore os get the second butane config instead.
Note: To use UCore Minimal instead of UCore "standard", change theucore:stable
in the configuration toucore-minimal:stable
(in two places).
variant: fcos
version: 1.4.0
passwd:
users:
- name: core
ssh_authorized_keys:
- YOUR_SSH_PUB_KEY_HERE
password_hash: YOUR_GOOD_PASSWORD_HASH_HERE
storage:
directories:
- path: /etc/ucore-autorebase
mode: 0754
systemd:
units:
- name: ucore-unsigned-autorebase.service
enabled: true
contents: |
[Unit]
Description=uCore autorebase to unsigned OCI and reboot
ConditionPathExists=!/etc/ucore-autorebase/unverified
ConditionPathExists=!/etc/ucore-autorebase/signed
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
StandardOutput=journal+console
ExecStart=/usr/bin/rpm-ostree rebase --bypass-driver ostree-unverified-registry:ghcr.io/ublue-os/ucore:stable
ExecStart=/usr/bin/touch /etc/ucore-autorebase/unverified
ExecStart=/usr/bin/systemctl disable ucore-unsigned-autorebase.service
ExecStart=/usr/bin/systemctl reboot
[Install]
WantedBy=multi-user.target
- name: ucore-signed-autorebase.service
enabled: true
contents: |
[Unit]
Description=uCore autorebase to signed OCI and reboot
ConditionPathExists=/etc/ucore-autorebase/unverified
ConditionPathExists=!/etc/ucore-autorebase/verified
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
StandardOutput=journal+console
ExecStart=/usr/bin/rpm-ostree rebase --bypass-driver ostree-image-signed:docker://ghcr.io/ublue-os/ucore:stable
ExecStart=/usr/bin/touch /etc/ucore-autorebase/signed
ExecStart=/usr/bin/systemctl disable ucore-signed-autorebase.service
ExecStart=/usr/bin/systemctl reboot
[Install]
WantedBy=multi-user.target
(Optional) Use this config instead if you don't want to install ucore os.
variant: fcos
version: 1.4.0
passwd:
users:
- name: core
ssh_authorized_keys:
- YOUR_SSH_PUB_KEY_HERE
password_hash: YOUR_GOOD_PASSWORD_HASH_HERE
Step 3: Convert Butane to Ignition
Install Butane using your preferred method. I’ll use Homebrew:
brew install butane
Navigate to the directory with the Butane file:
cd /path/to/your/butane/config
Convert the Butane file to an Ignition file:
butane --output ucore-autorebase.ign ucore-autorebase.butane
Step 4: Download Core OS ISO
Download the CoreOS ISO from Fedora Core OS to boot it on your VM or PC on step 6.
Step 5: Provide Ignition via HTTP
To make the Ignition file accessible, start an HTTP server in the directory with the .ign
file:
Check your machine's local IP:
ip addr show
Navigate to the Ignition file location:
cd /path/to/ignition/file
Start the Python HTTP server:
python3 -m http.server 8000
Step 6: Start the Installation
After booting the core os ISO, identify the storage disk to install CoreOS:
lsblk
Then use this command, replacing <your-local-ip>
and /dev/sda
with your machine's IP and the storage path:
sudo coreos-installer install --ignition-url=http://<your-local-ip>:8000/ucore-autorebase.ign --insecure /dev/sda
Congratulations!
You now have a fast, container-ready OS installed, optimized for your homelab!