juegos

Juegos de terminal de Pancho: Catan (TUI, GUI, web, servidor, PicoCalc), ajedrez, calculadora y minijuegos
git clone https://git.lu3dhn.xyz/juegos.git
Log | Files | Refs

install-vps.sh (1974B)


      1 #!/bin/sh
      2 # Instala el servidor de un juego en un VPS con systemd. Correr como root en el VPS:
      3 #
      4 #   sh install-vps.sh <juego> <puerto> <binario> [descripcion]
      5 #   ej: sh install-vps.sh catan 7373 ./catan-server "Servidor de Catan"
      6 #
      7 # Crea el usuario <juego>, guarda las partidas en /var/lib/<juego> y deja
      8 # <juego>-server corriendo con systemd.
      9 set -e
     10 NAME=$1; PORT=$2; BIN=$3; DESC=${4:-"Servidor de $1"}
     11 if [ -z "$NAME" ] || [ -z "$PORT" ] || [ -z "$BIN" ]; then
     12     echo "uso: $0 <juego> <puerto> <binario> [descripcion]" >&2
     13     exit 1
     14 fi
     15 install -m 755 "$BIN" /usr/local/bin/$NAME-server
     16 id $NAME >/dev/null 2>&1 || useradd --system --home /var/lib/$NAME --shell /usr/sbin/nologin $NAME
     17 install -d -o $NAME -g $NAME -m 700 /var/lib/$NAME
     18 cat > /etc/systemd/system/$NAME-server.service <<UNIT
     19 # /etc/systemd/system/$NAME-server.service
     20 [Unit]
     21 Description=$DESC
     22 After=network-online.target
     23 Wants=network-online.target
     24 
     25 [Service]
     26 User=$NAME
     27 Group=$NAME
     28 ExecStart=/usr/local/bin/$NAME-server --port $PORT --data /var/lib/$NAME
     29 Restart=on-failure
     30 StateDirectory=$NAME
     31 NoNewPrivileges=yes
     32 ProtectSystem=strict
     33 ProtectHome=yes
     34 PrivateTmp=yes
     35 ReadWritePaths=/var/lib/$NAME
     36 StateDirectoryMode=0700
     37 
     38 [Install]
     39 WantedBy=multi-user.target
     40 UNIT
     41 chmod 644 /etc/systemd/system/$NAME-server.service
     42 # herramienta de administracion (blanquear contrasenas, listar partidas); la llave del
     43 # asiento usa el prefijo "<juego>-asiento" como el cliente (seat_key en linux/online.c).
     44 # Solo para los juegos que entran con nombre + contrasena (hoy, Catan).
     45 ADMIN=$(dirname "$0")/admin.sh
     46 if [ -f "$ADMIN" ] && [ "$NAME" = catan ]; then
     47     sed -e "s/^NAME=.*/NAME=$NAME/" -e "s/^PORT=.*/PORT=$PORT/" -e "s/^KEY_PREFIX=.*/KEY_PREFIX=$NAME-asiento/" \
     48         "$ADMIN" > /usr/local/bin/$NAME-admin
     49     chmod 755 /usr/local/bin/$NAME-admin
     50 fi
     51 systemctl daemon-reload
     52 systemctl enable --now $NAME-server
     53 echo "Listo. AbrĂ­ el puerto $PORT/tcp en el firewall. Logs: journalctl -u $NAME-server -f"