diff --git a/Dockerfile b/Dockerfile index e768f55..f95bafe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,12 +32,9 @@ RUN apt-get clean && \ RUN mkdir -p /var/log/supervisor COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf -# === START: Oracle Client Local Copy === COPY downloads/instantclient-basic-linux-arm64.zip ./ COPY downloads/instantclient-sdk-linux-arm64.zip ./ COPY downloads/instantclient-sqlplus-linux-arm64.zip ./ -# === END: Oracle Client Local Copy === - # Unzip the files, using the -o flag to overwrite duplicates without prompting RUN unzip -o instantclient-basic-linux-arm64.zip -d /usr/local/ && \ @@ -56,15 +53,17 @@ RUN rm -f instantclient-basic-linux-arm64.zip \ instantclient-sdk-linux-arm64.zip \ instantclient-sqlplus-linux-arm64.zip -# === START: ORACLE CONFIGURATION FIX === +# Organize the Oracle libraries into a standard 'lib' directory so cmake can find them. +RUN mkdir /usr/local/instantclient/lib +RUN mv /usr/local/instantclient/*.so* /usr/local/instantclient/lib/ + RUN mkdir -p /etc/oracle RUN echo 'NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)' > /etc/oracle/sqlnet.ora ENV TNS_ADMIN=/etc/oracle -# === END: ORACLE CONFIGURATION FIX === # Update environment variables for the ARM64 paths ENV ORACLE_HOME=/usr/local/instantclient -ENV LD_LIBRARY_PATH=/usr/local/instantclient +ENV LD_LIBRARY_PATH=/usr/local/instantclient/lib ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-arm64 # Declare build arguments with a default for the repo URL @@ -83,6 +82,10 @@ RUN if [ -n "$REPO_USERNAME" ] && [ -n "$REPO_PASSWORD" ]; then \ fi WORKDIR /swg-main + +# Automatically replace the i386 Java paths with the correct arm64 paths. +RUN sed -i 's/java-11-openjdk-i386/java-11-openjdk-arm64/g' /swg-main/build.xml + RUN ant git_update_submods RUN echo "db_service = FREEPDB1" > local.properties && \ diff --git a/README.md b/README.md index a4845d1..698e15b 100644 --- a/README.md +++ b/README.md @@ -5,32 +5,16 @@ This project sets up a development environment for SWG using Docker. ## Instructions: 1. Clone this repository. -2. **(Optional)** To use a custom git repository for the server source, create a file named `.env` in this directory. See the "Custom Repository" section below for details. -3. Run `docker compose up -d --build` to build the images and start the services. -4. Run `docker exec -it swg bash` to log into a shell in the `swg` container. +2. **(Optional)** To use a custom git repository or database credentials, create a file named `.env` in this directory. See the "Custom Configuration" section below for details. +3. Run `docker compose up -d --build` to build the images and start the services. This may take a long time on the first run. +4. Run `docker exec -it swg bash` to get a shell inside the `swg` container. +5. Run `ant swg` to compile the game and assets. This is a one-time step that can take over an hour. You only need to re-run it if you destroy the Docker volumes. +6. Run `ant start &` to start the server. +7. Run `ant stop` to stop the server. -5. Update the `build.xml` file and fix the task for `set_ubuntu_cfg` so that it pulls the `ARM64` drivers rather than the `Intel` drivers. - Below is the correct configuration: +## Connecting Your Client - ```build.xml - - - - - - - - ``` - -6. Run `ant swg` to compile the game and the assets. You only need to run this once, the first time you build the docker image, or if you destroy the docker volumes. -7. Run `ant start &` to run the server. -8. Run `ant stop` to stop your server. - -## Connecting your client - -To connect your client to the server, you'll need to open the `login.cfg` file within your client directory -and set the `loginServerAddress0` to the ip address of the machine that is hosting the docker container, or -to `127.0.0.1` if you are hosting the docker container on the same machine as the client. +To connect your client, open the `login.cfg` file in your client directory and ensure the settings match the following. The server address should be `127.0.0.1` if the client is on the same machine as the Docker container. ```login.cfg [Station] @@ -42,27 +26,7 @@ to `127.0.0.1` if you are hosting the docker container on the same machine as th loginServerAddress0=127.0.0.1 ``` -**NOTE:** If your client does not connect, i.e., you're able to login but you can't connect to the galaxy, it's likely that you -need to update the CLUSTER_LIST with the correct IP ADDRESS to match where the docker container is being hosted. By default -this gets set to `127.0.0.1` in the `entrypoint.sh` script. If you're hosting docker remotely, then you need to update the -`entrypoint.sh` script, at the bottom and set the CLUSTER_LIST IP to your remote IP. Then just do a `docker compose down` and -a `docker compose up -d --build` and everything will be fixed. - -#### Completely wiping your local Docker environment - -> docker compose down -v - -This will remove all the volumes, including the database and the swg-main project directory. You will have to recompile the -project all over again. - -#### Shutting down your Container, Safely, Without Loss - -> docker compose down - -This will shut down the container, but it will keep the volumes, i.e., your database will stay, and your swg-main project -directory will be kept intact. - -## Custom Repository +## Custom SWG Repository You can configure the Docker build to pull the `swg-main` source from your own repository. Create a file named `.env` in the root of this project and add the following variables as needed.