From 14900734d0077a109ef76d3062c70ac4540cc2f7 Mon Sep 17 00:00:00 2001 From: renner <80410025+renner0e@users.noreply.github.com> Date: Sun, 9 Aug 2026 21:11:44 +0200 Subject: [PATCH] refactor: repurpose build.sh as build preparation (#2701) * refactor: repurpose build.sh as build preparation It currently does too many things, let's split it up. This needs to be done as we want to move away from a system that copies (also overrides) files from fedora RPMs and then may remove said rpms, resulting in removing our changes, which of course defeats the entire point. A disadvantage this has is that we need to be more mindful and disciplined of when things are needed during the build. Currently we actually do not need any system_files we copy in the stage where we are installing packages/have network access. If we do at some point we will probably either inline files in build-prep.sh or have a 2nd directory with files strictly needed for the build. This is why we can copy all the files to the system after that, just before systemd units get activated, initramfs gets generated, general things we can do offline after we have installed packages are done. Resolves: https://github.com/ublue-os/aurora/issues/2687 * remove useless comment * same treatment for DX * remove unused DX specific version logic We don't use this, we have branches now. * move sysctl before docker install --- Containerfile.in | 11 +++--- build_scripts/base/01-packages.sh | 5 +++ build_scripts/base/03-fetch.sh | 7 +--- build_scripts/base/16-override-install.sh | 10 +++--- build_scripts/dx/00-dx.sh | 24 +++++++++---- build_scripts/shared/build-dx.sh | 25 -------------- build_scripts/shared/build-prep.sh | 14 ++++++++ build_scripts/shared/build.sh | 41 ----------------------- build_scripts/shared/chunkah-xattr.sh | 26 ++++++++++++++ 9 files changed, 74 insertions(+), 89 deletions(-) delete mode 100755 build_scripts/shared/build-dx.sh create mode 100755 build_scripts/shared/build-prep.sh delete mode 100755 build_scripts/shared/build.sh create mode 100755 build_scripts/shared/chunkah-xattr.sh diff --git a/Containerfile.in b/Containerfile.in index 2063d1b1..592cf249 100644 --- a/Containerfile.in +++ b/Containerfile.in @@ -31,7 +31,6 @@ COPY --from=common /wallpapers /system_files/shared # /* https://github.com/ublue-os/brew */ COPY --from=brew /system_files /system_files/shared -# /* Overwrite files from common if necessary */ COPY /system_files /system_files # /* aurora image section */ @@ -51,7 +50,6 @@ ARG IMAGE_FLAVOR="" # /* so ghcurl wrapper is available to all later RUNs */ ENV PATH="/tmp/scripts/helpers:${PATH}" -# /* Copy files from common/from system_files */ # /* Install Packages, miscellaneous things that need a network */ # /* aurora:latest no zfs or nvidia */ @@ -64,7 +62,7 @@ RUN --mount=type=tmpfs,dst=/boot \ --mount=type=bind,from=akmods,src=/rpms/common,dst=/tmp/rpms/common \ --mount=type=bind,from=akmods,src=/rpms/kmods,dst=/tmp/rpms/kmods \ --mount=type=secret,id=GITHUB_TOKEN \ - /ctx/build_scripts/shared/build.sh && \ + /ctx/build_scripts/shared/build-prep.sh && \ /ctx/build_scripts/base/01-packages.sh && \ /ctx/build_scripts/base/02-install-common-kernel-akmods.sh && \ /ctx/build_scripts/base/03-fetch.sh @@ -81,7 +79,7 @@ RUN --mount=type=tmpfs,dst=/boot \ --mount=type=bind,from=akmods,src=/rpms/kmods,dst=/tmp/rpms/kmods \ --mount=type=bind,from=akmods-zfs,src=/rpms/kmods/zfs,dst=/tmp/rpms/kmods/zfs \ --mount=type=secret,id=GITHUB_TOKEN \ - /ctx/build_scripts/shared/build.sh && \ + /ctx/build_scripts/shared/build-prep.sh && \ /ctx/build_scripts/base/01-packages.sh && \ /ctx/build_scripts/base/02-install-common-kernel-akmods.sh && \ /ctx/build_scripts/base/zfs.sh && \ @@ -99,7 +97,7 @@ RUN --mount=type=tmpfs,dst=/boot \ --mount=type=bind,from=akmods,src=/rpms/kmods,dst=/tmp/rpms/kmods \ --mount=type=bind,from=akmods-nvidia-open,src=/rpms,dst=/tmp/rpms/nvidia \ --mount=type=secret,id=GITHUB_TOKEN \ - /ctx/build_scripts/shared/build.sh && \ + /ctx/build_scripts/shared/build-prep.sh && \ /ctx/build_scripts/base/01-packages.sh && \ /ctx/build_scripts/base/02-install-common-kernel-akmods.sh && \ /ctx/build_scripts/base/03-fetch.sh && \ @@ -118,7 +116,7 @@ RUN --mount=type=tmpfs,dst=/boot \ --mount=type=bind,from=akmods-nvidia-open,src=/rpms,dst=/tmp/rpms/nvidia \ --mount=type=bind,from=akmods-zfs,src=/rpms/kmods/zfs,dst=/tmp/rpms/kmods/zfs \ --mount=type=secret,id=GITHUB_TOKEN \ - /ctx/build_scripts/shared/build.sh && \ + /ctx/build_scripts/shared/build-prep.sh && \ /ctx/build_scripts/base/01-packages.sh && \ /ctx/build_scripts/base/02-install-common-kernel-akmods.sh && \ /ctx/build_scripts/base/03-fetch.sh && \ @@ -136,6 +134,7 @@ RUN --network=none \ /ctx/build_scripts/base/19-initramfs.sh && \ /ctx/build_scripts/shared/validate-repos.sh && \ /ctx/build_scripts/shared/clean-stage.sh && \ + /ctx/build_scripts/shared/chunkah-xattr.sh && \ /ctx/build_scripts/base/20-tests.sh CMD ["/sbin/init"] diff --git a/build_scripts/base/01-packages.sh b/build_scripts/base/01-packages.sh index 4eabe7c4..5d23d7af 100755 --- a/build_scripts/base/01-packages.sh +++ b/build_scripts/base/01-packages.sh @@ -218,4 +218,9 @@ if [[ "${IMAGE_FLAVOR}" == "dx" ]]; then /ctx/build_scripts/dx/00-dx.sh fi +# Keep *-logos in RPM DB for downstream package installations +# We are not allowed to ship an empty fedora-logos package +dnf -y swap fedora-logos generic-logos +rpm --erase --nodeps --nodb generic-logos + echo "::endgroup::" diff --git a/build_scripts/base/03-fetch.sh b/build_scripts/base/03-fetch.sh index 10776e4e..0a6877b9 100755 --- a/build_scripts/base/03-fetch.sh +++ b/build_scripts/base/03-fetch.sh @@ -10,10 +10,9 @@ curl --retry 3 -Lo /etc/flatpak/remotes.d/flathub.flatpakrepo https://dl.flathub # 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 +mkdir -p /usr/share/ublue-os ghcurl https://raw.githubusercontent.com/ublue-os/countme/main/badge-endpoints/aurora.json | jq -r ".message" > /usr/share/ublue-os/fastfetch-user-count # bazaar weekly downloads used for fastfetch @@ -27,19 +26,15 @@ ghcurl "https://github.com/ryanoasis/nerd-fonts/releases/latest/download/NerdFon 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 -setfattr -n user.update-interval -v "yearly" /usr/share/fonts/nerd-fonts/NerdFontsSymbolsOnly # 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::" diff --git a/build_scripts/base/16-override-install.sh b/build_scripts/base/16-override-install.sh index 2fe84bb8..a8fa72fc 100755 --- a/build_scripts/base/16-override-install.sh +++ b/build_scripts/base/16-override-install.sh @@ -4,6 +4,9 @@ echo "::group:: ===$(basename "$0")===" set -eoux pipefail +# Copy Files to Container +rsync -rvKl /ctx/system_files/shared/ / + # Footgun, See: https://github.com/ublue-os/main/issues/598 rm -f /usr/bin/chsh /usr/bin/lchsh @@ -17,10 +20,6 @@ ln -s "/usr/share/fonts/google-noto-sans-cjk-fonts" "/usr/share/fonts/noto-cjk" # KDE Documentation is available online rm -rf /usr/share/doc/HTML -# ###### -# BASE IMAGE CHANGES -# ###### - rm -f /usr/lib64/qt6/plugins/kf6/krunner/krunner_appstream.so # Use Bazaar for Flatpak refs @@ -38,4 +37,7 @@ setsebool -P samba_export_all_ro=1 setsebool -P samba_export_all_rw=1 sed -i '/^\[homes\]/,/^\[/{/^\[homes\]/d;/^\[/!d}' /etc/samba/smb.conf +# So we can bind offline docs to a shortcut +cp /usr/share/applications/dev.getaurora.offline-docs.desktop /usr/share/kglobalaccel/ + echo "::endgroup::" diff --git a/build_scripts/dx/00-dx.sh b/build_scripts/dx/00-dx.sh index 9d08380c..726a1234 100755 --- a/build_scripts/dx/00-dx.sh +++ b/build_scripts/dx/00-dx.sh @@ -4,6 +4,9 @@ echo "::group:: ===$(basename "$0")===" set -ouex pipefail +# Apply IP Forwarding before installing Docker to prevent messing with LXC networking +sysctl -p + # Load secure COPR helpers # shellcheck source=build_scripts/shared/copr-helpers.sh source /ctx/build_scripts/shared/copr-helpers.sh @@ -105,13 +108,6 @@ copr_install_isolated "ublue-os/packages" "ublue-os-libvirt-workarounds" # DX packages to exclude - common to all versions EXCLUDED_PACKAGES=() -# Version-specific package exclusions for DX -case "$FEDORA_MAJOR_VERSION" in - 43) - EXCLUDED_PACKAGES+=() - ;; -esac - # Remove excluded packages if they are installed if [[ "${#EXCLUDED_PACKAGES[@]}" -gt 0 ]]; then readarray -t INSTALLED_EXCLUDED < <(rpm -qa --queryformat='%{NAME}\n' "${EXCLUDED_PACKAGES[@]}" 2>/dev/null || true) @@ -122,6 +118,20 @@ if [[ "${#EXCLUDED_PACKAGES[@]}" -gt 0 ]]; then fi fi +rsync -rvK /ctx/system_files/dx/ / + +# Load iptable_nat module for docker-in-docker. +# See: +# - https://github.com/ublue-os/bluefin/issues/2365 +# - https://github.com/devcontainers/features/issues/1235 +mkdir -p /etc/modules-load.d +tee /etc/modules-load.d/ip_tables.conf <> /usr/share/kde-settings/kde-profile/default/xdg/kcm-about-distrorc + # Enable DX services if rpm -q docker-ce >/dev/null; then systemctl enable docker.socket diff --git a/build_scripts/shared/build-dx.sh b/build_scripts/shared/build-dx.sh deleted file mode 100755 index 5c474726..00000000 --- a/build_scripts/shared/build-dx.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/bash - -set -xeou pipefail - -echo "::group:: Copy Files" - -# Copy Files to Image -rsync -rvK /ctx/system_files/dx/ / - -echo "::endgroup::" - -# Apply IP Forwarding before installing Docker to prevent messing with LXC networking -sysctl -p - -# Load iptable_nat module for docker-in-docker. -# See: -# - https://github.com/ublue-os/bluefin/issues/2365 -# - https://github.com/devcontainers/features/issues/1235 -mkdir -p /etc/modules-load.d -tee /etc/modules-load.d/ip_tables.conf <> /usr/share/kde-settings/kde-profile/default/xdg/kcm-about-distrorc diff --git a/build_scripts/shared/build-prep.sh b/build_scripts/shared/build-prep.sh new file mode 100755 index 00000000..27c8e23f --- /dev/null +++ b/build_scripts/shared/build-prep.sh @@ -0,0 +1,14 @@ +# This script should generally set up the build so we can move on to start installing packages + +#!/usr/bin/bash + +set -eoux pipefail + +# Speeds up local builds and workaround network flakes, mainly for COPR and negativo +cp /etc/dnf/dnf.conf /etc/dnf/dnf.conf.bak +dnf config-manager setopt keepcache=1 timeout=60 + +mkdir -p /tmp/scripts/helpers +install -Dm0755 /ctx/build_scripts/shared/utils/ghcurl /tmp/scripts/helpers/ghcurl + +echo "::endgroup::" diff --git a/build_scripts/shared/build.sh b/build_scripts/shared/build.sh deleted file mode 100755 index eeb22046..00000000 --- a/build_scripts/shared/build.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/bash - -set -eoux pipefail - -echo "::group:: Copy Files" - -# Speeds up local builds and workaround network flakes, mainly for COPR and negativo -cp /etc/dnf/dnf.conf /etc/dnf/dnf.conf.bak -dnf config-manager setopt keepcache=1 timeout=60 - -# We need to remove this package here because lots of files we add from `{projectbluefin,get-aurora-dev}/common` override the rpm files -# they go away when you do dnf remove -# Keep *-logos in RPM DB for downstream package installations -# We are not allowed to ship an empty fedora-logos package -dnf -y swap fedora-logos generic-logos -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.update-interval -v "monthly" /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/*.jxl -setfattr -n user.update-interval -v "quarterly" /etc/bazaar/*.jxl - -setfattr -n user.component -v "aurora-plasma-theme" /usr/share/plasma/look-and-feel/dev.getaurora.aurora{,light}.desktop -setfattr -n user.update-interval -v "quarterly" /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_scripts/shared/build-dx.sh -fi - -mkdir -p /tmp/scripts/helpers -install -Dm0755 /ctx/build_scripts/shared/utils/ghcurl /tmp/scripts/helpers/ghcurl - -echo "::endgroup::" diff --git a/build_scripts/shared/chunkah-xattr.sh b/build_scripts/shared/chunkah-xattr.sh new file mode 100755 index 00000000..2fd36e11 --- /dev/null +++ b/build_scripts/shared/chunkah-xattr.sh @@ -0,0 +1,26 @@ +# See: https://github.com/coreos/chunkah#customizing-the-layers +#!/usr/bin/env bash + +set -eoux pipefail + +setfattr -n user.component -v "aurora-wallpapers" /usr/share/backgrounds/aurora +setfattr -n user.update-interval -v "monthly" /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/*.jxl +setfattr -n user.update-interval -v "quarterly" /etc/bazaar/*.jxl + +setfattr -n user.component -v "aurora-plasma-theme" /usr/share/plasma/look-and-feel/dev.getaurora.aurora{,light}.desktop +setfattr -n user.update-interval -v "quarterly" /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 + +setfattr -n user.component -v "aurora-offline-docs" /usr/share/doc/aurora/aurora.pdf + +setfattr -n user.component -v "nerdfonts" /usr/share/fonts/nerd-fonts/NerdFontsSymbolsOnly +setfattr -n user.update-interval -v "yearly" /usr/share/fonts/nerd-fonts/NerdFontsSymbolsOnly + +setfattr -n user.component -v "aurora-config" /usr/lib/systemd/system-generators/coreos-sulogin-force-generator + +setfattr -n user.component -v "aurora-config" /usr/share/bash-preexec