# syntax=docker/dockerfile:1 FROM alpine:3.23 AS rootfs-stage ARG TARGETARCH ARG S6_OVERLAY_VERSION="3.2.2.0" ARG ROOTFS=/root-out ARG REL=v3.23 ARG MIRROR=http://dl-cdn.alpinelinux.org/alpine ARG PACKAGES=alpine-baselayout,alpine-keys,apk-tools,busybox,libc-utils RUN apk add --no-cache bash xz curl ca-certificates # map arch RUN case "${TARGETARCH}" in \ amd64) echo "x86_64" > /arch ;; \ arm64) echo "aarch64" > /arch ;; \ *) echo "unsupported arch" && exit 1 ;; \ esac # build rootfs RUN mkdir -p "${ROOTFS}/etc/apk" && \ echo "${MIRROR}/${REL}/main" > "${ROOTFS}/etc/apk/repositories" && \ echo "${MIRROR}/${REL}/community" >> "${ROOTFS}/etc/apk/repositories" && \ apk --root "${ROOTFS}" --no-cache add ${PACKAGES//,/ } && \ sed -i 's/^root::/root:!:/' "${ROOTFS}/etc/shadow" # s6 overlay RUN ARCH="$(cat /arch)" && \ curl -fsSL https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz \ | tar -C "${ROOTFS}" -Jxpf - && \ curl -fsSL https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-${ARCH}.tar.xz \ | tar -C "${ROOTFS}" -Jxpf - # add s6 optional symlinks ADD https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-noarch.tar.xz /tmp RUN tar -C /root-out -Jxpf /tmp/s6-overlay-symlinks-noarch.tar.xz && unlink /root-out/usr/bin/with-contenv ADD https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-arch.tar.xz /tmp RUN tar -C /root-out -Jxpf /tmp/s6-overlay-symlinks-arch.tar.xz # Runtime stage FROM scratch COPY --from=rootfs-stage /root-out/ / ARG BUILD_DATE ARG VERSION ARG MODS_VERSION="v3" ARG PKG_INST_VERSION="v1" ARG LSIOWN_VERSION="v1" ARG WITHCONTENV_VERSION="v1" LABEL build_version="Pi-Farm version:- ${VERSION} Build-date:- ${BUILD_DATE}" LABEL maintainer="Pi-Farm" ADD --chmod=755 "https://raw.githubusercontent.com/linuxserver/docker-mods/mod-scripts/docker-mods.${MODS_VERSION}" "/docker-mods" ADD --chmod=755 "https://raw.githubusercontent.com/linuxserver/docker-mods/mod-scripts/package-install.${PKG_INST_VERSION}" "/etc/s6-overlay/s6-rc.d/init-mods-package-install/run" ADD --chmod=755 "https://raw.githubusercontent.com/linuxserver/docker-mods/mod-scripts/lsiown.${LSIOWN_VERSION}" "/usr/bin/lsiown" ADD --chmod=755 "https://raw.githubusercontent.com/linuxserver/docker-mods/mod-scripts/with-contenv.${WITHCONTENV_VERSION}" "/usr/bin/with-contenv" # environment variables ENV PS1="$(whoami)@$(hostname):$(pwd)\\$ " \ HOME="/root" \ TERM="xterm" \ S6_CMD_WAIT_FOR_SERVICES_MAXTIME="0" \ S6_VERBOSITY=1 \ S6_STAGE2_HOOK=/docker-mods \ VIRTUAL_ENV=/lsiopy \ PATH="/lsiopy/bin:$PATH" RUN \ echo "**** install runtime packages ****" && \ apk add --no-cache \ alpine-release \ bash \ ca-certificates \ catatonit \ coreutils \ curl \ findutils \ jq \ netcat-openbsd \ procps-ng \ shadow \ tzdata && \ echo "**** create abc user and make our folders ****" && \ groupmod -g 1000 users && \ useradd -u 911 -U -d /config -s /bin/false abc && \ usermod -G users abc && \ mkdir -p \ /app \ /config \ /defaults \ /lsiopy && \ echo "**** cleanup ****" && \ rm -rf \ /tmp/* # add local files COPY root/ / ENTRYPOINT ["/init"]