Compare commits

...

2 commits

Author SHA1 Message Date
3f9f6999b0
dockerfile: update to f39, modernize 2023-12-16 18:03:52 -06:00
18ca288fd6
build script: shellcheck fixes 2023-12-16 09:39:26 -06:00
2 changed files with 46 additions and 60 deletions

View file

@ -1,62 +1,48 @@
# based on 'CM2Walki/steamcmd' # first image, simply get/unpack the steamcmd tarball
# modified for a more familiar/up-to-date base (fedora+test run) FROM fedora:39 as builder
FROM fedora:35
LABEL maintainer="me@jlay.io" \ LABEL maintainer="me@jlay.io" \
org.opencontainers.image.authors="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) # second/real image: copy the unpacked tarball into an updated/prepared Fedora environment
ARG PUID=1001 FROM fedora:39
ARG PGID=1002 LABEL maintainer="me@jlay.io" \
org.opencontainers.image.authors="me@jlay.io"
# set the user, homedir, and steamcmd directories as (env) variables ENV PATH="/opt/steamcmd:${PATH}"
ENV USER steam
ENV HOMEDIR "/home/${USER}"
ENV STEAMCMDDIR "${HOMEDIR}/steamcmd"
# Install, update & upgrade packages # Install, update & upgrade packages
# Create user for the server RUN set -x ; \
# This also creates the home directory we later need mkdir -vp /opt/steamcmd/linux32 ; \
# Clean TMP, dnf cache and other stuff to make the image smaller sed -i -e 's/^LANG=".*"$/LANG="en_US.UTF-8"/' /etc/locale.conf ; \
# Create Directory for SteamCMD (echo -e 'max_parallel_downloads=20\nfastestmirror=False\ndeltarpm=False' | tee -a /etc/dnf/dnf.conf) ; \
# Download SteamCMD dnf --setopt=logdir=/tmp/dnf-prep-logs --setopt=cachedir=/tmp/dnf-prep-cache -qy up ; \
# Extract and delete archive dnf --setopt=logdir=/tmp/dnf-prep-logs --setopt=cachedir=/tmp/dnf-prep-cache -qy install \
# Run steamcmd once to test things out/let it update util-linux \
# ca-certificates \
# NOTE: steamcmd doesn't appreciate the 'upstream' LANG: libgcc.{x86_64,i686} \
# WARNING: setlocale('en_US.UTF-8') failed, using locale: 'C'. International characters may not work. libstdc++.{x86_64,i686} \
# may drop this. glibc.{x86_64,i686} \
RUN set -x \ SDL2.{x86_64,i686} \
&& sed -i -e 's/^LANG=".*"$/LANG="en_US.UTF-8"/' /etc/locale.conf \ glibc-langpack-en ; \
&& echo -e 'max_parallel_downloads=20\nfastestmirror=False\ndeltarpm=False\n' | tee -a /etc/dnf/dnf.conf \ find /tmp/dnf-prep-logs /tmp/dnf-prep-cache -delete
&& 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
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"]

View file

@ -7,14 +7,14 @@ BUILD_TAG="fedora-${BASE_TAG}-${NOW}"
IMAGE_FILE="steamcmd-${BUILD_TAG}.img" IMAGE_FILE="steamcmd-${BUILD_TAG}.img"
echo "Building image steamcmd:${BUILD_TAG}" echo "Building image steamcmd:${BUILD_TAG}"
podman build --tag steamcmd:${BUILD_TAG} . podman build --tag steamcmd:"${BUILD_TAG}" .
podman save localhost/steamcmd:${BUILD_TAG} > ${IMAGE_FILE} podman save localhost/steamcmd:"${BUILD_TAG}" > "${IMAGE_FILE}"
echo "" echo ""
echo "Wrote ${IMAGE_FILE}, cleaning up" echo "Wrote ${IMAGE_FILE}, cleaning up"
podman rmi steamcmd:${BUILD_TAG} podman rmi steamcmd:"${BUILD_TAG}"
echo "" echo ""
echo "Attempting to compress the image (begin comforting music)" echo "Attempting to compress the image (begin comforting music)"
xz --keep --compress -9 --extreme --threads=$(nproc) ${IMAGE_FILE} xz --keep --compress -9 --extreme --threads="$(nproc)" "${IMAGE_FILE}"
echo "" echo ""
echo "Finished, (non)compressed images created:" echo "Finished, (non)compressed images created:"
ls --color=auto -lah ${IMAGE_FILE}* ls --color=auto -lah "${IMAGE_FILE}"*