BREAKING CHANGES - Radical Reconfiguration (TM)
Build Container Image / build_amd64 (push) Successful in 1m52s Details
Build Container Image / publish_amd64 (push) Successful in 39s Details
Build Container Image / build_arm64 (push) Successful in 4m55s Details
Build Container Image / publish_arm64 (push) Successful in 17s Details
Build Container Image / build_armhf (push) Successful in 7m45s Details
Build Container Image / publish_armhf (push) Successful in 30s Details
Build Container Image / build_riscv64 (push) Successful in 8m47s Details
Build Container Image / build_manifest (push) Successful in 5s Details
Build Container Image / publish_riscv64 (push) Successful in 26s Details
Build Container Image / publish_manifest (push) Successful in 30s Details

This commit is contained in:
Daniel Wolf 2023-07-10 16:30:41 -04:00
parent f27a0c8617
commit 5f1d851b31
Signed by: nephatrine
GPG Key ID: 59D70EC2E4AAB4D0
12 changed files with 449 additions and 318 deletions

View File

@ -1,6 +1,6 @@
.drone.yml
.git .git
.gitea .gitea
.gitignore .gitignore
LICENSE.md LICENSE.md
README.md README.md
docker-compose.yml

View File

@ -11,8 +11,7 @@ jobs:
- name: Docker Build - name: Docker Build
run: | run: |
docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-cached --target builder ${{ gitea.workspace }} docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-cached --target builder ${{ gitea.workspace }}
docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-amd64 --target dedicated ${{ gitea.workspace }} docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-amd64 ${{ gitea.workspace }}
docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-nginx-amd64 ${{ gitea.workspace }}
- name: Docker Login - name: Docker Login
uses: actions/docker-login@v2 uses: actions/docker-login@v2
with: with:
@ -20,9 +19,7 @@ jobs:
username: ${{ gitea.actor }} username: ${{ gitea.actor }}
password: ${{ secrets.PACKAGER_TOKEN }} password: ${{ secrets.PACKAGER_TOKEN }}
- name: Docker Push - name: Docker Push
run: | run: docker push code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-amd64
docker push code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-amd64
docker push code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-nginx-amd64
- name: Notify Discord - name: Notify Discord
uses: actions/discord-status@v1 uses: actions/discord-status@v1
if: always() if: always()
@ -38,8 +35,7 @@ jobs:
- name: Docker Build - name: Docker Build
run: | run: |
docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-cached --target builder ${{ gitea.workspace }} docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-cached --target builder ${{ gitea.workspace }}
docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-arm64v8 --target dedicated ${{ gitea.workspace }} docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-arm64v8 ${{ gitea.workspace }}
docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-nginx-arm64v8 ${{ gitea.workspace }}
- name: Docker Login - name: Docker Login
uses: actions/docker-login@v2 uses: actions/docker-login@v2
with: with:
@ -47,9 +43,7 @@ jobs:
username: ${{ gitea.actor }} username: ${{ gitea.actor }}
password: ${{ secrets.PACKAGER_TOKEN }} password: ${{ secrets.PACKAGER_TOKEN }}
- name: Docker Push - name: Docker Push
run: | run: docker push code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-arm64v8
docker push code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-arm64v8
docker push code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-nginx-arm64v8
- name: Notify Discord - name: Notify Discord
uses: actions/discord-status@v1 uses: actions/discord-status@v1
if: always() if: always()
@ -65,8 +59,7 @@ jobs:
- name: Docker Build - name: Docker Build
run: | run: |
docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-cached --target builder ${{ gitea.workspace }} docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-cached --target builder ${{ gitea.workspace }}
docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-armv7 --target dedicated ${{ gitea.workspace }} docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-armv7 ${{ gitea.workspace }}
docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-nginx-armv7 ${{ gitea.workspace }}
- name: Docker Login - name: Docker Login
uses: actions/docker-login@v2 uses: actions/docker-login@v2
with: with:
@ -74,9 +67,7 @@ jobs:
username: ${{ gitea.actor }} username: ${{ gitea.actor }}
password: ${{ secrets.PACKAGER_TOKEN }} password: ${{ secrets.PACKAGER_TOKEN }}
- name: Docker Push - name: Docker Push
run: | run: docker push code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-armv7
docker push code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-armv7
docker push code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-nginx-armv7
- name: Notify Discord - name: Notify Discord
uses: actions/discord-status@v1 uses: actions/discord-status@v1
if: always() if: always()
@ -92,8 +83,7 @@ jobs:
- name: Docker Build - name: Docker Build
run: | run: |
docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-cached --target builder ${{ gitea.workspace }} docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-cached --target builder ${{ gitea.workspace }}
docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-riscv64 --target dedicated ${{ gitea.workspace }} docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-riscv64 ${{ gitea.workspace }}
docker build --pull -t code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-nginx-riscv64 ${{ gitea.workspace }}
- name: Docker Login - name: Docker Login
uses: actions/docker-login@v2 uses: actions/docker-login@v2
with: with:
@ -101,9 +91,7 @@ jobs:
username: ${{ gitea.actor }} username: ${{ gitea.actor }}
password: ${{ secrets.PACKAGER_TOKEN }} password: ${{ secrets.PACKAGER_TOKEN }}
- name: Docker Push - name: Docker Push
run: | run: docker push code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-riscv64
docker push code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-riscv64
docker push code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-nginx-riscv64
- name: Notify Discord - name: Notify Discord
uses: actions/discord-status@v1 uses: actions/discord-status@v1
if: always() if: always()
@ -123,9 +111,7 @@ jobs:
- name: Docker Manifest - name: Docker Manifest
run: | run: |
docker manifest create code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }} --amend code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-amd64 --amend code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-arm64v8 --amend code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-armv7 --amend code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-riscv64 docker manifest create code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }} --amend code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-amd64 --amend code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-arm64v8 --amend code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-armv7 --amend code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-riscv64
docker manifest create code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-nginx --amend code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-nginx-amd64 --amend code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-nginx-arm64v8 --amend code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-nginx-armv7 --amend code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-nginx-riscv64
docker manifest push --purge code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }} docker manifest push --purge code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}
docker manifest push --purge code.nephatrine.net/nephnet/quake2-yamagi:${{ gitea.ref_name }}-nginx
publish_amd64: publish_amd64:
if: gitea.ref_name == 'master' if: gitea.ref_name == 'master'
needs: [build_amd64] needs: [build_amd64]
@ -136,8 +122,8 @@ jobs:
uses: actions/docker-base-image-check@v1.2.1 uses: actions/docker-base-image-check@v1.2.1
id: checkbase id: checkbase
with: with:
base-image: nephatrine/nginx-ssl:latest-amd64 base-image: nephatrine/alpine-s6:latest-amd64
image: nephatrine/quake2-server:yamagi-nginx-amd64 image: nephatrine/quake2-server:yamagi-amd64
- name: Docker Login - name: Docker Login
uses: actions/docker-login@v2 uses: actions/docker-login@v2
with: with:
@ -146,9 +132,7 @@ jobs:
- name: Docker Push - name: Docker Push
run: | run: |
docker tag code.nephatrine.net/nephnet/quake2-yamagi:master-amd64 nephatrine/quake2-server:yamagi-amd64 docker tag code.nephatrine.net/nephnet/quake2-yamagi:master-amd64 nephatrine/quake2-server:yamagi-amd64
docker tag code.nephatrine.net/nephnet/quake2-yamagi:master-nginx-amd64 nephatrine/quake2-server:yamagi-nginx-amd64
docker push nephatrine/quake2-server:yamagi-amd64 docker push nephatrine/quake2-server:yamagi-amd64
docker push nephatrine/quake2-server:yamagi-nginx-amd64
- name: Notify Discord - name: Notify Discord
if: github.event_name == 'push' || steps.checkbase.outputs.needs-updating == 'true' if: github.event_name == 'push' || steps.checkbase.outputs.needs-updating == 'true'
uses: actions/discord-status@v1 uses: actions/discord-status@v1
@ -170,9 +154,7 @@ jobs:
- name: Docker Push - name: Docker Push
run: | run: |
docker tag code.nephatrine.net/nephnet/quake2-yamagi:master-arm64v8 nephatrine/quake2-server:yamagi-arm64v8 docker tag code.nephatrine.net/nephnet/quake2-yamagi:master-arm64v8 nephatrine/quake2-server:yamagi-arm64v8
docker tag code.nephatrine.net/nephnet/quake2-yamagi:master-nginx-arm64v8 nephatrine/quake2-server:yamagi-nginx-arm64v8
docker push nephatrine/quake2-server:yamagi-arm64v8 docker push nephatrine/quake2-server:yamagi-arm64v8
docker push nephatrine/quake2-server:yamagi-nginx-arm64v8
publish_armhf: publish_armhf:
if: gitea.ref_name == 'master' if: gitea.ref_name == 'master'
needs: [build_armhf] needs: [build_armhf]
@ -186,9 +168,7 @@ jobs:
- name: Docker Push - name: Docker Push
run: | run: |
docker tag code.nephatrine.net/nephnet/quake2-yamagi:master-armv7 nephatrine/quake2-server:yamagi-armv7 docker tag code.nephatrine.net/nephnet/quake2-yamagi:master-armv7 nephatrine/quake2-server:yamagi-armv7
docker tag code.nephatrine.net/nephnet/quake2-yamagi:master-nginx-armv7 nephatrine/quake2-server:yamagi-nginx-armv7
docker push nephatrine/quake2-server:yamagi-armv7 docker push nephatrine/quake2-server:yamagi-armv7
docker push nephatrine/quake2-server:yamagi-nginx-armv7
publish_riscv64: publish_riscv64:
if: gitea.ref_name == 'master' if: gitea.ref_name == 'master'
needs: [build_riscv64] needs: [build_riscv64]
@ -202,9 +182,7 @@ jobs:
- name: Docker Push - name: Docker Push
run: | run: |
docker tag code.nephatrine.net/nephnet/quake2-yamagi:master-riscv64 nephatrine/quake2-server:yamagi-riscv64 docker tag code.nephatrine.net/nephnet/quake2-yamagi:master-riscv64 nephatrine/quake2-server:yamagi-riscv64
docker tag code.nephatrine.net/nephnet/quake2-yamagi:master-nginx-riscv64 nephatrine/quake2-server:yamagi-nginx-riscv64
docker push nephatrine/quake2-server:yamagi-riscv64 docker push nephatrine/quake2-server:yamagi-riscv64
docker push nephatrine/quake2-server:yamagi-nginx-riscv64
publish_manifest: publish_manifest:
needs: [publish_amd64, publish_arm64, publish_armhf, publish_riscv64] needs: [publish_amd64, publish_arm64, publish_armhf, publish_riscv64]
runs-on: nephnet runs-on: nephnet
@ -216,14 +194,14 @@ jobs:
password: ${{ secrets.DOCKER_PASS }} password: ${{ secrets.DOCKER_PASS }}
- name: Docker Manifest - name: Docker Manifest
run: | run: |
docker manifest create nephatrine/quake2-server:yamagi --amend nephatrine/quake2-server:yamagi-amd64 --amend nephatrine/quake2-server:yamagi-arm64v8 --amend nephatrine/quake2-server:yamagi-armv7 --amend nephatrine/quake2-server:yamagi-riscv64 docker manifest create nephatrine/quake2-server:yamagi-8.20 --amend nephatrine/quake2-server:yamagi-amd64 --amend nephatrine/quake2-server:yamagi-arm64v8 --amend nephatrine/quake2-server:yamagi-armv7 --amend nephatrine/quake2-server:yamagi-riscv64
docker manifest create nephatrine/quake2-server:yamagi-nginx --amend nephatrine/quake2-server:yamagi-nginx-amd64 --amend nephatrine/quake2-server:yamagi-nginx-arm64v8 --amend nephatrine/quake2-server:yamagi-nginx-armv7 --amend nephatrine/quake2-server:yamagi-nginx-riscv64 docker manifest create nephatrine/quake2-server:yamagi-8 --amend nephatrine/quake2-server:yamagi-amd64 --amend nephatrine/quake2-server:yamagi-arm64v8 --amend nephatrine/quake2-server:yamagi-armv7 --amend nephatrine/quake2-server:yamagi-riscv64
docker manifest create nephatrine/quake2-server:yamagi-latest --amend nephatrine/quake2-server:yamagi-amd64 --amend nephatrine/quake2-server:yamagi-arm64v8 --amend nephatrine/quake2-server:yamagi-armv7 --amend nephatrine/quake2-server:yamagi-riscv64
docker manifest create nephatrine/quake2-server:latest --amend nephatrine/quake2-server:yamagi-amd64 --amend nephatrine/quake2-server:yamagi-arm64v8 --amend nephatrine/quake2-server:yamagi-armv7 --amend nephatrine/quake2-server:yamagi-riscv64 docker manifest create nephatrine/quake2-server:latest --amend nephatrine/quake2-server:yamagi-amd64 --amend nephatrine/quake2-server:yamagi-arm64v8 --amend nephatrine/quake2-server:yamagi-armv7 --amend nephatrine/quake2-server:yamagi-riscv64
docker manifest create nephatrine/quake2-server:latest-nginx --amend nephatrine/quake2-server:yamagi-nginx-amd64 --amend nephatrine/quake2-server:yamagi-nginx-arm64v8 --amend nephatrine/quake2-server:yamagi-nginx-armv7 --amend nephatrine/quake2-server:yamagi-nginx-riscv64 docker manifest push --purge nephatrine/quake2-server:yamagi-8.20
docker manifest push --purge nephatrine/quake2-server:yamagi docker manifest push --purge nephatrine/quake2-server:yamagi-8
docker manifest push --purge nephatrine/quake2-server:yamagi-nginx docker manifest push --purge nephatrine/quake2-server:yamagi-latest
docker manifest push --purge nephatrine/quake2-server:latest docker manifest push --purge nephatrine/quake2-server:latest
docker manifest push --purge nephatrine/quake2-server:latest-nginx
- name: Checkout Repository - name: Checkout Repository
uses: actions/checkout@v3 uses: actions/checkout@v3
- name: Docker Describe - name: Docker Describe

View File

@ -3,14 +3,19 @@ FROM nephatrine/nxbuilder:alpine AS builder
RUN echo "====== INSTALL LIBRARIES ======" \ RUN echo "====== INSTALL LIBRARIES ======" \
&& apk add --no-cache mesa-dev sdl2-dev && apk add --no-cache mesa-dev sdl2-dev
RUN git -C /root clone --single-branch --depth=1 https://github.com/yquake2/yquake2.git ARG YQUAKE2_VERSION=QUAKE2_8_20
ARG CTF_VERSION=CTF_1_09
ARG ROGUE_VERSION=ROGUE_2_10
ARG XATRIX_VERSION=XATRIX_2_11
RUN git -C /root clone -b "$YQUAKE2_VERSION" --single-branch --depth=1 https://github.com/yquake2/yquake2.git
RUN git -C /root clone --single-branch --depth=1 https://github.com/DirtBagXon/3zb2-zigflag.git RUN git -C /root clone --single-branch --depth=1 https://github.com/DirtBagXon/3zb2-zigflag.git
RUN git -C /root clone --single-branch --depth=1 https://github.com/packetflinger/lmctf.git RUN git -C /root clone --single-branch --depth=1 https://github.com/packetflinger/lmctf.git
RUN git -C /root clone --single-branch --depth=1 https://github.com/packetflinger/openffa.git RUN git -C /root clone --single-branch --depth=1 https://github.com/packetflinger/openffa.git
RUN git -C /root clone --single-branch --depth=1 https://github.com/packetflinger/opentdm.git RUN git -C /root clone --single-branch --depth=1 https://github.com/packetflinger/opentdm.git
RUN git -C /root clone --single-branch --depth=1 https://github.com/yquake2/ctf.git RUN git -C /root clone -b "$CTF_VERSION" --single-branch --depth=1 https://github.com/yquake2/ctf.git
RUN git -C /root clone --single-branch --depth=1 https://github.com/yquake2/rogue.git RUN git -C /root clone -b "$ROGUE_VERSION" --single-branch --depth=1 https://github.com/yquake2/rogue.git
RUN git -C /root clone --single-branch --depth=1 https://github.com/yquake2/xatrix.git RUN git -C /root clone -b "$XATRIX_VERSION" --single-branch --depth=1 https://github.com/yquake2/xatrix.git
RUN git -C /root clone --single-branch --depth=1 https://github.com/yquake2/zaero.git RUN git -C /root clone --single-branch --depth=1 https://github.com/yquake2/zaero.git
RUN git -C /root clone --single-branch --depth=1 https://github.com/yquake2/pakextract.git RUN git -C /root clone --single-branch --depth=1 https://github.com/yquake2/pakextract.git
@ -51,12 +56,12 @@ RUN echo "====== COMPILE OPENTDM ======" \
&& make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) \ && make -j$(( $(getconf _NPROCESSORS_ONLN) / 2 + 1 )) \
&& mv game*.so game.so && mv game*.so game.so
FROM nephatrine/alpine-s6:latest AS dedicated FROM nephatrine/alpine-s6:latest
LABEL maintainer="Daniel Wolf <nephatrine@gmail.com>" LABEL maintainer="Daniel Wolf <nephatrine@gmail.com>"
RUN echo "====== INSTALL PACKAGES ======" \ RUN echo "====== INSTALL PACKAGES ======" \
&& apk add --no-cache libcurl screen sdl2 \ && apk add --no-cache libcurl screen sdl2 \
&& mkdir -p /mnt/shared && mkdir -p /mnt/shared /mnt/mirror
COPY --from=builder /root/pakextract/pakextract /usr/local/bin/ COPY --from=builder /root/pakextract/pakextract /usr/local/bin/
COPY --from=builder /root/yquake2/release/ /opt/quake2/ COPY --from=builder /root/yquake2/release/ /opt/quake2/
@ -89,18 +94,3 @@ RUN echo "====== PREP FOR Q2ADMIN ======" \
&& cp /opt/quake2/lmctf/game.so /opt/quake2/lmctf/game.real.so && cp /opt/quake2/lmctf/game.so /opt/quake2/lmctf/game.real.so
EXPOSE 27910/udp EXPOSE 27910/udp
FROM nephatrine/nginx-ssl:latest
LABEL maintainer="Daniel Wolf <nephatrine@gmail.com>"
RUN echo "====== INSTALL PACKAGES ======" \
&& apk add --no-cache libcurl screen sdl2
ENV QUAKE2_MIRROR=true
COPY --from=dedicated /usr/local/bin /usr/local/bin
COPY --from=dedicated /opt/quake2 /opt/quake2
COPY --from=dedicated /opt/quake2-data /opt/quake2-data
COPY override/etc /etc
EXPOSE 80/tcp 443/tcp 27910/udp

172
README.md
View File

@ -1,77 +1,141 @@
[Git](https://code.nephatrine.net/NephNET/docker-quake2-yamagi/src/branch/master) | [Git](https://code.nephatrine.net/NephNET/docker-quake2-yamagi/src/branch/master) |
[Docker](https://hub.docker.com/r/nephatrine/quake2-server/) | [Docker](https://hub.docker.com/r/nephatrine/quake2-server/) |
[unRAID](https://code.nephatrine.net/nephatrine/unraid-containers) [unRAID](https://code.nephatrine.net/NephNET/unraid-containers)
# Quake II Server # Yamagi Quake II Dedicated Server
This docker image contains a Quake II dedicated server. This docker container manages the Yamagi Quake II dedicated server.
- [Alpine Linux](https://alpinelinux.org/) w/ [S6 Overlay](https://github.com/just-containers/s6-overlay) The `yamagi-latest` tag points to version `8.20` and this is the only image
- [NGINX](https://www.nginx.com/) w/ [CertBot](https://certbot.eff.org/) (with ``nginx`` tags) actively being updated. There are tags for older versions, but these may no
- [Yamagi Quake II](https://yamagi.org/quake2/) longer be using the latest Alpine version and packages.
The ``nginx`` tags will provide an HTTP(S) mirror of the game files for clients ## Docker-Compose
that support HTTP downloads.
You can spin up a quick temporary test container like this: These are example docker-compose files for various setups.
~~~ ### Single Server
docker run --rm -p 27910:27910 -it nephatrine/quake2-server:latest /bin/bash
~~~
## Docker Tags This is just a simple Quake II server.
- **nephatrine/quake2-server:latest**: Yamagi Quake II / Alpine Latest ```yaml
services:
quake2-server:
image: nephatrine/quake2-server:yamagi-latest
container_name: quake2-server
environment:
TZ: America/New_York
PUID: 1000
PGID: 1000
ports:
- "27910:27910/udp"
volumes:
- /mnt/containers/quake2-server:/mnt/config
```
## Configuration Variables ### Single Server w/ HTTP Mirror
You can set these parameters using the syntax ``-e "VARNAME=VALUE"`` on your This container is set up to create an HTTP mirror of the game contents so that
``docker run`` command. Some of these may only be used during initial players joining can get better download speeds on engines that support it. You
configuration and further changes may need to be made in the generated can easily add an NGINX container and map a separate volume that is shared
configuration files. between the game server and NGINX. Then you can just put that volume in
`QUAKE2_MIRROR` and the `${QUAKE2_MIRROR}/www/quake2` directory will reflect
the installed game data on the server.
- ``GAME_START``: Startup Arguments (*"+exec server.cfg"*) **NB:** You will need to manually configure NGINX's config to share
- ``PUID``: Mount Owner UID (*1000*) `/mnt/config/www/quake2`.
- ``PGID``: Mount Owner GID (*100*)
- ``TZ``: System Timezone (*America/New_York*)
If using the ``nginx`` tags, you can use the additional configuration options ```yaml
documented for the [nginx-ssl](https://code.nephatrine.net/nephatrine/docker-nginx-ssl) services:
container. quake2-server:
image: nephatrine/quake2-server:yamagi-latest
container_name: quake2-server
environment:
TZ: America/New_York
PUID: 1000
PGID: 1000
QUAKE2_MIRROR: /mnt/mirror
ports:
- "27910:27910/udp"
volumes:
- /mnt/containers/quake2-server:/mnt/config
- /mnt/containers/quake2-http:/mnt/mirror
quake2-http:
image: nephatrine/nginx-ssl:latest
container_name: quake2-http
environment:
TZ: America/New_York
PUID: 1000
PGID: 1000
ADMINIP: 127.0.0.1
TRUSTSN: 192.168.0.0/16
DNSADDR: "8.8.8.8 8.8.4.4"
ports:
- "80:8080/tcp"
volumes:
- /mnt/containers/quake2-http:/mnt/config
```
## Persistent Mounts ### Multiple Servers
You can provide a persistent mountpoint using the ``-v /host/path:/container/path`` This is an example where you want to run two servers on the same host. In such
syntax. These mountpoints are intended to house important configuration files, cases, it is possible to have them use a shared game data volume. You just map
logs, and application state (e.g. databases) so they are not lost on image a separate volume that is shared by both and put that volume in
update. `QUAKE2_INSTALL` on one and `QUAKE2_DATA` on the other. Make sure that the
first container starts before the other so that the installation is all set up
for it and you should be good to go.
- ``/mnt/config``: Persistent Data. When hosting multiple servers, you *can* use a port setting of
- ``/mnt/shared``: Optional - Shared Game Data. `27911:27910/udp` instead of specifying a different internal listening port in
`GAME_START`, but the port is used for both the port being listened to by the
server as well as what they advertise to the master server. So if you want your
servers to show up properly in the master servers, you'll want to specify the
port each should run on and map those separate ports on both sides.
Do not share ``/mnt/config`` volumes between multiple containers as they may ```yaml
interfere with the operation of one another. services:
quake2-server-1:
image: nephatrine/quake2-server:yamagi-latest
container_name: quake2-server-1
environment:
TZ: America/New_York
PUID: 1000
PGID: 1000
QUAKE2_INSTALL: /mnt/shared
GAME_START: "+set port 27910 +exec server.cfg"
ports:
- "27910:27910/udp"
volumes:
- /mnt/containers/quake2-server-1:/mnt/config
- /mnt/containers/quake2-data:/mnt/shared
quake2-server-2:
image: nephatrine/quake2-server:yamagi-latest
container_name: quake2-server-2
environment:
TZ: America/New_York
PUID: 1000
PGID: 1000
QUAKE2_DATA: /mnt/shared
GAME_START: "+set port 27911 +game ctf +exec server.cfg"
ports:
- "27911:27911/udp"
depends_on:
- quake2-server-1
volumes:
- /mnt/containers/quake2-server-2:/mnt/config
- /mnt/containers/quake2-data:/mnt/shared
```
The ``/mnt/shared`` volume, if mounted, should contain a ``data/quake2`` ## Server Configuration
directory with the Quake II game data that should be used. This can be shared
between multiple Quake II servers.
You can perform some basic configuration of the container using the files and These are the configuration and data files you will likely need to be aware of
directories listed below. and potentially customize.
- ``/mnt/config/data/quake2/``: Game Data. [*] - `${QUAKE2_DATA}/data/quake2/*`
- ``/mnt/config/data/quake2/baseq2/server.cfg``: Default Quake II Configuration. [*] - `${QUAKE2_DATA}/data/quake2/baseq2/server.cfg`
- ``/mnt/config/etc/crontabs/<user>``: User Crontabs. [*]
- ``/mnt/config/etc/logrotate.conf``: Logrotate Global Configuration.
- ``/mnt/config/etc/logrotate.d/``: Logrotate Additional Configuration.
**[*] Changes to some configuration files may require service restart to take By customizing the `GAME_START` variable, you can run in a different game
immediate effect.** directory or exec a different config file, of course.
## Network Services Modifications to some of these may require a service restart to pull in the
changes made.
This container runs network services that are intended to be exposed outside
the container. You can map these to host ports using the ``-p HOST:CONTAINER``
or ``-p HOST:CONTAINER/PROTOCOL`` syntax.
- ``27910/tcp``: Quake II Server. This is the game server.

13
docker-compose.yml Normal file
View File

@ -0,0 +1,13 @@
services:
quake2-server:
build: .
container_name: quake2-server
environment:
TZ: America/New_York
PUID: 1000
PGID: 1000
QUAKE2_MIRROR: true
ports:
- "27910:27910/udp"
volumes:
- /mnt/containers/quake2-server:/mnt/config

View File

@ -1,5 +0,0 @@
server {
server_name _;
include /mnt/config/etc/nginx.d/_server_local.inc;
root /mnt/config/www/quake2;
}

View File

@ -1,2 +1,2 @@
#!/command/execlineb #!/command/execlineb
foreground { /bin/bash /usr/local/bin/quake2-shutdown } foreground { /command/with-contenv /bin/sh /usr/local/bin/quake2-shutdown }

View File

@ -1,43 +1,76 @@
#!/command/with-contenv /bin/bash #!/command/with-contenv /bin/bash
GAME_START=${GAME_START:-"+exec server.cfg"} export HOME=/mnt/config/home
export GAME_START=${GAME_START:-"+exec server.cfg"}
cd /opt/quake2 if [[ -z "${QUAKE2_DATA}" ]]; then
if [[ -n "${QUAKE2_INSTALL}" && ! "${QUAKE2_INSTALL}" == "true" && ! "${QUAKE2_INSTALL}" == "false" ]]; then
if ! /usr/bin/pgrep -f quakedock >/dev/null; then export QUAKE2_DATA="${QUAKE2_INSTALL}"
export HOME=/mnt/config/home
if [[ -f ${HOME}/.yq2/baseq2/qconsole.log ]]; then
/bin/ls -la ${HOME}/.yq2/baseq2/qconsole.log | /command/s6-setuidgid guardian /usr/bin/tee -a /mnt/config/log/qconsole.log
/bin/cat ${HOME}/.yq2/baseq2/qconsole.log | /command/s6-setuidgid guardian /usr/bin/tee -a /mnt/config/log/qconsole.log
/bin/rm -f ${HOME}/.yq2/baseq2/qconsole.log
fi
if [[ -d /mnt/shared/data/quake2/openffa/highscores ]]; then
/command/s6-setuidgid guardian /bin/mkdir -p /opt/quake2/openffa
/command/s6-setuidgid guardian /bin/cp -rvs /mnt/shared/data/quake2/openffa/highscores /opt/quake2/openffa/highscores
fi
if [[ -d /mnt/shared/data/quake2/openffa/mapcfg ]]; then
/command/s6-setuidgid guardian /bin/mkdir -p /opt/quake2/openffa
/command/s6-setuidgid guardian /bin/cp -rvs /mnt/shared/data/quake2/openffa/mapcfg /opt/quake2/openffa/mapcfg
fi
if [[ -d /mnt/shared/data/quake2/openffa/motd ]]; then
/command/s6-setuidgid guardian /bin/mkdir -p /opt/quake2/openffa
/command/s6-setuidgid guardian /bin/cp -rvs /mnt/shared/data/quake2/openffa/motd /opt/quake2/openffa/motd
fi
if [[ -d /mnt/shared/data/quake2 ]]; then
/command/s6-setuidgid guardian /usr/bin/screen -dmS quakedock ./q2ded -datadir /mnt/shared/data/quake2 +set basepath /mnt/shared/data/quake2 +set savepath /mnt/config/home/.yq2 ${GAME_START};
else else
/command/s6-setuidgid guardian /usr/bin/screen -dmS quakedock ./q2ded -datadir /mnt/config/data/quake2 +set basepath /mnt/config/data/quake2 +set savepath /mnt/config/home/.yq2 ${GAME_START}; export QUAKE2_DATA="/mnt/config"
fi fi
if [[ -f ${HOME}/.screenrc ]]; then
/bin/chown guardian:users ${HOME}
/bin/chown guardian:users ${HOME}/.screenrc
fi
sleep 10
fi fi
if [[ -z "${QUAKE2_DATA_SUBPATH}" ]]; then
export QUAKE2_DATA_SUBPATH=/data/quake2
fi
# Transfer Yamagi Log
if [[ -f "${HOME}/.yq2/baseq2/qconsole.log" ]]; then
/bin/ls -la "${HOME}/.yq2/baseq2/qconsole.log" | /command/s6-setuidgid guardian /usr/bin/tee -a /mnt/config/log/qconsole.log
/bin/cat "${HOME}/.yq2/baseq2/qconsole.log" | /command/s6-setuidgid guardian /usr/bin/tee -a /mnt/config/log/qconsole.log
/bin/rm -f "${HOME}/.yq2/baseq2/qconsole.log"
fi
# Link OpenFFA Configs
if [[ ! -d "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/highscores" && -d /opt/quake2/openffa/highscores ]]; then
/command/s6-setuidgid guardian /bin/mkdir -p "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/highscores"
if [[ -d "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/highscores" ]]; then
/command/s6-setuidgid guardian /bin/cp -Rv /opt/quake2/openffa/highscores/. "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/highscores/"
/bin/rm -rf /opt/quake2/openffa/highscores
fi
fi
if [[ ! -d "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/mapcfg" && -d /opt/quake2/openffa/mapcfg ]]; then
/command/s6-setuidgid guardian /bin/mkdir -p "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/mapcfg"
if [[ -d "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/mapcfg" ]]; then
/command/s6-setuidgid guardian /bin/cp -Rv /opt/quake2/openffa/mapcfg/. "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/mapcfg/"
/bin/rm -rf /opt/quake2/openffa/mapcfg
fi
fi
if [[ ! -d "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/motd" && -d /opt/quake2/openffa/motd ]]; then
/command/s6-setuidgid guardian /bin/mkdir -p "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/motd"
if [[ -d "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/motd" ]]; then
/command/s6-setuidgid guardian /bin/cp -Rv /opt/quake2/openffa/motd/. "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/motd/"
/bin/rm -rf /opt/quake2/openffa/motd
fi
fi
if [[ -d /opt/quake2/openffa ]]; then
if [[ -d "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/highscores" && ! -d /opt/quake2/openffa/highscores ]]; then
/bin/cp -Rvsp "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/highscores" /opt/quake2/openffa/
fi
if [[ -d "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/mapcfg" && ! -d /opt/quake2/openffa/mapcfg ]]; then
/bin/cp -Rvsp "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/mapcfg" /opt/quake2/openffa/
fi
if [[ -d "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/motd" && ! -d /opt/quake2/openffa/motd ]]; then
/bin/cp -Rvsp "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/motd" /opt/quake2/openffa/
fi
fi
# Start Yamagi Quake II
cd /opt/quake2 || exit 1
/command/s6-setuidgid guardian /usr/bin/screen -dmS quakedock ./q2ded -datadir "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}" +set basepath "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}" +set savepath /mnt/config/home/.yq2 ${GAME_START};
if [[ -f ${HOME}/.screenrc ]]; then
/bin/chown guardian:users ${HOME}
/bin/chown guardian:users ${HOME}/.screenrc
fi
sleep 5
# Idle...
while /usr/bin/pgrep -f quakedock >/dev/null; do while /usr/bin/pgrep -f quakedock >/dev/null; do
sleep 60 sleep 60
done done

View File

@ -1,2 +1,2 @@
#!/command/execlineb #!/command/execlineb
foreground { /command/with-contenv /bin/bash /usr/local/bin/quake2-install } foreground { /command/with-contenv /bin/sh /usr/local/bin/quake2-install }

View File

@ -1,177 +1,196 @@
#!/command/with-contenv /bin/bash #!/command/with-contenv /bin/sh
if /usr/bin/pgrep -f quakedock >/dev/null; then if /usr/bin/pgrep -f quakedock >/dev/null; then
exit 1 exit 1
fi fi
if [[ -d /mnt/shared/data/quake2 ]]; then if [ -z "${QUAKE2_DATA}" ]; then
cd /mnt/shared/data/quake2 if [ -n "${QUAKE2_INSTALL}" ] && [ ! "${QUAKE2_INSTALL}" = "true" ] && [ ! "${QUAKE2_INSTALL}" = "false" ]; then
/usr/bin/find . -type f -name 'game*.so' -exec /bin/cp --parents {} /opt/quake2/ \; export QUAKE2_DATA="${QUAKE2_INSTALL}"
exit 0 else
elif [[ -d /mnt/config/data/quake2 ]]; then export QUAKE2_DATA="/mnt/config"
cd /mnt/config/data/quake2 fi
fi
if [ -z "${QUAKE2_INSTALL}" ] && [ "${QUAKE2_DATA}" = "/mnt/config" ]; then
export QUAKE2_INSTALL="${QUAKE2_DATA}"
elif [ "${QUAKE2_INSTALL}" = "true" ]; then
export QUAKE2_INSTALL="${QUAKE2_DATA}"
elif [ "${QUAKE2_INSTALL}" = "false" ]; then
export QUAKE2_INSTALL=
fi
if [ -z "${QUAKE2_DATA_SUBPATH}" ]; then
export QUAKE2_DATA_SUBPATH=/data/quake2
fi
# Copy Mods Locally
if [ -d "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}" ]; then
cd "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}" || exit 1
/usr/bin/find . -type f -name 'game*.so' -exec /bin/cp --parents {} /opt/quake2/ \; /usr/bin/find . -type f -name 'game*.so' -exec /bin/cp --parents {} /opt/quake2/ \;
fi fi
# QUAKE II # Install Quake II
if [[ ! -d /mnt/config/data/quake2/baseq2 ]]; then if [ -n "${QUAKE2_INSTALL}" ] && [ ! -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/baseq2" ]; then
if [[ ! -f /tmp/q2-314-demo-x86.exe ]]; then if [ ! -f /tmp/q2-314-demo-x86.exe ]; then
/usr/bin/wget -qO /tmp/q2-314-demo-x86.exe https://files.nephatrine.net/archives/idstuff/quake2/q2-314-demo-x86.exe /usr/bin/wget -qO /tmp/q2-314-demo-x86.exe https://nephatrine.net/backup/quake2/q2-314-demo-x86.exe
fi fi
if [[ ! -f /tmp/q2-3.20-x86-full-ctf.exe ]]; then if [ ! -f /tmp/q2-3.20-x86-full-ctf.exe ]; then
/usr/bin/wget -qO /tmp/q2-3.20-x86-full-ctf.exe https://files.nephatrine.net/archives/idstuff/quake2/q2-3.20-x86-full-ctf.exe /usr/bin/wget -qO /tmp/q2-3.20-x86-full-ctf.exe https://nephatrine.net/backup/quake2/q2-3.20-x86-full-ctf.exe
fi fi
if [[ ! -f /tmp/match1.tar.gz ]]; then if [ ! -f /tmp/match1.tar.gz ]; then
/usr/bin/wget -qO /tmp/match1.tar.gz https://files.nephatrine.net/archives/idstuff/quake2/maps/match1.tar.gz /usr/bin/wget -qO /tmp/match1.tar.gz https://nephatrine.net/backup/quake2/maps/match1.tar.gz
fi fi
if [[ ! -f /tmp/dm_64.tar.gz ]]; then if [ ! -f /tmp/dm_64.tar.gz ]; then
/usr/bin/wget -qO /tmp/dm_64.tar.gz https://files.nephatrine.net/archives/idstuff/quake2/maps/dm_64.tar.gz /usr/bin/wget -qO /tmp/dm_64.tar.gz https://nephatrine.net/backup/quake2/maps/dm_64.tar.gz
fi fi
if [[ -f /tmp/q2-314-demo-x86.exe ]]; then if [ ! -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/baseq2/maps" ]; then
/command/s6-setuidgid guardian /bin/mkdir -p /mnt/config/data/quake2/baseq2 /command/s6-setuidgid guardian /bin/mkdir -p "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/baseq2/maps"
/command/s6-setuidgid guardian /usr/bin/unzip -jq -d /mnt/config/data/quake2/baseq2/ /tmp/q2-314-demo-x86.exe \
Install/Data/baseq2/pak0.pak \
Install/Data/DOCS/license.txt
fi fi
if [[ -f /tmp/q2-3.20-x86-full-ctf.exe ]]; then if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/baseq2" ] && [ -f /tmp/q2-314-demo-x86.exe ]; then
/command/s6-setuidgid guardian /bin/mkdir -p /mnt/config/data/quake2/baseq2 /command/s6-setuidgid guardian /usr/bin/unzip -jq -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/baseq2/" /tmp/q2-314-demo-x86.exe \
/command/s6-setuidgid guardian /usr/bin/unzip -jq -d /mnt/config/data/quake2/baseq2/ /tmp/q2-3.20-x86-full-ctf.exe \ Install/Data/baseq2/pak0.pak Install/Data/DOCS/license.txt
baseq2/maps.lst \ fi
baseq2/pak1.pak \ if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/baseq2" ] && [ -f /tmp/q2-3.20-x86-full-ctf.exe ]; then
baseq2/pak2.pak /command/s6-setuidgid guardian /usr/bin/unzip -jq -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/baseq2/" /tmp/q2-3.20-x86-full-ctf.exe \
baseq2/maps.lst baseq2/pak1.pak baseq2/pak2.pak
/command/s6-setuidgid guardian /bin/mkdir /tmp/q2-3.20-x86-full-ctf /command/s6-setuidgid guardian /bin/mkdir /tmp/q2-3.20-x86-full-ctf
/command/s6-setuidgid guardian /usr/bin/unzip -d /tmp/q2-3.20-x86-full-ctf/ /tmp/q2-3.20-x86-full-ctf.exe /command/s6-setuidgid guardian /usr/bin/unzip -d /tmp/q2-3.20-x86-full-ctf/ /tmp/q2-3.20-x86-full-ctf.exe
/command/s6-setuidgid guardian /bin/mv /tmp/q2-3.20-x86-full-ctf/baseq2/players /mnt/config/data/quake2/baseq2/ /command/s6-setuidgid guardian /bin/mv /tmp/q2-3.20-x86-full-ctf/baseq2/players "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/baseq2/"
/bin/rm -rf /tmp/q2-3.20-x86-full-ctf /bin/rm -rf /tmp/q2-3.20-x86-full-ctf
fi fi
if [[ -f /tmp/match1.tar.gz ]]; then if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/baseq2" ] &&[ -f /tmp/match1.tar.gz ]; then
/command/s6-setuidgid guardian /bin/mkdir -p /mnt/config/data/quake2/baseq2 /command/s6-setuidgid guardian /bin/tar x -C "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/baseq2/" -zf /tmp/match1.tar.gz \
/command/s6-setuidgid guardian /bin/tar x -C /mnt/config/data/quake2/baseq2/ -zf /tmp/match1.tar.gz \
pak3.pak pak3.pak
fi fi
if [[ -f /tmp/dm_64.tar.gz ]]; then if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/baseq2/maps" ] && [ -f /tmp/dm_64.tar.gz ]; then
/command/s6-setuidgid guardian /bin/mkdir -p /mnt/config/data/quake2/baseq2/maps /command/s6-setuidgid guardian /bin/tar x -C "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/baseq2/maps/" -zf /tmp/dm_64.tar.gz \
/command/s6-setuidgid guardian /bin/tar x -C /mnt/config/data/quake2/baseq2/maps/ -zf /tmp/dm_64.tar.gz \ base64.bsp city64.bsp sewer64.bsp
base64.bsp \
city64.bsp \
sewer64.bsp
fi fi
fi fi
# CAPTURE THE FLAG # Install Capture The Flag
if [[ ! -d /mnt/config/data/quake2/ctf ]]; then if [ -n "${QUAKE2_INSTALL}" ] && [ ! -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/ctf" ]; then
if [[ ! -f /tmp/q2-3.20-x86-full-ctf.exe ]]; then if [ ! -f /tmp/q2-3.20-x86-full-ctf.exe ]; then
/usr/bin/wget -qO /tmp/q2-3.20-x86-full-ctf.exe https://files.nephatrine.net/archives/idstuff/quake2/q2-3.20-x86-full-ctf.exe /usr/bin/wget -qO /tmp/q2-3.20-x86-full-ctf.exe https://nephatrine.net/backup/quake2/q2-3.20-x86-full-ctf.exe
fi fi
if [[ ! -f /tmp/q2ctf150upgrade.zip ]]; then if [ ! -f /tmp/q2ctf150upgrade.zip ]; then
/usr/bin/wget -qO /tmp/q2ctf150upgrade.zip https://files.nephatrine.net/archives/idstuff/quake2/ctf/q2ctf150upgrade.zip /usr/bin/wget -qO /tmp/q2ctf150upgrade.zip https://nephatrine.net/backup/quake2/q2ctf150upgrade.zip
fi fi
if [[ ! -f /tmp/q2ctf4a.tar.gz ]]; then if [ ! -f /tmp/q2ctf4a.tar.gz ]; then
/usr/bin/wget -qO /tmp/q2ctf4a.tar.gz https://files.nephatrine.net/archives/idstuff/quake2/maps/q2ctf4a.tar.gz /usr/bin/wget -qO /tmp/q2ctf4a.tar.gz https://nephatrine.net/backup/quake2/maps/q2ctf4a.tar.gz
fi fi
if [[ -f /tmp/q2-3.20-x86-full-ctf.exe ]]; then if [ ! -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/ctf/maps" ]; then
/command/s6-setuidgid guardian /bin/mkdir -p /mnt/config/data/quake2/ctf /command/s6-setuidgid guardian /bin/mkdir -p "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/ctf/maps"
/command/s6-setuidgid guardian /usr/bin/unzip -jq -d /mnt/config/data/quake2/ctf/ /tmp/q2-3.20-x86-full-ctf.exe \
ctf/pak0.pak \
ctf/server.cfg
fi fi
if [[ -f /tmp/q2ctf150upgrade.zip ]]; then if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/ctf" ] && [ -f /tmp/q2-3.20-x86-full-ctf.exe ]; then
/command/s6-setuidgid guardian /bin/mkdir -p /mnt/config/data/quake2/ctf /command/s6-setuidgid guardian /usr/bin/unzip -jq -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/ctf/" /tmp/q2-3.20-x86-full-ctf.exe \
/command/s6-setuidgid guardian /usr/bin/unzip -jq -d /mnt/config/data/quake2/ctf/ /tmp/q2ctf150upgrade.zip \ ctf/pak0.pak ctf/server.cfg
fi
if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/ctf" ] && [ -f /tmp/q2ctf150upgrade.zip ]; then
/command/s6-setuidgid guardian /usr/bin/unzip -jq -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/ctf/" /tmp/q2ctf150upgrade.zip \
pak1.pak pak1.pak
fi fi
if [[ -f /tmp/q2ctf4a.tar.gz ]]; then if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/ctf/maps" ] && [ -f /tmp/q2ctf4a.tar.gz ]; then
/command/s6-setuidgid guardian /bin/mkdir -p /mnt/config/data/quake2/ctf/maps /command/s6-setuidgid guardian /bin/tar x -C "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/ctf/maps/" -zf /tmp/q2ctf4a.tar.gz \
/command/s6-setuidgid guardian /bin/tar x -C /mnt/config/data/quake2/ctf/maps/ -zf /tmp/q2ctf4a.tar.gz \
q2ctf4a.bsp q2ctf4a.bsp
fi fi
fi fi
# ZAERO # Install Zaero Missionpack
if [[ ! -d /mnt/config/data/quake2/zaero ]]; then if [ -n "${QUAKE2_INSTALL}" ] && [ ! -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/zaero" ]; then
if [[ ! -f /tmp/zaerodemo.zip ]]; then if [ ! -f /tmp/zaerodemo.zip ]; then
/usr/bin/wget -qO /tmp/zaerodemo.zip https://files.nephatrine.net/archives/teamevolve/zaerodemo.zip /usr/bin/wget -qO /tmp/zaerodemo.zip https://nephatrine.net/backup/teamevolve/zaerodemo.zip
fi fi
if [[ ! -f /tmp/zaerodm.zip ]]; then if [ ! -f /tmp/zaerodm.zip ]; then
/usr/bin/wget -qO /tmp/zaerodm.zip https://files.nephatrine.net/archives/teamevolve/zaerodm.zip /usr/bin/wget -qO /tmp/zaerodm.zip https://nephatrine.net/backup/teamevolve/zaerodm.zip
fi fi
if [[ ! -f /tmp/zaero-1.1.zip ]]; then if [ ! -f /tmp/zaero-1.1.zip ]; then
/usr/bin/wget -qO /tmp/zaero-1.1.zip https://files.nephatrine.net/archives/teamevolve/zaero-1.1.zip /usr/bin/wget -qO /tmp/zaero-1.1.zip https://nephatrine.net/backup/teamevolve/zaero-1.1.zip
fi fi
if [[ -f /tmp/zaerodemo.zip ]]; then if [ ! -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/zaero" ]; then
/command/s6-setuidgid guardian /bin/mkdir -p /mnt/config/data/quake2/zaero /command/s6-setuidgid guardian /bin/mkdir -p "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/zaero"
/command/s6-setuidgid guardian /usr/bin/unzip -jq -d /mnt/config/data/quake2/zaero/ /tmp/zaerodemo.zip \ fi
zdemo/config.cfg \ if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/zaero" ] && [ -f /tmp/zaerodemo.zip ]; then
zdemo/pak0.pak /command/s6-setuidgid guardian /usr/bin/unzip -jq -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/zaero/" /tmp/zaerodemo.zip \
zdemo/config.cfg zdemo/pak0.pak
/command/s6-setuidgid guardian /bin/mkdir /tmp/zaerodemo /command/s6-setuidgid guardian /bin/mkdir /tmp/zaerodemo
/command/s6-setuidgid guardian /usr/bin/unzip -d /tmp/zaerodemo/ /tmp/zaerodemo.zip /command/s6-setuidgid guardian /usr/bin/unzip -d /tmp/zaerodemo/ /tmp/zaerodemo.zip
/command/s6-setuidgid guardian /bin/mv /tmp/zaerodemo/zdemo/sprites /mnt/config/data/quake2/zaero/ /command/s6-setuidgid guardian /bin/mv /tmp/zaerodemo/zdemo/sprites "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/zaero/"
/bin/rm -rf /tmp/zaerodemo /bin/rm -rf /tmp/zaerodemo
fi fi
if [[ -f /tmp/zaero-1.1.zip ]]; then if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/zaero" ] && [ -f /tmp/zaero-1.1.zip ]; then
/command/s6-setuidgid guardian /bin/mkdir -p /mnt/config/data/quake2/zaero /command/s6-setuidgid guardian /usr/bin/unzip -jq -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/zaero/" /tmp/zaero-1.1.zip \
/command/s6-setuidgid guardian /usr/bin/unzip -jq -d /mnt/config/data/quake2/zaero/ /tmp/zaero-1.1.zip \
pak1.pak pak1.pak
fi fi
if [[ -f /tmp/zaerodm.zip ]]; then if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/zaero" ] && [ -f /tmp/zaerodm.zip ]; then
/command/s6-setuidgid guardian /bin/mkdir -p /mnt/config/data/quake2/zaero /command/s6-setuidgid guardian /usr/bin/unzip -jq -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/zaero/" /tmp/zaerodm.zip \
/command/s6-setuidgid guardian /usr/bin/unzip -jq -d /mnt/config/data/quake2/zaero/ /tmp/zaerodm.zip \
pak2.pak pak2.pak
fi fi
fi fi
# 3RD ZIGOCK BOT II # Create Other Mod Directories
if [[ -d /opt/quake2-data/3zb2 ]]; then if [ -n "${QUAKE2_INSTALL}" ]; then
if [[ ! -d /mnt/config/data/quake2/3zb2 ]]; then if [ ! -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/3zb2" ]; then
/command/s6-setuidgid guardian /bin/mkdir -p /mnt/config/data/quake2/3zb2 /command/s6-setuidgid guardian /bin/mkdir -p "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/3zb2"
fi fi
/command/s6-setuidgid guardian /bin/cp -Rn /opt/quake2-data/3zb2/* /mnt/config/data/quake2/3zb2/ if [ ! -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/openffa" ]; then
fi /command/s6-setuidgid guardian /bin/mkdir -p "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/openffa"
# DOWNLOAD Q2ADMIN
if [[ && "$(uname)" == "x86_64" ]]; then
if [[ ! -d /mnt/config/data/quake2/q2admin ]]; then
/command/s6-setuidgid guardian /bin/mkdir -p /mnt/config/data/quake2/q2admin
fi fi
if [[ ! -e /mnt/config/data/quake2/q2admin/game.so ]]; then if [ ! -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/opentdm" ]; then
/usr/bin/wget -O /tmp/q2admin-nxmod_x86_64-alpine-linux-musl.tar.gz https://files.nephatrine.net/archives/q2admin-nxmod_x86_64-alpine-linux-musl.tar.gz \ /command/s6-setuidgid guardian /bin/mkdir -p "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/opentdm"
&& /command/s6-setuidgid guardian /bin/tar -C /mnt/config/data/quake2/q2admin -xvzf /tmp/q2admin-nxmod_x86_64-alpine-linux-musl.tar.gz
/usr/bin/wget -O /tmp/q2admin-nxmod_noarch.tar.gz https://files.nephatrine.net/archives/q2admin-nxmod_noarch.tar.gz \
&& /command/s6-setuidgid guardian /bin/tar -C /mnt/config/data/quake2/q2admin -xvzf /tmp/q2admin-nxmod_noarch.tar.gz
fi
if [[ -d /opt/quake2-data/q2admin ]]; then
/command/s6-setuidgid guardian /bin/cp -Rn /opt/quake2-data/q2admin/* /mnt/config/data/quake2/q2admin/
fi fi
fi fi
# COPY YAMAGI FIXES OVER # Download Q2Admin
if [[ -d /mnt/config/data/quake2/baseq2 && -d /opt/quake2-data/baseq2 ]]; then if [ -n "${QUAKE2_INSTALL}" ] && [ "$(uname)" = "x86_64" ]; then
/command/s6-setuidgid guardian /bin/cp -Rn /opt/quake2-data/baseq2/* /mnt/config/data/quake2/baseq2/ if [ ! -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/q2admin" ]; then
fi /command/s6-setuidgid guardian /bin/mkdir -p "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/q2admin"
if [[ -d /mnt/config/data/quake2/jugfull && -d /opt/quake2-data/jugfull ]]; then
/command/s6-setuidgid guardian /bin/cp -Rn /opt/quake2-data/jugfull/* /mnt/config/data/quake2/jugfull/
fi
if [[ -d /mnt/config/data/quake2/xatrix && -d /opt/quake2-data/xatrix ]]; then
/command/s6-setuidgid guardian /bin/cp -Rn /opt/quake2-data/xatrix/* /mnt/config/data/quake2/xatrix/
fi
if [[ -d /mnt/config/data/quake2/rogue && -d /opt/quake2-data/rogue ]]; then
/command/s6-setuidgid guardian /bin/cp -Rn /opt/quake2-data/rogue/* /mnt/config/data/quake2/rogue/
fi
if [[ -d /mnt/config/data/quake2/zaero && -d /opt/quake2-data/zaero ]]; then
/command/s6-setuidgid guardian /bin/cp -Rn /opt/quake2-data/zaero/* /mnt/config/data/quake2/zaero/
fi
# REGENERATE WWW MIRROR?
if [[ ! -z "${QUAKE2_MIRROR}" && "${QUAKE2_MIRROR}" == "true" ]]; then
if [[ -d /mnt/config/www/quake2 ]]; then
/bin/rm -rf /mnt/config/www/quake2/*
fi fi
if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/q2admin" ] && [ ! -f "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/q2admin/game.so" ]; then
/usr/bin/wget -O /tmp/q2admin-nxmod_x86_64-alpine-linux-musl.tar.gz https://nephatrine.net/backup/q2admin/q2admin-nxmod_x86_64-alpine-linux-musl.tar.gz \
&& /command/s6-setuidgid guardian /bin/tar -C "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/q2admin/" -xvzf /tmp/q2admin-nxmod_x86_64-alpine-linux-musl.tar.gz
/usr/bin/wget -O /tmp/q2admin-nxmod_noarch.tar.gz https://nephatrine.net/backup/q2admin/q2admin-nxmod_noarch.tar.gz \
&& /command/s6-setuidgid guardian /bin/tar -C "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/q2admin/" -xvzf /tmp/q2admin-nxmod_noarch.tar.gz
fi
fi
# Copy Map Fixes
if [ -n "${QUAKE2_INSTALL}" ]; then
if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/baseq2" ] && [ -d /opt/quake2-data/baseq2 ]; then
/command/s6-setuidgid guardian /bin/cp -Rn /opt/quake2-data/baseq2/. "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/baseq2/"
fi
if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/jugfull" ] && [ -d /opt/quake2-data/jugfull ]; then
/command/s6-setuidgid guardian /bin/cp -Rn /opt/quake2-data/jugfull/. "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/jugfull/"
fi
if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/xatrix" ] && [ -d /opt/quake2-data/xatrix ]; then
/command/s6-setuidgid guardian /bin/cp -Rn /opt/quake2-data/xatrix/. "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/xatrix/"
fi
if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/rogue" ] && [ -d /opt/quake2-data/rogue ]; then
/command/s6-setuidgid guardian /bin/cp -Rn /opt/quake2-data/rogue/. "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/rogue/"
fi
if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/zaero" ] && [ -d /opt/quake2-data/zaero ]; then
/command/s6-setuidgid guardian /bin/cp -Rn /opt/quake2-data/zaero/. "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/zaero/"
fi
if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/3zb2" ] && [ -d /opt/quake2-data/3zb2 ]; then
/command/s6-setuidgid guardian /bin/cp -Rn /opt/quake2-data/3zb2/. "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/3zb2/"
fi
if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/ctf" ] && [ -d /opt/quake2-data/ctf ]; then
/command/s6-setuidgid guardian /bin/cp -Rn /opt/quake2-data/ctf/. "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/ctf/"
fi
if [ -d "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/q2admin" ] && [ -d /opt/quake2-data/q2admin ]; then
/command/s6-setuidgid guardian /bin/cp -Rn /opt/quake2-data/q2admin/. "${QUAKE2_INSTALL}${QUAKE2_DATA_SUBPATH}/q2admin/"
fi
fi
# Regenerate HTTP Mirror
if [ -n "${QUAKE2_MIRROR}" ]; then
/usr/local/bin/quake2-mirror /usr/local/bin/quake2-mirror
fi fi

View File

@ -1,49 +1,73 @@
#!/usr/bin/with-contenv bash #!/usr/bin/with-contenv /bin/sh
if [ ! -d /mnt/config/www/quake2 ]; then if [ -z "${QUAKE2_DATA}" ]; then
/command/s6-setuidgid guardian /bin/mkdir -p /mnt/config/www/quake2 if [ -n "${QUAKE2_INSTALL}" ] && [ ! "${QUAKE2_INSTALL}" = "true" ] && [ ! "${QUAKE2_INSTALL}" = "false" ]; then
export QUAKE2_DATA="${QUAKE2_INSTALL}"
else
export QUAKE2_DATA="/mnt/config"
fi
fi fi
if [[ -d /tmp/quake2 ]]; then if [ -z "${QUAKE2_MIRROR}" ]; then
exit 0
elif [ "${QUAKE2_MIRROR}" = "true" ]; then
export QUAKE2_MIRROR="${QUAKE2_DATA}"
elif [ "${QUAKE2_MIRROR}" = "false" ]; then
export QUAKE2_MIRROR=
fi
if [ -z "${QUAKE2_DATA_SUBPATH}" ]; then
export QUAKE2_DATA_SUBPATH=/data/quake2
fi
if [ -z "${QUAKE2_MIRROR_SUBPATH}" ]; then
export QUAKE2_MIRROR_SUBPATH=/www/quake2
fi
# Extract PAKs
if [ -d /tmp/quake2 ]; then
/bin/rm -rf /tmp/quake2 /bin/rm -rf /tmp/quake2
fi fi
cd "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}" || exit 1
cd /mnt/config/data/quake2
for dir in */; do for dir in */; do
cd /mnt/config/data/quake2/${dir} /command/s6-setuidgid guardian /bin/mkdir -p "/tmp/quake2/${dir}"
/command/s6-setuidgid guardian /bin/mkdir -p /tmp/quake2/${dir} if [ -d "/tmp/quake2/${dir}" ]; then
if [[ "${dir}" == "baseq2/" || "${dir}" == "xatrix/" || "${dir}" == "rogue/" ]]; then if [ "${dir}" = "baseq2/" ] || [ "${dir}" = "xatrix/" ] || [ "${dir}" = "rogue/" ]; then
/usr/bin/find . -type f -name 'pak*.pak' ! -name 'pak0.pak' | sort | egrep "pak[0-9].pak" \ /usr/bin/find "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/${dir}" -type f -name 'pak*.pak' ! -name 'pak0.pak' | sort \
| /usr/bin/xargs -n1 -r /command/s6-setuidgid guardian /usr/local/bin/pakextract -o /tmp/quake2/${dir} | /usr/bin/xargs -n1 -r /command/s6-setuidgid guardian /usr/local/bin/pakextract -o "/tmp/quake2/${dir}"
else else
/usr/bin/find . -type f -name 'pak*.pak' | sort | egrep "pak[0-9].pak" \ /usr/bin/find "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/${dir}" -type f -name 'pak*.pak' | sort \
| /usr/bin/xargs -n1 -r /command/s6-setuidgid guardian /usr/local/bin/pakextract -o /tmp/quake2/${dir} | /usr/bin/xargs -n1 -r /command/s6-setuidgid guardian /usr/local/bin/pakextract -o "/tmp/quake2/${dir}"
fi
/usr/bin/find "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/${dir}" -type f -name '*.pak' ! -name 'pak*.pak' | sort \
| /usr/bin/xargs -n1 -r /command/s6-setuidgid guardian /usr/local/bin/pakextract -o "/tmp/quake2/${dir}"
fi fi
/usr/bin/find . -type f -name '*.pak' | sort | egrep -v "pak[0-9].pak" \
| /usr/bin/xargs -n1 -r /command/s6-setuidgid guardian /usr/local/bin/pakextract -o /tmp/quake2/${dir}
done done
if [[ -d /tmp/quake2 ]]; then # Mirror Files
cd /tmp/quake2
/usr/bin/find . -type f -name '*.bsp' -exec /command/s6-setuidgid guardian /bin/cp --parents {} /mnt/config/www/quake2/ \; if [ ! -d "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}" ]; then
/usr/bin/find . -type f -name '*.md2' -exec /command/s6-setuidgid guardian /bin/cp --parents {} /mnt/config/www/quake2/ \; /command/s6-setuidgid guardian /bin/mkdir -p "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}"
/usr/bin/find . -type f -name '*.pcx' -exec /command/s6-setuidgid guardian /bin/cp --parents {} /mnt/config/www/quake2/ \; fi
/usr/bin/find . -type f -name '*.png' -exec /command/s6-setuidgid guardian /bin/cp --parents {} /mnt/config/www/quake2/ \; if [ ! -d "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}" ]; then
/usr/bin/find . -type f -name '*.sp2' -exec /command/s6-setuidgid guardian /bin/cp --parents {} /mnt/config/www/quake2/ \; exit 1
/usr/bin/find . -type f -name '*.tga' -exec /command/s6-setuidgid guardian /bin/cp --parents {} /mnt/config/www/quake2/ \;
/usr/bin/find . -type f -name '*.wal' -exec /command/s6-setuidgid guardian /bin/cp --parents {} /mnt/config/www/quake2/ \;
/usr/bin/find . -type f -name '*.wav' -exec /command/s6-setuidgid guardian /bin/cp --parents {} /mnt/config/www/quake2/ \;
fi fi
cd /mnt/config/data/quake2 cd /tmp/quake2 || exit 1
/usr/bin/find . -type f -name '*.bsp' -exec /command/s6-setuidgid guardian /bin/cp --parents {} /mnt/config/www/quake2/ \; /usr/bin/find . -type f -name '*.bsp' -exec /command/s6-setuidgid guardian /bin/cp --parents {} "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/" \;
/usr/bin/find . -type f -name '*.md2' -exec /command/s6-setuidgid guardian /bin/cp --parents {} /mnt/config/www/quake2/ \; /usr/bin/find . -type f -name '*.md2' -exec /command/s6-setuidgid guardian /bin/cp --parents {} "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/" \;
/usr/bin/find . -type f -name '*.pcx' -exec /command/s6-setuidgid guardian /bin/cp --parents {} /mnt/config/www/quake2/ \; /usr/bin/find . -type f -name '*.pcx' -exec /command/s6-setuidgid guardian /bin/cp --parents {} "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/" \;
/usr/bin/find . -type f -name '*.png' -exec /command/s6-setuidgid guardian /bin/cp --parents {} /mnt/config/www/quake2/ \; /usr/bin/find . -type f -name '*.png' -exec /command/s6-setuidgid guardian /bin/cp --parents {} "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/" \;
/usr/bin/find . -type f -name '*.sp2' -exec /command/s6-setuidgid guardian /bin/cp --parents {} /mnt/config/www/quake2/ \; /usr/bin/find . -type f -name '*.sp2' -exec /command/s6-setuidgid guardian /bin/cp --parents {} "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/" \;
/usr/bin/find . -type f -name '*.tga' -exec /command/s6-setuidgid guardian /bin/cp --parents {} /mnt/config/www/quake2/ \; /usr/bin/find . -type f -name '*.tga' -exec /command/s6-setuidgid guardian /bin/cp --parents {} "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/" \;
/usr/bin/find . -type f -name '*.wal' -exec /command/s6-setuidgid guardian /bin/cp --parents {} /mnt/config/www/quake2/ \; /usr/bin/find . -type f -name '*.wal' -exec /command/s6-setuidgid guardian /bin/cp --parents {} "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/" \;
/usr/bin/find . -type f -name '*.wav' -exec /command/s6-setuidgid guardian /bin/cp --parents {} /mnt/config/www/quake2/ \; /usr/bin/find . -type f -name '*.wav' -exec /command/s6-setuidgid guardian /bin/cp --parents {} "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/" \;
if [[ -d /mnt/config/www/default ]]; then cd "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}" || exit 1
/command/s6-setuidgid guardian /bin/cp -Rn /mnt/config/www/default/* /mnt/config/www/quake2/ /usr/bin/find . -type f -name '*.bsp' -exec /command/s6-setuidgid guardian /bin/cp --parents {} "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/" \;
fi /usr/bin/find . -type f -name '*.md2' -exec /command/s6-setuidgid guardian /bin/cp --parents {} "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/" \;
/usr/bin/find . -type f -name '*.pcx' -exec /command/s6-setuidgid guardian /bin/cp --parents {} "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/" \;
/usr/bin/find . -type f -name '*.png' -exec /command/s6-setuidgid guardian /bin/cp --parents {} "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/" \;
/usr/bin/find . -type f -name '*.sp2' -exec /command/s6-setuidgid guardian /bin/cp --parents {} "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/" \;
/usr/bin/find . -type f -name '*.tga' -exec /command/s6-setuidgid guardian /bin/cp --parents {} "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/" \;
/usr/bin/find . -type f -name '*.wal' -exec /command/s6-setuidgid guardian /bin/cp --parents {} "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/" \;
/usr/bin/find . -type f -name '*.wav' -exec /command/s6-setuidgid guardian /bin/cp --parents {} "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/" \;

View File

@ -1,12 +1,27 @@
#!/bin/bash #!/command/with-contenv /bin/sh
if [[ -d /opt/quake2/openffa/highscores ]]; then if [ -d /opt/quake2/openffa/highscores ]; then
/command/s6-setuidgid guardian /bin/mkdir -p /mnt/shared/data/quake2/openffa/highscores if [ -z "${QUAKE2_DATA}" ]; then
/command/s6-setuidgid guardian /bin/cp -rvs /opt/quake2/openffa/highscores /mnt/shared/data/quake2/openffa/highscores if [ -n "${QUAKE2_INSTALL}" ] && [ ! "${QUAKE2_INSTALL}" = "true" ] && [ ! "${QUAKE2_INSTALL}" = "false" ]; then
export QUAKE2_DATA="${QUAKE2_INSTALL}"
else
export QUAKE2_DATA="/mnt/config"
fi
fi
if [ -z "${QUAKE2_DATA_SUBPATH}" ]; then
export QUAKE2_DATA_SUBPATH=/data/quake2
fi
if [[ ! -d "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/highscores" ]]; then
/command/s6-setuidgid guardian /bin/mkdir -p "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/highscores"
if [[ -d "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/highscores" ]]; then
/command/s6-setuidgid guardian /bin/cp -Rv /opt/quake2/openffa/highscores/. "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/openffa/highscores/"
/bin/rm -rf /opt/quake2/openffa/highscores
fi
fi
fi fi
if /usr/bin/pgrep -f quakedock >/dev/null; then if /usr/bin/pgrep -f quakedock >/dev/null; then
/command/s6-setuidgid guardian /usr/bin/screen -S quakedock -X stuff "`echo -ne \"say QUAKE II SERVER SHUTTING DOWN!\r\"`" /command/s6-setuidgid guardian /usr/bin/screen -S quakedock -X stuff "$(/bin/echo -ne \"say QUAKE II SERVER SHUTTING DOWN!\r\")"
sleep 6 sleep 6
/command/s6-setuidgid guardian /usr/bin/screen -S quakedock -X stuff "`echo -ne \"quit\r\"`" /command/s6-setuidgid guardian /usr/bin/screen -S quakedock -X stuff "$(/bin/echo -ne \"quit\r\")"
sleep 2 sleep 2
fi fi