143 lines
4.3 KiB
Docker
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"]
|