distrostore / Dockerfile
Rafael Calleja
follow links
a91c436
# syntax=docker/dockerfile:1.4-labs
FROM ubuntu:24.04 as base
ENV DEBIAN_FRONTEND=noninteractive
ARG ROOTFS=/tmp/restore
ARG SSH_HOST
ARG SSH_USER
ARG SSH_PATH=/var/tmp/restic
RUN apt update && apt install -yq wget bzip2 make time sshfs fuse3 && \
wget -qO - https://raw.githubusercontent.com/cupcakearmy/autorestic/master/install.sh | bash && \
autorestic --version && \
mkdir -p ${ROOTFS}
RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan ${SSH_HOST} >> ~/.ssh/known_hosts
WORKDIR /var/tmp/restic
RUN --security=insecure --mount=type=ssh sshfs -v -o auto_cache,reconnect,transform_symlinks,follow_symlinks ${SSH_USER}@${SSH_HOST}:${SSH_PATH} /var/tmp/restic && \
cd /var/tmp/restic && \
ls -la && \
make restore RESTORE_DST=${ROOTFS}
WORKDIR ${ROOTFS}
RUN --security=insecure \
mkdir -p ${ROOTFS}/proc && \
mkdir -p ${ROOTFS}/dev && \
mkdir -p ${ROOTFS}/dev/pts && \
mkdir -p ${ROOTFS}/sys && \
mkdir -p ${ROOTFS}/run && \
mount --bind /proc ${ROOTFS}/proc && \
mount --bind /dev ${ROOTFS}/dev && \
mount --bind /sys ${ROOTFS}/sys && \
mount --bind /run ${ROOTFS}/run && \
mount -t devpts devpts ${ROOTFS}/dev/pts && \
mkdir -p ${ROOTFS}/home/eggs/.overlay && \
mount -t tmpfs tmpfs ${ROOTFS}/home/eggs/.overlay/ && \
mkdir -p ${ROOTFS}/home/eggs/.overlay/{upperdir,workdir} && \
mkdir -p ${ROOTFS}/home/eggs/.mnt/filesystem.squashfs/var && \
mkdir -p ${ROOTFS}/home/eggs/.overlay/lowerdir/var && \
mkdir -p ${ROOTFS}/home/eggs/.overlay/upperdir/var && \
mkdir -p ${ROOTFS}/home/eggs/.overlay/workdir/var && \
mount -t overlay overlay -o lowerdir=${ROOTFS}/home/eggs/.overlay/lowerdir/var,upperdir=${ROOTFS}/home/eggs/.overlay/upperdir/var,workdir=${ROOTFS}/home/eggs/.overlay/workdir/var ${ROOTFS}/home/eggs/.mnt/filesystem.squashfs/var || dmesg && \
chroot ${ROOTFS} /bin/bash -c "rm /etc/resolv.conf && \
echo nameserver 8.8.8.8 > /etc/resolv.conf && \
cp -L /boot/vmlinuz /boot/vmlinuz-$(uname -r) || true && \
cd /tmp && \
/usr/bin/git clone https://github.com/pieroproietti/get-eggs && \
cd get-eggs && \
./get-eggs.sh && \
rm -rf /*is-merged && \
export CASPER_GENERATE_UUID=1 && \
eggs calamares -i -r -v && \
SUDO_USER=ubuntu eggs produce --max --nointeractive --noicon --excludes=static,homes -v --release" && \
for m in $(mount | awk '{print $3}' | grep "^${ROOTFS}"); do umount -lf $m; done && \
export EXCLUDE_FILE=$(find ${ROOTFS}/home/eggs -name "*.iso" -type f -printf "%T@ %p\n" | sort -n | tail -1 | cut -d' ' -f2) && \
find ${ROOTFS} -type f ! -path "${EXCLUDE_FILE}" -exec rm -rf {} + && \
mv $(find ${ROOTFS}/home/eggs -name "*.iso" -type f -printf "%T@ %p\n" | sort -n | tail -1 | cut -d' ' -f2) /tmp/distro-live.iso
FROM alpine
COPY --from=base /tmp/distro-live.iso /distro-live.iso