From bb46e4792e6129fecf307e14cbd7bb8ec757e375 Mon Sep 17 00:00:00 2001 From: Gordon Messmer Date: Apr 28 2026 20:17:19 +0000 Subject: Backport main branch changes --- diff --git a/README.md b/README.md index 409955e..5f946d9 100644 --- a/README.md +++ b/README.md @@ -3,18 +3,12 @@ This is the configuration needed to create [rpm-ostree](https://coreos.github.io/rpm-ostree/) based, desktop variants of Fedora, also known as -[Fedora Atomic Desktops](https://fedoraproject.org/atomic-desktops/). +[Fedora Atomic Desktops](https://fedoraproject.org/atomic-desktops/). See the +Atomic Desktops project for more information about all of the variants. This repo is managed by the [Fedora Atomic Desktops SIG](https://fedoraproject.org/wiki/SIGs/AtomicDesktops). -The currently official Fedora Atomic Desktop variants are: - -- Fedora Silverblue -- Fedora Kinoite -- Fedora Sway Atomic -- Fedora Budgie Atomic - Reach out to the SIG if you are interested in creating and maintaining a new Atomic variant. @@ -28,148 +22,156 @@ In the Fedora infrastructure, composes are made via [pungi](https://pagure.io/pungi) with the configuration from: - for Rawhide and branched composes: - [pagure.io/pungi-fedora](https://pagure.io/pungi-fedora) + [forge.fedoraproject.org/releng/pungi-fedora](https://forge.fedoraproject.org/releng/pungi-fedora) - for stable releases: - [pagure.io/fedora-infra](https://pagure.io/fedora-infra/ansible/blob/main/f/roles/bodhi2/backend/templates/pungi.rpm.conf.j2) + [forge.fedoraproject.org/infra/ansible](https://forge.fedoraproject.org/infra/ansible/src/branch/main/roles/bodhi2/backend/templates/pungi.rpm.conf.j2) Installer ISOs are built using [Lorax](https://github.com/weldr/lorax) and additional templates: [pagure.io/fedora-lorax-templates](https://pagure.io/fedora-lorax-templates). -## Compose Methods and Outputs +## Getting started -There are a few different ways Fedora Atomic Desktop images are currently produced. +If you'd like to build an Atomic system image, you'll need to clone this repo and check out the +release branch you want to work with, then build, publish, and install the image. -### 1. Official Pungi Compose (OSTree Commit) +Currently, the default image type in Fedora is "ostree", while container images are +still in development. You can build either type. -This is the traditional method for creating the official Fedora Atomic Desktops. - -- **Source Repository**: `workstation-ostree-config` (this repository) -- **Compose Tool**: Fedora's official [Pungi](https://pagure.io/pungi) composer. -- **Output Type**: A classic OSTree commit. -- **Details**: This is the standard, officially supported output that is used to deliver updates to users. +All commonly used commands are listed as recipes in the +[justfile](https://pagure.io/workstation-ostree-config/blob/main/f/justfile) (see +[Just](https://github.com/casey/just)). -### 2. Official Pungi Compose (OCI Image) +## Clone this repo -Fedora infrastructure also produces OCI (bootable container) images from the manifests in this repository. +``` +# Clone the config +git clone https://pagure.io/workstation-ostree-config && cd workstation-ostree-config -- **Source Repository**: `workstation-ostree-config` (this repository) -- **Compose Tool**: Fedora's official [Pungi](https://pagure.io/pungi) composer. -- **Output Type**: An OCI container image. -- **Output Location**: `quay.io/fedora/fedora-` (e.g., `quay.io/fedora/fedora-silverblue`) -- **Details**: These official images are unsigned and do not have historical tags (e.g., `40.20240422.0`). +# Check out a release branch (unless you want a rawhide image) +git checkout f44 +``` -### 3. Unofficial CI-Test Builds (OCI Image) +## ostree image -For testing and development purposes, an unofficial set of OCI images are built using a separate repository that mirrors the manifests from this one but adds a GitLab CI pipeline. +### Build an ostree image -- **Source Repository**: [gitlab.com/fedora/ostree/ci-test](https://gitlab.com/fedora/ostree/ci-test) -- **Compose Tool**: GitLab CI. -- **Output Type**: An OCI container image. -- **Output Location**: `quay.io/fedora-ostree-desktops/` (e.g., `quay.io/fedora-ostree-desktops/silverblue`) -- **Details**: These images are unofficial and intended for testing. Unlike the official OCI images, they are `cosign` signed, retain historical tags, and are subject to a 4-week expiry policy on the container registry. +``` +# Build the classic ostree commits (currently the default in Fedora) +just compose-legacy silverblue +``` -The goal is to eventually use a similar CI pipeline-centric flow, with signing and historical tags, for the official releases. +### Publish an ostree image -## Website +Serve the ostree repo using an HTTP server. You can use any static +file server. For example using +: -The sources for the -[Silverblue](https://fedoraproject.org/atomic-desktops/silverblue/), -[Kinoite](https://fedoraproject.org/atomic-desktops/kinoite/), -[Sway Atomic](https://fedoraproject.org/atomic-desktops/sway/) and -[Budgie Atomic](https://fedoraproject.org/atomic-desktops/budgie/) websites are -in [gitlab.com/fedora/fedora-websites-3.0](https://gitlab.com/fedora/websites-apps/fedora-websites/fedora-websites-3.0). +``` +simple-http-server --index --ip 192.168.122.1 --port 8000 +``` -## Issue trackers +### Install the ostree image -Issues common to all Fedora Atomic Desktops are tracked in -[gitlab.com/fedora/ostree/sig](https://gitlab.com/fedora/ostree/sig/-/issues). +On an already installed Silverblue system: -Desktop specific issues should be filed in their respective issue trackers: +``` +# Pin the currently deployed (and probably working) version +sudo ostree admin pin 0 -- [Silverblue](https://github.com/fedora-silverblue/issue-tracker/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc) - - See also the [Workstation issue tracker](https://pagure.io/fedora-workstation/issues?status=Open&order_key=last_updated&order=desc) -- [Kinoite](https://pagure.io/fedora-kde/SIG/issues?status=Open&order_key=last_updated&order=desc) - ([KDE SIG](https://fedoraproject.org/wiki/SIGs/KDE)) -- [Sway Atomic](https://gitlab.com/fedora/sigs/sway/SIG/-/issues) - ([Sway SIG](https://fedoraproject.org/wiki/SIGs/Sway)) -- [Budgie Atomic](https://pagure.io/fedora-budgie/project/issues?status=Open&order_key=last_updated&order=desc) - ([Budgie SIG](https://fedoraproject.org/wiki/SIGs/Budgie)) +# Add an ostree remote +sudo ostree remote add testremote http://192.168.122.1:8000/repo --no-gpg-verify -## Documentation +# List refs from variant remote +sudo ostree remote refs testremote -The documentation for Fedora Atomic variants is currently duplicated for each -variant at [Atomic Desktops](https://docs.fedoraproject.org/en-US/emerging/). +# Switch to your variant +sudo rpm-ostree rebase testremote:fedora/rawhide/x86_64/silverblue -There are plans to unify the documentation: -[ostree/sig#10](https://gitlab.com/fedora/ostree/sig/-/issues/10) +# Reboot and test! +``` -Documentation sources: +## Container image -- [Silverblue](https://github.com/fedora-silverblue/silverblue-docs) -- [Kinoite](https://pagure.io/fedora-kde/kinoite-docs) -- [Sway Atomic](https://gitlab.com/fedora/sigs/sway/sericea-docs) -- Budgie Atomic (to be determined) +### Build a container image -## Building +``` +# Build the new ostree native container (not default yet, still in development) +just compose-image silverblue +``` -All commonly used commands are listed as recipes in the -[justfile](https://github.com/casey/just) (see -[Just](https://github.com/casey/just)). +### Publish the container image -Example to do a local build of Fedora Silverblue: +Serve the container image using a local insecure container image registry. ``` -# Clone the config -$ git clone https://pagure.io/workstation-ostree-config && cd workstation-ostree-config +# Run a local container image registry +podman run -d -p 5000:5000 --name local-registry registry:2 -# Build the classic ostree commits (currently the default in Fedora) -$ just compose-legacy variant=silverblue +# Push the ociarchive to the image registry +REGISTRY=192.168.122.1:5000 RELEASE_REPO=fedora \ + just upload-container-local -# Or build the new ostree native container (not default yet, still in development) -$ just compose-image variant=silverblue +# Examine the output for the OCI image location, e.g.: +# 192.168.122.2:5000/fedora/silverblue:rawhide.20260324.0 ``` -## Testing - -Instructions to test the resulting build for classic ostree commits: - -- First, serve the ostree repo using an HTTP server. You can use any static - file server. For example using - : - -``` -simple-http-server --index --ip 192.168.122.1 --port 8000 -``` +### Install the container image -- Then, on an already installed Silverblue system: +On an already installed Silverblue system: ``` -# Add an ostree remote -sudo ostree remote add testremote http://192.168.122.1:8000/repo --no-gpg-verify - # Pin the currently deployed (and probably working) version sudo ostree admin pin 0 -# List refs from variant remote -sudo ostree remote refs testremote +sudo tee -a /etc/containers/registries.conf.d/localdev.conf < -``` +There are a few different ways Fedora Atomic Desktop images are currently produced within Fedora's infrastructure. -See [URL format for ostree native containers](https://coreos.github.io/rpm-ostree/container/#url-format-for-ostree-native-containers) for details. +### 1. Official Pungi Compose (OSTree Commit) + +This is the traditional method for creating the official Fedora Atomic Desktops. + +- **Source Repository**: `workstation-ostree-config` (this repository) +- **Compose Tool**: Fedora's official [Pungi](https://pagure.io/pungi) composer. +- **Output Type**: A classic OSTree commit. +- **Details**: This is the standard, officially supported output that is used to deliver updates to users. + +### 2. Official Pungi Compose (OCI Image) + +Fedora infrastructure also produces OCI (bootable container) images from the manifests in this repository. + +- **Source Repository**: `workstation-ostree-config` (this repository) +- **Compose Tool**: Fedora's official [Pungi](https://pagure.io/pungi) composer. +- **Output Type**: An OCI container image. +- **Output Location**: `quay.io/fedora/fedora-` (e.g., `quay.io/fedora/fedora-silverblue`) +- **Details**: These official images are unsigned and do not have historical tags (e.g., `40.20240422.0`). + +### 3. Unofficial CI-Test Builds (OCI Image) + +For testing and development purposes, an unofficial set of OCI images are built using a separate repository that mirrors the manifests from this one but adds a GitLab CI pipeline. + +- **Source Repository**: [gitlab.com/fedora/ostree/ci-test](https://gitlab.com/fedora/ostree/ci-test) +- **Compose Tool**: GitLab CI. +- **Output Type**: An OCI container image. +- **Output Location**: `quay.io/fedora-ostree-desktops/` (e.g., `quay.io/fedora-ostree-desktops/silverblue`) +- **Details**: These images are unofficial and intended for testing. Unlike the official OCI images, they are `cosign` signed, retain historical tags, and are subject to a 4-week expiry policy on the container registry. + +The goal is to eventually use a similar CI pipeline-centric flow, with signing and historical tags, for the official releases. ## Syncing with Fedora Comps @@ -197,13 +199,13 @@ https://pagure.io/fedora-comps and a `git` checkout of this repository. Using the `comps-sync.py` script, provide the updated input XML file to examine the changes as a dry-run: -`$ ./comps-sync.py /path/to/fedora-comps/comps-f44.xml.in` +`./comps-sync.py /path/to/fedora-comps/comps-f44.xml.in` Examine the changes and cross-reference them with PRs made to the `fedora-comps` repo. When you are satisfied that the changes are accurate and appear safe, re-run the script with the `--save` option: -`$ ./comps-sync.py --save /path/to/fedora-comps/comps-f44.xml.in` +`./comps-sync.py --save /path/to/fedora-comps/comps-f44.xml.in` Create a pull request with the changes and note any PRs from `fedora-comps` in the commit message that are relevant to the changes you have generated. @@ -218,27 +220,17 @@ Make a PR similar to [ansible#1318](https://pagure.io/fedora-infra/ansible/pull-request/1318) in [fedora-infra/ansible](https://pagure.io/fedora-infra/ansible). -### On Rawhide / main branch - -``` -sed -i "s/44/45/g" *.repo comps-sync.py -sed -i "s/releasever: 44/releasever: 45/" common.yaml -sed -i --follow-symlinks "s/# - fedora-44/# - fedora-45/" *.yaml -mv fedora-44.repo fedora-45.repo -mv fedora-44-updates.repo fedora-45-updates.repo -sed -i "s/45/46/g" README.md -sed -i "s/44/45/g" README.md -``` +### This repo -### On the new branch (f44) +Use the branch recipe to create the new release branch and update the main +branch: ``` -rm fedora-rawhide.repo -sed -i --follow-symlinks "/- fedora-rawhide/d" *.yaml -sed -i --follow-symlinks "s/# - fedora-44/- fedora-44/" *.yaml -sed -i "s/releasever_ref: \"rawhide\"/releasever_ref: \"44\"/" common.yaml +just branch ``` +Push the new changes in both branches. + ## Historical references Building and testing instructions: diff --git a/base-atomic.yaml b/base-atomic.yaml index baa4900..3d75a92 100644 --- a/base-atomic.yaml +++ b/base-atomic.yaml @@ -20,5 +20,5 @@ exclude-packages: # Kept in the leaf manifest as they are overwritten by Pungi in composes repos: - - fedora-44 - - fedora-44-updates + - fedora + - updates diff --git a/budgie-atomic-ostree.yaml b/budgie-atomic-ostree.yaml index 0acad0f..bfa6a25 100644 --- a/budgie-atomic-ostree.yaml +++ b/budgie-atomic-ostree.yaml @@ -6,5 +6,5 @@ include: # Kept in the leaf manifest as they are overwritten by Pungi in composes repos: - - fedora-44 - - fedora-44-updates + - fedora + - updates diff --git a/budgie-atomic.yaml b/budgie-atomic.yaml index e804a51..4009bc3 100644 --- a/budgie-atomic.yaml +++ b/budgie-atomic.yaml @@ -3,5 +3,5 @@ include: # Kept in the leaf manifest as they are overwritten by Pungi in composes repos: - - fedora-44 - - fedora-44-updates + - fedora + - updates diff --git a/cosmic-atomic-ostree.yaml b/cosmic-atomic-ostree.yaml index b1afc9e..221e5d6 100644 --- a/cosmic-atomic-ostree.yaml +++ b/cosmic-atomic-ostree.yaml @@ -6,5 +6,5 @@ include: # Kept in the leaf manifest as they are overwritten by Pungi in composes repos: - - fedora-44 - - fedora-44-updates + - fedora + - updates diff --git a/cosmic-atomic.yaml b/cosmic-atomic.yaml index 816ffd5..f25f246 100644 --- a/cosmic-atomic.yaml +++ b/cosmic-atomic.yaml @@ -3,5 +3,5 @@ include: # Kept in the leaf manifest as they are overwritten by Pungi in composes repos: - - fedora-44 - - fedora-44-updates + - fedora + - updates diff --git a/fedora-44-updates.repo b/fedora-44-updates.repo deleted file mode 100644 index 902e29c..0000000 --- a/fedora-44-updates.repo +++ /dev/null @@ -1,6 +0,0 @@ -[fedora-44-updates] -name=Fedora 44 $basearch Updates -mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f44&arch=$basearch -enabled=1 -gpgcheck=1 -metadata_expire=1d diff --git a/fedora-44.repo b/fedora-44.repo deleted file mode 100644 index c2d2804..0000000 --- a/fedora-44.repo +++ /dev/null @@ -1,6 +0,0 @@ -[fedora-44] -name=Fedora 44 $basearch -mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=fedora-44&arch=$basearch -enabled=1 -gpgcheck=1 -metadata_expire=1d diff --git a/fedora.repo b/fedora.repo new file mode 100644 index 0000000..6ed2960 --- /dev/null +++ b/fedora.repo @@ -0,0 +1,20 @@ +[fedora-rawhide] +name=Fedora rawhide $basearch +mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=rawhide&arch=$basearch +enabled=1 +gpgcheck=1 +metadata_expire=1d + +[fedora] +name=Fedora $releasever $basearch +metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch +enabled=1 +gpgcheck=1 +metadata_expire=1d + +[updates] +name=Fedora $releasever $basearch Updates +metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$releasever&arch=$basearch +enabled=1 +gpgcheck=1 +metadata_expire=1d diff --git a/justfile b/justfile index 0a1a5e3..57e3379 100644 --- a/justfile +++ b/justfile @@ -70,6 +70,31 @@ all: validate validate: ./ci/validate +branch: + #!/bin/bash + set -euo pipefail + + git checkout main + + default_variant={{default_variant}} + version="$(rpm-ostree compose tree --print-only --repo=repo ${default_variant}.yaml | jq -r '."mutate-os-release"')" + + # recipe will exit if branching the repo fails, such as if branch already exists + git branch f${version} + sed -i "s/${version}/$(( version + 1 ))/g" comps-sync.py README.md + sed -i "s/releasever: ${version}/releasever: $(( version + 1 ))/" common.yaml + git add comps-sync.py common.yaml README.md + git commit -m "Update main branch to $(( version + 1 ))" + + git checkout f${version} + sed -i --follow-symlinks "/- fedora-rawhide/d" *.yaml + sed -i --follow-symlinks "s/# - fedora/- fedora/" *.yaml + sed -i --follow-symlinks "s/# - updates/- updates/" *.yaml + sed -i "s/releasever_ref: \"rawhide\"/releasever_ref: \"${version}\"/" common.yaml + git add *.yaml + git commit -m "Update configs for branch f${version}" + + # Comps-sync, but without pulling latest sync: #!/bin/bash diff --git a/kinoite-mobile.yaml b/kinoite-mobile.yaml index 7db9ad8..f3d885c 100644 --- a/kinoite-mobile.yaml +++ b/kinoite-mobile.yaml @@ -3,5 +3,5 @@ include: # Kept in the leaf manifest as they are overwritten by Pungi in composes repos: - - fedora-44 - - fedora-44-updates + - fedora + - updates diff --git a/kinoite-ostree.yaml b/kinoite-ostree.yaml index d04fa66..a7a62d1 100644 --- a/kinoite-ostree.yaml +++ b/kinoite-ostree.yaml @@ -6,5 +6,5 @@ include: # Kept in the leaf manifest as they are overwritten by Pungi in composes repos: - - fedora-44 - - fedora-44-updates + - fedora + - updates diff --git a/kinoite.yaml b/kinoite.yaml index 481097f..f601245 100644 --- a/kinoite.yaml +++ b/kinoite.yaml @@ -3,5 +3,5 @@ include: # Kept in the leaf manifest as they are overwritten by Pungi in composes repos: - - fedora-44 - - fedora-44-updates + - fedora + - updates diff --git a/silverblue-ostree.yaml b/silverblue-ostree.yaml index 86278e6..7184da8 100644 --- a/silverblue-ostree.yaml +++ b/silverblue-ostree.yaml @@ -6,5 +6,5 @@ include: # Kept in the leaf manifest as they are overwritten by Pungi in composes repos: - - fedora-44 - - fedora-44-updates + - fedora + - updates diff --git a/silverblue.yaml b/silverblue.yaml index 46153fc..dd7702a 100644 --- a/silverblue.yaml +++ b/silverblue.yaml @@ -3,5 +3,5 @@ include: # Kept in the leaf manifest as they are overwritten by Pungi in composes repos: - - fedora-44 - - fedora-44-updates + - fedora + - updates diff --git a/sway-atomic-ostree.yaml b/sway-atomic-ostree.yaml index fa9e291..71ed7f4 100644 --- a/sway-atomic-ostree.yaml +++ b/sway-atomic-ostree.yaml @@ -6,5 +6,5 @@ include: # Kept in the leaf manifest as they are overwritten by Pungi in composes repos: - - fedora-44 - - fedora-44-updates + - fedora + - updates diff --git a/sway-atomic.yaml b/sway-atomic.yaml index d78ad2a..41a7fc3 100644 --- a/sway-atomic.yaml +++ b/sway-atomic.yaml @@ -3,5 +3,5 @@ include: # Kept in the leaf manifest as they are overwritten by Pungi in composes repos: - - fedora-44 - - fedora-44-updates + - fedora + - updates