2025-08-21 18:36:36 +02:00

143 lines
4.3 KiB
Docker

ARG DEBIAN_FRONTEND=noninteractive
ARG VMANGOS_CLIENT_VERSION=5875
ARG VMANGOS_REPOSITORY_URL=https://github.com/vmangos/core.git
ARG VMANGOS_REVISION=development
ARG VMANGOS_PATCHES_REPOSITORY_URL
ARG VMANGOS_USER_ID=1000
ARG VMANGOS_GROUP_ID=1000
ARG VMANGOS_USER_NAME=vmangos
ARG VMANGOS_GROUP_NAME=vmangos
FROM ubuntu:24.04 AS build
ARG DEBIAN_FRONTEND
ARG VMANGOS_CLIENT_VERSION
ARG VMANGOS_REPOSITORY_URL
ARG VMANGOS_REVISION
ARG VMANGOS_PATCHES_REPOSITORY_URL
RUN \
apt update -y && \
apt install -y \
build-essential \
cmake \
git \
libace-dev \
libcurl4-openssl-dev \
libmysqlclient-dev \
libssl-dev \
libtbb-dev \
zlib1g-dev && \
git clone "${VMANGOS_REPOSITORY_URL}" /core && \
cd /core && \
git checkout "${VMANGOS_REVISION}" && \
if [ -n "${VMANGOS_PATCHES_REPOSITORY_URL}" ]; then \
echo "Cloning and applying patches from ${VMANGOS_PATCHES_REPOSITORY_URL}"; \
git clone "${VMANGOS_PATCHES_REPOSITORY_URL}" /tmp/patches && \
for patch in /tmp/patches/*.patch; do \
if [ -f "${patch}" ]; then \
echo "Applying patch ${patch}"; \
git apply "${patch}"; \
fi; \
done; \
rm -rf /tmp/patches; \
else \
echo "No repository to apply patches from provided."; \
fi && \
mkdir -p \
/opt/vmangos/config \
/opt/vmangos/storage/data \
/opt/vmangos/storage/honor \
/opt/vmangos/storage/logs && \
mkdir /core/build && \
cd /core/build && \
cmake \
-DCMAKE_INSTALL_PREFIX=/opt/vmangos ../ \
-DUSE_PCH=1 \
-DUSE_STD_MALLOC=0 \
-DBUILD_FOR_HOST_CPU=0 \
-DTBB_DEBUG=0 \
-DUSE_SCRIPTS=1 \
-DUSE_EXTRACTORS=1 \
-DUSE_REALMMERGE=0 \
-DENABLE_MAILSENDER=1 \
-DSUPPORTED_CLIENT_BUILD=${VMANGOS_CLIENT_VERSION} \
-DDEBUG_SYMBOLS=0 && \
make -j$(nproc) && \
make install && \
rm -rf /core && \
apt clean -y && \
rm -rf /var/lib/apt/lists/*
FROM ubuntu:24.04
ARG DEBIAN_FRONTEND
ARG TARGETARCH
ARG VMANGOS_CLIENT_VERSION
ARG VMANGOS_USER_ID
ARG VMANGOS_GROUP_ID
ARG VMANGOS_USER_NAME
ARG VMANGOS_GROUP_NAME
ENV PYTHONUNBUFFERED=1
ENV VMANGOS_CLIENT_VERSION=${VMANGOS_CLIENT_VERSION}
RUN \
apt update -y && \
apt install -y \
curl \
libace-7.1.2 \
libcurl4 \
libmysqlclient21 \
libssl3 \
libtbb12 \
netcat-openbsd \
python3 \
python-is-python3 \
zlib1g && \
existing_group=$(getent group "${VMANGOS_GROUP_ID}") || true && \
existing_user=$(getent passwd "${VMANGOS_USER_ID}") || true && \
if [ -n "${existing_group}" ]; then \
old_groupname=$(echo "${existing_group}" | cut -d: -f1) && \
groupmod -n "${VMANGOS_GROUP_NAME}" "${old_groupname}"; \
else \
groupadd -g "${VMANGOS_GROUP_ID}" "${VMANGOS_GROUP_NAME}"; \
fi && \
if [ -n "${existing_user}" ]; then \
old_username=$(echo "${existing_user}" | cut -d: -f1) && \
usermod -l "${VMANGOS_USER_NAME}" -d "/home/${VMANGOS_USER_NAME}" "${old_username}" && \
mv "/home/${old_username}" "/home/${VMANGOS_USER_NAME}"; \
else \
useradd -u "${VMANGOS_USER_ID}" -g "${VMANGOS_GROUP_NAME}" -d "/home/${VMANGOS_USER_NAME}" -s /bin/sh -m "${VMANGOS_USER_NAME}"; \
fi && \
# See https://github.com/boxboat/fixuid
curl -SsL https://github.com/boxboat/fixuid/releases/download/v0.6.0/fixuid-0.6.0-linux-${TARGETARCH}.tar.gz | tar -C /usr/local/bin -xzf - && \
chown root:root /usr/local/bin/fixuid && \
chmod 4755 /usr/local/bin/fixuid && \
mkdir -p /etc/fixuid && \
printf "user: ${VMANGOS_USER_NAME}\ngroup: ${VMANGOS_GROUP_NAME}\n" > /etc/fixuid/config.yml && \
apt remove -y curl && \
apt autoremove -y && \
apt clean -y && \
rm -rf /var/lib/apt/lists/*
COPY --from=build --chown=${VMANGOS_USER_NAME}:${VMANGOS_GROUP_NAME} /opt /opt
# See https://github.com/ufoscout/docker-compose-wait
COPY --from=ghcr.io/ufoscout/docker-compose-wait:latest /wait /usr/local/bin/wait-for-db
COPY ./docker/server/docker-cmd-mangosd.sh /usr/local/bin/mangosd
COPY ./docker/server/docker-cmd-realmd.sh /usr/local/bin/realmd
COPY ./docker/server/docker-cmd-extract-client-data.sh /usr/local/bin/extract-client-data
RUN \
chmod +x /opt/vmangos/bin/* && \
find /opt/vmangos/bin/Extractors/ -type f ! -regex ".*\.\(json\|txt\)$" -exec chmod +x {} + && \
chmod +x /usr/local/bin/mangosd && \
chmod +x /usr/local/bin/realmd && \
chmod +x /usr/local/bin/extract-client-data
USER ${VMANGOS_USER_NAME}:${VMANGOS_GROUP_NAME}
CMD ["mangosd"]