98 lines
5.5 KiB
Plaintext
Executable File
98 lines
5.5 KiB
Plaintext
Executable File
#!/usr/bin/with-contenv /bin/sh
|
|
# SPDX-FileCopyrightText: 2021 - 2023 Daniel Wolf <nephatrine@gmail.com>
|
|
#
|
|
# SPDX-License-Identifier: ISC
|
|
|
|
if [ -z "${QUAKE2_DATA}" ]; then
|
|
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_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
|
|
fi
|
|
cd "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}" || exit 1
|
|
for dir in */; do
|
|
/command/s6-setuidgid guardian /bin/mkdir -p "/tmp/quake2/${dir}"
|
|
dirtrim=$(/bin/echo "${dir}" | /bin/sed 's:/*$::')
|
|
if [ -d "/tmp/quake2/${dir}" ]; then
|
|
/usr/bin/find "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/${dir}" -type f -name 'pak*.pak' -size -90000k | grep -E 'pak[0-9]\.pak' | sort \
|
|
| /usr/bin/xargs -n1 -r /command/s6-setuidgid guardian /usr/local/bin/pakextract -o "/tmp/quake2/${dir}"
|
|
/usr/bin/find "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/${dir}" -type f -name '*.pak' -size -90000k | grep -Ev 'pak[0-9]\.pak' | sort \
|
|
| /usr/bin/xargs -n1 -r /command/s6-setuidgid guardian /usr/local/bin/pakextract -o "/tmp/quake2/${dir}"
|
|
if [ -f "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/${dir}.filelist" ]; then
|
|
/command/s6-setuidgid guardian /bin/cp "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/${dir}.filelist" "/tmp/quake2/${dirtrim}.filelist"
|
|
for fp in $(cat "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/${dir}.filelist"); do
|
|
/command/s6-setuidgid guardian /bin/cp "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/${dir}${fp}" "/tmp/quake2/${dir}${fp}"
|
|
done
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Mirror Files
|
|
|
|
while [ ! -d "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}" ]; do
|
|
dirn="${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}"
|
|
while [ -n "${dirn}" ] && [ ! "${dirn}" = "/" ]; do
|
|
basn=$(/usr/bin/basename "${dirn}")
|
|
dirn=$(/usr/bin/dirname "${dirn}")
|
|
if [ -d "${dirn}" ]; then
|
|
/command/s6-setuidgid guardian /bin/mkdir "${dirn}/${basn}" || exit 1
|
|
break
|
|
fi
|
|
done
|
|
done
|
|
if [ ! -d "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}" ]; then
|
|
exit 1
|
|
fi
|
|
/bin/chown guardian:users "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}"
|
|
|
|
/usr/bin/find "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}" -type l -delete
|
|
|
|
cd /tmp/quake2 || exit 1
|
|
/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 {} "${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}/" \;
|
|
/usr/bin/find . -type f -name '*.filelist' -exec /command/s6-setuidgid guardian /bin/cp --parents {} "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/" \;
|
|
/usr/bin/find . -type f -name '*.pak' -exec /command/s6-setuidgid guardian /bin/cp --parents {} "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/" \;
|
|
|
|
cd "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}" || exit 1
|
|
/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 {} "${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}/" \;
|
|
|
|
for dir in */; do
|
|
if [ -d "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/baseq2" ] && [ ! -d "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/${dir}" ] && [ -f "${QUAKE2_DATA}${QUAKE2_DATA_SUBPATH}/${dir}.noclient" ]; then
|
|
/command/s6-setuidgid guardian /bin/ln -s baseq2 "${QUAKE2_MIRROR}${QUAKE2_MIRROR_SUBPATH}/$(/bin/echo "${dir}" | /bin/sed 's:/*$::')"
|
|
fi
|
|
done
|