Files
swg-server-docker/Dockerfile
2025-10-10 10:15:33 -05:00

94 lines
3.6 KiB
Docker

FROM ubuntu:18.04
RUN dpkg --add-architecture i386 && \
apt-get update
RUN apt-get install -y \
alien \
ant \
bison \
cmake \
dos2unix \
flex \
g++-multilib \
gcc-multilib \
git \
libaio1:i386 \
libboost-dev \
libboost-program-options-dev \
libcurl4-gnutls-dev:i386 \
libncurses5-dev:i386 \
libsqlite3-dev \
libxml2-dev:i386 \
openjdk-11-jdk:i386 \
psmisc \
supervisor \
wget \
vim \
nano \
tcpdump
RUN apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
RUN wget https://github.com/SWG-Source/releases/releases/download/instantclients/oracle-instantclient18.3-basiclite-18.3.0.0.0-1.i386.rpm
RUN wget https://github.com/SWG-Source/releases/releases/download/instantclients/oracle-instantclient18.3-devel-18.3.0.0.0-1.i386.rpm
RUN wget https://github.com/SWG-Source/releases/releases/download/instantclients/oracle-instantclient18.3-sqlplus-18.3.0.0.0-1.i386.rpm
RUN alien -i --target=amd64 oracle-instantclient18.3-basiclite-18.3.0.0.0-1.i386.rpm
RUN alien -i --target=amd64 oracle-instantclient18.3-devel-18.3.0.0.0-1.i386.rpm
RUN alien -i --target=amd64 oracle-instantclient18.3-sqlplus-18.3.0.0.0-1.i386.rpm
RUN rm -f oracle-instantclient18.3-*-18.3.0.0.0-1.i386.rpm
# === START: ORACLE CONFIGURATION FIX ===
# Create a directory for Oracle configuration files
RUN mkdir -p /etc/oracle
# Create sqlnet.ora to enable the EZCONNECT naming method
RUN echo 'NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)' > /etc/oracle/sqlnet.ora
# Tell the Oracle client where to find the configuration
ENV TNS_ADMIN=/etc/oracle
# === END: ORACLE CONFIGURATION FIX ===
ENV ORACLE_HOME=/usr/lib/oracle/18.3/client
ENV LD_LIBRARY_PATH=/usr/lib/oracle/18.3/client/lib:/usr/include/oracle/18.3/client
ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-i386
# Declare build arguments with a default for the repo URL
ARG REPO_URL=https://github.com/SWG-Source/swg-main.git
ARG REPO_USERNAME
ARG REPO_PASSWORD
# Clone the repository, using credentials if provided
RUN if [ -n "$REPO_USERNAME" ] && [ -n "$REPO_PASSWORD" ]; then \
# URL-encode the password to handle special characters
ENCODED_PASSWORD=$(echo "$REPO_PASSWORD" | sed -e 's/%/%25/g' -e 's/@/%40/g' -e 's/:/%3A/g' -e 's/\$/%24/g' -e 's/&/%26/g' -e 's/+/%2B/g' -e 's/,/%2C/g' -e 's|/|%2F|g' -e 's/;/%3B/g' -e 's/=/%3D/g' -e 's/?/%3F/g' -e 's/ /%20/g'); \
# Extract the hostname (e.g., gitlab.bmcstudios.org) from the repo URL
REPO_HOST=$(echo "$REPO_URL" | sed -e 's|https://||' -e 's|/.*||'); \
# Globally configure git to rewrite URLs for this host to include credentials.
# This ensures ALL git operations for this host are authenticated.
git config --global url."https://${REPO_USERNAME}:${ENCODED_PASSWORD}@${REPO_HOST}".insteadOf "https://${REPO_HOST}"; \
# Now clone the repository and its submodules. The rewrite rule will be applied automatically.
git clone --recurse-submodules "${REPO_URL}" /swg-main; \
else \
git clone --recurse-submodules "${REPO_URL}" /swg-main; \
fi
WORKDIR /swg-main
RUN ant git_update_submods
RUN echo "db_service = FREEPDB1" > local.properties && \
echo "dbip = oracle" >> local.properties
# Copy the entrypoint script, convert its line endings, and make it executable
COPY entrypoint.sh /usr/local/bin/
RUN dos2unix /usr/local/bin/entrypoint.sh && chmod +x /usr/local/bin/entrypoint.sh
# Set the entrypoint
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
# The original command now runs via the entrypoint script
CMD ["/usr/bin/supervisord", "-n"]