dockerfile: update to f39, modernize
This commit is contained in:
parent
18ca288fd6
commit
3f9f6999b0
1 changed files with 41 additions and 55 deletions
96
Dockerfile
96
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"]
|
||||
|
|
Loading…
Reference in a new issue