push docker version
This commit is contained in:
@@ -0,0 +1,142 @@
|
||||
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"]
|
||||
@@ -0,0 +1,73 @@
|
||||
#!/bin/sh
|
||||
|
||||
eval $(fixuid -q)
|
||||
|
||||
client_data_dir="/opt/vmangos/storage/client-data"
|
||||
extracted_data_dir="/opt/vmangos/storage/extracted-data"
|
||||
extractors_dir="/opt/vmangos/bin/Extractors"
|
||||
client_version_dir="$extracted_data_dir/$VMANGOS_CLIENT_VERSION"
|
||||
|
||||
# The `--force` flag can be used to skip the confirmation prompt when
|
||||
# previously extracted data is found. This is particularly useful for
|
||||
# automation where the user is not able to interact with the prompt.
|
||||
force=false
|
||||
|
||||
while [ "$#" -gt 0 ]; do
|
||||
case "$1" in
|
||||
-f|--force)
|
||||
# If user passes `-f` or `--force`, set 'force' to true
|
||||
force=true
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ ! -d "$client_data_dir" ] || [ ! -d "$client_data_dir/Data" ]; then
|
||||
echo "[vmangos-deploy]: ERROR: Client data not found in '$client_data_dir', aborting extraction" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "$extracted_data_dir" ]; then
|
||||
echo "[vmangos-deploy]: ERROR: Extracted data target directory '$extracted_data_dir' doesn't exist, aborting extraction" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd "$client_data_dir"
|
||||
|
||||
if [ "$force" = false ]; then
|
||||
if [ -d "$extracted_data_dir/maps" ] || [ -d "$extracted_data_dir/mmaps" ] || [ -d "$extracted_data_dir/vmaps" ] || [ -d "$client_version_dir" ]; then
|
||||
echo "[vmangos-deploy]: Previously extracted data has been found in '$extracted_data_dir'; continue with the extraction (which will overwrite the old data)? [Y/n]"
|
||||
|
||||
read -r choice
|
||||
choice=$(echo "${choice:-y}" | tr -d '[:space:]')
|
||||
if [ "$choice" = "n" ] || [ "$choice" = "N" ]; then
|
||||
echo "[vmangos-deploy]: Aborting extraction"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Remove any potentially previously extracted data from the client directory
|
||||
rm -rf ./Buildings ./Cameras ./dbc ./maps ./mmaps ./vmaps
|
||||
|
||||
"$extractors_dir/MapExtractor"
|
||||
"$extractors_dir/VMapExtractor"
|
||||
"$extractors_dir/VMapAssembler"
|
||||
"$extractors_dir/mmap_extract.py" \
|
||||
--configInputPath "$extractors_dir/config.json" \
|
||||
--offMeshInput "$extractors_dir/offmesh.txt"
|
||||
|
||||
# Delete extracted data that is no longer needed after processing it to avoid
|
||||
# confusion
|
||||
rm -rf ./Buildings ./Cameras
|
||||
|
||||
# Remove any potentially already existing data from the extracted data
|
||||
# directory before moving the new data there
|
||||
rm -rf "$extracted_data_dir"/*
|
||||
|
||||
mkdir -p "$client_version_dir"
|
||||
mv ./dbc "$client_version_dir/"
|
||||
mv ./maps ./mmaps ./vmaps "$extracted_data_dir/"
|
||||
@@ -0,0 +1,12 @@
|
||||
#!/bin/sh
|
||||
|
||||
eval $(fixuid -q)
|
||||
|
||||
config_file="/opt/vmangos/config/mangosd.conf"
|
||||
|
||||
if [ ! -f "$config_file" ]; then
|
||||
echo "[vmangos-deploy]: ERROR: Configuration file '$config_file' is missing, exiting" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
WAIT_LOGGER_LEVEL=error wait-for-db && exec /opt/vmangos/bin/mangosd -c $config_file
|
||||
@@ -0,0 +1,12 @@
|
||||
#!/bin/sh
|
||||
|
||||
eval $(fixuid -q)
|
||||
|
||||
config_file="/opt/vmangos/config/realmd.conf"
|
||||
|
||||
if [ ! -f "$config_file" ]; then
|
||||
echo "[vmangos-deploy]: ERROR: Configuration file '$config_file' is missing, exiting" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
WAIT_LOGGER_LEVEL=error wait-for-db && exec /opt/vmangos/bin/realmd -c $config_file
|
||||
Reference in New Issue
Block a user