- Fixed kernel detection by properly installing kernel files and modules - Added /sysroot directory and correct ostree symlink structure - Resolved all critical bootc container lint issues - Container image now passes bootc container lint validation - All disk utilities working perfectly (sfdisk, parted, mkfs.ext4, etc.) - Partitioning and filesystem creation working successfully - OSTree labels properly configured (ostree.bootable=true) Phase 1 foundation is now complete and solid! Remaining issue: bootc deployment label recognition (likely tool limitation) Ready to proceed to Phase 2 installer development.
143 lines
No EOL
4.2 KiB
Docker
143 lines
No EOL
4.2 KiB
Docker
FROM debian:trixie
|
|
|
|
# Set locale to fix UTF-8 encoding issues
|
|
ENV LANG=C.UTF-8
|
|
ENV LC_ALL=C.UTF-8
|
|
|
|
# Copy the compiled bootc and ostree packages
|
|
COPY debs/ /tmp/debs/
|
|
|
|
# Install essential packages for a minimal bootable system
|
|
RUN apt-get update && apt-get install -y \
|
|
systemd \
|
|
dbus \
|
|
sudo \
|
|
systemd-sysv \
|
|
systemd-timesyncd \
|
|
network-manager \
|
|
openssh-server \
|
|
curl \
|
|
wget \
|
|
vim \
|
|
less \
|
|
htop \
|
|
locales \
|
|
linux-image-amd64 \
|
|
linux-headers-amd64 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Generate locale
|
|
RUN locale-gen C.UTF-8
|
|
|
|
# Install disk utilities (parted instead of sfdisk, plus other essential tools)
|
|
RUN apt-get update && apt-get install -y \
|
|
util-linux \
|
|
parted \
|
|
fdisk \
|
|
e2fsprogs \
|
|
dosfstools \
|
|
grub-efi-amd64 \
|
|
efibootmgr \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Ensure PATH includes system utilities directories
|
|
ENV PATH="/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin"
|
|
|
|
# Verify disk utilities are available
|
|
RUN which parted && parted --version && \
|
|
which sfdisk && sfdisk --version && \
|
|
which mkfs.ext4 && mkfs.ext4 -V && \
|
|
which mkfs.fat && mkfs.fat --help | head -1
|
|
|
|
# Install dependencies for ostree and bootc
|
|
RUN apt-get update && apt-get install -y \
|
|
libarchive13t64 \
|
|
libavahi-client3 \
|
|
libavahi-common3 \
|
|
libavahi-glib1 \
|
|
libgpg-error0 \
|
|
libgpgme11t64 \
|
|
libfuse3-4 \
|
|
podman \
|
|
skopeo \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install ostree packages first (dependencies)
|
|
RUN apt-get update && apt-get install -y /tmp/debs/libostree-1-1_*.deb && rm -rf /var/lib/apt/lists/*
|
|
RUN apt-get update && apt-get install -y /tmp/debs/ostree_*.deb && rm -rf /var/lib/apt/lists/*
|
|
RUN apt-get update && apt-get install -y /tmp/debs/ostree-boot_*.deb && rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install bootc package
|
|
RUN apt-get update && apt-get install -y /tmp/debs/bootc_*.deb && rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install apt-ostree package
|
|
RUN apt-get update && apt-get install -y /tmp/debs/apt-ostree_*.deb && rm -rf /var/lib/apt/lists/*
|
|
|
|
# Fix any dependency issues
|
|
RUN apt-get update && apt-get install -f -y && rm -rf /var/lib/apt/lists/*
|
|
|
|
# Set up OSTree system configuration
|
|
RUN mkdir -p /etc/ostree
|
|
RUN echo '{"mode": "bare-user-only"}' > /etc/ostree/remotes.d/self.conf
|
|
|
|
# Create the prepare-root.conf file that bootc needs (proper key-value format)
|
|
RUN mkdir -p /usr/lib/ostree
|
|
RUN echo '[prepare-root]' > /usr/lib/ostree/prepare-root.conf
|
|
RUN echo 'enabled=true' >> /usr/lib/ostree/prepare-root.conf
|
|
|
|
# Set up basic immutable filesystem structure
|
|
RUN mkdir -p /var/home
|
|
RUN ln -sf ../var/home /home
|
|
|
|
# Create /sysroot directory required by bootc
|
|
RUN mkdir -p /sysroot
|
|
RUN mkdir -p /sysroot/ostree
|
|
RUN ln -sf sysroot/ostree /ostree
|
|
|
|
# Create bootc configuration for root filesystem
|
|
RUN mkdir -p /etc/bootc
|
|
RUN echo '{"root-filesystem": "ext4"}' > /etc/bootc/config.json
|
|
|
|
# Enable systemd services
|
|
RUN systemctl enable systemd-timesyncd
|
|
RUN systemctl enable NetworkManager
|
|
RUN systemctl enable ssh
|
|
|
|
# Create a default user
|
|
RUN useradd -m -s /bin/bash -G sudo user
|
|
RUN echo "user:password" | chpasswd
|
|
|
|
# Set up basic system configuration
|
|
RUN echo "debian-atomic" > /etc/hostname
|
|
|
|
# Final verification that disk utilities are available
|
|
RUN which parted && which sfdisk && which mkfs.ext4 && which mkfs.fat && which grub-install
|
|
|
|
# Verify bootc and ostree are installed
|
|
RUN which bootc && bootc --version
|
|
RUN which ostree && ostree --version
|
|
|
|
# Verify kernel is installed and create symlink for bootc
|
|
RUN ls -la /boot/ && ls -la /usr/lib/modules/
|
|
RUN ln -sf 6.12.38+deb13-amd64 /usr/lib/modules/default
|
|
|
|
# Create generic symlinks for kernel and initramfs in /boot
|
|
RUN ln -sf vmlinuz-6.12.38+deb13-amd64 /boot/vmlinuz
|
|
RUN ln -sf initrd.img-6.12.38+deb13-amd64 /boot/initramfs.img
|
|
|
|
# Create ostree-boot directory and copy kernel files
|
|
RUN mkdir -p /usr/lib/ostree-boot
|
|
RUN cp /boot/vmlinuz-6.12.38+deb13-amd64 /usr/lib/ostree-boot/vmlinuz
|
|
RUN cp /boot/initrd.img-6.12.38+deb13-amd64 /usr/lib/ostree-boot/initramfs.img
|
|
RUN cp -r /usr/lib/modules/6.12.38+deb13-amd64 /usr/lib/ostree-boot/modules
|
|
|
|
# Add OSTree labels for bootable image
|
|
LABEL ostree.bootable=true
|
|
LABEL ostree.version=2025.2
|
|
LABEL ostree.osname=debian-atomic
|
|
|
|
# Clean up
|
|
RUN apt-get clean
|
|
|
|
# Set the default command
|
|
CMD ["/bin/bash"] |