From 0f1c6a2f93d8b0b86985e577f83ca8e5fc6787ff Mon Sep 17 00:00:00 2001 From: Timo Reichl Date: Sun, 30 Mar 2025 17:59:58 +0200 Subject: [PATCH 1/2] Dockerfile: Reuse build arguments Signed-off-by: Timo Reichl --- Dockerfile | 178 ++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 127 insertions(+), 51 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8d750bfa..4a0fdae4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,70 @@ # syntax=docker/dockerfile:1 -FROM alpine:3.20 AS rootfs-stage +## Build arguments provided via cli arguments +ARG VERSION +ARG BUILD_DATE + +## Runtime stage defaults +# Labels +ARG RUNTIME_LABEL_BUILD_VERSION="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" +ARG RUNTIME_LABEL_MAINTAINER="TheLamer" +# User: root +ARG RUNTIME_ROOT_HOME="/root" +ARG RUNTIME_ROOT_TERM="xterm" +# User: abc +ARG RUNTIME_ABC_HOME=/config +ARG RUNTIME_ABC_SHELL=/bin/false +ARG RUNTIME_ABC_GROUP=users +ARG RUNTIME_ABC_GID=1000 +ARG RUNTIME_ABC_UID=911 +# Shell prompt +ARG RUNTIME_PS1="$(whoami)@$(hostname):$(pwd)\\$ " +# s6 overlay +ARG RUNTIME_S6_CMD_WAIT_FOR_SERVICES_MAXTIME="0" +ARG RUNTIME_S6_VERBOSITY=1 +ARG RUNTIME_S6_STAGE2_HOOK=/docker-mods +# Virtual environment location of lsiopy +ARG RUNTIME_VIRTUAL_ENV=/lsiopy +# mod-scripts URL +ARG RUNTIME_MOD_SCRIPTS_URL_PREFIX=https://raw.githubusercontent.com/linuxserver/docker-mods/refs/heads/mod-scripts -# environment -ENV ROOTFS=/root-out -ENV REL=v3.21 -ENV ARCH=x86_64 -ENV MIRROR=http://dl-cdn.alpinelinux.org/alpine -ENV PACKAGES=alpine-baselayout,\ +## Build argument defaults +# Globals +ARG ROOTFS=/root-out +ARG REL=v3.21 +ARG ARCH=x86_64 +ARG MIRROR=http://dl-cdn.alpinelinux.org/alpine +ARG PACKAGES=alpine-baselayout,\ alpine-keys,\ apk-tools,\ busybox,\ libc-utils +# s6 overlay +ARG S6_OVERLAY_RELEASES_URL_PREFIX=https://github.com/just-containers/s6-overlay/releases/download +ARG S6_OVERLAY_VERSION="3.2.0.2" +ARG S6_OVERLAY_ARCH=${ARCH} +# Package versions +ARG MODS_VERSION="v3" +ARG PKG_INST_VERSION="v1" +ARG LSIOWN_VERSION="v1" +ARG WITHCONTENV_VERSION="v1" + + +# RootFS stage +FROM alpine:3.20 AS rootfs-stage + +# import global arguments +ARG ROOTFS +ARG REL +ARG ARCH +ARG MIRROR +ARG PACKAGES + +# import s6 overlay arguments +ARG S6_OVERLAY_RELEASES_URL_PREFIX +ARG S6_OVERLAY_VERSION +ARG S6_OVERLAY_ARCH + # install packages RUN \ @@ -21,56 +74,79 @@ RUN \ # build rootfs RUN \ - mkdir -p "$ROOTFS/etc/apk" && \ + mkdir -p "${ROOTFS}/etc/apk" && \ { \ - echo "$MIRROR/$REL/main"; \ - echo "$MIRROR/$REL/community"; \ - } > "$ROOTFS/etc/apk/repositories" && \ - apk --root "$ROOTFS" --no-cache --keys-dir /etc/apk/keys add --arch $ARCH --initdb ${PACKAGES//,/ } && \ - sed -i -e 's/^root::/root:!:/' /root-out/etc/shadow - -# set version for s6 overlay -ARG S6_OVERLAY_VERSION="3.2.0.2" -ARG S6_OVERLAY_ARCH="x86_64" + echo "${MIRROR}/${REL}/main"; \ + echo "${MIRROR}/${REL}/community"; \ + } > "${ROOTFS}/etc/apk/repositories" && \ + apk --root "${ROOTFS}" --no-cache --keys-dir /etc/apk/keys add --arch $ARCH --initdb ${PACKAGES//,/ } && \ + sed -i -e 's/^root::/root:!:/' ${ROOTFS}/etc/shadow # add s6 overlay -ADD https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz /tmp -RUN tar -C /root-out -Jxpf /tmp/s6-overlay-noarch.tar.xz -ADD https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-${S6_OVERLAY_ARCH}.tar.xz /tmp -RUN tar -C /root-out -Jxpf /tmp/s6-overlay-${S6_OVERLAY_ARCH}.tar.xz +ADD ${S6_OVERLAY_RELEASES_URL_PREFIX}/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz /tmp +RUN tar -C ${ROOTFS} -Jxpf /tmp/s6-overlay-noarch.tar.xz + +ADD ${S6_OVERLAY_RELEASES_URL_PREFIX}/v${S6_OVERLAY_VERSION}/s6-overlay-${S6_OVERLAY_ARCH}.tar.xz /tmp +RUN tar -C ${ROOTFS} -Jxpf /tmp/s6-overlay-${S6_OVERLAY_ARCH}.tar.xz # 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 +ADD ${S6_OVERLAY_RELEASES_URL_PREFIX}/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-noarch.tar.xz /tmp +RUN tar -C ${ROOTFS} -Jxpf /tmp/s6-overlay-symlinks-noarch.tar.xz && unlink ${ROOTFS}/usr/bin/with-contenv + +ADD ${S6_OVERLAY_RELEASES_URL_PREFIX}/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-arch.tar.xz /tmp +RUN tar -C ${ROOTFS} -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="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" -LABEL maintainer="TheLamer" -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" +# import Runtime stage label arguments +ARG RUNTIME_LABEL_BUILD_VERSION +ARG RUNTIME_LABEL_MAINTAINER + +# import global arguments +ARG ROOTFS + +# import Package version arguments +ARG MODS_VERSION +ARG PKG_INST_VERSION +ARG LSIOWN_VERSION +ARG WITHCONTENV_VERSION + +# import runtime stage arguments +ARG RUNTIME_ROOT_HOME +ARG RUNTIME_ROOT_TERM +ARG RUNTIME_ABC_HOME +ARG RUNTIME_ABC_SHELL +ARG RUNTIME_ABC_GROUP +ARG RUNTIME_ABC_GID +ARG RUNTIME_ABC_UID +ARG RUNTIME_S6_CMD_WAIT_FOR_SERVICES_MAXTIME +ARG RUNTIME_S6_VERBOSITY +ARG RUNTIME_S6_STAGE2_HOOK +ARG RUNTIME_PS1 +ARG RUNTIME_VIRTUAL_ENV +ARG RUNTIME_MOD_SCRIPTS_URL_PREFIX + +LABEL build_version="${RUNTIME_LABEL_BUILD_VERSION}" +LABEL maintainer="${RUNTIME_LABEL_MAINTAINER}" + +COPY --from=rootfs-stage ${ROOTFS} / + +ADD --chmod=755 "${RUNTIME_MOD_SCRIPTS_URL_PREFIX}/docker-mods.${MODS_VERSION}" "${RUNTIME_S6_STAGE2_HOOK}" +ADD --chmod=755 "${RUNTIME_MOD_SCRIPTS_URL_PREFIX}/package-install.${PKG_INST_VERSION}" "/etc/s6-overlay/s6-rc.d/init-mods-package-install/run" +ADD --chmod=755 "${RUNTIME_MOD_SCRIPTS_URL_PREFIX}/lsiown.${LSIOWN_VERSION}" "/usr/bin/lsiown" +ADD --chmod=755 "${RUNTIME_MOD_SCRIPTS_URL_PREFIX}/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" +ENV PS1=${RUNTIME_PS1} \ + HOME=${RUNTIME_ROOT_HOME} \ + TERM=${RUNTIME_ROOT_TERM} \ + S6_CMD_WAIT_FOR_SERVICES_MAXTIME=${RUNTIME_S6_CMD_WAIT_FOR_SERVICES_MAXTIME} \ + S6_VERBOSITY=${RUNTIME_S6_VERBOSITY} \ + S6_STAGE2_HOOK=${RUNTIME_S6_STAGE2_HOOK} \ + VIRTUAL_ENV=${RUNTIME_VIRTUAL_ENV} \ + PATH="${RUNTIME_VIRTUAL_ENV}/bin:${PATH}" RUN \ echo "**** install runtime packages ****" && \ @@ -88,14 +164,14 @@ RUN \ 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 && \ + groupmod -g ${RUNTIME_ABC_GID} ${RUNTIME_ABC_GROUP} && \ + useradd -u ${RUNTIME_ABC_UID} -U -d ${RUNTIME_ABC_HOME} -s ${RUNTIME_ABC_SHELL} abc && \ + usermod -G ${RUNTIME_ABC_GROUP} abc && \ mkdir -p \ /app \ - /config \ + ${RUNTIME_ABC_HOME} \ /defaults \ - /lsiopy && \ + ${RUNTIME_VIRTUAL_ENV} && \ echo "**** cleanup ****" && \ rm -rf \ /tmp/* From e7612f735caa8808d4295b6696146f18dd0df83b Mon Sep 17 00:00:00 2001 From: Timo Reichl Date: Sun, 30 Mar 2025 19:03:58 +0200 Subject: [PATCH 2/2] Dockerfile.aarch64: Reuse build arguments Signed-off-by: Timo Reichl --- Dockerfile.aarch64 | 178 ++++++++++++++++++++++++++++++++------------- 1 file changed, 127 insertions(+), 51 deletions(-) diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 45a26961..5e17adb3 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -1,17 +1,70 @@ # syntax=docker/dockerfile:1 -FROM alpine:3.20 AS rootfs-stage +## Build arguments provided via cli arguments +ARG VERSION +ARG BUILD_DATE + +## Runtime stage defaults +# Labels +ARG RUNTIME_LABEL_BUILD_VERSION="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" +ARG RUNTIME_LABEL_MAINTAINER="TheLamer" +# User: root +ARG RUNTIME_ROOT_HOME="/root" +ARG RUNTIME_ROOT_TERM="xterm" +# User: abc +ARG RUNTIME_ABC_HOME=/config +ARG RUNTIME_ABC_SHELL=/bin/false +ARG RUNTIME_ABC_GROUP=users +ARG RUNTIME_ABC_GID=1000 +ARG RUNTIME_ABC_UID=911 +# Shell prompt +ARG RUNTIME_PS1="$(whoami)@$(hostname):$(pwd)\\$ " +# s6 overlay +ARG RUNTIME_S6_CMD_WAIT_FOR_SERVICES_MAXTIME="0" +ARG RUNTIME_S6_VERBOSITY=1 +ARG RUNTIME_S6_STAGE2_HOOK=/docker-mods +# Virtual environment location of lsiopy +ARG RUNTIME_VIRTUAL_ENV=/lsiopy +# mod-scripts URL +ARG RUNTIME_MOD_SCRIPTS_URL_PREFIX=https://raw.githubusercontent.com/linuxserver/docker-mods/refs/heads/mod-scripts -# environment -ENV ROOTFS=/root-out -ENV REL=v3.21 -ENV ARCH=aarch64 -ENV MIRROR=http://dl-cdn.alpinelinux.org/alpine -ENV PACKAGES=alpine-baselayout,\ +## Build argument defaults +# Globals +ARG ROOTFS=/root-out +ARG REL=v3.21 +ARG ARCH=aarch64 +ARG MIRROR=http://dl-cdn.alpinelinux.org/alpine +ARG PACKAGES=alpine-baselayout,\ alpine-keys,\ apk-tools,\ busybox,\ libc-utils +# s6 overlay +ARG S6_OVERLAY_RELEASES_URL_PREFIX=https://github.com/just-containers/s6-overlay/releases/download +ARG S6_OVERLAY_VERSION="3.2.0.2" +ARG S6_OVERLAY_ARCH=${ARCH} +# Package versions +ARG MODS_VERSION="v3" +ARG PKG_INST_VERSION="v1" +ARG LSIOWN_VERSION="v1" +ARG WITHCONTENV_VERSION="v1" + + +# RootFS stage +FROM alpine:3.20 AS rootfs-stage + +# import global arguments +ARG ROOTFS +ARG REL +ARG ARCH +ARG MIRROR +ARG PACKAGES + +# import s6 overlay arguments +ARG S6_OVERLAY_RELEASES_URL_PREFIX +ARG S6_OVERLAY_VERSION +ARG S6_OVERLAY_ARCH + # install packages RUN \ @@ -21,56 +74,79 @@ RUN \ # build rootfs RUN \ - mkdir -p "$ROOTFS/etc/apk" && \ + mkdir -p "${ROOTFS}/etc/apk" && \ { \ - echo "$MIRROR/$REL/main"; \ - echo "$MIRROR/$REL/community"; \ - } > "$ROOTFS/etc/apk/repositories" && \ - apk --root "$ROOTFS" --no-cache --keys-dir /etc/apk/keys add --arch $ARCH --initdb ${PACKAGES//,/ } && \ - sed -i -e 's/^root::/root:!:/' /root-out/etc/shadow - -# set version for s6 overlay -ARG S6_OVERLAY_VERSION="3.2.0.2" -ARG S6_OVERLAY_ARCH="aarch64" + echo "${MIRROR}/${REL}/main"; \ + echo "${MIRROR}/${REL}/community"; \ + } > "${ROOTFS}/etc/apk/repositories" && \ + apk --root "${ROOTFS}" --no-cache --keys-dir /etc/apk/keys add --arch $ARCH --initdb ${PACKAGES//,/ } && \ + sed -i -e 's/^root::/root:!:/' ${ROOTFS}/etc/shadow # add s6 overlay -ADD https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz /tmp -RUN tar -C /root-out -Jxpf /tmp/s6-overlay-noarch.tar.xz -ADD https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-${S6_OVERLAY_ARCH}.tar.xz /tmp -RUN tar -C /root-out -Jxpf /tmp/s6-overlay-${S6_OVERLAY_ARCH}.tar.xz +ADD ${S6_OVERLAY_RELEASES_URL_PREFIX}/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz /tmp +RUN tar -C ${ROOTFS} -Jxpf /tmp/s6-overlay-noarch.tar.xz + +ADD ${S6_OVERLAY_RELEASES_URL_PREFIX}/v${S6_OVERLAY_VERSION}/s6-overlay-${S6_OVERLAY_ARCH}.tar.xz /tmp +RUN tar -C ${ROOTFS} -Jxpf /tmp/s6-overlay-${S6_OVERLAY_ARCH}.tar.xz # 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 +ADD ${S6_OVERLAY_RELEASES_URL_PREFIX}/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-noarch.tar.xz /tmp +RUN tar -C ${ROOTFS} -Jxpf /tmp/s6-overlay-symlinks-noarch.tar.xz && unlink ${ROOTFS}/usr/bin/with-contenv + +ADD ${S6_OVERLAY_RELEASES_URL_PREFIX}/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-arch.tar.xz /tmp +RUN tar -C ${ROOTFS} -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="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" -LABEL maintainer="TheLamer" -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" +# import Runtime stage label arguments +ARG RUNTIME_LABEL_BUILD_VERSION +ARG RUNTIME_LABEL_MAINTAINER + +# import global arguments +ARG ROOTFS + +# import Package version arguments +ARG MODS_VERSION +ARG PKG_INST_VERSION +ARG LSIOWN_VERSION +ARG WITHCONTENV_VERSION + +# import runtime stage arguments +ARG RUNTIME_ROOT_HOME +ARG RUNTIME_ROOT_TERM +ARG RUNTIME_ABC_HOME +ARG RUNTIME_ABC_SHELL +ARG RUNTIME_ABC_GROUP +ARG RUNTIME_ABC_GID +ARG RUNTIME_ABC_UID +ARG RUNTIME_S6_CMD_WAIT_FOR_SERVICES_MAXTIME +ARG RUNTIME_S6_VERBOSITY +ARG RUNTIME_S6_STAGE2_HOOK +ARG RUNTIME_PS1 +ARG RUNTIME_VIRTUAL_ENV +ARG RUNTIME_MOD_SCRIPTS_URL_PREFIX + +LABEL build_version="${RUNTIME_LABEL_BUILD_VERSION}" +LABEL maintainer="${RUNTIME_LABEL_MAINTAINER}" + +COPY --from=rootfs-stage ${ROOTFS} / + +ADD --chmod=755 "${RUNTIME_MOD_SCRIPTS_URL_PREFIX}/docker-mods.${MODS_VERSION}" "${RUNTIME_S6_STAGE2_HOOK}" +ADD --chmod=755 "${RUNTIME_MOD_SCRIPTS_URL_PREFIX}/package-install.${PKG_INST_VERSION}" "/etc/s6-overlay/s6-rc.d/init-mods-package-install/run" +ADD --chmod=755 "${RUNTIME_MOD_SCRIPTS_URL_PREFIX}/lsiown.${LSIOWN_VERSION}" "/usr/bin/lsiown" +ADD --chmod=755 "${RUNTIME_MOD_SCRIPTS_URL_PREFIX}/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" +ENV PS1=${RUNTIME_PS1} \ + HOME=${RUNTIME_ROOT_HOME} \ + TERM=${RUNTIME_ROOT_TERM} \ + S6_CMD_WAIT_FOR_SERVICES_MAXTIME=${RUNTIME_S6_CMD_WAIT_FOR_SERVICES_MAXTIME} \ + S6_VERBOSITY=${RUNTIME_S6_VERBOSITY} \ + S6_STAGE2_HOOK=${RUNTIME_S6_STAGE2_HOOK} \ + VIRTUAL_ENV=${RUNTIME_VIRTUAL_ENV} \ + PATH="${RUNTIME_VIRTUAL_ENV}/bin:${PATH}" RUN \ echo "**** install runtime packages ****" && \ @@ -88,14 +164,14 @@ RUN \ 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 && \ + groupmod -g ${RUNTIME_ABC_GID} ${RUNTIME_ABC_GROUP} && \ + useradd -u ${RUNTIME_ABC_UID} -U -d ${RUNTIME_ABC_HOME} -s ${RUNTIME_ABC_SHELL} abc && \ + usermod -G ${RUNTIME_ABC_GROUP} abc && \ mkdir -p \ /app \ - /config \ + ${RUNTIME_ABC_HOME} \ /defaults \ - /lsiopy && \ + ${RUNTIME_VIRTUAL_ENV} && \ echo "**** cleanup ****" && \ rm -rf \ /tmp/*