Compare commits

...
Sign in to create a new pull request.

44 commits

Author SHA1 Message Date
Paul Whalen
87eaa6a42b Update gpgkey path in fedora-46.repo, drop unused fedora-45.repo
Update gpgkey path in fedora-46.repo from /etc/pki/rpm-gpg/ to
/usr/share/pki/rpm-gpg/ for the F45 GPG key relocation.

See: https://discussion.fedoraproject.org/t/f45-change-proposal-relocate-rpm-repo-configs-to-usr-selfcontained/188916

Remove fedora-45.repo from main (rawhide) - it belongs on f45-branch.

Assisted-by: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2026-08-17 14:41:53 -04:00
Paul Whalen
f570c87de9 Bump rawhide to Fedora 46 2026-08-12 10:17:54 -04:00
Paul Whalen
63d2e9c3f5 Update workstation-ostree-config references to Forge
- bootupd.yaml: Update comment URL to atomic-desktops/config on Forge
- treecompose-post.sh: Update comment URL to atomic-desktops/config on Forge

Assisted-by: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2026-07-28 16:15:56 -04:00
Kenneth Giusti
3738d4889f
fix: use kmscon as default VT console
The kernel console fbcon has been replaced with the userspace console
kmscon in Fedora 45.

See: https://github.com/fedora-iot/iot-distro/issues/137

Signed-off-by: Kenneth Giusti <kgiusti@redhat.com>
2026-06-15 12:56:47 -04:00
ce42103746
Remove ignition package
Since [1], the ignition-edge subpackage requires ignition, so it's no
longer needed to require ignition explicitly here.

[1] https://src.fedoraproject.org/rpms/ignition/c/3ccce9fe2c0462f4a17923937933ab9c26db0aa5?branch=rawhide
2026-03-12 09:46:51 +01:00
Paul Whalen
e49d841a84 fix: drop sshd-authorized-keys workaround
Openssh config snippet now shipped with ignition.

See: https://src.fedoraproject.org/rpms/ignition/pull-request/143

Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2026-02-26 15:07:19 -05:00
Paul Whalen
1b3ede31d9 fix: use 90- prefix for authorized-keys-file.conf
Updates the config file numbering to ensure crypto policies(40)
and security configs(50) are applied before user keys are sourced.

Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2026-02-24 17:04:31 -05:00
Paul Whalen
7a121ed5e7 fix: do not create etc/ssh/sshd_config.d
Do not create etc/ssh/sshd_config.d, it should already exist and is
owned by openssh-clients and systemd.

Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2026-02-24 15:52:24 -05:00
Paul Whalen
e0898e8a38 fix: restore SSH key management for Ignition
Configures OpenSSH to read keys from ~/.ssh/authorized_keys.d/* in
addition to authorized_keys, restoring functionality lost when
ssh-key-dir was removed.

Follows the same approach as CoreOS:
https://github.com/coreos/fedora-coreos-config/pull/3885

Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2026-02-24 15:36:39 -05:00
Paul Whalen
240bff70e7 fix: add systemd-pam to fix rootless podman
In Fedora 44 systemd changed systemd-pam to recommends and it
was dropped from the compose.

See: https://github.com/fedora-iot/iot-distro/issues/127

Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2026-02-10 15:44:02 -05:00
Paul Whalen
dccd3a2e18 IoT: Update rawhide for F-45
Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2026-02-06 11:22:08 -05:00
Paul Whalen
fc7be03512 fix: drop ssh-key-dir
Package has been deprecated in F44.

See: https://github.com/coreos/ssh-key-dir/issues/188

Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2026-02-04 11:07:52 -05:00
Paul Whalen
cc96761b13 IoT: Update rawhide for F-44
Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2025-08-11 14:25:38 -04:00
Paul Whalen
c7f2ffe7cb Default root config to mount sysroot as read only
See: https://github.com/fedora-iot/iot-distro/issues/81
     https://gitlab.com/fedora/bootc/base-images/-/blob/main/tier-0/ostree.yaml

Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2025-03-17 13:19:32 -04:00
465d88c040 Add a justfile with common commands 2025-03-07 13:50:20 +01:00
ce81f37ea5 ci: Add a script to help validate manifest syntax 2025-03-07 13:50:20 +01:00
e4bd292f1a Whitespace & indentation cleanup 2025-03-07 13:50:19 +01:00
6b92bbcbbc Remove fedora-bootc-base
Now moved to https://github.com/fedora-iot/fedora-iot-bootc
2025-03-07 13:50:10 +01:00
Paul Whalen
2fda060e85 Remove grub2-workaround
Remove grub2-workaround, bug has been fixed.

See: https://bugzilla.redhat.com/show_bug.cgi?id=2305291

Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2025-03-06 14:02:39 -05:00
6529ca201d iot: drop kernel-tools
It too should be layered, not included in the base image.

Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
2025-02-28 17:09:28 +00:00
Paul Whalen
c739a8c05a Enable composefs by default
See: https://pagure.io/workstation-ostree-config/pull-request/591
     https://fedoraproject.org/wiki/Changes/ComposefsAtomicCoreOSIoT
     https://fedoraproject.org/wiki/Changes/ComposefsAtomicDesktops

Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2025-02-27 11:02:20 -05:00
Paul Whalen
a6e7212b56 Migrate systems to a static GRUB config
See: https://pagure.io/workstation-ostree-config/pull-request/591
     https://fedoraproject.org/wiki/Changes/ComposefsAtomicCoreOSIoT
     https://fedoraproject.org/wiki/Changes/ComposefsAtomicDesktops

Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2025-02-27 10:58:35 -05:00
Paul Whalen
b3fd2930a9 Disable ima in ostree due to ongoing compose issues
See: https://bugzilla.redhat.com/show_bug.cgi?id=2346265

Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2025-02-24 10:43:18 -05:00
ce25ead8e5 drop policycoreutils-python-utils in base
The policycoreutils-python-utils pulls in a bunch of extra
SELinux utils which aren't used in day to day, it pulls in
a bunch of python packages, it can easily be layered and
isn't generally needed.

Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
2025-02-19 15:34:27 +00:00
Paul Whalen
17d9d31eb8 Drop parsec no longer supported upstream
Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2025-02-19 15:17:54 +00:00
Paul Whalen
b799fe0c9d Remove Zezere and enable systemd-firstboot
Remove Zezere and enable systemd-firstboot for local configuration.

See: https://fedoraproject.org/wiki/Changes/Retire_Zezere

Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2025-02-19 15:17:42 +00:00
625d763195 Replace basesystem with filesystem
See https://src.fedoraproject.org/rpms/filesystem/c/3f741bf2a89c9e1bb685943c41fd298e6683dd50?branch=rawhide

Signed-off-by: Adam Williamson <awilliam@redhat.com>
2025-02-07 09:34:26 -08:00
Paul Whalen
d6ec8e0b0e IoT: Update rawhide for F-43
Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2025-02-04 15:29:24 -05:00
djach7
c611d4da96 Adds bootupd update to boot process
Updates bootupd.yaml to enable bootupctl-update upon system boot. This allows bootupd to work as expected on Fedora IoT raw image systems, with all expected components installed.

Signed-off-by: djach7 <djachimo@redhat.com>
2024-12-16 16:42:00 -05:00
David Jachimowicz
91539fbf82
Update fedora-iot-base.yaml to sync with osbuild iot-commit
Adds ssh-key-dir and ignition-edge packages to base yaml. ssh-key-dir is needed to transfer ssh keys to the iot system during boot
and ignition-edge is needed to allow ssh-key-dir to work properly.

Explicitly adds fedora-iot-config package. Was previously pulled in as a requirement, added for clarity.

Adds fdo-owner-cli package to increase FDO functionality.

These changes should help bring the package list more in line with the osbuild iot-commit, as well as rectifying issue 70 and issue 49 (relating to ssh key login and home directory creation on iot systems).

Issue 70: https://github.com/fedora-iot/iot-distro/issues/70
Issue 49: https://github.com/fedora-iot/iot-distro/issues/49

Signed-off-by: djach7 <djachimo@redhat.com>
2024-11-19 12:09:25 -05:00
Paul Whalen
597796c53f Add iot base bootc image
Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2024-09-25 08:57:05 -04:00
176b0add79 drop dnsmasq
Not sure why it was included, I suspect it was once used
for container networking.

Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
2024-09-20 15:28:56 +01:00
Paul Whalen
36ab3daaf0 fedora-iot-base: Add workaround for issue with newer GRUB2
Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2024-09-03 09:38:53 -04:00
1a898a7337 bootupd: add some contextual comments
Signed-off-by: Micah Abbott <miabbott@redhat.com>
2024-08-28 13:54:39 -04:00
Paul Whalen
023d15b50f IoT: Update rawhide for F-42
Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2024-08-12 15:26:49 -04:00
Paul Whalen
985a450f7c F41: Add dnf5 to packages
Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2024-07-15 13:39:36 -04:00
Paul Whalen
c1ecf382b8 F41: add bootc to packages
Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2024-05-03 10:49:13 -04:00
Paul Whalen
1314f2a3f2 F41: Adjust repo to use mirrors
Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2024-04-16 13:43:24 -04:00
Paul Whalen
8329945ded F41: Add base bootc container
Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2024-04-15 11:47:11 -04:00
Paul Whalen
187a596a33 F41: enable fdo-client-linuxapp.service
Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2024-04-12 08:48:50 -04:00
b908de5dc7 add passt userspace network for podmn5 requirements
It seems podman5 has changed the rootless container network
stack to passt so add this into our compose alongside the
exisitng slirp4netns while we find out how the migration
works so we can document it.

Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
2024-03-19 14:13:26 +00:00
Paul Whalen
4ef41ffa05 f41: enable bootupd
Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2024-02-21 15:46:40 -05:00
Paul Whalen
ede36f3a2c Drop podman-plugins package
Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2024-02-14 16:53:30 -05:00
Paul Whalen
efa4770938 IoT: Update rawhide for F-41
Signed-off-by: Paul Whalen <pwhalen@fedoraproject.org>
2024-02-13 13:06:27 -05:00
12 changed files with 320 additions and 24 deletions

26
bootupd.yaml Normal file
View file

@ -0,0 +1,26 @@
# KEEP THIS IN SYNC WITH https://github.com/coreos/fedora-coreos-config/blob/testing-devel/manifests/bootupd.yaml
# See also: https://forge.fedoraproject.org/atomic-desktops/config/src/branch/main/bootupd.yaml
#
# Integration with https://github.com/coreos/bootupd
packages:
- bootupd
postprocess:
- |
#!/bin/bash
set -xeuo pipefail
# Transforms /usr/lib/ostree-boot into a bootupd-compatible update payload
/usr/bin/bootupctl backend generate-update-metadata
# Enable migration to a static GRUB config
install -dm0755 /usr/lib/systemd/system/bootloader-update.service.d
cat > /usr/lib/systemd/system/bootloader-update.service.d/migrate-static-grub-config.conf << 'EOF'
[Service]
ExecStart=/usr/bin/bootupctl migrate-static-grub-config
EOF
echo "enable bootloader-update.service" >> /usr/lib/systemd/system-preset/80-iot.preset
# Turn permissive mode on for bootupd until all SELinux issues are fixed
semanage permissive --noreload --add bootupd_t

57
ci/validate Executable file
View file

@ -0,0 +1,57 @@
#!/usr/bin/python3
# Validate basic syntax of shell script and yaml.
import os
import stat
import subprocess
import yaml
validated=0
def openat(dirfd, name, mode='r'):
def opener(path, flags):
return os.open(path, flags, dir_fd=dirfd)
return open(name, mode, opener=opener)
def validate_shell(rootfd, name):
subprocess.check_call(['bash', '-n', name], preexec_fn=lambda: os.fchdir(rootfd))
global validated
validated +=1
for root, dirs, files, rootfd in os.fwalk('.'):
# Skip folders that do not include content to validate
for d in ['.git', '.github', 'repo', 'cache', 'tmp', 'logs', 'fedora-comps']:
if d in dirs:
dirs.remove(d)
for f in ['.gitlab-ci.yml']:
if f in files:
files.remove(f)
for name in files:
if name.endswith(('.yaml', '.yml')):
print("Validating:", name)
with open(os.open(name, dir_fd=rootfd, flags=os.O_RDONLY)) as f:
yaml.safe_load(f)
result = subprocess.run(['grep', '-RniEv', '^( )*[a-z#/-]|^( )*\\[|^$|^#', name], encoding='UTF-8',
preexec_fn=lambda: os.fchdir(rootfd))
if result.returncode == 0:
raise Exception("Found likely invalid indentation in YAML file: {}".format(name))
validated +=1
continue
elif name.endswith('.sh'):
print("Validating:", name)
validate_shell(rootfd, name)
continue
stbuf = os.lstat(name, dir_fd=rootfd)
if not stat.S_ISREG(stbuf.st_mode):
continue
if not stbuf.st_mode & stat.S_IXUSR:
continue
mimetype = subprocess.check_output(['file', '-b', '--mime-type', name], encoding='UTF-8',
preexec_fn=lambda: os.fchdir(rootfd)).strip()
if mimetype == 'text/x-shellscript':
print("Validating:", name)
validate_shell(rootfd, name)
print(f"Validated {validated} files")

12
composefs.yaml Normal file
View file

@ -0,0 +1,12 @@
# Enable composefs
# See: https://fedoraproject.org/wiki/Changes/ComposefsAtomicDesktops
# https://fedoraproject.org/wiki/Changes/ComposefsAtomicCoreOSIoT
postprocess:
- |
#!/usr/bin/env bash
set -xeuo pipefail
cat >> /usr/lib/ostree/prepare-root.conf << 'EOF'
[composefs]
enabled = yes
EOF

View file

@ -10,7 +10,7 @@ os_pretty_name = Fedora IoT
tree_name = docker-host
tree_file = %(os_name)s-%(tree_name)s.json
arch = x86_64
release = f40
release = f46
ref = %(os_name)s/rawhide/%(arch)s/%(tree_name)s
yum_baseurl = http://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/%(arch)s/os/
# lorax_additional_repos = http://127.0.0.1/fedora-iot/local-overrides

View file

@ -1,12 +1,12 @@
[fedora-40]
name=Fedora 40 - $basearch
[fedora-46]
name=Fedora 46 - $basearch
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/releases/40/Everything/$basearch/os/
metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-40&arch=$basearch
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/releases/46/Everything/$basearch/os/
metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-46&arch=$basearch
enabled=1
#metadata_expire=7d
repo_gpgcheck=0
type=rpm
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-40-$basearch
gpgkey=file:///usr/share/pki/rpm-gpg/RPM-GPG-KEY-fedora-46-$basearch
skip_if_unavailable=False

View file

@ -1,12 +1,17 @@
include:
- bootupd.yaml
# Enable composefs
- composefs.yaml
# Read only sysroot
- sysroot-ro.yaml
ref: fedora/rawhide/${basearch}/iot
repos: []
selinux: true
ima: true
tmp-is-dir: true
recommends: false
documentation: false
automatic_version_prefix: '40'
mutate-os-release: '40'
automatic_version_prefix: '46'
mutate-os-release: '46'
initramfs-args:
- "--no-hostonly"
- "--add"
@ -69,14 +74,18 @@ check-groups:
type: file
filename: group
packages:
# This list of packages should be kept in sync with
# the iot-commit definition is osbuild, as found here:
# https://github.com/osbuild/images/blob/0584c20b0c14a89e833b875252114ceff61805e8/pkg/distro/fedora/package_sets.go#L123
- fedora-release-iot
- fedora-iot-config
- aardvark-dns
- atheros-firmware
- attr
- authselect
- basesystem
- bash
- bash-completion
- bootc
- brcmfmac-firmware
- chrony
- clevis
@ -91,14 +100,16 @@ packages:
- criu-libs
- cryptsetup
- curl
- dbus-parsec
- dnsmasq
- dnf5
- dnf5-plugins
- dosfstools
- dracut-config-generic
- dracut-network
- e2fsprogs
- efibootmgr
- fdo-client
- fdo-owner-cli
- filesystem
- firewalld
- fwupd
- fwupd-efi
@ -111,15 +122,15 @@ packages:
- greenboot-default-health-checks
- gzip
- hostname
- ignition
- ignition-edge
- ima-evm-utils
- iproute
- iputils
- iwd
- iwlwifi-mvm-firmware
- kernel
- kernel-tools
- keyutils
- kmscon
- less
- libsss_sudo
- linux-firmware
@ -132,12 +143,11 @@ packages:
- openssl
- openssh-clients
- openssh-server
- parsec
- passt
- passt-selinux
- pinentry
- podman
- podman-plugins
- policycoreutils
- policycoreutils-python-utils
- polkit
- procps-ng
- realtek-firmware
@ -153,6 +163,7 @@ packages:
- sssd-client
- sudo
- systemd
- systemd-pam
- systemd-resolved
- tar
- tmux
@ -165,7 +176,6 @@ packages:
- wireless-regdb
- xfsprogs
- xz
- zezere-ignition
- zram-generator
- zram-generator-defaults
packages-aarch64:
@ -182,16 +192,14 @@ packages-x86_64:
default_target: multi-user.target
units:
- NetworkManager.service
- fdo-client-linuxapp.service
- fedora-iot-config-remote-fix.service
- firewalld.service
- sshd.service
- systemd-firstboot.service
- greenboot-grub2-set-counter.service
- greenboot-grub2-set-success.service
- greenboot-healthcheck.service
- greenboot-rpm-ostree-grub2-check-fallback.service
- greenboot-status.service
- greenboot-task-runner.service
- parsec.service
- dbus-parsec.service
- zezere_ignition.timer
- zezere_ignition_banner.service

15
fedora-iot-bootc.yaml Normal file
View file

@ -0,0 +1,15 @@
releasever: rawhide
variables:
distro: "fedora-iot"
repos:
- fedora-rawhide
metadata:
name: fedora-iot-bootc-base
summary: Fedora IoT bootc base image
include:
- fedora-bootc-base/manifest.yaml
- fedora-bootc-base/kernel.yaml

View file

@ -1,4 +1,5 @@
include: fedora-iot-base.yaml
ref: fedora/rawhide/${basearch}/iot
repos:
- fedora-40
- fedora-46

6
fedora-rawhide.repo Normal file
View file

@ -0,0 +1,6 @@
[fedora-rawhide]
name=Fedora rawhide $basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=rawhide&arch=$basearch
enabled=1
gpgcheck=1
metadata_expire=1d

156
justfile Normal file
View file

@ -0,0 +1,156 @@
# This is a justfile. See https://github.com/casey/just
# This is only used for local development. The builds made on the Fedora
# infrastructure are run via Pungi in a Koji runroot.
# Set a default for some recipes
default_variant := "fedora-iot"
default_arch := "default"
# Current default in Pungi
force_nocache := "true"
# Just doesn't have a native dict type, but quoted bash dictionary works fine
pretty_names := '(
[fedora-iot]="IoT"
)'
# Default is to only validate the manifests
all: validate
# Basic validation to make sure the manifests are not completely broken
validate:
./ci/validate
# Output the processed manifest for a given variant (defaults to Silverblue)
manifest variant=default_variant:
#!/bin/bash
set -euo pipefail
rpm-ostree compose tree --print-only --repo=repo {{variant}}.yaml
# Perform dependency resolution for a given variant (defaults to Silverblue)
compose-dry-run variant=default_variant:
#!/bin/bash
set -euxo pipefail
mkdir -p repo cache logs
if [[ ! -f "repo/config" ]]; then
pushd repo > /dev/null || exit 1
ostree init --repo . --mode=bare-user
popd > /dev/null || exit 1
fi
rpm-ostree compose tree --unified-core --repo=repo --dry-run {{variant}}.yaml
# Alias/shortcut for compose-image command
compose variant=default_variant: (compose-image variant)
# Compose a variant using the legacy non container path (defaults to Silverblue)
compose-legacy variant=default_variant:
#!/bin/bash
set -euxo pipefail
declare -A pretty_names={{pretty_names}}
variant={{variant}}
variant_pretty=${pretty_names[$variant]-}
if [[ -z $variant_pretty ]]; then
echo "Unknown variant"
exit 1
fi
./ci/validate > /dev/null || (echo "Failed manifest validation" && exit 1)
mkdir -p repo cache logs
if [[ ! -f "repo/config" ]]; then
pushd repo > /dev/null || exit 1
ostree init --repo . --mode=bare-user
popd > /dev/null || exit 1
fi
# Set option to reduce fsync for transient builds
ostree --repo=repo config set 'core.fsync' 'false'
buildid="$(date '+%Y%m%d.0')"
timestamp="$(date --iso-8601=sec)"
echo "${buildid}" > .buildid
version="$(rpm-ostree compose tree --print-only --repo=repo ${variant}.yaml | jq -r '."mutate-os-release"')"
echo "Composing ${variant_pretty} ${version}.${buildid} ..."
ARGS="--repo=repo --cachedir=cache"
ARGS+=" --unified-core"
if [[ {{force_nocache}} == "true" ]]; then
ARGS+=" --force-nocache"
fi
CMD="rpm-ostree"
if [[ ${EUID} -ne 0 ]]; then
CMD="sudo rpm-ostree"
fi
${CMD} compose tree ${ARGS} \
--add-metadata-string="version=${variant_pretty} ${version}.${buildid}" \
"${variant}.yaml" \
|& tee "logs/${variant}_${version}_${buildid}.${timestamp}.log"
if [[ ${EUID} -ne 0 ]]; then
sudo chown --recursive "$(id --user --name):$(id --group --name)" repo cache
fi
ostree summary --repo=repo --update
# Compose an Ostree Native Container OCI image
compose-image variant=default_variant:
#!/bin/bash
set -euxo pipefail
declare -A pretty_names={{pretty_names}}
variant={{variant}}
variant_pretty=${pretty_names[$variant]-}
if [[ -z $variant_pretty ]]; then
echo "Unknown variant"
exit 1
fi
./ci/validate > /dev/null || (echo "Failed manifest validation" && exit 1)
mkdir -p repo cache
if [[ ! -f "repo/config" ]]; then
pushd repo > /dev/null || exit 1
ostree init --repo . --mode=bare-user
popd > /dev/null || exit 1
fi
# Set option to reduce fsync for transient builds
ostree --repo=repo config set 'core.fsync' 'false'
buildid="$(date '+%Y%m%d.0')"
timestamp="$(date --iso-8601=sec)"
echo "${buildid}" > .buildid
version="$(rpm-ostree compose tree --print-only --repo=repo ${variant}.yaml | jq -r '."mutate-os-release"')"
echo "Composing ${variant_pretty} ${version}.${buildid} ..."
ARGS="--cachedir=cache --initialize"
if [[ {{force_nocache}} == "true" ]]; then
ARGS+=" --force-nocache"
fi
# To debug with gdb, use: gdb --args ...
CMD="rpm-ostree"
if [[ ${EUID} -ne 0 ]]; then
CMD="sudo rpm-ostree"
fi
${CMD} compose image ${ARGS} \
--label="quay.expires-after=4w" \
"${variant}.yaml" \
"${variant}.ociarchive"
# Clean up everything
clean-all:
just clean-repo
just clean-cache
# Only clean the ostree repo
clean-repo:
rm -rf ./repo
# Only clean the package and repo caches
clean-cache:
rm -rf ./cache

15
sysroot-ro.yaml Normal file
View file

@ -0,0 +1,15 @@
# Set up default root config to mount sysroot as read only
# https://fedoraproject.org/wiki/Changes/Silverblue_Kinoite_readonly_sysroot
# See: https://gitlab.com/fedora/bootc/base-images/-/blob/main/tier-0/ostree.yaml
# See: https://github.com/fedora-iot/iot-distro/issues/81
postprocess:
- |
#!/usr/bin/env bash
set -xeuo pipefail
install -dm 0755 -o 0 -g 0 /usr/lib/ostree
cat >> /usr/lib/ostree/prepare-root.conf << 'EOF'
[sysroot]
readonly = true
EOF

View file

@ -18,7 +18,7 @@ done
# Remove loader directory causing issues in Anaconda in unified core mode
# Will be obsolete once we start using bootupd
# See - https://pagure.io/workstation-ostree-config/pull-request/344
# See - https://forge.fedoraproject.org/atomic-desktops/config/pulls/344
rm -rf /usr/lib/ostree-boot/loader
# Undo RPM scripts enabling units; we want the presets to be canonical