diff --git a/.gitignore b/.gitignore index 430d480..863c1d9 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ **/node_modules **/dist **/*.log +.vscode/* # Betriebssystem-Dateien .DS_Store diff --git a/Dockerfile b/Dockerfile index 07bb5b9..bea3556 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,27 +1,80 @@ -# Example Dockerfile for amd64 -ARG BASE_IMAGE=alpine:latest +# syntax=docker/dockerfile:1 +ARG BUILD_BASE_IMAGE +FROM ${BUILD_BASE_IMAGE} -FROM ${BASE_IMAGE} +ARG BUILD_APP_VERSION +ARG BUILD_S6_ARCH_amd64 +ARG BUILD_S6_OVERLAY_VERSION +ARG BUILD_DATE +ARG MODS_VERSION="v3" +ARG PKG_INST_VERSION="v1" +ARG LSIOWN_VERSION="v1" +ARG WITHCONTENV_VERSION="v1" +ARG BUILD_APP_USER +ARG BUILD_APP_UID +ARG BUILD_APP_GID +ARG BUILD_MAINTAINER -ARG MAINTAINER -ARG TZ -ARG APP_NAME -ARG APP_USER +LABEL build_version="${BUILD_MAINTAINER} version: ${BUILD_APP_VERSION} Build-date:- ${BUILD_DATE}" +LABEL maintainer="${BUILD_MAINTAINER}" -LABEL maintainer="${MAINTAINER}" -LABEL org.opencontainers.image.title="${APP_NAME}" +# RHEL nutzt microdnf. Wir installieren xz (für tar) und shadow-utils (für useradd) +RUN microdnf update -y && \ + microdnf install -y --nodocs \ + xz \ + tar \ + shadow-utils \ + tzdata && \ + microdnf clean all -ENV TZ=${TZ} -ENV USER=${APP_USER} +# add s6 overlay +ADD https://github.com/just-containers/s6-overlay/releases/download/v${BUILD_S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz /tmp +RUN tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz +ADD https://github.com/just-containers/s6-overlay/releases/download/v${BUILD_S6_OVERLAY_VERSION}/s6-overlay-${BUILD_S6_ARCH_amd64}.tar.xz /tmp +RUN tar -C / -Jxpf /tmp/s6-overlay-${BUILD_S6_ARCH_amd64}.tar.xz -RUN apk add --no-cache tzdata ca-certificates +# add s6 optional symlinks +ADD https://github.com/just-containers/s6-overlay/releases/download/v${BUILD_S6_OVERLAY_VERSION}/s6-overlay-symlinks-noarch.tar.xz /tmp +RUN tar -C / -Jxpf /tmp/s6-overlay-symlinks-noarch.tar.xz && unlink /usr/bin/with-contenv +ADD https://github.com/just-containers/s6-overlay/releases/download/v${BUILD_S6_OVERLAY_VERSION}/s6-overlay-symlinks-arch.tar.xz /tmp +RUN tar -C / -Jxpf /tmp/s6-overlay-symlinks-arch.tar.xz -WORKDIR /app -COPY ./config /app/config -COPY ./data /app/data +# LSIO Mods Integration +ADD --chmod=744 "https://raw.githubusercontent.com/linuxserver/docker-mods/mod-scripts/docker-mods.${MODS_VERSION}" "/docker-mods" +ADD --chmod=744 "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=744 "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" -RUN adduser -D ${APP_USER} && chown -R ${APP_USER}:${APP_USER} /app +# set environment variables +ENV HOME="/root" \ + LANGUAGE="de_DE.UTF-8" \ + LANG="de_DE.UTF-8" \ + TERM="xterm" \ + S6_CMD_WAIT_FOR_SERVICES_MAXTIME="0" \ + S6_VERBOSITY=1 \ + S6_STAGE2_HOOK=/docker-mods \ + VIRTUAL_ENV=/lsiopy \ + PATH="/lsiopy/bin:$PATH" -USER ${APP_USER} +RUN echo "**** install packages and locales ****" && \ + microdnf install -y --nodocs \ + glibc-langpack-de \ + curl \ + jq \ + nmap-ncat \ + cronie && \ + echo "**** create user and folders ****" && \ + # In RHEL prüfen wir, ob die Gruppe existiert, bevor wir sie anlegen + groupadd -g ${BUILD_APP_GID} ${BUILD_APP_USER} || true && \ + useradd -u ${BUILD_APP_UID} -g ${BUILD_APP_GID} -d /config -s /bin/false ${BUILD_APP_USER} && \ + mkdir -p /app /config /defaults /lsiopy && \ + echo "**** cleanup ****" && \ + microdnf clean all && \ + rm -rf /tmp/* /var/tmp/* -CMD ["sh"] \ No newline at end of file +# 7. Lokale Skripte kopieren und Ausführungsrechte für S6 reparieren +ADD https://git.pi-farm.de/pi-farm/s6-overlay/archive/stable.tar.gz /tmp +RUN tar -C / -Jxpf /tmp/stable.tar.gz && rm -rf /tmp/stable.tar.gz +RUN find /etc/s6-overlay/s6-rc.d/ -type f \( -name "run" -o -name "up" \) -exec chmod +x {} + + +ENTRYPOINT ["/init"] \ No newline at end of file diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index f02657b..5f6456f 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -1,27 +1,80 @@ -# Example Dockerfile for arm64 -ARG BASE_IMAGE=alpine:latest +# syntax=docker/dockerfile:1 +ARG BUILD_BASE_IMAGE +FROM ${BUILD_BASE_IMAGE} -FROM ${BASE_IMAGE} +ARG BUILD_APP_VERSION +ARG BUILD_S6_ARCH_aarch64 +ARG BUILD_S6_OVERLAY_VERSION +ARG BUILD_DATE +ARG MODS_VERSION="v3" +ARG LSIOWN_VERSION="v1" +ARG WITHCONTENV_VERSION="v1" +ARG BUILD_APP_USER +ARG BUILD_APP_UID +ARG BUILD_APP_GID +ARG BUILD_MAINTAINER -ARG MAINTAINER -ARG TZ -ARG APP_NAME -ARG APP_USER +LABEL build_version="${BUILD_MAINTAINER} version: ${BUILD_APP_VERSION} Build-date:- ${BUILD_DATE}" +LABEL maintainer="${BUILD_MAINTAINER}" -LABEL maintainer="${MAINTAINER}" -LABEL org.opencontainers.image.title="${APP_NAME}" +# 1. EPEL Repository und Grundpakete für RHEL/UBI installieren +RUN microdnf install -y --nodocs \ + https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \ + microdnf update -y && \ + microdnf install -y --nodocs \ + xz \ + tar \ + shadow-utils \ + tzdata && \ + microdnf clean all -ENV TZ=${TZ} -ENV USER=${APP_USER} +# 2. S6 Overlay hinzufügen (explizit für aarch64) +ADD https://github.com/just-containers/s6-overlay/releases/download/v${BUILD_S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz /tmp +RUN tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz +ADD https://github.com/just-containers/s6-overlay/releases/download/v${BUILD_S6_OVERLAY_VERSION}/s6-overlay-${BUILD_S6_ARCH_aarch64}.tar.xz /tmp +RUN tar -C / -Jxpf /tmp/s6-overlay-${BUILD_S6_ARCH_aarch64}.tar.xz -RUN apk add --no-cache tzdata ca-certificates +# 3. S6 optionale Symlinks +ADD https://github.com/just-containers/s6-overlay/releases/download/v${BUILD_S6_OVERLAY_VERSION}/s6-overlay-symlinks-noarch.tar.xz /tmp +RUN tar -C / -Jxpf /tmp/s6-overlay-symlinks-noarch.tar.xz && unlink /usr/bin/with-contenv +ADD https://github.com/just-containers/s6-overlay/releases/download/v${BUILD_S6_OVERLAY_VERSION}/s6-overlay-symlinks-arch.tar.xz /tmp +RUN tar -C / -Jxpf /tmp/s6-overlay-symlinks-arch.tar.xz -WORKDIR /app -COPY ./config /app/config -COPY ./data /app/data +# 4. LSIO Mods Integration (ohne package-install, da es via COPY root/ kommt) +ADD --chmod=744 "https://raw.githubusercontent.com/linuxserver/docker-mods/mod-scripts/docker-mods.${MODS_VERSION}" "/docker-mods" +ADD --chmod=744 "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" -RUN adduser -D ${APP_USER} && chown -R ${APP_USER}:${APP_USER} /app +# 5. Umgebungsvariablen setzen +ENV HOME="/root" \ + LANGUAGE="de_DE.UTF-8" \ + LANG="de_DE.UTF-8" \ + TERM="xterm" \ + S6_CMD_WAIT_FOR_SERVICES_MAXTIME="0" \ + S6_VERBOSITY=1 \ + S6_STAGE2_HOOK=/docker-mods \ + VIRTUAL_ENV=/lsiopy \ + PATH="/lsiopy/bin:$PATH" -USER ${APP_USER} +# 6. Restliche Pakete (aus EPEL & UBI), User und Ordner anlegen +RUN echo "**** install packages and locales ****" && \ + microdnf install -y --nodocs \ + glibc-langpack-de \ + curl \ + jq \ + nmap-ncat \ + cronie && \ + echo "**** create abc user and make our folders ****" && \ + groupadd -g ${BUILD_APP_GID} ${BUILD_APP_USER} || true && \ + useradd -u ${BUILD_APP_UID} -g ${BUILD_APP_GID} -d /config -s /bin/false ${BUILD_APP_USER} && \ + mkdir -p /app /config /defaults /lsiopy && \ + echo "**** cleanup ****" && \ + microdnf clean all && \ + rm -rf /tmp/* /var/tmp/* -CMD ["sh"] \ No newline at end of file +# 7. Lokale Skripte kopieren und Ausführungsrechte für S6 reparieren +ADD https://git.pi-farm.de/pi-farm/s6-overlay/archive/stable.tar.gz /tmp +RUN tar -C / -Jxpf /tmp/stable.tar.gz && rm -rf /tmp/stable.tar.gz +RUN find /etc/s6-overlay/s6-rc.d/ -type f \( -name "run" -o -name "up" \) -exec chmod +x {} + + +ENTRYPOINT ["/init"] \ No newline at end of file diff --git a/buildargs.env b/buildargs.env index dad5f2a..6104afd 100644 --- a/buildargs.env +++ b/buildargs.env @@ -1,26 +1,25 @@ ## BUILD STAGE -BUILD_TAG=1.00 -BUILD_BASE_IMAGE=alpine:${BUILD_TAG} -## Examples for BUILD_BASE_IMAGE -# alpine:${BUILD_TAG} -# git.pi-farm.de/pi-farm/docker-baseimage-alpine:v${BUILD_TAG} -#BUILD_ALPINE_ARCH_AMD64=x86_64 -#BUILD_ALPINE_ARCH_AARCH64=aarch64 -#BUILD_S6_ARCH_amd64=x86_64 -#BUILD_S6_ARCH_aarch64=aarch64 -#BUILD_S6_OVERLAY_VERSION=3.2.0.2 -#BUILD_MAINTAINER=pi-farm -#BUILD_APP_VERSION=v${BUILD_TAG} -#BUILD_APP_NAME=basimage-alpine -#BUILD_APP_USER=pi -#BUILD_APP_GID=1000 +BUILD_BASE_TAG=9.3 +BUILD_TAG_LATEST=y +# Wir nutzen UBI Minimal für ein kleines Image +BUILD_BASE_IMAGE=registry.access.redhat.com/ubi9/ubi-minimal:latest + +BUILD_RHEL_ARCH=x86_64 +BUILD_RHEL_ARCH_AARCH64=aarch64 +BUILD_RHEL_REL=9 +BUILD_S6_ARCH_amd64=x86_64 +BUILD_S6_ARCH_aarch64=aarch64 +BUILD_S6_OVERLAY_VERSION=3.2.2.0 +BUILD_MAINTAINER=pi-farm +BUILD_APP_VERSION=ubi9 +BUILD_APP_NAME=baseimage-rhel +BUILD_APP_USER=pi +BUILD_APP_UID=1000 +BUILD_APP_GID=1000 + ## ENV STAGE ENV_TZ=Europe/Berlin ENV_PUID=1000 ENV_PGID=1000 -# VOL_CONFIG=./config:/config -# VOL_DATA=./data:/data -# PORT_WEB=8080:80 -#PUSH=gitea,dockerhub -DESCRIPTION="Example example example" - +PUSH=gitea +DESCRIPTION="This is a RHEL (UBI) based image with s6-overlay.\nBased on the great work of Linuxserver.io" \ No newline at end of file