FROM debian:trixie # Configure apt-cacher-ng proxy if available ARG APT_CACHER_NG_PROXY RUN if [ -n "$APT_CACHER_NG_PROXY" ]; then \ echo "Acquire::http::Proxy \"$APT_CACHER_NG_PROXY\";" > /etc/apt/apt.conf.d/99proxy; \ echo "Acquire::https::Proxy \"$APT_CACHER_NG_PROXY\";" >> /etc/apt/apt.conf.d/99proxy; \ fi # Install essential packages for a bootc installer RUN apt-get update && apt-get install -y \ systemd \ dbus \ sudo \ systemd-sysv \ systemd-timesyncd \ network-manager \ openssh-server \ curl \ wget \ vim \ less \ htop \ # Calamares and its dependencies calamares \ calamares-settings-debian \ # X11 and display manager for graphical installer xorg \ xinit \ lightdm \ openbox \ xterm \ # Qt and X11 dependencies for Calamares libxcb-cursor0 \ libxcb-xinerama0 \ libxcb-randr0 \ libqt6gui6 \ libqt6widgets6 \ qml6-module-qtquick \ qml6-module-qtquick-controls \ qml6-module-qtquick-layouts \ # Bootc for atomic deployment (will install from source) # bootc \ # Additional installer tools parted \ gdisk \ fdisk \ e2fsprogs \ dosfstools \ && rm -rf /var/lib/apt/lists/* # Install bootc dependencies and ISO creation tools RUN apt-get update && apt-get install -y \ # Bootc and ostree dependencies (excluding libostree-1-1 as we'll install custom version) libarchive13t64 \ libavahi-client3 \ libavahi-common3 \ libavahi-glib1 \ libcurl3t64-gnutls \ libgpgme11t64 \ libglib2.0-0t64 \ libapt-pkg7.0 \ podman \ skopeo \ # Linux kernel for bootable ISO linux-image-amd64 \ # ISO creation tools genisoimage \ isolinux \ xorriso \ # Additional useful tools squashfs-tools \ live-boot \ live-config \ live-tools \ # Development and debugging tools strace \ lsof \ procps \ psmisc \ # Network tools net-tools \ iproute2 \ # File system tools mount \ util-linux \ # Text processing (grep, sed, awk are usually pre-installed) # grep \ # sed \ # awk \ # Compression tools gzip \ bzip2 \ xz-utils \ # Archive tools tar \ zip \ unzip \ # Build tools build-essential \ pkg-config \ cmake \ git \ # Python for potential scripts python3 \ python3-pip \ # Additional utilities tree \ mc \ nano \ && rm -rf /var/lib/apt/lists/* # Copy custom packages into the container COPY 02-installer-bootc/debs/ /tmp/custom-packages/ # Install custom bootc, ostree, and apt-ostree packages RUN echo "Installing custom packages..." && \ cd /tmp/custom-packages && \ echo "Installing bootc packages..." && \ dpkg -i bootc_1.5.1-1~trixie1_amd64.deb bootc-dev_1.5.1-1~trixie1_amd64.deb || true && \ echo "Installing ostree packages..." && \ dpkg -i ostree_2025.2-1~trixie1_amd64.deb libostree-1-1_2025.2-1~trixie1_amd64.deb libostree-dev_2025.2-1~trixie1_amd64.deb ostree-boot_2025.2-1~trixie1_amd64.deb || true && \ echo "Installing apt-ostree package..." && \ dpkg -i apt-ostree_0.1.0-1~trixie1_amd64.deb || true && \ echo "Fixing dependencies..." && \ apt-get install -f -y && \ echo "Cleaning up..." && \ rm -rf /tmp/custom-packages # Create ISO creation workspace RUN mkdir -p /opt/iso-workspace /opt/iso-output WORKDIR /opt/iso-workspace # Enable systemd services RUN systemctl enable systemd-timesyncd RUN systemctl enable NetworkManager RUN systemctl enable ssh RUN systemctl enable lightdm RUN systemctl set-default graphical.target # Create a default user for the installer environment RUN useradd -m -s /bin/bash -G sudo installer RUN echo "installer:installer" | chpasswd # Set up basic system configuration RUN echo "debian-atomic-installer" > /etc/hostname # Copy Calamares configuration COPY 02-installer-bootc/calamares-config/ /etc/calamares/ # Copy installation scripts COPY 02-installer-bootc/scripts/ /usr/local/bin/ RUN chmod +x /usr/local/bin/*.sh # Create simple ISO creation script RUN echo '#!/bin/bash' > /usr/local/bin/create-iso-complete.sh && \ echo 'echo "Creating ISO with bootc integration..."' >> /usr/local/bin/create-iso-complete.sh && \ echo 'mkdir -p boot/grub isolinux live' >> /usr/local/bin/create-iso-complete.sh && \ echo 'echo "bootc version: $(bootc --version 2>/dev/null || echo not available)"' >> /usr/local/bin/create-iso-complete.sh && \ echo 'echo "ostree version: $(ostree --version 2>/dev/null || echo not available)"' >> /usr/local/bin/create-iso-complete.sh && \ echo 'echo "apt-ostree version: $(apt-ostree --version 2>/dev/null || echo not available)"' >> /usr/local/bin/create-iso-complete.sh && \ echo 'echo "Creating placeholder kernel and initrd..."' >> /usr/local/bin/create-iso-complete.sh && \ echo 'echo "placeholder kernel" > boot/vmlinuz' >> /usr/local/bin/create-iso-complete.sh && \ echo 'echo "placeholder initrd" > boot/initrd.img' >> /usr/local/bin/create-iso-complete.sh && \ echo 'echo "Creating bootable ISO..."' >> /usr/local/bin/create-iso-complete.sh && \ echo 'genisoimage -o /opt/iso-output/debian-atomic-installer-complete.iso -r -V "DEBIAN_ATOMIC" .' >> /usr/local/bin/create-iso-complete.sh && \ echo 'echo "✅ ISO created: /opt/iso-output/debian-atomic-installer-complete.iso"' >> /usr/local/bin/create-iso-complete.sh && \ chmod +x /usr/local/bin/create-iso-complete.sh # Set up Calamares to autostart RUN mkdir -p /etc/systemd/system/graphical.target.wants/ RUN ln -sf /usr/lib/systemd/system/calamares.service /etc/systemd/system/graphical.target.wants/ # Set environment variables ENV DEBIAN_ATOMIC_VERSION="1.0" ENV ISO_WORKSPACE="/opt/iso-workspace" ENV ISO_OUTPUT="/opt/iso-output" # Add labels for better container management LABEL maintainer="Debian Atomic Desktop Project" LABEL description="Debian Atomic Desktop Installer with ISO creation tools" LABEL version="1.0" LABEL org.opencontainers.image.source="https://github.com/your-repo/particle-os" # Clean up RUN apt-get clean # Create a helpful startup message RUN echo 'echo "=== Debian Atomic Desktop Installer Environment ==="' >> /root/.bashrc && \ echo 'echo "Available commands:"' >> /root/.bashrc && \ echo 'echo " create-iso-complete.sh - Create comprehensive bootable ISO"' >> /root/.bashrc && \ echo 'echo " bootc --help - Show bootc help"' >> /root/.bashrc && \ echo 'echo " calamares - Launch installer"' >> /root/.bashrc && \ echo 'echo "Workspace: $ISO_WORKSPACE"' >> /root/.bashrc && \ echo 'echo "Output: $ISO_OUTPUT"' >> /root/.bashrc # Set the default command CMD ["/bin/bash"]