Easily Install UCore OS / Fedora Core OS

Easily Install UCore OS / Fedora Core OS
A new world open upon your eyes

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 the ucore:stable in the configuration to ucore-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!