2026-02-17 17:27:26 +01:00
|
|
|
###############################################################################
|
|
|
|
|
# PROJECT NAME CONFIGURATION
|
|
|
|
|
###############################################################################
|
2026-02-17 18:43:19 +01:00
|
|
|
# Name: fluffy-pancake
|
2026-02-17 17:27:26 +01:00
|
|
|
#
|
|
|
|
|
# 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
|
|
|
|
|
#
|
|
|
|
|
# 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
|
|
|
|
|
|
|
|
|
|
## Alternative base images, no desktop included (uncomment to use):
|
2026-02-17 18:43:19 +01:00
|
|
|
FROM ghcr.io/ublue-os/base-main:latest
|
2026-02-17 17:27:26 +01:00
|
|
|
# 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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
2026-03-02 18:45:46 +01:00
|
|
|
|
|
|
|
|
COPY files/ /
|
2026-03-09 16:57:21 +01:00
|
|
|
RUN systemctl --global enable firstboot-setup.service
|
2026-02-17 17:27:26 +01:00
|
|
|
### LINTING
|
|
|
|
|
## Verify final image and contents are correct.
|
|
|
|
|
RUN bootc container lint
|