Merge branch 'beta' into promote-beta-to-main44 and resolve conflicts

This commit is contained in:
renner 2026-05-08 17:36:42 +02:00
commit de8a17af3a
No known key found for this signature in database
22 changed files with 277 additions and 296 deletions

View file

@ -33,7 +33,7 @@
},
{
"matchUpdateTypes": ["pin", "digest", "pinDigest"],
"matchPackageNames": ["ghcr.io/jasonn3/build-container-installer", "ghcr.io/hhd-dev/rechunk"],
"matchPackageNames": ["ghcr.io/jasonn3/build-container-installer"],
"automerge": false
},
{

View file

@ -10,6 +10,14 @@ on:
- ".github/workflows/scorecard.yml"
workflow_call:
workflow_dispatch:
inputs:
previous_build:
description: 'Set to 0 to manually clear rechunking plan'
type: choice
default: '1'
options:
- '0'
- '1'
permissions:
contents: read
@ -31,3 +39,5 @@ jobs:
image_flavors: '["main", "nvidia-open"]'
brand_name: ${{ matrix.brand_name }}
stream_name: beta
previous_build: ${{ inputs.previous_build }}

View file

@ -10,6 +10,14 @@ on:
- ".github/workflows/scorecard.yml"
workflow_call:
workflow_dispatch:
inputs:
previous_build:
description: 'Set to 0 to manually clear rechunking plan'
type: choice
default: '1'
options:
- '0'
- '1'
permissions:
contents: read
@ -32,6 +40,7 @@ jobs:
brand_name: ${{ matrix.brand_name }}
stream_name: latest
#kernel_pin: 6.12.15-200.fc41.x86_64
previous_build: ${{ inputs.previous_build }}
generate-release:
name: Generate Release

View file

@ -1,6 +1,6 @@
name: Stable Images
on:
merge_group: # Make Stable-Daily run on merge groups
# merge_group: # Make Stable-Daily run on merge groups
pull_request:
branches:
- main
@ -13,6 +13,14 @@ on:
- cron: "0 1 * * TUE" # Every Tuesday at 1:15 AM
workflow_call:
workflow_dispatch:
inputs:
previous_build:
description: 'Set to 0 to manually clear rechunking plan'
type: choice
default: '1'
options:
- '0'
- '1'
permissions:
contents: read
@ -34,6 +42,7 @@ jobs:
#kernel_pin: 6.14.11-300.fc42.x86_64 ## This is where kernels get pinned.
brand_name: ${{ matrix.brand_name }}
stream_name: stable
previous_build: ${{ inputs.previous_build }}
generate-release:
name: Generate Release

View file

@ -18,6 +18,9 @@ on:
kernel_pin:
description: "The full kernel version to pin"
type: string
previous_build:
description: 'Set a reference to a previous build to make updates smaller'
type: string
env:
IMAGE_REGISTRY: ghcr.io/${{ github.repository_owner }}
@ -184,31 +187,21 @@ jobs:
echo "SBOM=${SBOM}" >> $GITHUB_OUTPUT
sudo rm -rf ${OCI_DIR}
- name: Rechunk Image
id: rechunk-image
shell: bash
- name: Rechunk Image with rpm-ostree
id: rechunker
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
MATRIX_BASE_NAME: ${{ matrix.base_name }}
MATRIX_STREAM_NAME: ${{ matrix.stream_name }}
MATRIX_IMAGE_FLAVOR: ${{ matrix.image_flavor }}
DEFAULT_TAG: ${{ env.DEFAULT_TAG }}
PREVIOUS_BUILD: ${{ github.event.inputs.previous_build || '1' }}
run: |
sudo -E $(command -v just) rechunk "${MATRIX_BASE_NAME}" \
"${MATRIX_STREAM_NAME}" \
"${MATRIX_IMAGE_FLAVOR}" \
"1"
- name: Load Image into Podman
id: load-rechunk
shell: bash
env:
MATRIX_BASE_NAME: ${{ matrix.base_name }}
DEFAULT_TAG: ${{ env.DEFAULT_TAG }}
MATRIX_IMAGE_FLAVOR: ${{ matrix.image_flavor }}
run: |
sudo -E $(command -v just) load-rechunk "${MATRIX_BASE_NAME}" \
"${DEFAULT_TAG}" \
"${MATRIX_IMAGE_FLAVOR}"
"1" \
"0" \
"${PREVIOUS_BUILD}"
- name: Secureboot Check
id: secureboot
@ -222,6 +215,39 @@ jobs:
"${DEFAULT_TAG}" \
"${MATRIX_IMAGE_FLAVOR}"
- name: Export to OCI Archive
if: github.event_name == 'pull_request'
id: oci-archive
env:
MATRIX_BASE_NAME: ${{ matrix.base_name }}
DEFAULT_TAG: ${{ env.DEFAULT_TAG }}
MATRIX_IMAGE_FLAVOR: ${{ matrix.image_flavor }}
run: |
sudo -E $(command -v just) export-oci "${MATRIX_BASE_NAME}" \
"${DEFAULT_TAG}" \
"${MATRIX_IMAGE_FLAVOR}"
- name: Upload OCI Archive as Artifact
if: github.event_name == 'pull_request'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: ${{ env.IMAGE_NAME }}.oci
path: ${{ env.IMAGE_NAME }}.oci
archive: false
if-no-files-found: error
retention-days: 1
- name: PR Testing Instructions
if: github.event_name == 'pull_request'
id: pr-summary
env:
IMAGE_NAME: ${{ env.IMAGE_NAME }}
MATRIX_STREAM_NAME: "${{ matrix.stream_name }}"
run: |
echo "Download the .oci file" >> $GITHUB_STEP_SUMMARY
echo "Rebase: sudo bootc switch --transport oci-archive /path/to/${IMAGE_NAME}".oci >> $GITHUB_STEP_SUMMARY
echo "Go back to the production image e.g.: sudo bootc switch --enforce-container-sigpolicy ghcr.io/ublue-os/${IMAGE_NAME}:${MATRIX_STREAM_NAME}" >> $GITHUB_STEP_SUMMARY
- name: Generate tags
id: generate-tags
shell: bash
@ -271,6 +297,14 @@ jobs:
run: |
echo "lowercase=${IMAGE_REGISTRY,,}" >> $GITHUB_OUTPUT
# TODO: remove me when we have a new podman in 26.04 runners
# needed because old podman doesn't push layer annotations for
# the rpm-ostree rechunker at all
- name: install podman from brew
if: github.event_name != 'pull_request'
run: |
/home/linuxbrew/.linuxbrew/bin/brew install podman
- name: Login to GitHub Container Registry
if: github.event_name != 'pull_request'
run: |
@ -292,9 +326,15 @@ jobs:
timeout_minutes: 10
command: |
set -euox pipefail
# HACK: push a second time so layer annotations are pushed
# TODO: remove me when https://github.com/containers/podman/issues/27796 fixed
for tag in ${ALIAS_TAGS}; do
sudo -E podman push ${IMAGE_NAME}:${tag} ${LOWERCASE}/${IMAGE_NAME}:${tag}
sudo -E /home/linuxbrew/.linuxbrew/bin/podman push --compression-format=zstd --compression-level=3 ${IMAGE_NAME}:${tag} ${LOWERCASE}/${IMAGE_NAME}:${tag}
done
for tag in ${ALIAS_TAGS}; do
sudo -E /home/linuxbrew/.linuxbrew/bin/podman push --compression-format=zstd --compression-level=3 ${IMAGE_NAME}:${tag} ${LOWERCASE}/${IMAGE_NAME}:${tag}
done
digest=$(skopeo inspect docker://${LOWERCASE}/${IMAGE_NAME}:${DEFAULT_TAG} --format '{{.Digest}}')
@ -303,7 +343,7 @@ jobs:
- name: Upload OCI dir as Artifact
if: github.event_name == 'pull_request'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7
with:
name: ${{ env.IMAGE_NAME }}.oci
path: ${{ env.IMAGE_NAME }}_build

3
.gitignore vendored
View file

@ -3,8 +3,7 @@
flatpaks_with_deps
flatpak.*
*_build
*_build.*
aurora*.oci
previous.manifest.json
changelog.md
output.env

View file

@ -1,13 +1,13 @@
ARG BASE_IMAGE_ORG="${BASE_IMAGE_ORG}:-quay.io/fedora-ostree-desktops"
ARG BASE_IMAGE_NAME="${BASE_IMAGE_NAME}:-kinoite"
ARG BASE_IMAGE_ORG
ARG BASE_IMAGE_NAME
ARG BASE_IMAGE="${BASE_IMAGE_ORG}/${BASE_IMAGE_NAME}"
ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION}:-43"
ARG AKMODS_FLAVOR="${AKMODS_FLAVOR}-${FEDORA_MAJOR_VERSION}:-coreos-stable-43"
ARG KERNEL="${KERNEL}:-6.17.12-300.fc43.x86_64"
ARG COMMON_IMAGE="${COMMON_IMAGE}:-ghcr.io/get-aurora-dev/common:latest"
ARG COMMON_IMAGE_SHA=""
ARG BREW_IMAGE="${BREW_IMAGE}:-ghcr.io/ublue-os/brew:latest"
ARG BREW_IMAGE_SHA=""
ARG FEDORA_MAJOR_VERSION
ARG AKMODS_FLAVOR
ARG KERNEL
ARG COMMON_IMAGE
ARG COMMON_IMAGE_SHA
ARG BREW_IMAGE
ARG BREW_IMAGE_SHA
FROM ${COMMON_IMAGE}@${COMMON_IMAGE_SHA} AS common
FROM ${BREW_IMAGE}@${BREW_IMAGE_SHA} AS brew

213
Justfile
View file

@ -3,9 +3,8 @@ export base_image_org := env("BASE_IMAGE_ORG", "quay.io/fedora-ostree-desktops")
export base_image_name := env("BASE_IMAGE_NAME", "kinoite")
export common_image := env("COMMON_IMAGE", "ghcr.io/get-aurora-dev/common:latest")
export brew_image := env("BREW_IMAGE", "ghcr.io/ublue-os/brew:latest")
rechunker_image := "ghcr.io/ublue-os/legacy-rechunk:v1.0.1-x86_64@sha256:2627cbf92ca60ab7372070dcf93b40f457926f301509ffba47a04d6a9e1ddaf7"
stable_version := "43"
latest_version := "43"
latest_version := "44"
beta_version := "44"
images := '(
[aurora]=aurora
@ -59,7 +58,6 @@ clean:
set -eoux pipefail
touch _build
find *_build* -exec rm -rf {} \;
rm -f previous.manifest.json
rm -f changelog.md
rm -f output.env
@ -251,7 +249,7 @@ build $image="aurora" $tag="latest" $flavor="main" rechunk="0" ghcr="0" pipeline
elif [[ "{{ rechunk }}" == "1" && "{{ ghcr }}" == "1" ]]; then
${SUDOIF} {{ just }} rechunk "${image}" "${tag}" "${flavor}" 1
elif [[ "{{ rechunk }}" == "1" ]]; then
${SUDOIF} {{ just }} rechunk "${image}" "${tag}" "${flavor}"
{{ just }} rechunk "${image}" "${tag}" "${flavor}"
fi
# Build Image and Rechunk
@ -278,10 +276,9 @@ build-pipeline image="aurora" tag="latest" flavor="main" kernel_pin="":
# Rechunk Image
[group('Image')]
[private]
rechunk $image="aurora" $tag="latest" $flavor="main" ghcr="0" pipeline="0":
rechunk $image="aurora" $tag="latest" $flavor="main" ghcr="0" pipeline="0" previous_build="0":
#!/usr/bin/bash
echo "::group:: Rechunk Prep"
set -eoux pipefail
# Validate
@ -289,154 +286,70 @@ rechunk $image="aurora" $tag="latest" $flavor="main" ghcr="0" pipeline="0":
# Image Name
image_name=$({{ just }} image_name {{ image }} {{ tag }} {{ flavor }})
fedora_version=$({{ just }} fedora_version '{{ image }}' '{{ tag }}' '{{ flavor }}')
DEFAULT_TAG=$({{ just }} generate-default-tag {{ tag }} {{ ghcr }})
# Check if image is already built
ID=$(${PODMAN} images --filter reference=localhost/"${image_name}":"${tag}" --format "'{{ '{{.ID}}' }}'")
if [[ -z "$ID" ]]; then
{{ just }} build "${image}" "${tag}" "${flavor}"
if [[ "{{ ghcr }}" == "0" ]]; then
{{ just }} load-rootful "${image}" "${tag}" "${flavor}"
fi
# Load into Rootful Podman
ID=$(${SUDOIF} ${PODMAN} images --filter reference=localhost/"${image_name}":"${tag}" --format "'{{ '{{.ID}}' }}'")
if [[ -z "$ID" && ! ${PODMAN} =~ docker ]]; then
COPYTMP=$(mktemp -p "${PWD}" -d -t podman_scp.XXXXXXXXXX)
${SUDOIF} TMPDIR=${COPYTMP} ${PODMAN} image scp ${UID}@localhost::localhost/"${image_name}":"${tag}" root@localhost::localhost/"${image_name}":"${tag}"
rm -rf "${COPYTMP}"
# TODO: Redo everything here with --previous-build in rpm-ostree 2026.1+
# so we don't have to pull an old image + rename it
if [[ "{{ previous_build }}" == "1" ]]; then
PREVIOUS_IMAGE=ghcr.io/{{ repo_organization }}/"${image_name}":"${DEFAULT_TAG}"
# https://github.com/coreos/rpm-ostree/blob/7e2f2065a4aa4d5965b4537bb7d74e0b2898650e/rust/src/compose.rs#L522-L529
if skopeo inspect docker://"${PREVIOUS_IMAGE}" | jq -e '.LayersData[1:] | all(.Annotations?["ostree.components"]?)'; then
${SUDOIF} ${PODMAN} pull ${PREVIOUS_IMAGE}
else
echo "${PREVIOUS_IMAGE} doesn't exist. Making a fresh layer Plan instead."
fi
fi
# Prep Container
CREF=$(${SUDOIF} ${PODMAN} create localhost/"${image_name}":"${tag}" bash)
OLD_IMAGE=$(${SUDOIF} ${PODMAN} inspect $CREF | jq -r '.[].Image')
OUT_NAME="${image_name}_build"
MOUNT=$(${SUDOIF} ${PODMAN} mount "${CREF}")
# Fedora Version
fedora_version=$(${SUDOIF} ${PODMAN} inspect $CREF | jq -r '.[].Config.Labels["ostree.linux"]' | grep -oP 'fc\K[0-9]+')
# Label Version
VERSION=$(${SUDOIF} ${PODMAN} inspect $CREF | jq -r '.[].Config.Labels["org.opencontainers.image.version"]')
# Git SHA
SHA="dedbeef"
if [[ -z "$(git status -s)" ]]; then
SHA=$(git rev-parse HEAD)
fi
# Rest of Labels
LABELS="
io.artifacthub.package.deprecated=false
io.artifacthub.package.keywords=bootc,fedora,aurora,ublue,universal-blue
io.artifacthub.package.logo-url=https://avatars.githubusercontent.com/u/120078124?s=200&v=4
io.artifacthub.package.maintainers=[{\"name\": \"NiHaiden\", \"email\": \"me@nhaiden.io\"}]
io.artifacthub.package.readme-url=https://raw.githubusercontent.com/ublue-os/aurora/refs/heads/main/README.md
org.opencontainers.image.created=$(date -u +%Y\-%m\-%d\T%H\:%M\:%S\Z)
org.opencontainers.image.license=Apache-2.0
org.opencontainers.image.source=https://raw.githubusercontent.com/ublue-os/aurora/refs/heads/main/Containerfile
org.opencontainers.image.title=${image_name}
org.opencontainers.image.url=https://getaurora.dev
org.opencontainers.image.vendor={{ repo_organization }}
ostree.linux=$(${SUDOIF} ${PODMAN} inspect $CREF | jq -r '.[].Config.Labels["ostree.linux"]')
containers.bootc=1
"
# Cleanup Space during Github Action
if [[ "{{ ghcr }}" == "1" ]]; then
base_image_name=kinoite
if [[ "${tag}" =~ stable ]]; then
tag="stable-daily"
fi
ID=$(${SUDOIF} ${PODMAN} images --filter reference=ghcr.io/{{ repo_organization }}/"${base_image_name}":${fedora_version} --format "{{ '{{.ID}}' }}")
if [[ -n "$ID" ]]; then
${PODMAN} rmi "$ID"
CHUNKED_IMAGE="localhost/"${image_name}":"${DEFAULT_TAG}""
if [[ "{{ previous_build }}" == "1" ]]; then
CHUNKED_IMAGE="${PREVIOUS_IMAGE}"
fi
else
# keep the original unrechunked image for local builds
CHUNKED_IMAGE="localhost/"${image_name}":"${DEFAULT_TAG}"-chunked"
fi
# Rechunk Container
rechunker="{{ rechunker_image }}"
echo "::endgroup::"
echo "::group:: Prune"
# Run Rechunker's Prune
# 96 layers, conservative default, same what ci-test is using
# one layer is secretly being added for the ostree export
# 499 is podman run limit
# 128 is docker pull limit
# in CI this renames stable to stable-daily
${SUDOIF} ${PODMAN} run --rm \
--pull=${PULL_POLICY} \
--security-opt label=disable \
--volume "$MOUNT":/var/tree \
--env TREE=/var/tree \
--user 0:0 \
"${rechunker}" \
/sources/rechunk/1_prune.sh
--privileged \
-v "/var/lib/containers:/var/lib/containers" \
--entrypoint /usr/bin/rpm-ostree \
"${base_image_org}/${base_image_name}:${fedora_version}" \
compose build-chunked-oci \
--max-layers 127 \
--format-version=2 \
--bootc \
--from "localhost/"${image_name}":"${tag}"" \
--output containers-storage:${CHUNKED_IMAGE}
echo "::endgroup::"
echo "::group:: Create ostree tree"
# Run Rechunker's Create
${SUDOIF} ${PODMAN} run --rm \
--security-opt label=disable \
--volume "$MOUNT":/var/tree \
--volume "cache_ostree:/var/ostree" \
--env TREE=/var/tree \
--env REPO=/var/ostree/repo \
--env RESET_TIMESTAMP=1 \
--user 0:0 \
"${rechunker}" \
/sources/rechunk/2_create.sh
# Cleanup Temp Container Reference
${SUDOIF} ${PODMAN} unmount "$CREF"
${SUDOIF} ${PODMAN} rm "$CREF"
${SUDOIF} ${PODMAN} rmi "$OLD_IMAGE"
echo "::endgroup::"
echo "::group:: Rechunker"
# Run Rechunker
${SUDOIF} ${PODMAN} run --rm \
--pull=${PULL_POLICY} \
--security-opt label=disable \
--volume "$PWD:/workspace" \
--volume "$PWD:/var/git" \
--volume cache_ostree:/var/ostree \
--env REPO=/var/ostree/repo \
--env PREV_REF=ghcr.io/ublue-os/"${image_name}":"${tag}" \
--env OUT_NAME="$OUT_NAME" \
--env LABELS="${LABELS}" \
--env "DESCRIPTION='The ultimate productivity workstation'" \
--env "VERSION=${VERSION}" \
--env VERSION_FN=/workspace/version.txt \
--env OUT_REF="oci:$OUT_NAME" \
--env GIT_DIR="/var/git" \
--env REVISION="$SHA" \
--user 0:0 \
"${rechunker}" \
/sources/rechunk/3_chunk.sh
# Fix Permissions of OCI
${SUDOIF} find ${OUT_NAME} -type d -exec chmod 0755 {} \; || true
${SUDOIF} find ${OUT_NAME}* -type f -exec chmod 0644 {} \; || true
if [[ "${UID}" -gt "0" ]]; then
${SUDOIF} chown "${UID}:${GROUPS}" -R "${PWD}"
elif [[ -n "${SUDO_UID:-}" ]]; then
chown "${SUDO_UID}":"${SUDO_GID}" -R "${PWD}"
# rename the image to localhost
if [[ "{{ ghcr }}" == "1" && "{{ previous_build }}" == "1" ]]; then
${SUDOIF} ${PODMAN} tag ${CHUNKED_IMAGE} "localhost/"${image_name}":"${tag}""
${SUDOIF} ${PODMAN} image rm -f ${CHUNKED_IMAGE}
fi
# Remove cache_ostree
${SUDOIF} ${PODMAN} volume rm cache_ostree
echo "::endgroup::"
# Pipeline Checks
if [[ {{ pipeline }} == "1" && -n "${SUDO_USER:-}" ]]; then
sudo -u "${SUDO_USER}" {{ just }} load-rechunk "${image}" "${tag}" "${flavor}"
sudo -u "${SUDO_USER}" {{ just }} secureboot "${image}" "${tag}" "${flavor}"
fi
# Load OCI into Podman Store
# For Rechunk
[group('Image')]
load-rechunk image="aurora" tag="latest" flavor="main":
load-rootful $image="aurora" $tag="latest" $flavor="main":
#!/usr/bin/bash
set -eou pipefail
set -oux pipefail
# Validate
{{ just }} validate {{ image }} {{ tag }} {{ flavor }}
@ -444,14 +357,27 @@ load-rechunk image="aurora" tag="latest" flavor="main":
# Image Name
image_name=$({{ just }} image_name {{ image }} {{ tag }} {{ flavor }})
# Load Image
OUT_NAME="${image_name}_build"
IMAGE=$(${PODMAN} pull oci:"${PWD}"/"${OUT_NAME}")
${PODMAN} tag ${IMAGE} localhost/"${image_name}":{{ tag }}
if [[ ! "$(id -u)" == 0 && ! ${PODMAN} =~ docker ]]; then
ID=$(${PODMAN} images --filter reference=localhost/"${image_name}":"${tag}" --format "'{{ '{{.ID}}' }}'")
if [[ -z "$ID" ]]; then
{{ just }} build "$image" "$tag" "$flavor"
fi
${PODMAN} image scp localhost/"${image_name}":"${tag}" root@localhost::
fi
# Cleanup
rm -rf "${OUT_NAME}*"
rm -f previous.manifest.json
# Generate OCI Archive for PR Testing
[group('Image')]
export-oci $image="aurora" $tag="latest" $flavor="main":
#!/usr/bin/bash
set -oux pipefail
# Validate
{{ just }} validate {{ image }} {{ tag }} {{ flavor }}
# Image Name
image_name=$({{ just }} image_name {{ image }} {{ tag }} {{ flavor }})
${PODMAN} push --compression-format=zstd --compression-level=3 localhost/"${image_name}":"${tag}" oci-archive:"${image_name}".oci
# Run Container
[group('Image')]
@ -533,7 +459,7 @@ secureboot $image="aurora" $tag="latest" $flavor="main":
openssl x509 -in /tmp/akmods.der -out /tmp/akmods.crt
# Make sure we have sbverify
CMD="$(command -v sbverify)"
CMD="$(command -v sbverify || true)"
if [[ -z "${CMD:-}" ]]; then
temp_name="sbverify-${RANDOM}"
${PODMAN} run -dt \
@ -641,6 +567,8 @@ generate-build-tags image="aurora" tag="latest" flavor="main" kernel_pin="" ghcr
BUILD_TAGS+=("stable" "stable-${version}" "stable-${version:3}")
elif [[ ! "{{ tag }}" =~ stable|beta ]]; then
BUILD_TAGS+=("${FEDORA_VERSION}" "${FEDORA_VERSION}-${version}" "${FEDORA_VERSION}-${version:3}")
# compatiblity for f44, TODO: remove me when we merge beta branch into main
BUILD_TAGS+=("beta" "beta-${version}" "beta-${version:3}")
fi
if [[ "${github_event}" == "pull_request" ]]; then
@ -683,8 +611,6 @@ tag-images image_name="" default_tag="" tags="":
${PODMAN} tag $IMAGE {{ image_name }}:${tag}
done
# Show Images
${PODMAN} images
@ -695,6 +621,7 @@ setup-cache $image="aurora" $tag="latest" $flavor="main" $ghcr="0" $github_event
set -eou pipefail
image_name=$({{ just }} image_name '{{ image }}' '{{ tag }}' '{{ flavor }}')
fedora_version=$({{ just }} fedora_version '{{ image }}' '{{ tag }}')
ALLOW_CACHE_WRITE="false"

View file

@ -33,7 +33,6 @@ OVERRIDES=(
"mesa-libEGL"
"mesa-libGL"
"mesa-libgbm"
"mesa-va-drivers"
"mesa-vulkan-drivers"
)
@ -94,7 +93,6 @@ FEDORA_PACKAGES=(
htop
icoutils
ifuse
igt-gpu-tools
input-remapper
iwd
just
@ -121,7 +119,6 @@ FEDORA_PACKAGES=(
plasma-wallpapers-dynamic
powerstat
powertop
ptyxis
rclone
restic
samba-winbind
@ -176,10 +173,6 @@ dnf -y install --enablerepo='tailscale-stable' tailscale
# Install COPR packages using isolated enablement (secure)
echo "Installing COPR packages with isolated repo enablement..."
# From ublue-os/staging
copr_install_isolated "ublue-os/staging" \
"fw-fanctrl"
# From ublue-os/packages
copr_install_isolated "ublue-os/packages" \
"kcm_ublue" \
@ -227,6 +220,8 @@ EXCLUDED_PACKAGES=(
krfb-libs
plasma-discover-kns
plasma-discover-rpm-ostree
plasma-discover
plasma-discover-libs
plasma-welcome-fedora
podman-docker
)
@ -251,18 +246,18 @@ if [[ "${#EXCLUDED_PACKAGES[@]}" -gt 0 ]]; then
fi
fi
# we can't remove plasma-lookandfeel-fedora package because it is a dependency of plasma-desktop
rpm --erase --nodeps plasma-lookandfeel-fedora
# rpm erase doesn't remove actual files
rm -rf /usr/share/plasma/look-and-feel/org.fedoraproject.fedora.desktop/
# https://github.com/ublue-os/bazzite/issues/1400
# TODO: test if we still need this when upgrading firmware with fwupd
dnf -y copr enable ublue-os/staging
dnf -y copr disable ublue-os/staging
dnf5 -y swap \
--repo=copr:copr.fedorainfracloud.org:ublue-os:staging \
fwupd fwupd
# needs to be removed before we swap the version
systemctl disable flatpak-add-fedora-repos.service
# TODO: remove me on next flatpak release when preinstall landed in Fedora
dnf5 -y copr enable ublue-os/flatpak-test
dnf5 -y copr disable ublue-os/flatpak-test
@ -271,6 +266,10 @@ dnf5 -y --repo=copr:copr.fedorainfracloud.org:ublue-os:flatpak-test swap flatpak
dnf5 -y --repo=copr:copr.fedorainfracloud.org:ublue-os:flatpak-test swap flatpak-session-helper flatpak-session-helper
dnf5 -y --repo=copr:copr.fedorainfracloud.org:ublue-os:flatpak-test install flatpak-debuginfo flatpak-libs-debuginfo flatpak-session-helper-debuginfo
PLASMA_VERS=$(rpm -q --qf "%{VERSION}" plasma-desktop)
dnf -y install plasma-firewall-"${PLASMA_VERS}"
## Pins and Overrides
## Use this section to pin packages in order to avoid regressions
# Remember to leave a note with rationale/link to issue for each pin!
@ -281,15 +280,18 @@ dnf5 -y --repo=copr:copr.fedorainfracloud.org:ublue-os:flatpak-test install flat
# dnf5 upgrade --refresh --advisory=FEDORA-2024-dd2e9fb225
#fi
# Explicitly install KDE Plasma related packages with the same version as in base image
if [[ "${UBLUE_IMAGE_TAG}" == "beta" ]]; then
dnf -y copr enable @kdesig/kde-beta
dnf -y copr disable @kdesig/kde-beta
dnf -y --repo=copr:copr.fedorainfracloud.org:group_kdesig:kde-beta install plasma-firewall
else
dnf -y install \
plasma-firewall-$(rpm -q --qf "%{VERSION}" plasma-desktop)
fi
# https://invent.kde.org/plasma/plasma-setup/-/issues/72
dnf -y copr enable ublue-os/staging
dnf -y copr disable ublue-os/staging
dnf -y swap --repo=copr:copr.fedorainfracloud.org:ublue-os:staging \
plasma-setup plasma-setup-"${PLASMA_VERS}"-*.aurora
dnf versionlock add plasma-setup
# we can't remove plasma-lookandfeel-fedora package because it is a dependency of plasma-desktop
rpm --erase --nodeps plasma-lookandfeel-fedora
# rpm erase doesn't remove actual files
rm -rf /usr/share/plasma/look-and-feel/org.fedoraproject.fedora.desktop/
# Install DX specific packages
if [[ "${IMAGE_FLAVOR}" == "dx" ]]; then

View file

@ -24,16 +24,11 @@ fi
dnf5 versionlock add kernel kernel-devel kernel-devel-matched kernel-core kernel-modules kernel-modules-core kernel-modules-extra
dnf -y install /tmp/rpms/{common,kmods}/*xone*.rpm /tmp/rpms/{common,kmods}/*openrazer*.rpm || true
dnf -y install /tmp/rpms/{common,kmods}/*xone*.rpm || true
dnf -y install /tmp/rpms/{kmods,common}/*v4l2loopback*.rpm || true
mkdir -p /etc/pki/akmods/certs
ghcurl "https://github.com/ublue-os/akmods/raw/refs/heads/main/certs/public_key.der" --retry 3 -Lo /etc/pki/akmods/certs/akmods-ublue.der
# OpenRazer from hardware:razer repo (not a COPR)
dnf -y config-manager addrepo --from-repofile=https://openrazer.github.io/hardware:razer.repo
dnf -y install openrazer-daemon || true
sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/hardware:razer.repo
echo "::endgroup::"

View file

@ -10,6 +10,7 @@ flatpak remote-add --system --if-not-exists flathub https://flathub.org/repo/fla
# Offline Aurora documentation
ghcurl "https://github.com/ublue-os/aurora-docs/releases/download/0.1/aurora.pdf" --retry 3 -o /tmp/aurora.pdf
install -Dm0644 -t /usr/share/doc/aurora/ /tmp/aurora.pdf
setfattr -n user.component -v "aurora-offline-docs" /usr/share/doc/aurora/aurora.pdf
cp /usr/share/applications/dev.getaurora.offline-docs.desktop /usr/share/kglobalaccel/
# Weekly user count for fastfetch
@ -20,29 +21,24 @@ curl -X 'GET' \
'https://flathub.org/api/v2/stats/io.github.kolunmi.Bazaar?all=false&days=1' \
-H 'accept: application/json' | jq -r ".installs_last_7_days" | numfmt --to=si --round=nearest > /usr/share/ublue-os/bazaar-install-count
# Starship Shell Prompt
ghcurl "https://github.com/starship/starship/releases/latest/download/starship-$(uname -m)-unknown-linux-gnu.tar.gz" --retry 3 -o /tmp/starship.tar.gz
ghcurl "https://github.com/starship/starship/releases/latest/download/starship-$(uname -m)-unknown-linux-gnu.tar.gz.sha256" --retry 3 -o /tmp/starship.tar.gz.sha256
echo "$(cat /tmp/starship.tar.gz.sha256) /tmp/starship.tar.gz" | sha256sum --check
tar -xzf /tmp/starship.tar.gz -C /tmp
install -c -m 0755 /tmp/starship /usr/bin
# Nerdfont symbols
# to fix motd and prompt atleast temporarily
ghcurl "https://github.com/ryanoasis/nerd-fonts/releases/latest/download/NerdFontsSymbolsOnly.zip" --retry 3 -o /tmp/nerdfontsymbols.zip
unzip /tmp/nerdfontsymbols.zip -d /tmp
mkdir -p /usr/share/fonts/nerd-fonts/NerdFontsSymbolsOnly/
mv /tmp/SymbolsNerdFont*.ttf /usr/share/fonts/nerd-fonts/NerdFontsSymbolsOnly/
setfattr -n user.component -v "nerdfonts" /usr/share/fonts/nerd-fonts/NerdFontsSymbolsOnly
# Bash Prexec v0.6.0
# Bash Preexec v0.6.0
ghcurl https://raw.githubusercontent.com/rcaloras/bash-preexec/b73ed5f7f953207b958f15b1773721dded697ac3/bash-preexec.sh --retry 3 -Lo /usr/share/bash-preexec
setfattr -n user.component -v "aurora-config" /usr/share/bash-preexec
# use CoreOS' generator for emergency/rescue boot
# see detail: https://github.com/ublue-os/main/issues/653
mkdir -p /usr/lib/systemd/system-generators
ghcurl "https://raw.githubusercontent.com/coreos/fedora-coreos-config/refs/heads/stable/overlay.d/05core/usr/lib/systemd/system-generators/coreos-sulogin-force-generator" --retry 3 -Lo /usr/lib/systemd/system-generators/coreos-sulogin-force-generator
chmod +x /usr/lib/systemd/system-generators/coreos-sulogin-force-generator
setfattr -n user.component -v "aurora-config" /usr/lib/systemd/system-generators/coreos-sulogin-force-generator
echo "::endgroup::"

View file

@ -21,48 +21,14 @@ rm -rf /usr/share/doc/HTML
# BASE IMAGE CHANGES
# ######
# Hide Discover entries by renaming them (allows for easy re-enabling)
discover_apps=(
"org.kde.discover.desktop"
"org.kde.discover.flatpak.desktop"
"org.kde.discover.notifier.desktop"
"org.kde.discover.urlhandler.desktop"
)
for app in "${discover_apps[@]}"; do
if [ -f "/usr/share/applications/${app}" ]; then
mv "/usr/share/applications/${app}" "/usr/share/applications/${app}.disabled"
fi
done
# These notifications are useless and confusing
rm /etc/xdg/autostart/org.kde.discover.notifier.desktop
rm -f /usr/lib64/qt6/plugins/kf6/krunner/krunner_appstream.so
# Use Bazaar for Flatpak refs
# Force Ptyxis version opened via dbus (e.g., keyboard shortcut) to use the proper shim
# https://github.com/ublue-os/bazzite/pull/3620
sed -i 's@Exec=/usr/bin/ptyxis@Exec=/usr/bin/kde-ptyxis@g' /usr/share/dbus-1/services/org.gnome.Ptyxis.service
echo "application/vnd.flatpak.ref=io.github.kolunmi.Bazaar.desktop" >> /usr/share/applications/mimeapps.list
# Ptyxis Terminal
sed -i 's@\[Desktop Action new-window\]@\[Desktop Action new-window\]\nX-KDE-Shortcuts=Ctrl+Alt+T@g' /usr/share/applications/org.gnome.Ptyxis.desktop
sed -i 's@Exec=ptyxis@Exec=kde-ptyxis@g' /usr/share/applications/org.gnome.Ptyxis.desktop
sed -i 's@Keywords=@Keywords=konsole;console;@g' /usr/share/applications/org.gnome.Ptyxis.desktop
# GTK 4.20 changed how it handles input methods; see https://github.com/ghostty-org/ghostty/discussions/8899#discussioncomment-14717979
desktop-file-edit --set-key=Exec --set-value='env GTK_IM_MODULE=ibus kde-ptyxis' /usr/share/applications/org.gnome.Ptyxis.desktop
cp /usr/share/applications/org.gnome.Ptyxis.desktop /usr/share/kglobalaccel/
rm -f /etc/profile.d/gnome-ssh-askpass.{csh,sh} # This shouldn't be pulled in
# Test aurora gschema override for errors. If there are no errors, proceed with compiling aurora gschema, which includes setting overrides.
mkdir -p /tmp/aurora-schema-test
find /usr/share/glib-2.0/schemas/ -type f ! -name "*.gschema.override" -exec cp {} /tmp/aurora-schema-test/ \;
cp /usr/share/glib-2.0/schemas/zz0-aurora-modifications.gschema.override /tmp/aurora-schema-test/
echo "Running error test for aurora gschema override. Aborting if failed."
glib-compile-schemas --strict /tmp/aurora-schema-test
echo "Compiling gschema to include aurora setting overrides"
glib-compile-schemas /usr/share/glib-2.0/schemas &>/dev/null
# Make Samba usershares work OOTB
mkdir -p /var/lib/samba/usershares
chown -R root:usershares /var/lib/samba/usershares
@ -72,4 +38,8 @@ setsebool -P samba_export_all_ro=1
setsebool -P samba_export_all_rw=1
sed -i '/^\[homes\]/,/^\[/{/^\[homes\]/d;/^\[/!d}' /etc/samba/smb.conf
# beta only quirk, remove when https://github.com/get-aurora-dev/common/pull/119 merged
sed -i "s/org.gnome.Ptyxis/org.kde.konsole/" /usr/share/kde-settings/kde-profile/default/xdg/kicker-extra-favoritesrc
sed -i "s/org.gnome.Ptyxis/org.kde.konsole/" /usr/share/plasma/look-and-feel/dev.getaurora.aurora.desktop/contents/layouts/org.kde.plasma.desktop-layout.js
echo "::endgroup::"

View file

@ -13,7 +13,6 @@ systemctl enable tailscaled.service
systemctl enable dconf-update.service
systemctl enable brew-setup.service
systemctl enable aurora-groups.service
systemctl enable usr-share-sddm-themes.mount
systemctl enable ublue-system-setup.service
systemctl --global enable ublue-user-setup.service
systemctl --global enable podman-auto-update.timer
@ -25,6 +24,10 @@ systemctl enable flatpak-nuke-fedora.service
# TODO: Reinvestigate when bazaar gains dbus activation
# systemctl --global enable bazaar.service
# see /usr/bin/rechunker-group-fix
# DO NOT REMOVE THIS
systemctl enable rechunker-group-fix.service
# run flatpak preinstall once at startup
systemctl enable flatpak-preinstall.service
@ -44,8 +47,6 @@ for file in htop nvtop; do
fi
done
systemctl disable flatpak-add-fedora-repos.service
# NOTE: With isolated COPR installation, most repos are never enabled globally.
# We only need to clean up repos that were enabled during the build process.
@ -56,11 +57,6 @@ for repo in fedora-multimedia tailscale fedora-cisco-openh264; do
fi
done
# Disable hardware:razer repo if it exists
if [[ -f "/etc/yum.repos.d/hardware:razer.repo" ]]; then
sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/hardware:razer.repo
fi
# Disable Terra repos (installed on F42 and earlier)
for i in /etc/yum.repos.d/terra*.repo; do
if [[ -f "$i" ]]; then

View file

@ -43,7 +43,10 @@ test -f /usr/share/flatpak/preinstall.d/bazaar.preinstall
test -f /usr/lib/systemd/system/flatpak-add-fedora-repos.service && false
# Basic smoke test to check if the flatpak version is from our copr
flatpak preinstall --help
flatpak preinstall --help > /dev/null 2>&1
# Make sure to not pull in the bazzite one
rpm -q plasma-setup --qf "%{RELEASE}" | grep -q aurora
test -f /usr/share/doc/aurora/aurora.pdf
test -f /usr/share/homebrew.tar.zst
@ -53,12 +56,10 @@ desktop-file-validate \
/usr/share/applications/dev.getaurora.boot-to-windows.desktop \
/usr/share/applications/dev.getaurora.offline-docs.desktop \
/usr/share/applications/dev.getaurora.documentation.desktop \
/usr/share/applications/dev.getaurora.system-update.desktop \
/usr/share/applications/org.gnome.Ptyxis.desktop
/usr/share/applications/dev.getaurora.system-update.desktop
# Check for KDE Plasma version mismatch
# Fedora Repos have gotten the newer one, trying to upgrade
# everything except a few packages, breaking SDDM and shell
KDE_VER="$(rpm -q --qf '%{VERSION}' plasma-desktop)"
# package picked by failures in the past
@ -89,8 +90,7 @@ IMPORTANT_PACKAGES=(
pipewire
plasma-desktop
podman
ptyxis
sddm
plasma-login-manager
Sunshine
systemd
tailscale
@ -110,7 +110,7 @@ NEGATIVO=(
libheif
libva
mesa-filesystem
mesa-va-drivers
mesa-dri-drivers
pipewire-libs-extra
x264-libs
x265-libs
@ -128,8 +128,7 @@ UNWANTED_PACKAGES=(
fedora-logos
fedora-third-party
firefox
plasma-discover-kns
plasma-discover-rpm-ostree
plasma-discover
plasma-lookandfeel-fedora
podman-docker
)
@ -140,6 +139,7 @@ for package in "${UNWANTED_PACKAGES[@]}"; do
fi
done
#TODO: add libnvidia-container-tools back once its available for F44
if [[ "${IMAGE_NAME}" =~ nvidia ]]; then
NV_PACKAGES=(
kmod-nvidia

View file

@ -6,10 +6,6 @@ set -eoux pipefail
IMPORTANT_PACKAGES_DX=(
code
containerd.io
docker-ce
docker-buildx-plugin
docker-compose-plugin
flatpak-builder
libvirt
podman-bootc

View file

@ -17,6 +17,13 @@ rpm --erase --nodeps --nodb generic-logos
# Copy Files to Container
rsync -rvKl /ctx/system_files/shared/ /
setfattr -n user.component -v "aurora-wallpapers" /usr/share/backgrounds/aurora
setfattr -n user.component -v "aurora-assets" /usr/share/plasma/avatars/{echo,lumina,scope,tina,vincent}.png
setfattr -n user.component -v "aurora-assets" /etc/bazaar
setfattr -n user.component -v "aurora-plasma-theme" /usr/share/plasma/look-and-feel/dev.getaurora.aurora{,light}.desktop
setfattr -n user.component -v "aurora-config" /usr/share/ublue-os
setfattr -n user.component -v "homebrew" /usr/share/homebrew.tar.zst
if [[ "${IMAGE_FLAVOR}" == "dx" ]]; then
/ctx/build_files/shared/build-dx.sh
fi

View file

@ -9,6 +9,7 @@ dnf config-manager setopt keepcache=0
dnf versionlock clear
# This comes last because we can't *ever* afford to ship fedora flatpaks on the image
systemctl disable flatpak-add-fedora-repos.service || true
systemctl mask flatpak-add-fedora-repos.service
rm -f /usr/lib/systemd/system/flatpak-add-fedora-repos.service

View file

@ -1,8 +1,8 @@
images:
- name: kinoite
image: quay.io/fedora-ostree-desktops/kinoite
tag: 43
digest: sha256:bf5fe2d836c43a9134a0aef31193716b5280fd103fb3df07259b6f9f188815b7
tag: 44
digest: sha256:d73a04a449fd8184427302545e557006507941ae3805c04140cfedd7dc146a0f
- name: common
image: ghcr.io/get-aurora-dev/common
tag: latest

View file

@ -0,0 +1,18 @@
#!/usr/bin/env bash
# To use this script, you'll want to put this in your systemd service:
# rm /etc/gshadow
# systemd-sysusers
# (run this script)
# systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev
# This will populate /etc/group successfully, and then populate /etc/gshadow
# with any missing groups that we nuked when we removed /etc/gshadow
GSHADOW_FILE="/etc/gshadow"
GROUP_FILE="/etc/group"
for f in $(cat $GROUP_FILE); do
cut -f1 -d':' <(echo $f) | xargs -I{} grep ^"{}" $GSHADOW_FILE &>/dev/null || \
echo $(cut -f1 -d':' <(echo $f)):'!*::' >> $GSHADOW_FILE
done

View file

@ -0,0 +1,32 @@
# We have this script so that people using images with `nss-altfiles` (`/usr/lib/g{roup,shadow}`)
# do not break their systems when rebasing to an image without that
# This usually happens when using https://github.com/hhd-dev/rechunk then rebasing to an image without it.
# Please DO NOT remove this unless this is fully, completely obsolete.
# This is exactly what is making it break: https://github.com/ublue-os/legacy-rechunk/blob/1d2b0c2e99afbdc2eb06788ae28e157a88b03d70/1_prune.sh#L41-L47
# Users WILL experience black screens and systems will NOT boot if this script malfunctions. Please test this properly and always make sure this works
# Relevant issues:
# - https://github.com/bootc-dev/bootc/issues/1179#issuecomment-2708305926
# - https://github.com/ublue-os/main/issues/759
# - https://github.com/ublue-os/bluefin-lts/issues/918
# - https://github.com/ublue-os/image-template/issues/177
# - https://github.com/ublue-os/aurora/issues/1468
# - https://github.com/ublue-os/bluefin/issues/3852
# This got created on Tue, 16 Dec 2025 00:44:58 -0300
[Unit]
Description=Fix groups for Legacy rechunker
ConditionPathExists=/run/ostree-booted
Wants=local-fs.target
After=local-fs.target
Before=systemd-user-sessions.service
# Before=systemd-sysusers.service
[Service]
Type=oneshot
ExecStart=bash -c 'touch /etc/gshadow && chmod 600 /etc/gshadow'
ExecStart=bash -c 'rm /etc/gshadow'
ExecStart=systemd-sysusers
ExecStart=rechunker-group-fix
ExecStart=systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev
[Install]
WantedBy=default.target multi-user.target

View file

@ -1,20 +0,0 @@
# Workaround to allow KDE Discover to install sddm themes
# TODO: Remove this whenever sddm allows installing themes other than in /usr/share.
# See https://github.com/sddm/sddm/issues/1561
[Unit]
Description=KDE writable sddm workaround
RequiresMountsFor=/usr /var
ConditionPathExists=/usr/share/sddm
ConditionPathExists=/var/sddm_themes/themes
ConditionPathExists=/var/sddm_themes/themes.work
PartOf=aurora-kde-themes-workaround.target
[Mount]
Type=overlay
What=overlay
Where=/usr/share/sddm/themes
Options=lowerdir=/usr/share/sddm/themes,upperdir=/var/sddm_themes/themes,workdir=/var/sddm_themes/themes.work
[Install]
WantedBy=multi-user.target

View file

@ -1,6 +0,0 @@
# Workaround to allow KDE Discover to install sddm themes
# TODO: Remove this whenever sddm allows installing themes other than in /usr/share.
# See https://github.com/sddm/sddm/issues/1561
d /var/sddm_themes/themes 0755 - - -
d /var/sddm_themes/themes.work 0755 - - -