diff --git a/Dockerfile b/Dockerfile index c456b83..9c06293 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,62 +1,48 @@ -# based on 'CM2Walki/steamcmd' -# modified for a more familiar/up-to-date base (fedora+test run) - -FROM fedora:35 +# first image, simply get/unpack the steamcmd tarball +FROM fedora:39 as builder LABEL maintainer="me@jlay.io" \ org.opencontainers.image.authors="me@jlay.io" +WORKDIR /root +RUN curl -sq http://media.steampowered.com/installer/steamcmd_linux.tar.gz | tar -xvz -# site customizations below, change as necessary (eg: to match Docker volume host UID/GID owners) -ARG PUID=1001 -ARG PGID=1002 - -# set the user, homedir, and steamcmd directories as (env) variables -ENV USER steam -ENV HOMEDIR "/home/${USER}" -ENV STEAMCMDDIR "${HOMEDIR}/steamcmd" +# second/real image: copy the unpacked tarball into an updated/prepared Fedora environment +FROM fedora:39 +LABEL maintainer="me@jlay.io" \ + org.opencontainers.image.authors="me@jlay.io" +ENV PATH="/opt/steamcmd:${PATH}" # Install, update & upgrade packages -# Create user for the server -# This also creates the home directory we later need -# Clean TMP, dnf cache and other stuff to make the image smaller -# Create Directory for SteamCMD -# Download SteamCMD -# Extract and delete archive -# Run steamcmd once to test things out/let it update -# -# NOTE: steamcmd doesn't appreciate the 'upstream' LANG: -# WARNING: setlocale('en_US.UTF-8') failed, using locale: 'C'. International characters may not work. -# may drop this. -RUN set -x \ - && sed -i -e 's/^LANG=".*"$/LANG="en_US.UTF-8"/' /etc/locale.conf \ - && echo -e 'max_parallel_downloads=20\nfastestmirror=False\ndeltarpm=False\n' | tee -a /etc/dnf/dnf.conf \ - && dnf install -qy \ - util-linux \ - findutils \ - wget \ - ca-certificates \ - vim \ - less \ - curl \ - libstdc++.{x86_64,i686} \ - libgcc.{x86_64,i686} \ - glibc.{x86_64,i686} \ - SDL2.{x86_64,i686} \ - && dnf -qy up \ - && dnf clean all \ - && useradd -u "${PUID}" -m "${USER}" \ - && su "${USER}" -c \ - "mkdir -p \"${STEAMCMDDIR}\" \ - && wget -qO- 'https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz' | tar xvzf - -C \"${STEAMCMDDIR}\" \ - && \"./${STEAMCMDDIR}/steamcmd.sh\" +quit \ - && mkdir -p \"${HOMEDIR}/.steam/sdk32\" \ - && ln -s \"${STEAMCMDDIR}/linux32/steamclient.so\" \"${HOMEDIR}/.steam/sdk32/steamclient.so\" \ - && ln -s \"${STEAMCMDDIR}/linux32/steamcmd\" \"${STEAMCMDDIR}/linux32/steam\" \ - && ln -s \"${STEAMCMDDIR}/steamcmd.sh\" \"${STEAMCMDDIR}/steam.sh\"" \ - && echo -e "#\!/bin/bash\npushd ${STEAMCMDDIR}\n./steamcmd.sh\npopd" | tee -a /usr/local/bin/steamcmd \ - && chmod -v +x /usr/local/bin/steamcmd \ - && ln -s "${STEAMCMDDIR}/linux64/steamclient.so" "/usr/lib64/steamclient.so" \ - && ${STEAMCMDDIR}/steamcmd.sh +quit +RUN set -x ; \ + mkdir -vp /opt/steamcmd/linux32 ; \ + sed -i -e 's/^LANG=".*"$/LANG="en_US.UTF-8"/' /etc/locale.conf ; \ + (echo -e 'max_parallel_downloads=20\nfastestmirror=False\ndeltarpm=False' | tee -a /etc/dnf/dnf.conf) ; \ + dnf --setopt=logdir=/tmp/dnf-prep-logs --setopt=cachedir=/tmp/dnf-prep-cache -qy up ; \ + dnf --setopt=logdir=/tmp/dnf-prep-logs --setopt=cachedir=/tmp/dnf-prep-cache -qy install \ + util-linux \ + ca-certificates \ + libgcc.{x86_64,i686} \ + libstdc++.{x86_64,i686} \ + glibc.{x86_64,i686} \ + SDL2.{x86_64,i686} \ + glibc-langpack-en ; \ + find /tmp/dnf-prep-logs /tmp/dnf-prep-cache -delete -WORKDIR ${STEAMCMDDIR} +# from the builder, copy the extracted steamcmd bits +# COPY doesn't take directories with it, only their contents. so dumb. +COPY --from=builder /root/steam*.sh /opt/steamcmd +COPY --from=builder /root/linux32/* /opt/steamcmd/linux32/ -VOLUME ${STEAMCMDDIR} +# Make the Steam libraries permanently part of the environment +# for those who this inspires, a note: +# I would only recommend this *in containers*. +# it's remarkably easy to break loosely-linked software like this. +RUN echo '/opt/steamcmd/linux32' | tee /etc/ld.so.conf.d/steam.conf ; ldconfig ; \ + ln -sv /opt/steamcmd/linux32/steam{client,service}.so +# also, map steamclient.so -> steamservice.so. this silences some complaints + +# test steamcmd; ensure function and updates +RUN steamcmd.sh +quit + +# default cmd, steamcmd 'installed' to /opt. required extending $PATH in env above +ENTRYPOINT ["steamcmd.sh"] +CMD ["+help", ""+quit"]