Add client dockerfile
This commit is contained in:
parent
71e6f98c5d
commit
6179db0165
@ -14,20 +14,21 @@ variables:
|
|||||||
DOCKER_HOST: tcp://docker:2376
|
DOCKER_HOST: tcp://docker:2376
|
||||||
DOCKER_TLS_CERTDIR: "/certs"
|
DOCKER_TLS_CERTDIR: "/certs"
|
||||||
OPENGL_CONTAINER_CURRENT_IMAGE: $CI_REGISTRY_IMAGE/opengl:$CI_COMMIT_REF_SLUG
|
OPENGL_CONTAINER_CURRENT_IMAGE: $CI_REGISTRY_IMAGE/opengl:$CI_COMMIT_REF_SLUG
|
||||||
|
OPENGL_CONTAINER_GITSHA_SHORT_IMAGE: $CI_REGISTRY_IMAGE/opengl:$CI_COMMIT_SHORT_SHA
|
||||||
|
OPENGL_CONTAINER_GITSHA_IMAGE: $CI_REGISTRY_IMAGE/opengl:$CI_COMMIT_SHA
|
||||||
OPENGL_CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE/opengl:latest
|
OPENGL_CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE/opengl:latest
|
||||||
|
CLIENT_CONTAINER_CURRENT_IMAGE: $CI_REGISTRY_IMAGE/client:$CI_COMMIT_REF_SLUG
|
||||||
|
CLIENT_CONTAINER_GITSHA_SHORT_IMAGE: $CI_REGISTRY_IMAGE/client:$CI_COMMIT_SHORT_SHA
|
||||||
|
CLIENT_CONTAINER_GITSHA_IMAGE: $CI_REGISTRY_IMAGE/client:$CI_COMMIT_SHA
|
||||||
|
CLIENT_CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE/client:latest
|
||||||
|
|
||||||
|
|
||||||
build_opengl:
|
build_opengl:
|
||||||
stage: build
|
stage: build
|
||||||
script:
|
script:
|
||||||
- cd opengl
|
- cd opengl
|
||||||
- docker build --pull -t $OPENGL_CONTAINER_CURRENT_IMAGE .
|
- docker buildx --pull -t $OPENGL_CONTAINER_CURRENT_IMAGE -t $OPENGL_CONTAINER_GITSHA_IMAGE -t $OPENGL_CONTAINER_GITSHA_SHORT_IMAGE .
|
||||||
- docker push $OPENGL_CONTAINER_CURRENT_IMAGE
|
- docker push $OPENGL_CONTAINER_CURRENT_IMAGE
|
||||||
rules:
|
|
||||||
- changes:
|
|
||||||
- opengl/**/*
|
|
||||||
- if: $CI_PIPELINE_SOURCE == "web"
|
|
||||||
when: always
|
|
||||||
|
|
||||||
|
|
||||||
release-image_opengl:
|
release-image_opengl:
|
||||||
stage: release
|
stage: release
|
||||||
@ -38,8 +39,31 @@ release-image_opengl:
|
|||||||
- docker push $OPENGL_CONTAINER_RELEASE_IMAGE
|
- docker push $OPENGL_CONTAINER_RELEASE_IMAGE
|
||||||
rules:
|
rules:
|
||||||
- if: $CI_COMMIT_BRANCH == "main"
|
- if: $CI_COMMIT_BRANCH == "main"
|
||||||
- changes:
|
- if: $CI_PIPELINE_SOURCE == "web"
|
||||||
- opengl/**/*
|
when: always
|
||||||
|
|
||||||
|
build_client:
|
||||||
|
stage: build
|
||||||
|
needs:
|
||||||
|
- build_opengl
|
||||||
|
script:
|
||||||
|
- cd client
|
||||||
|
- docker buildx build --pull --build-arg "OPENGL_BASE_IMAGE=$OPENGL_CONTAINER_GITSHA_IMAGE" -t $CLIENT_CONTAINER_CURRENT_IMAGE -t $CLIENT_CONTAINER_GITSHA_IMAGE -t $CLIENT_CONTAINER_GITSHA_SHORT_IMAGE .
|
||||||
|
- docker push $CLIENT_CONTAINER_CURRENT_IMAGE
|
||||||
|
- docker push $CLIENT_CONTAINER_GITSHA_IMAGE
|
||||||
|
- docker push $CLIENT_CONTAINER_GITSHA_SHORT_IMAGE
|
||||||
|
|
||||||
|
release-image_client:
|
||||||
|
stage: release
|
||||||
|
needs:
|
||||||
|
- release-image_opengl
|
||||||
|
script:
|
||||||
|
- cd client
|
||||||
|
- docker pull $CLIENT_CONTAINER_CURRENT_IMAGE
|
||||||
|
- docker tag $CLIENT_CONTAINER_CURRENT_IMAGE $CLIENT_CONTAINER_RELEASE_IMAGE
|
||||||
|
- docker push $CLIENT_CONTAINER_RELEASE_IMAGE
|
||||||
|
rules:
|
||||||
|
- if: $CI_COMMIT_BRANCH == "main"
|
||||||
- if: $CI_PIPELINE_SOURCE == "web"
|
- if: $CI_PIPELINE_SOURCE == "web"
|
||||||
when: always
|
when: always
|
||||||
|
|
||||||
|
91
client/Dockerfile
Normal file
91
client/Dockerfile
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
FROM alpine:latest AS compile
|
||||||
|
|
||||||
|
ARG MINETEST_VERSION=5.9.1
|
||||||
|
ARG MINETEST_GAME_VERSION=5.8.0
|
||||||
|
ARG LUAJIT_VERSION=v2.1
|
||||||
|
RUN apk add --no-cache git build-base cmake curl-dev zlib-dev zstd-dev \
|
||||||
|
sqlite-dev postgresql-dev hiredis-dev leveldb-dev jpeg-dev libpng-dev \
|
||||||
|
glfw-dev gmp-dev jsoncpp-dev libxi-dev libintl ninja ca-certificates \
|
||||||
|
freetype-dev
|
||||||
|
WORKDIR /usr/src/
|
||||||
|
RUN git clone --recursive https://github.com/libspatialindex/libspatialindex && \
|
||||||
|
cd libspatialindex && \
|
||||||
|
cmake -B build \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=/usr/local && \
|
||||||
|
cmake --build build && \
|
||||||
|
cmake --install build && \
|
||||||
|
cd /usr/src/ && \
|
||||||
|
git clone --recursive https://luajit.org/git/luajit.git -b ${LUAJIT_VERSION} && \
|
||||||
|
cd luajit && \
|
||||||
|
make amalg && make install && \
|
||||||
|
cd /usr/src/ && \
|
||||||
|
git clone --depth=1 --single-branch --branch ${MINETEST_VERSION} -c advice.detachedHead=false https://github.com/minetest/minetest.git minetest && \
|
||||||
|
rm -fr minetest/.git && \
|
||||||
|
git clone --depth=1 -b ${MINETEST_GAME_VERSION} https://github.com/minetest/minetest_game.git minetest/games/minetest_game && \
|
||||||
|
rm -fr minetest/games/minetest_game/.git
|
||||||
|
WORKDIR /usr/src/minetest
|
||||||
|
RUN cmake -B build \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=/usr/local \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DBUILD_SERVER=FALSE \
|
||||||
|
-DBUILD_CLIENT=TRUE \
|
||||||
|
-DBUILD_UNITTESTS=FALSE \
|
||||||
|
-DENABLE_SOUND=OFF \
|
||||||
|
-DENABLE_POSTGRESQL=OFF \
|
||||||
|
-DENABLE_REDIS=OFF \
|
||||||
|
-DENABLE_PROMETHEUS=FALSE \
|
||||||
|
-DVERSION_EXTRA=docker_client \
|
||||||
|
-GNinja && \
|
||||||
|
cmake --build build && \
|
||||||
|
cmake --install build
|
||||||
|
|
||||||
|
ARG OPENGL_BASE_IMAGE
|
||||||
|
FROM ${OPENGL_BASE_IMAGE}
|
||||||
|
|
||||||
|
COPY --from=compile /usr/local/share/minetest /usr/local/share/minetest
|
||||||
|
COPY --from=compile /usr/local/bin/minetest /usr/local/bin/minetest
|
||||||
|
COPY --from=compile /usr/local/bin /usr/local/bin
|
||||||
|
COPY --from=compile /usr/local/lib /usr/local/lib
|
||||||
|
COPY ./entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||||
|
|
||||||
|
RUN apk add --no-cache sqlite-libs curl gmp libstdc++ libgcc luajit irrlicht x11vnc bash xdotool leveldb jsoncpp libxi jpeg libpng bind-tools jsoncpp && \
|
||||||
|
adduser -D minetest --uid 30000 -h /var/lib/minetest && \
|
||||||
|
mkdir /var/lib/minetest/.minetest && \
|
||||||
|
chown -R minetest:minetest /var/lib/minetest && \
|
||||||
|
chmod 755 /usr/local/bin/entrypoint.sh
|
||||||
|
|
||||||
|
|
||||||
|
WORKDIR /var/lib/minetest
|
||||||
|
|
||||||
|
COPY --chown=minetest:minetest <<EOF /var/lib/minetest/.minetest/minetest.conf
|
||||||
|
enable_fog = false
|
||||||
|
leaves_style = opaque
|
||||||
|
smooth_lighting = false
|
||||||
|
enable_clouds = false
|
||||||
|
enable_sound = false
|
||||||
|
enable_particles = false
|
||||||
|
undersampling = 8
|
||||||
|
enable_shaders = false
|
||||||
|
fps_max = 10
|
||||||
|
viewing_range = 20
|
||||||
|
screen_w = 640
|
||||||
|
screen_h = 480
|
||||||
|
fullscreen_bpp = 8
|
||||||
|
fov = 45
|
||||||
|
video_driver = opengl
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
USER minetest:minetest
|
||||||
|
|
||||||
|
ENV \
|
||||||
|
SERVER="minetest_server" \
|
||||||
|
PASSWORD="" \
|
||||||
|
PORT="30000" \
|
||||||
|
PLAYERNAME="random" \
|
||||||
|
RANDOM_INPUT="0" \
|
||||||
|
VNC="0"
|
||||||
|
|
||||||
|
# EXPOSE 5900/tcp
|
||||||
|
CMD ["/usr/local/bin/entrypoint.sh"]
|
||||||
|
|
41
client/entrypoint.sh
Normal file
41
client/entrypoint.sh
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
export DISPLAY=:99
|
||||||
|
|
||||||
|
rm -f /tmp/.X1-lock
|
||||||
|
|
||||||
|
# Start Xvfb
|
||||||
|
echo "Starting Xvfb"
|
||||||
|
Xvfb $DISPLAY -ac -screen 0 800x600x16 2>&1 &
|
||||||
|
xvfb_pid=$!
|
||||||
|
|
||||||
|
# prevent spikes if you spawn many containers simultaneously
|
||||||
|
sleep $((2 + $RANDOM % 6))
|
||||||
|
|
||||||
|
|
||||||
|
if [ "${PLAYERNAME,,}" == "random" ]
|
||||||
|
then
|
||||||
|
PLAYERNAME=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 8)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$RANDOM_INPUT" == "1" ]
|
||||||
|
then
|
||||||
|
minetest --address "$SERVER" --port "$PORT" --name "$PLAYERNAME" --password "$PASSWORD" --go --random-input &
|
||||||
|
else
|
||||||
|
echo minetest --address "$SERVER" --port "$PORT" --name "$PLAYERNAME" --password "$PASSWORD" --go
|
||||||
|
minetest --address "$SERVER" --port "$PORT" --name "$PLAYERNAME" --password "$PASSWORD" --go &
|
||||||
|
fi
|
||||||
|
minetest_pid=$!
|
||||||
|
|
||||||
|
function finish {
|
||||||
|
kill -n 9 $minetest_pid & wait
|
||||||
|
kill -n 9 $xvfb_pid & wait
|
||||||
|
}
|
||||||
|
trap finish EXIT TERM INT QUIT
|
||||||
|
|
||||||
|
# Workaround to revive died players
|
||||||
|
while :
|
||||||
|
do
|
||||||
|
sleep 10
|
||||||
|
xdotool key --delay 100 KP_Enter
|
||||||
|
done
|
Loading…
x
Reference in New Issue
Block a user