Skip to content

Commit 3f05385

Browse files
committed
feat: updates containerfile to use ublue-os/main as upstream
1 parent 998eb22 commit 3f05385

4 files changed

Lines changed: 124 additions & 9 deletions

File tree

.github/workflows/build-and-release.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ jobs:
4848
- name: Checkout repository
4949
uses: actions/checkout@v3
5050

51+
- name: Install podman
52+
shell: bash
53+
run: |+
54+
sudo apt update -y && sudo apt -y install podman
55+
5156
- name: Log into registry
5257
uses: docker/login-action@v2
5358
with:

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.secrets/

Containerfile

Lines changed: 98 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,98 @@
1-
ARG FEDORA_VERSION=42
2-
3-
FROM ghcr.io/ublue-os/silverblue-asus-nvidia:${FEDORA_VERSION}
4-
ARG FEDORA_VERSION
5-
RUN sed -i "s|^NAME=.*|NAME=nxtcoder17 edition silverblue ${FEDORA_VERSION}|" /usr/lib/os-release
6-
RUN sed -i "s|^PRETTY_NAME=.*|PRETTY_NAME=nxtcoder17 edition silverblue ${FEDORA_VERSION}|" /usr/lib/os-release
7-
RUN rpm-ostree override remove firefox firefox-langpacks
8-
RUN rpm-ostree install distrobox docker hyprland niri
9-
RUN rpm-ostree cleanup -m && ostree container commit
1+
# Simplified Containerfile for Fedora Silverblue with NVIDIA drivers
2+
# Based on ublue-os/main
3+
# Scripts are fetched directly from ublue-os/main repo - no local maintenance needed!
4+
5+
# Build configuration
6+
ARG FEDORA_VERSION="${FEDORA_VERSION:-42}"
7+
ARG IMAGE_NAME="${IMAGE_NAME:-silverblue}"
8+
9+
# Image sources
10+
ARG UBLUE_REGISTRY="ghcr.io/ublue-os"
11+
ARG FEDORA_IMAGE="quay.io/fedora-ostree-desktops/silverblue"
12+
13+
# Optional digest pinning for reproducible builds
14+
ARG BASE_IMAGE_DIGEST=""
15+
ARG AKMODS_DIGEST=""
16+
ARG NVIDIA_AKMODS_DIGEST=""
17+
18+
# Stage 1: Clone ublue-os/main and merge packages
19+
FROM alpine/git AS buildctx
20+
ARG UBLUE_MAIN_VERSION="main"
21+
22+
RUN apk add --no-cache yq jq
23+
24+
RUN <<EOF
25+
echo "Cloning ublue-os/main repo (branch: $UBLUE_MAIN_VERSION)..."
26+
git clone --depth=1 --branch "${UBLUE_MAIN_VERSION}" \
27+
https://github.com/ublue-os/main.git ./ublue-os
28+
mv ublue-os/sys_files ./
29+
mv ublue-os/build_files ./
30+
mv ublue-os/packages.json ./ublue-packages.json
31+
EOF
32+
33+
COPY packages.yml ./
34+
35+
RUN <<EOF
36+
set -ex
37+
echo "Merging ublue packages with custom packages..."
38+
39+
# Extract ublue packages for "all" and "silverblue" sections
40+
UBLUE_ALL=$(jq -r '.all.include.all[]' ublue-packages.json)
41+
UBLUE_SILVERBLUE=$(jq -r '.all.include.silverblue[]' ublue-packages.json)
42+
43+
# Convert your YAML packages to JSON array
44+
YOUR_PACKAGES=$(yq -o=json '.packages' packages.yml)
45+
46+
# Merge all three lists, deduplicate and sort
47+
jq -n \
48+
--arg ublue_all "$UBLUE_ALL" \
49+
--arg ublue_sb "$UBLUE_SILVERBLUE" \
50+
--argjson yours "$YOUR_PACKAGES" \
51+
'{"packages": (($ublue_all | split("\n")) + ($ublue_sb | split("\n")) + $yours | unique | sort)}' \
52+
> packages.json
53+
54+
echo "Final package list ($(jq -r '.packages | length' packages.json) packages):"
55+
jq -r '.packages[]' packages.json
56+
EOF
57+
58+
# Stage 2: Get kernel modules from ublue-os
59+
FROM ${UBLUE_REGISTRY}/akmods:main-${FEDORA_VERSION}${AKMODS_DIGEST:+@${AKMODS_DIGEST}} AS akmods
60+
61+
# Stage 3: Get NVIDIA drivers from ublue-os
62+
FROM ${UBLUE_REGISTRY}/akmods-nvidia-open:main-${FEDORA_VERSION}${NVIDIA_AKMODS_DIGEST:+@${NVIDIA_AKMODS_DIGEST}} AS nvidia_akmods
63+
64+
# Stage 4: Build final image
65+
FROM ${FEDORA_IMAGE}:${FEDORA_VERSION}${BASE_IMAGE_DIGEST:+@${BASE_IMAGE_DIGEST}}
66+
67+
# Re-declare ARGs for use in this stage
68+
ARG FEDORA_VERSION="${FEDORA_VERSION:-42}"
69+
ARG IMAGE_NAME="${IMAGE_NAME:-silverblue}"
70+
ARG UBLUE_MAIN_VERSION="${UBLUE_MAIN_VERSION:-main}"
71+
72+
# Download build scripts from ublue-os/main repo and execute
73+
RUN --mount=type=bind,from=buildctx,src=/,dst=/ctx \
74+
--mount=type=bind,from=akmods,src=/rpms/ublue-os,dst=/tmp/akmods-rpms \
75+
--mount=type=bind,from=akmods,src=/kernel-rpms,dst=/tmp/kernel-rpms \
76+
--mount=type=bind,from=nvidia_akmods,src=/rpms,dst=/tmp/akmods-nv-rpms \
77+
--mount=type=cache,target=/var/cache \
78+
--mount=type=cache,target=/var/log \
79+
set -ouex pipefail && \
80+
rm -f /usr/bin/chsh /usr/bin/lchsh && \
81+
export IMAGE_NAME="${IMAGE_NAME}" && \
82+
export FEDORA_MAJOR_VERSION="${FEDORA_VERSION}" && \
83+
echo "Running ublue-os build scripts..." && \
84+
/ctx/build_files/install.sh && \
85+
AKMODNV_PATH=/tmp/akmods-nv-rpms /ctx/build_files/nvidia-install.sh && \
86+
/ctx/build_files/initramfs.sh && \
87+
/ctx/build_files/post-install.sh && \
88+
echo "Installing custom packages from packages.json..." && \
89+
if [[ -f /buildctx/packages.json ]]; then \
90+
readarray -t CUSTOM_PACKAGES < <(jq -r '.packages[]' /buildctx/packages.json); \
91+
if [[ "${#CUSTOM_PACKAGES[@]}" -gt 0 ]]; then \
92+
dnf5 -y install "${CUSTOM_PACKAGES[@]}"; \
93+
fi; \
94+
fi
95+
96+
# Validate the image
97+
RUN ["bootc", "container", "lint"]
98+

packages.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
packages:
2+
- distrobox
3+
- vim
4+
- htop
5+
- tmux
6+
- git
7+
- fzf
8+
- just
9+
- ffmpeg
10+
- ffmpeg-libs
11+
- flatpak-spawn
12+
- wireguard-tools
13+
- wl-clipboard
14+
- intel-vaapi-driver
15+
- libva-utils
16+
- nvtop
17+
- smartmontools
18+
- powerstat
19+
- squashfs-tools
20+
- zstd

0 commit comments

Comments
 (0)