# 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 # 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 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 \ wget \ less \ findutils \ 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 # 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/ # 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"]