142 lines
No EOL
5 KiB
Text
142 lines
No EOL
5 KiB
Text
FROM debian:trixie-slim
|
|
|
|
# Install essential packages for bootc compatibility
|
|
RUN apt-get update && apt-get install -y \
|
|
ostree \
|
|
ostree-boot \
|
|
systemd \
|
|
systemd-boot \
|
|
linux-image-amd64 \
|
|
grub-efi-amd64 \
|
|
openssh-server \
|
|
sudo \
|
|
curl \
|
|
wget \
|
|
ca-certificates \
|
|
polkitd \
|
|
pkexec \
|
|
libpolkit-gobject-1-0 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Download and install bootc package
|
|
RUN wget https://git.raines.xyz/robojerk/-/packages/debian/bootc/1.6.0-1~trixie1/files/495 -O bootc_1.6.0-1~trixie1_amd64.deb && \
|
|
dpkg -i bootc_1.6.0-1~trixie1_amd64.deb && \
|
|
rm bootc_1.6.0-1~trixie1_amd64.deb
|
|
|
|
# Create a default user
|
|
RUN useradd -m -s /bin/bash -G sudo debian && \
|
|
echo "debian:debian123" | chpasswd
|
|
|
|
# Configure SSH
|
|
RUN mkdir -p /home/debian/.ssh && \
|
|
chmod 700 /home/debian/.ssh && \
|
|
chown debian:debian /home/debian/.ssh
|
|
|
|
# ===== OSTREE FILESYSTEM TRANSFORMATION =====
|
|
# This is the critical step that transforms traditional Debian to OSTree
|
|
|
|
# Initialize OSTree repository
|
|
RUN mkdir -p /ostree/repo && \
|
|
ostree init --repo=/ostree/repo --mode=bare-user
|
|
|
|
# Create OSTree deployment structure
|
|
RUN ostree admin init-fs / && \
|
|
ostree admin stateroot-init debian
|
|
|
|
# Create a simple OSTree commit from the current filesystem
|
|
RUN mkdir -p /tmp/ostree-commit && \
|
|
cd /tmp/ostree-commit && \
|
|
# Copy only the files we want in OSTree (exclude special filesystems)
|
|
cp -r /bin . && \
|
|
cp -r /lib . && \
|
|
cp -r /lib64 . && \
|
|
cp -r /sbin . && \
|
|
cp -r /usr . && \
|
|
cp -r /etc . && \
|
|
cp -r /var . && \
|
|
cp -r /home . && \
|
|
cp -r /root . && \
|
|
cp -r /boot . && \
|
|
# Create essential directories properly
|
|
mkdir -p proc && \
|
|
mkdir -p sys && \
|
|
mkdir -p dev && \
|
|
mkdir -p tmp && \
|
|
mkdir -p run && \
|
|
mkdir -p media && \
|
|
mkdir -p mnt && \
|
|
mkdir -p ostree && \
|
|
# Create OSTree-expected kernel locations
|
|
mkdir -p usr/lib/ostree-boot && \
|
|
# Debug: check what's in boot directory
|
|
echo "Boot directory contents:" && ls -la boot/ && \
|
|
# Move kernel and initrd to OSTree-expected location
|
|
if [ -f boot/vmlinuz-6.12.41+deb13-amd64 ]; then \
|
|
cp boot/vmlinuz-6.12.41+deb13-amd64 usr/lib/ostree-boot/ && \
|
|
echo "Kernel copied successfully"; \
|
|
else \
|
|
echo "Kernel not found!" && \
|
|
find boot/ -name "*vmlinuz*" -o -name "*kernel*" 2>/dev/null; \
|
|
fi && \
|
|
if [ -f boot/initrd.img-6.12.41+deb13-amd64 ]; then \
|
|
cp boot/initrd.img-6.12.41+deb13-amd64 usr/lib/ostree-boot/ && \
|
|
echo "Initrd copied successfully"; \
|
|
else \
|
|
echo "Initrd not found!" && \
|
|
find boot/ -name "*initrd*" 2>/dev/null; \
|
|
fi && \
|
|
# Create the commit
|
|
ostree commit \
|
|
--repo=/ostree/repo \
|
|
--branch=debian/trixie/x86_64 \
|
|
--subject="Debian trixie system" \
|
|
--tree=dir=. && \
|
|
echo "OSTree commit created successfully" && \
|
|
# Clean up
|
|
cd / && rm -rf /tmp/ostree-commit
|
|
|
|
# Deploy the OSTree commit to create proper deployment structure
|
|
# Note: Deployment will be done at runtime when the container boots
|
|
RUN echo "OSTree commit created, deployment will be done at runtime" && \
|
|
echo "Commit hash: $(ostree rev-parse --repo=/ostree/repo debian/trixie/x86_64)"
|
|
|
|
# Configure OSTree
|
|
RUN mkdir -p /etc/ostree && \
|
|
echo "[origin]" > /etc/ostree/remotes.d/origin.conf && \
|
|
echo "repo=/ostree/repo" >> /etc/ostree/remotes.d/origin.conf
|
|
|
|
# Configure bootloader
|
|
RUN mkdir -p /boot/loader/entries
|
|
|
|
# Add bootc compatibility layer script
|
|
COPY bootc-compat.sh /usr/local/bin/bootc-compat.sh
|
|
RUN chmod +x /usr/local/bin/bootc-compat.sh
|
|
|
|
# Set up bootc status directory
|
|
RUN mkdir -p /usr/lib/bootc
|
|
|
|
# Create bootc status file
|
|
RUN echo '{' > /usr/lib/bootc/status.json && \
|
|
echo ' "apiVersion": "org.containers.bootc/v1alpha1",' >> /usr/lib/bootc/status.json && \
|
|
echo ' "kind": "BootcHost",' >> /usr/lib/bootc/status.json && \
|
|
echo ' "spec": {' >> /usr/lib/bootc/status.json && \
|
|
echo ' "image": {' >> /usr/lib/bootc/status.json && \
|
|
echo ' "image": "localhost/debian-bootc:latest"' >> /usr/lib/bootc/status.json && \
|
|
echo ' }' >> /usr/lib/bootc/status.json && \
|
|
echo ' },' >> /usr/lib/bootc/status.json && \
|
|
echo ' "status": {' >> /usr/lib/bootc/status.json && \
|
|
echo ' "booted": {' >> /usr/lib/bootc/status.json && \
|
|
echo ' "image": {' >> /usr/lib/bootc/status.json && \
|
|
echo ' "image": "localhost/debian-bootc:latest",' >> /usr/lib/bootc/status.json && \
|
|
echo ' "imageDigest": "sha256:$(echo -n '\''debian-bootc'\'' | sha256sum | cut -d'\'' '\'' -f1)"' >> /usr/lib/bootc/status.json && \
|
|
echo ' }' >> /usr/lib/bootc/status.json && \
|
|
echo ' }' >> /usr/lib/bootc/status.json && \
|
|
echo ' }' >> /usr/lib/bootc/status.json && \
|
|
echo '}' >> /usr/lib/bootc/status.json
|
|
|
|
# Set proper labels
|
|
LABEL bootc.filesystem="ext4"
|
|
LABEL bootc.architecture="x86_64"
|
|
LABEL ostree.commit="debian/trixie/x86_64"
|
|
|
|
CMD ["/usr/local/bin/bootc-compat.sh"] |