Compare commits

..

1 Commits

3 changed files with 387 additions and 2 deletions

32
Dockerfile Normal file
View File

@ -0,0 +1,32 @@
FROM debian:bookworm-slim
LABEL author="Makaren0" maintainer="Makaffe@hotmail.com"
ENV DEBIAN_FRONTEND=noninteractive
ENV DEBCONF_NOWARNINGS="yes"
RUN apt update; apt upgrade -y\
&& dpkg --add-architecture i386 \
&& apt install -y unzip curl wget tar gzip python3 ca-certificates
RUN apt-get update \
&& apt-get clean \
&& apt-get autoremove
RUN apt-get install -y lib32gcc-s1 libicu-dev
RUN apt --fix-broken install \
&& apt-get update \
&& apt-get upgrade -y \
&& dpkg --configure -a \
&& apt-get install -f
RUN adduser --disabled-password --home /home/container container
USER container
ENV USER=container HOME=/home/container
WORKDIR /home/container
COPY ./entrypoint.sh /entrypoint.sh
CMD ["/bin/bash", "/entrypoint.sh"]

View File

@ -1,2 +1 @@
## Docker images
You can find all imagen under branchs
## Docker images

354
entrypoint.sh Normal file
View File

@ -0,0 +1,354 @@
#!/bin/bash
# Advertencia: El script podría no estar preparado para producción, si este es su caso, siéntase libre de editar el script según sus requisitos.
# Advertencia: No se recomienda ejecutar este script como root.
# Assembled by: Makaren0
echo -e "╔═════════════════════╗"
echo -e "║ EntryPoint.sh ║"
echo -e "╚═════════════════════╝\n"
# VARIABLES DE CONFIGURACION #
#1.Configuración cuentas steam
# steamcmd esta alojado en el directorio principal del usuario que ejecuta el script
STEAM_ACCOUNT="anonymous" # For security reasons, it is recommended that you create a new Steam account just for your dedicated servers.
STEAM_PSW="" # Leave it blank to disable
STEAM_GUARD="" # Steam guard code for first login
GSLT_TOKEN="E28A6DFBF5961B7C6DCB439E420728A1" # Necesario para mostrar el server en la lista publica Note:Valve sais cs2 generate automatically
#2.Configuración del juego
SERVER_IP="" # Sobreescribe las configuraciones desde Pterodactyl
SERVER_PORT="" # Sobreescribe las configuraciones desde Pterodactyl
MAX_PLAYERS="20"
DEFAULT_START_MAP="de_nuke" # Deshabilitado si se usan mapas de la workshop
WORKSHOP_START_MAP="" # https://steamcommunity.com/sharedfiles/filedetails/?id=125488374
UPDATE_ON_BOOT="1" # Actualiza el servidor mediante steamcmd ANTES de descargar cualquier otro externo. Usa 1 para activarlo, cualquier otra cosa para desactivarlo
VAC="1" # Habilita el uso de VAC en el servidor. Usa 1 para activarlo, cualquier otra cosa para desactivarlo
SRCDS_DEBUG="0" # Habilita -debug en los argumentos de srcds
METAMOD="0"
LAUNCH_ARGS="-dedicated +ip ${SERVER_IP} -port ${SERVER_PORT} -maxplayers ${MAX_PLAYERS}"
EXTRA_ARGS=""
# API_AUTHORIZATION_KEY="" #https://steamcommunity.com/dev/apikey
# WORKSHOP_COLLECTION_ID="" #https://steamcommunity.com/sharedfiles/filedetails/?id=125499818
# Workshop maps. More info: https://developer.valvesoftware.com/wiki/CSGO_Workshop_For_Server_Operators
# CSGO OLD - EXTRAPARAMS="-nohltv +sv_pure 0 +game_type 0 +game_mode 0" # Puedes usar -autoupdate en los argumentos para actualizar automaticamente el servidor
# CSGO OLD - LAUNCH_ARGS="-nobreakpad -game csgo -console -usercon -secure -maxplayers_override ${MAX_PLAYERS} -tickrate ${TICKRATE} +sv_setsteamaccount ${GSLT_TOKEN} -net_port_try 1 +net_public_adr ${IP} +hostport ${PORT} ${EXTRAPARAMS}"
# AUTO_UPDATE="1" # Se refiere a la comprobación que hace el juego MIENTRAS esta corriendo para actualizar el servidor automaticamente. Usa 1 para activarlo, cualquier otra cosa para desactivarlo
# TICKRATE="64"
# # # # # # # #
# SCRIPT INIT #
# # # # # # # #
APP_ID="730"
SCREEN_NAME="CS2-SERVER-PRACTICE"
RUNSCRIPT_USER=$USER # Se puede usar cualquier usuario sin privilegios de administrador. En este caso al estar utilizando un servicio de Linux directamente obtendremos la variable de entorno $USER
SERVER_DIR=$PWD
SRCDS_RUN="$SERVER_DIR/game/bin/linuxsteamrt64/cs2"
# Define la ubicación del archivo de registro de screen
# Define alojamiento de backups
LOG_FILE="$SERVER_DIR/screen-log-gameserver.log"
BACKUP="1" # Backups sobre la configuracion y plugins de Source Mods
BACKUP_DIR="$SERVER_DIR/backups" # Directorio de las backups de plugins y configuraciones de SourceMod
MAX_BACKUPS="10"
# Comprobar parametros desde Pterodactyl
if [[ ! -z $P_STEAM_ACCOUNT ]]; then
STEAM_ACCOUNT=$P_STEAM_ACCOUNT
fi
if [[ ! -z $P_STEAM_ACCOUNT ]]; then
STEAM_ACCOUNT=$P_STEAM_ACCOUNT
fi
if [[ ! -z $P_STEAM_GUARD ]]; then
STEAM_GUARD=$P_STEAM_GUARD
fi
if [[ ! -z $P_STEAM_PSW ]]; then
STEAM_PSW=$P_STEAM_PSW
fi
if [[ ! -z $P_MAX_PLAYERS ]]; then
MAX_PLAYERS=$P_MAX_PLAYERS
fi
if [[ ! -z $P_GSLT_TOKEN ]]; then
GSLT_TOKEN=$P_GSLT_TOKEN
fi
if [[ ! -z $P_VAC ]]; then
VAC=$P_VAC
fi
if [[ ! -z $P_UPDATE_ON_BOOT ]]; then
UPDATE_ON_BOOT=$P_UPDATE_ON_BOOT
fi
if [[ ! -z $P_SRCDS_DEBUG ]]; then
SRCDS_DEBUG=$P_SRCDS_DEBUG
fi
if [[ ! -z $P_EXTRA_ARGS ]]; then
EXTRA_ARGS=$P_EXTRA_ARGS
fi
if [[ ! -z $P_SERVER_IP ]]; then
SERVER_IP=$P_SERVER_IP
fi
if [[ ! -z $P_SERVER_PORT ]]; then
SERVER_PORT=$P_SERVER_PORT
fi
if [[ ! -z $P_METAMOD ]]; then
METAMOD=$P_METAMOD
fi
if [[ ! -z $P_WORKSHOP_START_MAP ]]; then
WORKSHOP_START_MAP=$P_WORKSHOP_START_MAP
fi
# Componer el nuevo argumento de lanzamiento combinado desde Pterodactyl, para que de alguna manera puedan interpretarse a la vez, tanto desde este script como Pterodactyl
if [[ ! -z $STARTUP ]]; then
LAUNCH_ARGS="$STARTUP +ip ${SERVER_IP} -port ${SERVER_PORT} -maxplayers ${MAX_PLAYERS}"
fi
# Añadir los parametros de lanzamiento extra
if [[ ! -z $EXTRA_ARGS ]]; then
LAUNCH_ARGS=$LAUNCH_ARGS $EXTRA_ARGS
fi
# Comprobar si existe un directorio home adecuado
if [ ! -d "$HOME" ]; then
echo "No se puede encontrar o no se tienen permisos en la carpeta principal home del usuario: $USER"
exit 1
else
if [ ! -w "$HOME" ] || [ ! -r "$HOME" ]; then
echo "No se tienen permisos de lectura o escritura dentro del directorio home del usuario: $USER"
exit 1
fi
fi
# Comprobar si existe el directorio principal donde se ejecuta el juego y alcanzarlo
if [ ! -d "$SERVER_DIR" ]; then
# Si el directorio no existe, crearlo
mkdir -p "$GAME_DIR"
echo "Se ha creado el directorio $GAME_DIR"
fi
cd $SERVER_DIR
# SteamCMD Descarga e instala steamcmd si no existe.
STEAMCMD_DIR="$HOME/steamcmd"
if [ ! -d "$STEAMCMD_DIR" ]; then
echo "|> NO SE HA ENCONTRADO STEAMCMD. Descargando e instalando steamcmd..."
mkdir -p "$STEAMCMD_DIR"
cd "$STEAMCMD_DIR"
wget -O "steamcmd_linux.tar.gz" "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz"
tar -xvzf steamcmd_linux.tar.gz
rm steamcmd_linux.tar.gz
fi
# Crear un script de actualizacion automatica para el servidor
# STEAM_RUNSCRIPT="$STEAMCMD_DIR/server_autoupdate_script_${SCREEN_NAME}.txt"
# touch "$STEAM_RUNSCRIPT"
# echo "force_install_dir $SERVER_DIR" > "$STEAM_RUNSCRIPT"
# if [ -z "$STEAM_PSW" ]; then
# echo "login anonymous" >> "$STEAM_RUNSCRIPT"
# else
# echo "login $STEAM_ACCOUNT $STEAM_PSW" >> "$STEAM_RUNSCRIPT"
# fi
# echo "app_update $APP_ID" >> "$STEAM_RUNSCRIPT"
# echo "quit" >> "$STEAM_RUNSCRIPT"
# chown ${USER} "$STEAM_RUNSCRIPT"
# chmod 666 "$STEAM_RUNSCRIPT"
# Lanzar steamcmd para comprobar actualizaciones del cliente
$STEAMCMD_DIR/steamcmd.sh +quit
# Crear enlaces simbolicos para conectar con steamcmdclient desde el usuario
mkdir -p ~/.steam/sdk32/
mkdir -p ~/.steam/sdk64/
rm "$HOME/.steam/sdk32/steamclient.so"
ln -s $STEAMCMD_DIR/linux32/steamclient.so ~/.steam/sdk32/steamclient.so # Enlazar los ejecutables de steam al directorio del usuario para actualizar automaticamente (AUTO_UPDATE variable)
ln -s $STEAMCMD_DIR/linux64/steamclient.so ~/.steam/sdk64/steamclient.so
#ln -s "$STEAMCMD_DIR/linux32/steamcmd" "$STEAMCMD_DIR/linux32/steam" # Esto se hace debido a que Volvo esta completamente loco.
#ln -s "$STEAMCMD_DIR/steamcmd.sh" "$STEAMCMD_DIR/steam.sh" # Esto se hace debido a que Volvo esta completamente loco.
echo "|> steamcmd completamente instalado"
# # Establecer la actualizacion automatica propia de CS2
# if [ "$AUTO_UPDATE" = "1" ]; then
# LAUNCH_ARGS="${LAUNCH_ARGS} -autoupdate -steam_dir $STEAMCMD_DIR -steamcmd_script server_autoupdate_script_${SCREEN_NAME}.txt"
# echo "|> ACTIVADA Actualizacion propia del juego mediante argumentos"
# fi
# Verificar si se utilizan mapas de la workshop
if [ -n "$WORKSHOP_START_MAP" ]; then
LAUNCH_ARGS="${LAUNCH_ARGS} +map $DEFAULT_START_MAP +host_workshop_map ${WORKSHOP_START_MAP}"
else
LAUNCH_ARGS="${LAUNCH_ARGS} +map $DEFAULT_START_MAP"
echo "|> No se han definido mapas de la workshop o API. Continuando con ${DEFAULT_START_MAP}..."
fi
# Uso de Valve-Anticheat
if [ "$VAC" != "1" ]; then
LAUNCH_ARGS="${LAUNCH_ARGS} -insecure"
echo "|> VAC Anticheat desativado desde configuracion"
fi
# Hacer el uso de debug
if [ "$SRCDS_DEBUG" = "1" ]; then
LAUNCH_ARGS="${LAUNCH_ARGS} -debug"
fi
# Actualiza el servidor de CSGO
echo "|> UPDATE on boot server... running steamcmd"
cd "$STEAMCMD_DIR"
if [ "$UPDATE_ON_BOOT" = "1" ]; then
if [ -z "$STEAM_PSW" ]; then
./steamcmd.sh +force_install_dir "$SERVER_DIR" +login anonymous +app_update $APP_ID +quit
else
./steamcmd.sh +force_install_dir "$SERVER_DIR" +login "$STEAM_ACCOUNT" "$STEAM_PSW" "$STEAM_GUARD" +app_update $APP_ID +quit
fi
fi
# Instalar o actualizar MetaMod
echo "4.Actualizando MetaMod"
MM_VERSION_FILE="$SERVER_DIR/MM_installed_version.txt"
METAMOD_VERSION_URL="https://mms.alliedmods.net/mmsdrop/2.0/mmsource-latest-linux"
METAMOD_VERSION_URL=$(wget -qO- "$METAMOD_VERSION_URL")
if [ "$METAMOD" = "1" ]; then
if [ ! -d $MM_VERSION_FILE ]; then
touch $MM_VERSION_FILE
chown ${USER} "$MM_VERSION_FILE"
chmod 600 "$MM_VERSION_FILE"
fi
if [ ! "$METAMOD_VERSION_URL" = "$(cat $MM_VERSION_FILE)" ]; then
echo "Se ha encontrado una última versión distinta a la ya instalada"
echo "Actual MM version: $(cat $MM_VERSION_FILE) | New MM version: $METAMOD_VERSION_URL"
echo "$METAMOD_VERSION_URL" > $MM_VERSION_FILE
METAMOD_DOWNLOAD_BY_VERSION_URL="https://mms.alliedmods.net/mmsdrop/2.0/$METAMOD_VERSION_URL"
DROP_MM_DIR="${SERVER_DIR}/game/csgo" # For download the binaries
METAMOD_DIR="${SERVER_DIR}/game/csgo/addons/metamod" # Fixes news installations
if [ ! -d "$METAMOD_DIR" ]; then
echo "Instalando MetaMod..."
mkdir -p "$METAMOD_DIR"
else
echo "Actualizando MetaMod..."
fi
if wget -qO- "$METAMOD_DOWNLOAD_BY_VERSION_URL" | tar -xz -C "$DROP_MM_DIR"; then
echo "El archivo se descargó y descomprimió correctamente."
echo "MetaMod instalado/actualizado con éxito."
else
echo "Error: No se pudo descargar o descomprimir el archivo."
exit 1
fi
# Comprobar y activar el mecanismo de carga de plugins hacia Source2
# ya ves
else
echo "La ultima version de MM es la misma que la actualmente instalada."
fi
fi
# Instalar o actualizar SourceMod
# echo "5.Actualizando SourceMod"
# SM_VERSION_FILE="$SERVER_DIR/SM_installed_version.txt"
# SOURCEMOD_VERSION_URL="https://sm.alliedmods.net/smdrop/1.11/sourcemod-latest-linux"
# SOURCEMOD_VERSION_URL=$(wget -qO- "$SOURCEMOD_VERSION_URL")
# if [ ! -d $SM_VERSION_FILE ]; then
# touch $SM_VERSION_FILE
# chown ${USER} "$SM_VERSION_FILE"
# chmod 600 "$SM_VERSION_FILE"
# fi
# if [ ! "$SOURCEMOD_VERSION_URL" = "$(cat $SM_VERSION_FILE)" ]; then
# echo "Se ha encontrado una última versión distinta a la ya instalada"
# echo "Actual SM version: $(cat $SM_VERSION_FILE) | New SM version: $SOURCEMOD_VERSION_URL"
# echo "$SOURCEMOD_VERSION_URL" > $SM_VERSION_FILE
# SOURCEMOD_VERSION_URL="https://sm.alliedmods.net/smdrop/1.11/$SOURCEMOD_VERSION_URL"
# SOURCEMOD_DIR="$SERVER_DIR/csgo/addons/sourcemod"
# if [ ! -d "$SOURCEMOD_DIR" ]; then
# echo "Instalando SourceMod desde cero..."
# mkdir -p "$SOURCEMOD_DIR"
# wget -qO- "$SOURCEMOD_VERSION_URL" | tar -xz -C "$SERVER_DIR/csgo"
# echo "SourceMod instalado con éxito."
# else
# if [ "$BACKUP_SM_CFG" = "1" ]; then
# TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# if [ ! -d "$BACKUP_DIR" ]; then
# echo "El directorio de backups no existe: BACKUP_DIR"
# mkdir -p "$BACKUP_DIR"
# echo "Directorio creado: $BACKUP_DIR"
# fi
# tar -czf "$BACKUP_DIR/addons_backup_$TIMESTAMP.tar.gz" -C "$SERVER_DIR/csgo/addons" .
# FILES_COUNT=$(ls -1 $directorio | wc -l)
# if [ $FILES_COUNT -gt $MAX_BACKUPS ]; then
# # Obtener la lista de archivos ordenados por fecha de modificación (el más antiguo al final)
# OLD_FILES=$(ls -1t $BACKUP_DIR | tail -n $(expr $FILES_COUNT - $MAX_BACKUPS))
# # Eliminar los archivos más antiguos
# rm $BACKUP_DIR/$OLD_FILES
# fi
# echo "Copia de seguridad finalizada"
# fi
# echo "Actualizando SourceMod sin perder la configuración existente..."
# TEMP_DIR="$(mktemp -d)"
# wget -qO- "$SOURCEMOD_VERSION_URL" | tar -xz -C "$TEMP_DIR"
# rm -rf "$TEMP_DIR/cfg" "$TEMP_DIR/addons/sourcemod/configs" "$TEMP_DIR/addons/sourcemod/data"
# cp -R "$TEMP_DIR/addons" "$SERVER_DIR/csgo"
# echo "SourceMod instalado/actualizado con éxito."
# rm -rf "$TEMP_DIR"
# fi
# else
# echo "La ultima version de SM es la misma que la actualmente instalada."
# fi
#Iniciar servidor de CS:GO
cd "$SERVER_DIR/game/bin/linuxsteamrt64/"
echo "Lanzando servidor >> $SRCDS_RUN $LAUNCH_ARGS"
$SRCDS_RUN $LAUNCH_ARGS
# if [[ -n $INVOCATION_ID ]]; then # Comprobar si el script esta lanzando un servicio o desde el
# echo "El script se está ejecutando desde un archivo .service."
# echo -c "####################\nArgumentos de lanzamiento: ${LAUNCH_ARGS}\n ####################"
# echo "Lanzando servidor el $SCREEN_NAME en 5 segundos..."
# sleep 5
# $SRCDS_RUN $LAUNCH_ARGS
# else
# # Lanza el servidor usando screen
# echo -c "####################\nArgumentos de lanzamiento: ${LAUNCH_ARGS}\n ####################"
# echo "Lanzando servidor el $SCREEN_NAME en 5 segundos..."
# echo "El script se está ejecutando manualmente por un usuario."
# sleep 5
# rm -f screenlog.*
# screen -L -AdmS $SCREEN_NAME $SRCDS_RUN $LAUNCH_ARGS
# # Espera un momento para que la pantalla tenga tiempo de iniciar
# sleep 1
# # Redirige la salida estándar y la salida de error a un archivo de registro
# screen -S $SCREEN_NAME -X logfile $LOG_FILE
# screen -S $SCREEN_NAME -X log on
# echo "La salida se está guardando en $LOG_FILE"
# echo ".Servidor de CSGO lanzado en la pantalla '$SCREEN_NAME'. Para adjuntar, ejecute: screen -r $SCREEN_NAME"
# exit 0
# fi