############################################################################### # PROJECT NAME CONFIGURATION ############################################################################### # Name: fluffy-pancake # # IMPORTANT: Change "finpilot" above to your desired project name. # This name should be used consistently throughout the repository in: # - Justfile: export image_name := env("IMAGE_NAME", "your-name-here") # - README.md: # your-name-here (title) # - artifacthub-repo.yml: repositoryID: your-name-here # - custom/ujust/README.md: localhost/your-name-here:stable (in bootc switch example) # # The project name defined here is the single source of truth for your # custom image's identity. When changing it, update all references above # to maintain consistency. ############################################################################### ############################################################################### # MULTI-STAGE BUILD ARCHITECTURE ############################################################################### # This Containerfile follows the Bluefin architecture pattern as implemented in # @projectbluefin/distroless. The architecture layers OCI containers together: # # 1. Context Stage (ctx) - Combines resources from: # - Local build scripts and custom files # - @projectbluefin/common - Desktop configuration shared with Aurora # - @ublue-os/brew - Homebrew integration # # 2. Base Image Options: # - `ghcr.io/ublue-os/silverblue-main:latest` (Fedora and GNOME) # - `ghcr.io/ublue-os/base-main:latest` (Fedora and no desktop # - `quay.io/centos-bootc/centos-bootc:stream10 (CentOS-based)` # # See: https://docs.projectbluefin.io/contributing/ for architecture diagram ############################################################################### # Context stage - combine local and imported OCI container resources FROM scratch AS ctx COPY build /build COPY custom /custom # Copy from OCI containers to distinct subdirectories to avoid conflicts # Note: Renovate can automatically update these :latest tags to SHA-256 digests for reproducibility COPY --from=ghcr.io/projectbluefin/common:latest /system_files /oci/common COPY --from=ghcr.io/ublue-os/brew:latest /system_files /oci/brew # Base Image - GNOME included #FROM ghcr.io/ublue-os/silverblue-main:latest ## Alternative base images, no desktop included (uncomment to use): FROM ghcr.io/ublue-os/base-main:latest # FROM quay.io/centos-bootc/centos-bootc:stream10 ## Alternative GNOME OS base image (uncomment to use): # FROM quay.io/gnome_infrastructure/gnome-build-meta:gnomeos-nightly ### /opt ## Some bootable images, like Fedora, have /opt symlinked to /var/opt, in order to ## make it mutable/writable for users. However, some packages write files to this directory, ## thus its contents might be wiped out when bootc deploys an image, making it troublesome for ## some packages. Eg, google-chrome, docker-desktop. ## ## Uncomment the following line if one desires to make /opt immutable and be able to be used ## by the package manager. # RUN rm /opt && mkdir /opt ### MODIFICATIONS ## Make modifications desired in your image and install packages by modifying the build scripts. ## The following RUN directive mounts the ctx stage which includes: ## - Local build scripts from /build ## - Local custom files from /custom ## - Files from @projectbluefin/common at /oci/common ## - Files from @projectbluefin/branding at /oci/branding ## - Files from @ublue-os/artwork at /oci/artwork ## - Files from @ublue-os/brew at /oci/brew ## Scripts are run in numerical order (10-build.sh, 20-example.sh, etc.) RUN --mount=type=bind,from=ctx,source=/,target=/ctx \ --mount=type=cache,dst=/var/cache \ --mount=type=cache,dst=/var/log \ --mount=type=tmpfs,dst=/tmp \ /ctx/build/10-build.sh COPY files/ / RUN systemctl preset-all ### LINTING ## Verify final image and contents are correct. RUN bootc container lint