
Este es un script bash detallado para actualizar un servidor de Minecraft vanilla. Los parámetros predeterminados se pueden modificar dentro del script o pasar como parámetros. La versión de instalación de destino será la última versión predeterminada, aunque se puede especificar cualquier versión.
Este script se escribió en CentOS 7, pero debería funcionar para cualquier distribución de Linux compatible con POSIX siempre que las dependencias estén disponibles.
Dependencias
Este script se basa en cURL para manejar la descarga de manifiestos de Mojang y el archivo JAR del servidor en sí. El analizador JSON jq se utiliza para extraer la información relevante de los manifiestos.
En CentOS 7, jq está disponible a través del repositorio EPEL. En otras distribuciones, puede estar disponible o puede requerir la instalación desde la fuente.
Para instalar las dependencias requeridas en CentOS 7, realice los siguientes comandos
yum actualizar yum -y instalar epel-release yum -y instalar curl jq
Para instalar las dependencias requeridas en una plataforma Debian, ejecute los siguientes comandos
sudo apt-get update sudo apt-get install curl jq -y
Uso
Este script solo maneja la actualización del archivo JAR del servidor. Si necesita detener el servidor, cambiar los permisos en el archivo recién descargado e iniciar el servidor nuevamente después, se recomienda un script de envoltura. A continuación, se muestra un simple script de contenedor de ejemplo para una configuración que usa un usuario y un grupo separados para el servidor, y un servidor que se inicia y detiene a través de systemd.
Por favor tenga cuidado. Si bien estos scripts funcionaron cuando se publicaron originalmente, cualquiera puede editar la página web y, además, su sistema o configuración pueden ser diferentes a los que se usaron para crearlos.
updatemc.sh
#! / bin / sh # ------------ # Envoltorio para updatemcjar.sh # ------------ JAR_PATH = "/ home / minecraft / server / server. jar "# Cambia esto para que apunte a tu servidor.jar echo" Deteniendo Minecraft "systemctl stop minecraft echo" Minecraft detenido "./updatemcjar.sh --jar-path $ JAR_PATH -y chown minecraft: minecraft $ JAR_PATH #Cambia tu usuario & grupo si es necesario chmod 750 $ JAR_PATH chmod + x $ JAR_PATH echo "Iniciando Minecraft" systemctl iniciar minecraft echo "Minecraft iniciado"
El script principal en sí mismo hace todo el trabajo pesado y tiene muchos parámetros configurables según su configuración.
updatemcjar.sh
#! / bin / sh # ---------------------------------------- # Un shell script para actualizar el archivo jar del servidor de Minecraft en servidores Linux los archivos de manifiesto y jar # jq Para analizar los manifiestos # # # ---- IMPORTANTE ---- # Este script simplemente actualiza el jar del servidor de Minecraft. # Envuelva este script en un script de envoltura para encargarse de detener e # iniciar su servidor según su configuración. # Si necesita cambiar los permisos en el servidor jar final, hágalo # dentro de ese script warpper también. # # Ejemplo de secuencia de comandos de envoltura: # systemctl stop minecraft # ./updatemcjar.sh -y --jar-path "/srv/minecraft/server.jar" # sudo chown minecraft: minecraft "/srv/minecraft/server.jar" # sudo chmod 750 "/srv/minecraft/server.jar" # sudo chmod + x "/srv/minecraft/server.jar" # systemctl iniciar minecraft # ----------------- ----------------------- # Error de secuencia de comandos en errores establecidos -e # Configuración predeterminada (se puede cambiar a través de parámetros) TEMP_DIR = '/ tmp / updatemc / 'JAR_PATH =' / home / minecraftuser / minecraftdir / server.jar 'VERSION_MANIFEST =' https: //launchermeta.mojang.com/mc/game/version_manifest.json '# Rutas de salida NORMAL_OUT = / dev / stdout ERROR_OUT = / dev / stderr # Banderas de parámetros FLAG_FORCE = FLAG_VERSION = FLAG_CONFIRM = FLAG_TEST = # Uso de la página de ayuda () {echo echo "---------------------------- ------------ "echo" $ 0 - Una herramienta para actualizar fácilmente el jar del servidor de Minecraft "echo" Escrito por: Andrew Haskell - Distribuido bajo la Licencia MIT (MIT) "echo echo" Dependencias: " echo "cURL Incluido en la mayoría de distri butions package repositories "echo" jq Verifica tus repositorios de distribución o compila desde la fuente "echo echo" Uso: $ 0 [opciones] "echo echo" -f, --force Si la versión de destino SHA1 coincide con la SHA1 del archivo actual, fuerza la actualización de todos modos , implica - sí "eco" -y, - sí Omitir confirmación de actualización "eco" -v, --versión Especifica una versión de destino diferente. Sin este parámetro, se utiliza la última versión de lanzamiento "echo" -t, --test Prueba la versión de destino SHA1 contra el SHA1 del archivo actual sin cambiar ningún archivo "echo" -s, --silent Suprimir la salida del script, implica --sí "echo" --no-err Suprime los mensajes de error (¡Peligroso!) "echo" --temp-dir Especifica un directorio temporal diferente, el valor predeterminado es $ TEMP_DIR "echo" --jar-path Especifica una ruta JAR final diferente, el valor predeterminado es $ JAR_PATH "echo" --manifest Especifica una URL de manifiesto de versión diferente, el valor predeterminado es $ VERSION_MANIFEST "echo" -h, --help Imprime este mensaje de ayuda "echo echo" Examinar Uso: "echo" $ 0 Ejecuta el script normalmente "echo" $ 0 -f Forzar la actualización del JAR existente "echo" $ 0 -v 1.8.1 -y Actualizar a 1.8.1 sin pedir confirmación "echo echo" ------------------ ---------------------- "echo} # Verifique los parámetros del script mientras [" $ 1 "! =" "]; haga caso $ 1 en -f | --force ) FLAG_FORCE = 1 FLAG_CONFIRM = 1 ;; -v | --version) shift FLAG_VERSION = $ 1 ;; -y | --sí) FLAG_CONFIRM = 1 ;; -s | --silent) NORMAL_OUT = / dev / null FLAG_CONFIRM = 1 ;; --no-err) ERROR_OUT = / dev / null ;; --temp-dir) shift TEMP_DIR = $ 1 ;; --jar-path) shift JAR_PATH = $ 1 ;; --manifest) shift VERSION_MANIFEST = $ 1 ;; -t | --prueba) FLAG_TEST = 1 ;; -h | --help) salida de uso ;; *) echo "Opción incorrecta especificada" salida de uso 1 ;; esac shift done echo "Borrando directorio temporal: $ TEMP_DIR"> $ NORMAL_OUT mkdir -p $ TEMP_DIR DOWNLOADED_JAR = "$ {TEMP_DIR} server.jar" if [-e $ DOWNLOADED_JAR] then rm -f $ DOWNLOADED_JAR fi echo "Descargando versión Manifest from: $ VERSION_MANIFEST "> $ NORMAL_OUT VERSION_MANIFEST_DATA = $ (curl -s" $ VERSION_MANIFEST ") echo" Listo "> $ NORMAL_OUT echo" Analizando Versión Manifest "> $ NORMAL_OUT VERSION_LATEST = $ (echo" $ VERSION_MANIFESTq -DATA "| .latest.release ') VERSION_TARGET = $ VERSION_LATEST echo "Última versión lanzada: $ VERSION_LATEST"> $ NORMAL_OUT if [-n "$ FLAG_VERSION"] luego VERSION_TARGET = $ FLAG_VERSION echo "Versión de destino para descargar: $ VERSION $ NORMALGET_ fi"> PACKAGE_MANIFEST = $ (echo "$ VERSION_MANIFEST_DATA" | jq -r --arg VERSION_TARGET "$ VERSION_TARGET" '.versiones |. | select (.id == $ VERSION_TARGET) | .url ') echo "Done"> $ NORMAL_OUT if [-z "$ PACKAGE_MANIFEST"] then echo "No se pudo encontrar la versión de destino: $ VERSION_TARGET dentro del archivo de manifiesto. ¿Se especificó incorrectamente la versión de destino? De lo contrario, vuelva a verificar manualmente el manifiesto de la versión de Mojang "> $ ERROR_OUT exit 1 fi echo" Descargando el manifiesto del paquete desde: $ PACKAGE_MANIFEST "> $ NORMAL_OUT PACKAGE_MANIFEST_DATA = $ (curl -s" $ PACKAGE_MANIFEST ") echo" Done "> $ NORMAL_OUT echo "Analizando el manifiesto del paquete"> $ NORMAL_OUT SERVER_NEWJAR_URL = $ (jq -rn --argjson url "$ PACKAGE_MANIFEST_DATA" '$ url.downloads.server.url') SERVER_NEWJAR_SHA1 = $ (jq -rn - $EST_DATA_DATA_1 " '$ sha1.downloads.server.sha1') echo "Listo"> $ NORMAL_OUT echo "Calculando SHA1 de $ JAR_PATH"> $ NORMAL_OUT SERVER_OLDJAR_SHA1 = $ (sha1sum "$ JAR_PATH" | cut -d "" -f 1) echo " JAR antiguo SHA1: $ SERVER_OLDJAR_SHA1 "> $ NORMAL_OUT echo" Nuevo JAR SHA1: $ SERVER_NEWJAR_SHA1 "> $ NORMAL_OUT if [" $ SERVER_OLDJAR_SHA1 "=" $ SERVER_NEWJAR_SHA1 "] luego echo" SHA1 coincide con las sumas. $ JAR_PATH ya es la versión de destino "> $ NORMAL_OUT si [-z" $ FLAG_TEST "] entonces si [-z" $ FLAG_FORCE "] entonces echo" Exiting "> $ NORMAL_OUT exit else echo" Forcing JAR Update "> $ NORMAL_OUT fi else exit fi else echo "Las sumas SHA1 no coinciden. $ JAR_PATH difiere de la versión de destino ". > $ NORMAL_OUT si [-z "$ FLAG_TEST"] entonces si [-z "$ FLAG_CONFIRM"] entonces mientras sea verdadero; ¿Leer -p "Reemplazar $ JAR_PATH con el más reciente? [y / n]: "yn caso $ yn en [Yy] *) break ;; [Nn] *) echo" Exiting "exit ;; *) echo" Por favor responda S (es) o N (o) ";; esac done fi else exit fi fi echo "Descargando un nuevo servidor JAR desde: $ SERVER_NEWJAR_URL a $ DOWNLOADED_JAR"> $ NORMAL_OUT curl -s -L -f -o $ DOWNLOADED_JAR $ SERVER_NEWJAR_URL echo "Hecho"> $ NORMAL_OUT echo "Calculando SHA1 de $ DOWNLOADED_JAR "> $ NORMAL_OUT DOWNLOADED_SHA1 = $ (sha1sum $ DOWNLOADED_JAR | cut -d" "-f 1) echo" Dwn JAR SHA1: $ DOWNLOADED_SHA1 "> $ NORMAL_OUT echo" Nuevo JAR SHA1: $ DOWNAL_LOADED_SORM DOWNLOADED_SHA1 "=" $ SERVER_NEWJAR_SHA1 "] luego echo" Las sumas SHA1 coinciden, procediendo "> $ NORMAL_OUT else echo" Las sumas SHA1 no coinciden, verifica el JAR descargado en: $ DOWNLOADED_JAR "> $ ERROR_OUT exit 1 fi JAR_PATH_BACK_UPATH = $. bak echo "Cambiando el nombre de $ JAR_PATH a $ JAR_PATH_BACKUP"> $ NORMAL_OUT mv $ JAR_PATH $ JAR_PATH_BACKUP echo "Copiando $ DOWNLOADED_JAR a $ JAR_PATH"> $ NORMAL_OUT cp $ DOWNLOADED_JAR $ JAR_SHAAL_PATH "Repetir" FINALIZAR NORMAL $ JAR_SHAAL "echo" 1 = $ (sha1sum $ JAR_PATH | cut -d "" -f 1) si ["$ FINAL_SHA1" = "$ SERVER_NEWJAR_SHA1"] entonces echo "$ JAR_PATH actualizado exitosamente a la versión: $ VERSION_TARGET"> $ NORMAL_OUT exit else echo "SHA1 sumas no coinciden, JAR actual en : $ JAR_PATH NO coincide con la versión que se intenta instalar. Retrotraer "> $ ERROR_OUT echo" Eliminando $ JAR_PATH "> $ ERROR_OUT rm -f $ JAR_PATH echo" Copiando copia de seguridad JAR desde: $ JAR_PATH_BACKUP a $ JAR_PATH "> $ ERROR_OUT cp $ JAR_PATH_BACKUP $ JAR_PATH echo original restaurado.
Tutoriales | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Introductorio |
| ||||||||||||
General |
| ||||||||||||
Desafíos |
| ||||||||||||
Construcciones |
| ||||||||||||
Sostenible |
| ||||||||||||
Encantador y fundición |
| ||||||||||||
Rompiendo bloques |
| ||||||||||||
Mecanismos |
| ||||||||||||
Servidores |
| ||||||||||||
Apoyo técnico |
| ||||||||||||
Anticuado |
|