From 47112eb3cd8e9351dc7ecf4f3874bb87ca387fe4 Mon Sep 17 00:00:00 2001 From: Benjamin Sherman Date: Mon, 3 Feb 2025 14:58:14 -0600 Subject: [PATCH] chore: un-cliwrap and use dnf5 instead of rpm-ostree (again) (#2143) Co-authored-by: m2 <69128853+m2Giles@users.noreply.github.com> --- Containerfile | 6 +- build_files/base/01-build-fix.sh | 56 ------------------- build_files/base/02-install-copr-repos.sh | 8 +-- build_files/base/03-install-kernel-akmods.sh | 21 ++++--- build_files/base/04-packages.sh | 11 ++-- build_files/base/05-override-install.sh | 38 +++++-------- build_files/base/09-hwe-additions.sh | 12 ++-- build_files/base/17-cleanup.sh | 6 +- build_files/base/19-initramfs.sh | 2 +- build_files/dx/01-install-copr-repos-dx.sh | 22 +++----- build_files/dx/02-install-kernel-akmods-dx.sh | 14 +++-- build_files/dx/03-packages-dx.sh | 11 ++-- build_files/dx/09-cleanup-dx.sh | 19 ++++--- build_files/shared/build-base.sh | 26 +++++++-- build_files/shared/clean-stage.sh | 6 +- 15 files changed, 111 insertions(+), 147 deletions(-) delete mode 100755 build_files/base/01-build-fix.sh diff --git a/Containerfile b/Containerfile index 05409ee6368..df1c18a01fe 100644 --- a/Containerfile +++ b/Containerfile @@ -20,7 +20,8 @@ ARG UBLUE_IMAGE_TAG="stable" ARG VERSION="" # Build, cleanup, commit. -RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ +RUN --mount=type=cache,dst=/var/cache/libdnf5 \ + --mount=type=cache,dst=/var/cache/rpm-ostree \ --mount=type=bind,from=ctx,source=/,target=/ctx \ /ctx/build_files/shared/build-base.sh @@ -38,6 +39,7 @@ ARG UBLUE_IMAGE_TAG="stable" ARG VERSION="" # Build, Clean-up, Commit -RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ +RUN --mount=type=cache,dst=/var/cache/libdnf5 \ + --mount=type=cache,dst=/var/cache/rpm-ostree \ --mount=type=bind,from=ctx,source=/,target=/ctx \ /ctx/build_files/shared/build-dx.sh diff --git a/build_files/base/01-build-fix.sh b/build_files/base/01-build-fix.sh deleted file mode 100755 index a9bec6980f9..00000000000 --- a/build_files/base/01-build-fix.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/bash - -echo "::group:: ===$(basename "$0")===" - -set -eoux pipefail - -# This script provides fixes to packages known to have caused build skew. -# It works by force replacing packages on the FROM image with current -# packages from fedora update repos. - -repos=( - fedora-updates.repo - fedora-updates-archive.repo -) - -for repo in "${repos[@]}"; do - if [[ "$(grep -c "enabled=1" /etc/yum.repos.d/"${repo}")" -eq 0 ]]; then - sed -i "0,/enabled=0/{s/enabled=0/enabled=1/}" /etc/yum.repos.d/"${repo}" - fi -done - -rpm-ostree override replace \ - --experimental \ - --from repo=updates \ - glib2 \ - || true - -rpm-ostree override replace \ - --experimental \ - --from repo=updates \ - glibc \ - glibc-common \ - glibc-all-langpacks \ - glibc-gconv-extra \ - || true - -rpm-ostree override replace \ - --experimental \ - --from repo=updates \ - libX11 \ - libX11-common \ - libX11-xcb \ - || true - -rpm-ostree override replace \ - --experimental \ - --from repo=updates \ - elfutils-libelf \ - elfutils-libs \ - || true - -rpm-ostree override remove \ - glibc32 \ - || true - -echo "::endgroup::" diff --git a/build_files/base/02-install-copr-repos.sh b/build_files/base/02-install-copr-repos.sh index 16ec01485a1..6f2782c8e3c 100755 --- a/build_files/base/02-install-copr-repos.sh +++ b/build_files/base/02-install-copr-repos.sh @@ -5,14 +5,12 @@ echo "::group:: ===$(basename "$0")===" set -eoux pipefail # Add Staging repo -curl --retry 3 -Lo /etc/yum.repos.d/ublue-os-staging-fedora-"$(rpm -E %fedora)".repo \ - https://copr.fedorainfracloud.org/coprs/ublue-os/staging/repo/fedora-"$(rpm -E %fedora)"/ublue-os-staging-fedora-"$(rpm -E %fedora)".repo +dnf5 -y copr enable ublue-os/staging # Add Switcheroo Repo -curl --retry 3 -Lo /etc/yum.repos.d/_copr_sentry-switcheroo-control_discrete.repo \ - https://copr.fedorainfracloud.org/coprs/sentry/switcheroo-control_discrete/repo/fedora-"$(rpm -E %fedora)"/sentry-switcheroo-control_discrete-fedora-"$(rpm -E %fedora)".repo +dnf5 -y copr enable sentry/switcheroo-control_discrete # Add Nerd Fonts Repo -curl --retry 3 -Lo /etc/yum.repos.d/_copr_che-nerd-fonts-"$(rpm -E %fedora)".repo https://copr.fedorainfracloud.org/coprs/che/nerd-fonts/repo/fedora-"$(rpm -E %fedora)"/che-nerd-fonts-fedora-"$(rpm -E %fedora)".repo +dnf5 -y copr enable che/nerd-fonts echo "::endgroup::" diff --git a/build_files/base/03-install-kernel-akmods.sh b/build_files/base/03-install-kernel-akmods.sh index 66d67b23415..6f33a9e60a6 100755 --- a/build_files/base/03-install-kernel-akmods.sh +++ b/build_files/base/03-install-kernel-akmods.sh @@ -17,11 +17,17 @@ tar -xvzf /tmp/kernel-rpms/"$KERNEL_TARGZ" -C / mv /tmp/rpms/* /tmp/kernel-rpms/ # Install Kernel -rpm-ostree install \ +dnf5 -y install \ /tmp/kernel-rpms/kernel-[0-9]*.rpm \ /tmp/kernel-rpms/kernel-core-*.rpm \ /tmp/kernel-rpms/kernel-modules-*.rpm +# TODO: Figure out why akmods cache is pulling in akmods/kernel-devel +dnf5 -y install \ + /tmp/kernel-rpms/kernel-devel-*.rpm + +dnf5 versionlock add kernel kernel-devel kernel-devel-matched kernel-core kernel-modules kernel-modules-core kernel-modules-extra + # Fetch Common AKMODS skopeo copy --retry-times 3 docker://ghcr.io/ublue-os/akmods:"${AKMODS_FLAVOR}"-"$(rpm -E %fedora)"-"${KERNEL}" dir:/tmp/akmods AKMODS_TARGZ=$(jq -r '.layers[].digest' < /tmp/akmods/manifest.json | cut -d : -f 2) @@ -29,20 +35,21 @@ tar -xvzf /tmp/akmods/"$AKMODS_TARGZ" -C /tmp/ mv /tmp/rpms/* /tmp/akmods/ # Everyone +# NOTE: we won't use dnf5 copr plugin for ublue-os/akmods until our upstream provides the COPR standard naming sed -i 's@enabled=0@enabled=1@g' /etc/yum.repos.d/_copr_ublue-os-akmods.repo -rpm-ostree install \ +dnf5 -y install \ /tmp/akmods/kmods/*xone*.rpm \ /tmp/akmods/kmods/*xpadneo*.rpm \ /tmp/akmods/kmods/*openrazer*.rpm \ /tmp/akmods/kmods/*framework-laptop*.rpm # RPMFUSION Dependent AKMODS -rpm-ostree install \ +dnf5 -y install \ https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-"$(rpm -E %fedora)".noarch.rpm \ https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-"$(rpm -E %fedora)".noarch.rpm -rpm-ostree install \ +dnf5 -y install \ v4l2loopback /tmp/akmods/kmods/*v4l2loopback*.rpm -rpm-ostree uninstall rpmfusion-free-release rpmfusion-nonfree-release +dnf5 -y remove rpmfusion-free-release rpmfusion-nonfree-release # Nvidia AKMODS if [[ "${IMAGE_NAME}" =~ nvidia ]]; then @@ -57,7 +64,7 @@ if [[ "${IMAGE_NAME}" =~ nvidia ]]; then mv /tmp/rpms/* /tmp/akmods-rpms/ # Install Nvidia RPMs - curl -Lo /tmp/nvidia-install.sh https://raw.githubusercontent.com/ublue-os/hwe/main/nvidia-install.sh + curl -Lo /tmp/nvidia-install.sh https://raw.githubusercontent.com/ublue-os/hwe/b3a3dbddf4af81cfbfa7526c1918c9b9f014f86b/nvidia-install.sh # Change when nvidia-install.sh updates chmod +x /tmp/nvidia-install.sh IMAGE_NAME="${BASE_IMAGE_NAME}" RPMFUSION_MIRROR="" /tmp/nvidia-install.sh rm -f /usr/share/vulkan/icd.d/nouveau_icd.*.json @@ -85,7 +92,7 @@ if [[ ${AKMODS_FLAVOR} =~ coreos ]]; then ) # Install - rpm-ostree install "${ZFS_RPMS[@]}" + dnf5 -y install "${ZFS_RPMS[@]}" # Depmod and autoload depmod -a -v "${KERNEL}" diff --git a/build_files/base/04-packages.sh b/build_files/base/04-packages.sh index 48e13ca4cbc..1c4bd830922 100755 --- a/build_files/base/04-packages.sh +++ b/build_files/base/04-packages.sh @@ -28,14 +28,15 @@ fi # simple case to install where no packages need excluding if [[ "${#INCLUDED_PACKAGES[@]}" -gt 0 && "${#INSTALLED_EXCLUDED_PACKAGES[@]}" -eq 0 ]]; then - rpm-ostree install \ + dnf5 -y install \ ${INCLUDED_PACKAGES[@]} # install/excluded packages both at same time elif [[ "${#INCLUDED_PACKAGES[@]}" -gt 0 && "${#INSTALLED_EXCLUDED_PACKAGES[@]}" -gt 0 ]]; then - rpm-ostree override remove \ - ${INSTALLED_EXCLUDED_PACKAGES[@]} \ - $(printf -- "--install=%s " ${INCLUDED_PACKAGES[@]}) + dnf5 -y remove \ + ${INSTALLED_EXCLUDED_PACKAGES[@]} && \ + dnf5 -y install \ + ${INCLUDED_PACKAGES[@]} else echo "No packages to install." fi @@ -48,7 +49,7 @@ fi # remove any excluded packages which are still present on image if [[ "${#INSTALLED_EXCLUDED_PACKAGES[@]}" -gt 0 ]]; then - rpm-ostree override remove \ + dnf5 -y remove \ ${INSTALLED_EXCLUDED_PACKAGES[@]} fi diff --git a/build_files/base/05-override-install.sh b/build_files/base/05-override-install.sh index 5a6c7230418..2a6b87d0317 100755 --- a/build_files/base/05-override-install.sh +++ b/build_files/base/05-override-install.sh @@ -5,36 +5,28 @@ echo "::group:: ===$(basename "$0")===" set -eoux pipefail # Patched shells -rpm-ostree override replace \ ---experimental \ ---from repo=copr:copr.fedorainfracloud.org:ublue-os:staging \ - gnome-shell +dnf5 -y swap \ +--repo=copr:copr.fedorainfracloud.org:ublue-os:staging \ + gnome-shell gnome-shell # GNOME Triple Buffering if [[ "${BASE_IMAGE_NAME}" =~ silverblue && "${FEDORA_MAJOR_VERSION}" -lt "41" ]]; then - rpm-ostree override replace \ - --experimental \ - --from repo=copr:copr.fedorainfracloud.org:ublue-os:staging \ - mutter \ - mutter-common + dnf5 -y swap \ + --repo=copr:copr.fedorainfracloud.org:ublue-os:staging \ + mutter mutter fi # Fix for ID in fwupd -rpm-ostree override replace \ - --experimental \ - --from repo=copr:copr.fedorainfracloud.org:ublue-os:staging \ - fwupd \ - fwupd-plugin-flashrom \ - fwupd-plugin-modem-manager \ - fwupd-plugin-uefi-capsule-data +dnf5 -y swap \ + --repo=copr:copr.fedorainfracloud.org:ublue-os:staging \ + fwupd fwupd # Switcheroo patch -rpm-ostree override replace \ - --experimental \ - --from repo=copr:copr.fedorainfracloud.org:sentry:switcheroo-control_discrete \ - switcheroo-control +dnf5 -y swap \ + --repo=copr:copr.fedorainfracloud.org:sentry:switcheroo-control_discrete \ + switcheroo-control switcheroo-control -rm /etc/yum.repos.d/_copr_sentry-switcheroo-control_discrete.repo +dnf5 -y copr remove sentry/switcheroo-control_discrete # Starship Shell Prompt curl --retry 3 -Lo /tmp/starship.tar.gz "https://github.com/starship/starship/releases/latest/download/starship-x86_64-unknown-linux-gnu.tar.gz" @@ -47,7 +39,7 @@ echo 'eval "$(starship init bash)"' >> /etc/bashrc pip install --prefix=/usr topgrade # Install ublue-update -- breaks with packages.json due to missing topgrade -rpm-ostree install ublue-update +dnf5 -y install ublue-update # Required for bluefin faces to work without conflicting with a ton of packages rm -f /usr/share/pixmaps/faces/* || echo "Expected directory deletion to fail" @@ -59,7 +51,7 @@ HARDCODED_RPM_MONTH="12" sed -i "/picture-uri/ s/${HARDCODED_RPM_MONTH}/$(date +%m)/" "/usr/share/glib-2.0/schemas/zz0-bluefin-modifications.gschema.override" glib-compile-schemas /usr/share/glib-2.0/schemas -rpm-ostree override remove fedora-logos --install=bluefin-logos +dnf5 -y swap fedora-logos bluefin-logos # Consolidate Just Files find /tmp/just -iname '*.just' -exec printf "\n\n" \; -exec cat {} \; >> /usr/share/ublue-os/just/60-custom.just diff --git a/build_files/base/09-hwe-additions.sh b/build_files/base/09-hwe-additions.sh index 8df837f6bec..8b72f13691b 100755 --- a/build_files/base/09-hwe-additions.sh +++ b/build_files/base/09-hwe-additions.sh @@ -37,15 +37,15 @@ SURFACE_PACKAGES=( pipewire-plugin-libcamera ) -rpm-ostree install \ +dnf5 -y install \ "${ASUS_PACKAGES[@]}" \ "${SURFACE_PACKAGES[@]}" -rpm-ostree override remove \ - libwacom \ - libwacom-data \ - --install libwacom-surface \ - --install libwacom-surface-data +dnf5 -y swap \ + libwacom-data libwacom-surface-data + +dnf5 -y swap \ + libwacom libwacom-surface tee /usr/lib/modules-load.d/ublue-surface.conf << EOF # Only on AMD models diff --git a/build_files/base/17-cleanup.sh b/build_files/base/17-cleanup.sh index ec43fce1f45..2b8656d4391 100755 --- a/build_files/base/17-cleanup.sh +++ b/build_files/base/17-cleanup.sh @@ -31,8 +31,10 @@ rm -f /etc/xdg/autostart/solaar.desktop sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/negativo17-fedora-multimedia.repo sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/tailscale.repo sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/charm.repo -sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/ublue-os-staging-fedora-"${FEDORA_MAJOR_VERSION}".repo -sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_che-nerd-fonts-"${FEDORA_MAJOR_VERSION}".repo +dnf5 -y copr disable ublue-os/staging +dnf5 -y copr disable che/nerd-fonts +dnf5 -y copr disable phracek/PyCharm +# NOTE: we won't use dnf5 copr plugin for ublue-os/akmods until our upstream provides the COPR standard naming sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_ublue-os-akmods.repo sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/fedora-cisco-openh264.repo for i in /etc/yum.repos.d/rpmfusion-*; do diff --git a/build_files/base/19-initramfs.sh b/build_files/base/19-initramfs.sh index 459e364ebce..37f3a225ff4 100755 --- a/build_files/base/19-initramfs.sh +++ b/build_files/base/19-initramfs.sh @@ -11,7 +11,7 @@ else fi QUALIFIED_KERNEL="$(rpm -qa | grep -P 'kernel-(|'"$KERNEL_SUFFIX"'-)(\d+\.\d+\.\d+)' | sed -E 's/kernel-(|'"$KERNEL_SUFFIX"'-)//')" -/usr/libexec/rpm-ostree/wrapped/dracut --no-hostonly --kver "$QUALIFIED_KERNEL" --reproducible -v --add ostree -f "/lib/modules/$QUALIFIED_KERNEL/initramfs.img" +/usr/bin/dracut --no-hostonly --kver "$QUALIFIED_KERNEL" --reproducible -v --add ostree -f "/lib/modules/$QUALIFIED_KERNEL/initramfs.img" chmod 0600 "/lib/modules/$QUALIFIED_KERNEL/initramfs.img" echo "::endgroup::" diff --git a/build_files/dx/01-install-copr-repos-dx.sh b/build_files/dx/01-install-copr-repos-dx.sh index 690f5742379..c29e1b56fb3 100755 --- a/build_files/dx/01-install-copr-repos-dx.sh +++ b/build_files/dx/01-install-copr-repos-dx.sh @@ -5,33 +5,27 @@ echo "::group:: ===$(basename "$0")===" set -eoux pipefail #incus, lxc, lxd + if [[ "${FEDORA_MAJOR_VERSION}" -lt "42" ]]; then - curl -Lo /etc/yum.repos.d/ganto-lxc4-fedora-"${FEDORA_MAJOR_VERSION}".repo \ - https://copr.fedorainfracloud.org/coprs/ganto/lxc4/repo/fedora-"${FEDORA_MAJOR_VERSION}"/ganto-lxc4-fedora-"${FEDORA_MAJOR_VERSION}".repo + dnf5 -y copr enable ganto/lxc4 fi #umoci -curl --retry 3 -Lo /etc/yum.repos.d/ganto-umoci-fedora-"${FEDORA_MAJOR_VERSION}".repo \ - https://copr.fedorainfracloud.org/coprs/ganto/umoci/repo/fedora-"${FEDORA_MAJOR_VERSION}"/ganto-umoci-fedora-"${FEDORA_MAJOR_VERSION}".repo +dnf5 -y copr enable ganto/umoci #ublue-os staging -curl --retry 3 -Lo /etc/yum.repos.d/ublue-os-staging-fedora-"${FEDORA_MAJOR_VERSION}".repo \ - https://copr.fedorainfracloud.org/coprs/ublue-os/staging/repo/fedora-"${FEDORA_MAJOR_VERSION}"/ublue-os-staging-fedora-"${FEDORA_MAJOR_VERSION}".repo +dnf5 -y copr enable ublue-os/staging #karmab-kcli -curl --retry 3 -Lo /etc/yum.repos.d/karmab-kcli-fedora-"${FEDORA_MAJOR_VERSION}".repo \ - https://copr.fedorainfracloud.org/coprs/karmab/kcli/repo/fedora-"${FEDORA_MAJOR_VERSION}"/karmab-kcli-fedora-"${FEDORA_MAJOR_VERSION}".repo +dnf5 -y copr enable karmab/kcli # Fonts -curl --retry 3 -Lo /etc/yum.repos.d/atim-ubuntu-fonts-fedora-"${FEDORA_MAJOR_VERSION}".repo \ - https://copr.fedorainfracloud.org/coprs/atim/ubuntu-fonts/repo/fedora-"${FEDORA_MAJOR_VERSION}"/atim-ubuntu-fonts-fedora-"${FEDORA_MAJOR_VERSION}".repo +dnf5 -y copr enable atim/ubuntu-fonts # Kvmfr module -curl --retry 3 -Lo /etc/yum.repos.d/hikariknight-looking-glass-kvmfr-fedora-"${FEDORA_MAJOR_VERSION}".repo \ - https://copr.fedorainfracloud.org/coprs/hikariknight/looking-glass-kvmfr/repo/fedora-"${FEDORA_MAJOR_VERSION}"/hikariknight-looking-glass-kvmfr-fedora-"${FEDORA_MAJOR_VERSION}".repo +dnf5 -y copr enable hikariknight/looking-glass-kvmfr # Podman-bootc -curl --retry 3 -Lo /etc/yum.repos.d/gmaglione-podman-bootc-fedora-"${FEDORA_MAJOR_VERSION}".repo \ - https://copr.fedorainfracloud.org/coprs/gmaglione/podman-bootc/repo/fedora-"${FEDORA_MAJOR_VERSION}"/gmaglione-podman-bootc-fedora-"${FEDORA_MAJOR_VERSION}".repo +dnf5 -y copr enable gmaglione/podman-bootc echo "::endgroup::" diff --git a/build_files/dx/02-install-kernel-akmods-dx.sh b/build_files/dx/02-install-kernel-akmods-dx.sh index 67f1e9a8ebb..6d20263b321 100755 --- a/build_files/dx/02-install-kernel-akmods-dx.sh +++ b/build_files/dx/02-install-kernel-akmods-dx.sh @@ -4,6 +4,7 @@ echo "::group:: ===$(basename "$0")===" set -ouex pipefail +# NOTE: we won't use dnf5 copr plugin for ublue-os/akmods until our upstream provides the COPR standard naming sed -i 's@enabled=0@enabled=1@g' /etc/yum.repos.d/_copr_ublue-os-akmods.repo # Fetch Kernel RPMS @@ -12,9 +13,14 @@ KERNEL_TARGZ=$(jq -r '.layers[].digest'