diff --git a/docker-compose.yml b/docker-compose.yml index 5d85b3d..9446357 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -34,7 +34,7 @@ services: - "8000:8000/tcp" restart: no environment: - # The use of the Steam API requires a key. Get yours here: https://steamcommunity.com/dev/apikey + # The use of the Steam API in the (very incomplete) web app requires a key. Get yours here: https://steamcommunity.com/dev/apikey - STEAMAPIKEY=YOUR_STEAM_API_KEY_HERE server: @@ -47,7 +47,6 @@ services: - mpmissions:/serverfiles/mpmissions - profiles:/profiles - ./files:/files - - ./server:/server - ./server/bin/dz:/usr/local/bin/dz # To have the server show up in the LAN tab of the DayZ launcher, # it must run under host mode. @@ -59,7 +58,7 @@ services: # # Game port # - 2302:2302/udp # # RCON port -# - 2302:2302/udp +# - 2303:2303/udp # # Steam port # - 27016:27016/udp # Always restart, unless stopped diff --git a/files/bin/dz-common b/files/bin/dz-common index 5ecefce..d60ae6e 100755 --- a/files/bin/dz-common +++ b/files/bin/dz-common @@ -25,9 +25,9 @@ cyan="\e[36m" # Presumably once the Linux server is released, the binaries will come from this ID. # But more importantly, if we have a release-compatible binary, the base files must be installed from this id, # even if the server binary and accompanying shared object don't come from it. -#release_server_appid=223350 +release_server_appid=223350 # Without a release binary, we must use the experimental server app id for everything. -release_server_appid=1042420 +#release_server_appid=1042420 # DayZ release client SteamID. This is for mods, as only the release client has them. release_client_appid=221100 @@ -72,7 +72,7 @@ list(){ for dir in $(ls -tr ${WORKSHOP_DIR}) do ID=${dir} - NAME=$(grep name "${WORKSHOP_DIR}/${dir}/meta.cpp" | cut -d '"' -f2 | sed -r 's/\s+//g') + NAME=$(grep name "${WORKSHOP_DIR}/${dir}/meta.cpp" | cut -d '"' -f2 | tr -cd [:alnum:]) SIZE=$(du -sh "${WORKSHOP_DIR}/${dir}" | awk '{print $1}') printf "${C}%.3d %s %.30s %s https://steamcommunity.com/sharedfiles/filedetails/?id=%s %s${default}\n" ${X} ${ID} "${NAME}" "${spaces:${#NAME}+1}" ${ID} ${SIZE} X=$((X+1)) diff --git a/files/tmp/libsteam_api.so b/files/tmp/libsteam_api.so new file mode 100755 index 0000000..10b6385 Binary files /dev/null and b/files/tmp/libsteam_api.so differ diff --git a/files/tmp/steamclient.so b/files/tmp/steamclient.so new file mode 100755 index 0000000..6f49323 Binary files /dev/null and b/files/tmp/steamclient.so differ diff --git a/server/Dockerfile b/server/Dockerfile index c73832a..87f24e2 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -12,7 +12,6 @@ RUN echo 'deb http://deb.debian.org/debian bullseye-backports main non-free' >> RUN apt-get update && apt-get -y upgrade && apt-get -y install --no-install-recommends \ curl \ ca-certificates \ - gdb \ git \ jq \ libsdl2-2.0-0 \ @@ -21,14 +20,9 @@ RUN apt-get update && apt-get -y upgrade && apt-get -y install --no-install-reco locales \ nano \ procps \ - python3-pip \ - strace \ wget \ xmlstarlet -RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1 -RUN update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1 - # Set the locale RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && locale-gen ENV LANG en_US.UTF-8 @@ -47,6 +41,9 @@ RUN groupadd user && \ mkdir -p /home/user /serverfiles/mpmissions /mods /mpmissions /profiles && \ chown -R user:user /home/user /serverfiles /mods /mpmissions /profiles +# Add our startup script, as this rarely changes. +COPY --chown=user:user start.sh /usr/local/bin/start.sh + # Use our non-privileged user USER user diff --git a/server/bin/dz b/server/bin/dz index 9532e42..be24840 100755 --- a/server/bin/dz +++ b/server/bin/dz @@ -18,7 +18,6 @@ parameters="-config=${SERVER_CFG_DST} -port=${port} -freezecheck -BEpath=${SERVE # Where mods are installed. WORKSHOP_DIR="/mods/${release_client_appid}" -mod_command_line="" # Backups BACKUP_DIR="${HOME}/backup" @@ -27,6 +26,8 @@ then mkdir -p "${BACKUP_DIR}" fi +mod_command_line="" + # Functions # Usage @@ -144,7 +145,7 @@ report() { mergexml(){ # First copy the pristine files from upstream echo "Copying pristine versions of cfgeconomycore.xml and cfgeventspawns.xml..." - find /mpmissions -name cfgeconomycore.xml -exec cp {} ${SERVER_FILES}{} \; +`` find /mpmissions -name cfgeconomycore.xml -exec cp -v {} ${SERVER_FILES}{} \; # find /mpmissions -name cfgeventspawns.xml -exec cp {} ${SERVER_FILES}{} \; # Follow https://community.bistudio.com/wiki/DayZ:Central_Economy_mission_files_modding and make a single XML @@ -263,7 +264,7 @@ config(){ get_mod_id_by_index(){ X=1 # Loop over mods - for link in $(ls -tdr ${SERVER_PROFILE}/@* 2> /dev/null) + for link in $(ls -tdr ${SERVER_FILES}/@* 2> /dev/null) do ID=$(readlink ${link} | awk -F/ '{print $NF}') if [[ ${X} = ${1} ]] @@ -283,7 +284,7 @@ get_mod_name(){ echo "Mod ID ${1} doesn't exist" >&2 exit 1 fi - NAME=$(grep name ${WORKSHOP_DIR}/${ID}/meta.cpp | cut -d '"' -f2 | sed -r 's/\s+//g') + NAME=$(grep name ${WORKSHOP_DIR}/${ID}/meta.cpp | cut -d '"' -f2 | tr -cd [:alnum:]) echo -n ${NAME} } @@ -299,7 +300,7 @@ activate(){ UU="un" COLOR="${red}" fi - ID=$(get_mod_id_by_index2 ${1}) + ID=$(get_mod_id_by_index ${1}) MODNAME=$(get_mod_name ${ID}) # Toggle state or report nothing burger pushd "${SERVER_PROFILE}" > /dev/null diff --git a/web/Dockerfile b/web/Dockerfile index ac54436..467f719 100644 --- a/web/Dockerfile +++ b/web/Dockerfile @@ -22,8 +22,6 @@ RUN apt-get update && apt-get -y upgrade && apt-get -y install --no-install-reco lib32gcc-s1 \ lib32stdc++6 \ libcurl4:i386 \ - libsdl2-2.0-0:i386 \ - libsdl2-2.0-0 \ libcap2 \ libxml2-utils \ locales \ @@ -73,6 +71,9 @@ RUN groupadd user && \ mkdir -p /home/user /serverfiles/mpmissions /serverfiles/steamapps/workshop/content /web && \ chown -R user:user /home/user /serverfiles /web +# Add our startup script, as this rarely changes. +COPY --chown=user:user start.sh /usr/local/bin/start.sh + # Use our non-privileged user USER user diff --git a/web/bin/dz b/web/bin/dz index d26c856..4670d42 100755 --- a/web/bin/dz +++ b/web/bin/dz @@ -4,6 +4,10 @@ source dz-common # An array to store Workshop items. Each element contains the mod's ID, name, and state (active or not). WORKSHOP_DIR="/mods/${release_client_appid}" +if [ ! -d ${WORKSHOP_DIR} ] +then + mkdir -p ${WORKSHOP_DIR} +fi workshoplist="" @@ -59,13 +63,13 @@ get_mod_name(){ echo "Mod ID ${1} doesn't exist" >&2 exit 1 fi - NAME=$(grep name ${WORKSHOP_DIR}/${ID}/meta.cpp | cut -d '"' -f2 | sed -r 's/\s+//g') + NAME=$(grep name ${WORKSHOP_DIR}/${ID}/meta.cpp | cut -d '"' -f2 | tr -cd [:alnum:]) echo -n ${NAME} } # "Manage" XML files. xml(){ - /files/mods/xml.sh ${1} + /files/bin/xml.sh ${1} mergexml ${1} } diff --git a/web/docroot/src/components/Body.vue b/web/docroot/src/components/Body.vue index fa01edf..4c66730 100644 --- a/web/docroot/src/components/Body.vue +++ b/web/docroot/src/components/Body.vue @@ -1,13 +1,9 @@ diff --git a/web/docroot/src/components/Header.vue b/web/docroot/src/components/Header.vue index d9753c5..933fdbb 100644 --- a/web/docroot/src/components/Header.vue +++ b/web/docroot/src/components/Header.vue @@ -1,28 +1,39 @@ diff --git a/web/docroot/src/components/Mods.vue b/web/docroot/src/components/Mods.vue index 020fdda..9d638cf 100644 --- a/web/docroot/src/components/Mods.vue +++ b/web/docroot/src/components/Mods.vue @@ -1,37 +1,50 @@ diff --git a/web/docroot/src/components/Search.vue b/web/docroot/src/components/Search.vue index d9ea313..1f96755 100644 --- a/web/docroot/src/components/Search.vue +++ b/web/docroot/src/components/Search.vue @@ -5,7 +5,7 @@ const store = useAppStore()