You've already forked fedora-bootc
Split niri and gnome builds using a matrix workflow, for now.
This commit is contained in:
118
build_files/niri/build.sh
Executable file
118
build_files/niri/build.sh
Executable file
@@ -0,0 +1,118 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -ouex pipefail
|
||||
|
||||
# Copy System Files onto root
|
||||
rsync -rvK /ctx/sys_files/ /
|
||||
|
||||
# Copy cosign.pub key into the right location
|
||||
mkdir -p /etc/pki/containers
|
||||
cp /ctx/cosign.pub /etc/pki/containers/davejansen.pub
|
||||
|
||||
### Install packages
|
||||
|
||||
# Packages can be installed from any enabled yum repo on the image.
|
||||
# RPMfusion repos are available by default in ublue main images
|
||||
# List of rpmfusion packages can be found here:
|
||||
# https://mirrors.rpmfusion.org/mirrorlist?path=free/fedora/updates/39/x86_64/repoview/index.html&protocol=https&redirect=1
|
||||
|
||||
# Install RPMFusion and enable fedora-multimedia with a higher priority than default
|
||||
if ! grep -q fedora-multimedia <(dnf5 repolist); then
|
||||
# Enable or Install Repofile
|
||||
#dnf5 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
|
||||
|
||||
# Enable fedora-multimedia
|
||||
dnf5 config-manager setopt fedora-multimedia.enabled=1 ||
|
||||
dnf5 config-manager addrepo --from-repofile="https://negativo17.org/repos/fedora-multimedia.repo"
|
||||
fi
|
||||
|
||||
# Set higher priority
|
||||
dnf5 config-manager setopt fedora-multimedia.priority=90
|
||||
|
||||
# Remove Fedora's package that enforces their own (filtered) version of the
|
||||
# flathub repo is present, as-well as the system-installed Firefox as I prefer to use the Flatpak version
|
||||
dnf5 remove -y fedora-flathub-remote
|
||||
|
||||
# Add Flathub to the image for eventual application
|
||||
mkdir -p /etc/flatpak/remotes.d/
|
||||
curl --retry 3 -Lo /etc/flatpak/remotes.d/flathub.flatpakrepo https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||
|
||||
# use override to replace mesa and others with less crippled versions
|
||||
OVERRIDES=(
|
||||
"intel-gmmlib"
|
||||
"intel-mediasdk"
|
||||
"intel-vpl-gpu-rt"
|
||||
"libheif"
|
||||
"libva"
|
||||
"libva-intel-media-driver"
|
||||
"mesa-dri-drivers"
|
||||
"mesa-filesystem"
|
||||
"mesa-libEGL"
|
||||
"mesa-libGL"
|
||||
"mesa-libgbm"
|
||||
"mesa-va-drivers"
|
||||
"mesa-vulkan-drivers"
|
||||
)
|
||||
|
||||
dnf5 distro-sync --skip-unavailable -y --repo='fedora-multimedia' "${OVERRIDES[@]}"
|
||||
dnf5 versionlock add "${OVERRIDES[@]}"
|
||||
|
||||
# Remove additional repositories Fedora comes with out of the box
|
||||
# And don't raise an error if any of these files does not exist when attempting
|
||||
# to delete them.
|
||||
rm \
|
||||
/etc/yum.repos.d/fedora-cisco-openh264.repo \
|
||||
/etc/yum.repos.d/google-chrome.repo \
|
||||
/etc/yum.repos.d/rpmfusion-nonfree-nvidia-driver.repo \
|
||||
/etc/yum.repos.d/rpmfusion-nonfree-steam.repo \
|
||||
/etc/yum.repos.d/_copr:copr.fedorainfracloud.org:phracek:PyCharm.repo \
|
||||
2>&1
|
||||
|
||||
# Add country query to all repo metalinks
|
||||
# shellcheck disable=SC2016
|
||||
sed -i -e '/^metalink\=/s/\$releasever\&arch\=\$basearch$/\$releasever\&arch\=\$basearch\&country\=KR,JP,TW/g' /etc/yum.repos.d/*.repo
|
||||
|
||||
# Add 1Password repo
|
||||
#rpmkeys --import https://downloads.1password.com/linux/keys/1password.asc
|
||||
cp /ctx/rpm-keys/1password.asc /etc/pki/rpm-gpg/1password.asc
|
||||
sh -c 'echo -e "[1password]\nname=1Password Stable Channel\nbaseurl=https://downloads.1password.com/linux/rpm/stable/\$basearch\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=1\ngpgkey=\"file:///etc/pki/rpm-gpg/1password.asc\"" > /etc/yum.repos.d/1password.repo'
|
||||
|
||||
# Add Tailscale repo
|
||||
#rpmkeys --import https://pkgs.tailscale.com/stable/fedora/repo.gpg
|
||||
#dnf5 config-manager addrepo --from-repofile=https://pkgs.tailscale.com/stable/fedora/tailscale.repo
|
||||
cp /ctx/rpm-keys/tailscale.gpg /etc/pki/rpm-gpg/tailscale.gpg
|
||||
sh -c 'echo -e "[tailscale-stable]\nname=Tailscale stable\nbaseurl=https://pkgs.tailscale.com/stable/fedora/\$basearch\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=1\ngpgkey=\"file:///etc/pki/rpm-gpg/tailscale.gpg\"" > /etc/yum.repos.d/tailscale.repo'
|
||||
|
||||
# Update all existing packages
|
||||
# dnf5 update -y
|
||||
|
||||
# Install Niri, the scrollable-tiling window compositor
|
||||
# https://yalter.github.io/niri/
|
||||
dnf5 -y copr enable avengemedia/dms
|
||||
|
||||
# Install my own layered packages
|
||||
dnf5 install -y \
|
||||
git \
|
||||
fish \
|
||||
gvfs-nfs \
|
||||
openssl \
|
||||
wl-clipboard \
|
||||
ffmpeg ffmpeg-libs ffmpegthumbnailer \
|
||||
heif-pixbuf-loader intel-vaapi-driver libavcodec libheif \
|
||||
libcamera libcamera-gstreamer libcamera-ipa libcamera-tools pipewire-plugin-libcamera \
|
||||
gnome-shell-extension-appindicator \
|
||||
1password 1password-cli \
|
||||
tailscale \
|
||||
waypipe \
|
||||
htop \
|
||||
alacritty \
|
||||
niri dms
|
||||
|
||||
dnf5 -y copr disable avengemedia/dms
|
||||
|
||||
# Enable Tailscale service
|
||||
systemctl enable tailscaled
|
||||
|
||||
echo "Done."
|
||||
120
build_files/niri/cleanup.sh
Executable file
120
build_files/niri/cleanup.sh
Executable file
@@ -0,0 +1,120 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -ouex pipefail
|
||||
|
||||
# Delete 1Password and Tailscale repos once packages are installed
|
||||
# so they don't end up in the final image, and don't raise an error if any of
|
||||
# these files does not exist when attempting to delete them.
|
||||
rm \
|
||||
/etc/yum.repos.d/1password.repo \
|
||||
/etc/yum.repos.d/tailscale.repo \
|
||||
/etc/pki/rpm-gpg/1password.asc \
|
||||
/etc/pki/rpm-gpg/tailscale.gpg \
|
||||
2>&1
|
||||
|
||||
# Or just disable:
|
||||
# dnf5 config-manager setopt 1password.enabled=0 tailscale-stable.enabled=0
|
||||
# sed -i 's/enabled=1/enabled=0/' \
|
||||
# /etc/yum.repos.d/1password.repo \
|
||||
# /etc/yum.repos.d/tailscale.repo \
|
||||
|
||||
# Fedora Flatpak service is a part of the flatpak package, ensure it's overridden by moving to replace it at the end of the build.
|
||||
mv -f /usr/lib/systemd/system/flatpak-add-flathub-repos.service /usr/lib/systemd/system/flatpak-add-fedora-repos.service
|
||||
|
||||
# Re-install all pre-installed (GNOME) applications from Flathub
|
||||
#flatpak install --reinstall flathub "$(flatpak list --app-runtime=org.fedoraproject.Platform --columns=application | tail -n +1 )"
|
||||
|
||||
# ...and remove the fedora flatpak remotes
|
||||
#flatpak remote-delete --force fedora
|
||||
#flatpak remote-delete --force fedora-testing
|
||||
|
||||
# TODO: Add flathub remove, enable, and remove filter
|
||||
# TODO: Install core GNOME Flatpak apps
|
||||
# TODO: Install my own commonly used Flatpak apps
|
||||
# IDEA: Can I set certain dconf settings, like Ptyxis config, temperature settings, etc?
|
||||
# IDEA: Can I set certain Flatpak system defaults (ie. no read/write anywhere by default)
|
||||
|
||||
# Remove dnf5 versionlocks
|
||||
dnf5 versionlock clear
|
||||
|
||||
# Remove tmp files and everything in dirs that make bootc unhappy
|
||||
rm -rf /tmp/* || true
|
||||
rm -rf /usr/etc
|
||||
rm -rf /boot && mkdir /boot
|
||||
# Preserve cache mounts
|
||||
find /var/* -maxdepth 0 -type d \! -name cache \! -name log -exec rm -rf {} \;
|
||||
find /var/cache/* -maxdepth 0 -type d \! -name libdnf5 -exec rm -rf {} \;
|
||||
|
||||
# Make sure /var/tmp is properly created
|
||||
mkdir -p /var/tmp
|
||||
chmod -R 1777 /var/tmp
|
||||
|
||||
## Handle files that rpm-ostree would normally remove
|
||||
## Adapted from: https://github.com/hhd-dev/rechunk/blob/master/1_prune.sh#L33
|
||||
|
||||
# if [ -f /etc/passwd ]; then
|
||||
# out="$(grep -v 'root' /etc/passwd)"
|
||||
#
|
||||
# if [[ ! -z "$out" ]]; then
|
||||
# echo
|
||||
# echo Appending the following passwd users to /usr/lib/passwd
|
||||
# echo "${out}"
|
||||
# echo "$out" >>/usr/lib/passwd
|
||||
# fi
|
||||
# fi
|
||||
|
||||
if [ -f /etc/group ]; then
|
||||
out="$(grep -v 'root\|wheel' /etc/group)"
|
||||
|
||||
if [[ ! -z "$out" ]]; then
|
||||
echo
|
||||
echo Appending the following group entries to /usr/lib/group
|
||||
echo "$out"
|
||||
echo "$out" >>/usr/lib/group
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -f /etc/passwd ] || [ -f /etc/group ]; then
|
||||
echo
|
||||
echo "Warning: Make sure processed users and groups are from installed programs!"
|
||||
fi
|
||||
|
||||
# # Create defaults for /etc/passwd, /etc/group
|
||||
# cat <<EOT >/etc/passwd
|
||||
# root:x:0:0:root:/root:/bin/bash
|
||||
# EOT
|
||||
# cat <<EOT >/etc/group
|
||||
# root:x:0:
|
||||
# wheel:x:10:
|
||||
# EOT
|
||||
|
||||
# Extra lock files created by container processes that might cause issues
|
||||
rm -rf \
|
||||
/etc/.pwd.lock \
|
||||
/etc/passwd- \
|
||||
/etc/group- \
|
||||
/etc/shadow- \
|
||||
/etc/gshadow- \
|
||||
/etc/subuid- \
|
||||
/etc/subgid- \
|
||||
/.dockerenv
|
||||
|
||||
# # Merge /usr/etc to /etc
|
||||
# # OSTree will error out if both dirs exist
|
||||
# # And rpm-ostree will be confused and use only one of them
|
||||
# if [ -d /usr/etc ]; then
|
||||
# echo
|
||||
# echo WARNING: FOUND /usr/etc. MERGING TO ETC FOR COMPATIBILITY
|
||||
# echo EXPECT PERMISSIONS ISSUES ON THE MERGED PATHS
|
||||
# echo The following files from /usr/etc will be merged to /etc:
|
||||
# tree /usr/etc
|
||||
#
|
||||
# echo
|
||||
# rsync -aAX --numeric-ids --checksum --links /usr/etc/ /etc
|
||||
# rm -rf /usr/etc
|
||||
# fi
|
||||
#
|
||||
# # Move /etc to /usr/etc
|
||||
# mv /etc /usr/
|
||||
|
||||
# ...normal ublue-inspired steps continue.
|
||||
Reference in New Issue
Block a user