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"]
 | 
