User Tools

Site Tools


fedora_coreos

Fedora CoreOS

Download

Download latest live iso from https://www.fedoraproject.org/coreos/download

Butane file

Creating a butane file for automatic deployment because the installer of CoreOS is non-interactive. In this example I add a user core with a password hash (console access) and SSH-keys for authortized logins. I add a root CA certificate, set my router as NTP source for chrony install 3 additional packages: docker-compose,vim,qemu-guest-agent and make docker service enabled.

fcos.ign
variant: fcos
version: 1.6.0
passwd:
  users:
    - name: core
      password_hash: <PASSWORD_HASH>
      ssh_authorized_keys:
        - ssh-rsa ...
storage:
  files:
    - path: /etc/chrony.conf
      mode: 0644
      overwrite: true
      contents:
        inline: |
          server <IP-ROUTER> iburst
          sourcedir /run/chrony-dhcp
          driftfile /var/lib/chrony/drift
          makestep 1.0 3
          rtcsync
          ntsdumpdir /var/lib/chrony
          leapseclist /usr/share/zoneinfo/leap-seconds.list
          logdir /var/log/chrony
    - path: /etc/pki/ca-trust/source/anchors/root_ca.crt
      contents:
        inline: |
          -----BEGIN CERTIFICATE-----
          .
          .
          .
          -----END CERTIFICATE-----
  links:
    - path: /etc/localtime
      target: ../usr/share/zoneinfo/Europe/Amsterdam

systemd:
  units:
    - name: docker.service
      enabled: true
    - name: rpm-ostree-install.service
      enabled: true
      contents: |
        [Unit]
        Description=Layer packages with rpm-ostree
        Wants=network-online.target
        After=network-online.target
        # We run before `zincati.service` to avoid conflicting rpm-ostree
        # transactions.
        Before=zincati.service
        ConditionPathExists=!/var/lib/%N.stamp

        [Service]
        Type=oneshot
        RemainAfterExit=yes
        # `--allow-inactive` ensures that rpm-ostree does not return an error
        # if the package is already installed. This is useful if the package is
        # added to the root image in a future Fedora CoreOS release as it will
        # prevent the service from failing.
        ExecStart=/usr/bin/rpm-ostree install -y --allow-inactive docker-compose qemu-guest-agent
        ExecStart=/bin/touch /var/lib/%N.stamp
        ExecStart=/bin/systemctl --no-block reboot

        [Install]
        WantedBy=multi-user.target

Convert Butane to Ignition

podman run --interactive --rm quay.io/coreos/butane:release \
       --pretty --strict < fcos.bu > fcos.ign

Upload the fcos.ign file to a webserver reachable by the installer

Modify Fedora ISO to non-interactive install VM

In this example I donwloaded fedora-coreos-42.20250914.3.0-live-iso.x86_64.iso from the Fedora website. It creates a custom.iso to upload to my Proxmox datastore.

podman run --security-opt label=disable --pull=always --rm -v .:/data -w /data quay.io/coreos/coreos-installer:release iso customize \
    --live-karg-append "coreos.inst.install_dev=/dev/sda" \
    --live-karg-append "coreos.inst.ignition_url=http://<URL-WEBSERVER>/fcos.ign" \
    -o custom.iso \
    fedora-coreos-42.20250914.3.0-live-iso.x86_64.iso

Create VM in Proxmox

I create a VM in Proxmox with the following specifications:

  • Linux 6.x - 2.6 Kernel
  • ISO image: custom.iso (created above)
  • Machine: q35
  • BIOS: OVMF
  • Select preferred datastore in EFI storage
  • SCSI Controller: VirtIO SCSI single
  • Check Qemu Agent
  • Disk size 16 GB
  • Cache: Default
  • Select Discard
  • Sockets: 1
  • Cores: 2
  • Type: x86-64-v2-AES
  • Memory: 4096
  • Bridge: vmbr0
  • Model: VirtIO (paravirtualized)

After that convert this VM to a template and when creating a VM make a full-clone of this template.

Modify after boot

The network is DHCP enabled in this example. The following steps remain:

  • Manually confige network with nmcli/nmtui
  • Set hostname

Resize disk in Proxmox

When the template diskspace is too small. Resize it in Proxmox and do the following in the VM:

rescan-scsi-bus.sh
growpart /dev/sda 4
xfs_growfs /var
fedora_coreos.txt · Last modified: by herwarth