🏡 index : quine-global-labs/mirror-fedora-workstation-ostree-config.git

edition: "2024"
releasever: 45
automatic-version-prefix: "${releasever}.<date:%Y%m%d>"
mutate-os-release: "${releasever}"

metadata:
  license: MIT

variables:
  # Default to Bootable Containers and override in classic ostree manifests
  bootable_container: true
  # Default to including Fedora branding and specific packages
  distro: "fedora"
  # Used in ref. Equal to releasever, unless it's for Rawhide
  releasever_ref: "rawhide"

# Default ref, overriden for some variants with legacy names
ref: ${distro}/${releasever_ref}/${basearch}/${variant}

# Default to `bash` in our container, the same as other containers we ship.
container-cmd:
  - /usr/bin/bash

include:
  # Packages common to all variants
  - packages/common.yaml
  # See: https://gitlab.com/fedora/ostree/sig/-/issues/1
  - bootupd.yaml
  # Dracut configuration for the initramfs
  - initramfs.yaml
  # Read only sysroot
  - sysroot-ro.yaml
  # Enable kernel-install support
  - kernel-install.yaml
  # Enable composefs
  - composefs.yaml
  # Selected ownership fixes for files in /etc & /var owned by a dynamic UID/GID
  - dynamic-ugid-ownership-fixes.yaml

arch-include:
  x86_64:
    - qemu-user-static-x86_64.yaml
  aarch64:
    - qemu-user-static-non-x86_64.yaml

conditional-include:
  # Manifests included only if we are building for Fedora
  - if: distro == "fedora"
    include:
      - fedora.yaml
  # Manifests included only for classic ostree variants
  - if: bootable_container == false
    include:
      - ostree-classic.yaml
  # Manifests included only for the Bootable Container variants
  - if: bootable_container == true
    include:
      - dnf5.yaml

packages:
  # Ensure that we have a kernel. Kernel packages are not in any comps group
  - kernel
  - kernel-modules
  - kernel-modules-extra
  # Do not include "full" Git as it brings in Perl
  - git-core
  # Explicitely add Git docs
  - git-core-doc
  # Required until we've completed the move to systemd-sysusers
  # See: https://github.com/fedora-silverblue/issue-tracker/issues/362
  - nss-altfiles
  # Container management
  - buildah
  - podman
  - skopeo
  # Keep slirp4netns for rootless containers until it's fully deprecated in podman
  # See: https://github.com/fedora-silverblue/issue-tracker/issues/547
  - slirp4netns
  # Keep fuse-overlayfs for compatibilty and rootless containers use cases
  # See: https://github.com/coreos/fedora-coreos-tracker/issues/1749
  - fuse-overlayfs
  # See: https://github.com/fedora-silverblue/issue-tracker/issues/503
  - systemd-container
  # Provides terminal tools like clear, reset, tput, and tset
  - ncurses
  # Flatpak support
  - flatpak
  - xdg-desktop-portal
  # the archive repo for more reliable package layering
  # https://github.com/coreos/fedora-coreos-tracker/issues/400
  - fedora-repos-archive
  # Always include at least full English language support by default
  # https://gitlab.com/fedora/ostree/sig/-/issues/14
  - langpacks-en
  # Selected packages from the anaconda-tools group. See: https://gitlab.com/fedora/ostree/sig/-/issues/5
  - dosfstools
  - lvm2
  - nvme-cli
  - xfsprogs
  # HFS filesystem tools for Apple hardware
  # See https://github.com/projectatomic/rpm-ostree/issues/1380
  - hfsplus-tools
  # More printer drivers. See: https://gitlab.com/fedora/ostree/sig/-/issues/63
  - c2esp
  - dymo-cups-drivers
  - printer-driver-brlaser
  - ptouch-driver
  - splix
  # See: https://github.com/fedora-silverblue/issue-tracker/issues/390
  - wireguard-tools
  # See: https://gitlab.com/fedora/ostree/sig/-/issues/101
  - gnupg2-scdaemon

selinux: true
documentation: true
etc-group-members:
  - wheel

ignore-removed-users:
  - root
ignore-removed-groups:
  - root
check-passwd:
  type: file
  filename: passwd
check-groups:
  type: file
  filename: group

default_target: graphical.target

packages-aarch64:
  - grub2-efi
  - efibootmgr
  - shim
packages-x86_64:
  - grub2-efi-ia32
  - grub2-efi-x64
  - grub2-pc
  - efibootmgr
  - shim-ia32
  - shim-x64

# Make sure the following are not pulled in when Recommended by other packages
exclude-packages:
  - PackageKit
  # We can not include openh264. See https://fedoraproject.org/wiki/OpenH264
  - gstreamer1-plugin-openh264
  - mozilla-openh264
  - openh264
  # Do not include dnf4. Classic ostree also exclude dnf5 in another manifest
  - dnf
  - dnf-plugins-core
  # https://github.com/fedora-silverblue/issue-tracker/issues/517
  - grubby
  - sdubby
  # Exclude Tk. We can not exclude Tcl as it is neeeded for usb_modeswitch
  - tk
  # Exclude QEMU. See: https://gitlab.com/fedora/ostree/sig/-/issues/58
  - qemu-kvm
  - qemu-kvm-core
  - qemu-device-display-virtio-gpu
  - qemu-device-display-virtio-vga
  # See: https://github.com/fedora-silverblue/issue-tracker/issues/646
  - hplip-gui
  # Ensure that we do not include any Perl package
  - perl-interpreter
  - perl-libs
  # Exclude GNOME Software's langpack plugin to avoid layering langpacks on
  # systems where GNOME Software is included
  - gnome-software-fedora-langpacks
  # We include wget instead
  - wcurl
  # See: https://fedoraproject.org/wiki/Changes/AtomicDesktopDropPklaCompat
  - polkit-pkla-compat
  # See: https://fedoraproject.org/wiki/Changes/AtomicDesktopDropFuse2
  # See: https://gitlab.com/fedora/ostree/sig/-/issues/50
  - fuse
  - fuselibs

postprocess:
  - |
    #!/usr/bin/env bash
    set -xeuo pipefail

    # Work around https://bugzilla.redhat.com/show_bug.cgi?id=1265295
    # From https://github.com/coreos/fedora-coreos-config/blob/testing-devel/overlay.d/05core/usr/lib/systemd/journald.conf.d/10-coreos-persistent.conf
    install -dm0755 /usr/lib/systemd/journald.conf.d/
    echo -e "[Journal]\nStorage=persistent" > /usr/lib/systemd/journald.conf.d/10-persistent.conf

    # See: https://src.fedoraproject.org/rpms/glibc/pull-request/4
    # Basically that program handles deleting old shared library directories
    # mid-transaction, which never applies to rpm-ostree. This is structured as a
    # loop/glob to avoid hardcoding (or trying to match) the architecture.
    for x in /usr/sbin/glibc_post_upgrade.*; do
        if test -f ${x}; then
            ln -srf /usr/bin/true ${x}
        fi
    done

    # Remove loader directory causing issues in Anaconda in unified core mode
    # Will be obsolete once we start using bootupd
    rm -rf /usr/lib/ostree-boot/loader

    # Undo RPM scripts enabling units; we want the presets to be canonical
    # https://github.com/projectatomic/rpm-ostree/issues/1803
    rm -rf /etc/systemd/system/*
    systemctl preset-all
    rm -rf /etc/systemd/user/*
    systemctl --user --global preset-all

    # Fix triggerin for samba-client in cups package (not supported by rpm-ostree yet)
    # https://github.com/fedora-silverblue/issue-tracker/issues/532
    ln -snf /usr/libexec/samba/cups_backend_smb /usr/lib/cups/backend/smb

    # Workaround broken appstream cache update
    # See: https://gitlab.com/fedora/ostree/sig/-/work_items/103
    cat > /usr/lib/systemd/system/fedora-atomic-desktop-appstream-cache-refresh.service << 'EOF'
    [Unit]
    Description=Workaround for Atomic Destkops to refresh the appstream cache
    Documentation=https://gitlab.com/fedora/ostree/sig/-/work_items/103
    ConditionPathIsReadWrite=/var
    ConditionPathExists=/run/ostree-booted
    After=local-fs.target

    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=appstreamcli refresh --force
    Nice=19
    IOWeight=10

    [Install]
    WantedBy=multi-user.target
    EOF

    cat >> /usr/lib/systemd/system-preset/81-atomic-desktop.preset << 'EOF'

    # See: https://gitlab.com/fedora/ostree/sig/-/work_items/103
    enable fedora-atomic-desktop-appstream-cache-refresh.service
    EOF

    systemctl preset fedora-atomic-desktop-appstream-cache-refresh.service

    # Workaround broken mandb cache update
    # See: https://gitlab.com/fedora/ostree/sig/-/work_items/62
    cat > /usr/lib/systemd/system/fedora-atomic-desktop-mandb-update.service << 'EOF'
    [Unit]
    Description=Workaround for Atomic Destkops to update mandb cache
    Documentation=https://gitlab.com/fedora/ostree/sig/-/work_items/62
    ConditionPathIsReadWrite=/var
    ConditionPathExists=/run/ostree-booted
    After=local-fs.target

    [Service]
    Type=oneshot
    RemainAfterExit=yes
    Environment=MAN_NO_LOCALE_WARNING=1
    ExecStart=mandb -q
    Nice=19
    IOWeight=10

    [Install]
    WantedBy=multi-user.target
    EOF

    cat >> /usr/lib/systemd/system-preset/81-atomic-desktop.preset << 'EOF'

    # See: https://gitlab.com/fedora/ostree/sig/-/work_items/62
    enable fedora-atomic-desktop-mandb-update.service
    EOF

    systemctl preset fedora-atomic-desktop-mandb-update.service