Serveur minecraft

Paquet Minecraft pour Synology NAS – Resoudre les problemes d’un serveur MineCraft

Le 19 juin 2019 - 13 minutes de lecture

METTRE À JOUR – Les instructions et les remarques sur cette page s'appliquent aux packages Minecraft et CraftBukkit hébergés sur mon dépôt. Fonctionne maintenant sur les modèles QorIQ CPU Synology!

Minecraft est un jeu intriguant. Je ne l'ai acheté que récemment, après qu'un ami l'ait recommandé. Il y a beaucoup à aimer: le style visuel rétro saisissant, la musique douce et sporadique, explorer le monde généré par les procédures, la façon logique de concevoir les objets, la collaboration multijoueur et le gameplay émergent. Notch, son créateur, mérite certainement la fortune sur laquelle il est assis. Je vous recommande vivement de regarder ce court documentaire à ce sujet.

Informations sur le forfait Minecraft

Juste après avoir publié le package Java pour Synology, quelques personnes ont indiqué vouloir utiliser ce logiciel pour installer un serveur Minecraft. Maintenant que j'ai le jeu, j'ai décidé d'essayer aussi. J'avais supposé que les processeurs ARM ne seraient pas capables de l'exécuter, et les premiers tests ont semblé le confirmer. J’ai décidé qu’il serait néanmoins intéressant de créer un paquet car les unités Intel CPU NAS seraient bien, surtout avec leur RAM supplémentaire. Cependant, avec un peu de performances, il fonctionne de manière acceptable (pas de décalage en cas d’extraction de blocs) sur mon DS111 alimenté par ARM, qui ne dispose que de 256 Mo. La charge du processeur est de 100% pendant un certain temps au début, mais peu de temps après sa lecture, elle se stabilise à environ 60%. J'ai brièvement testé avec deux joueurs connectés et après un peu de retard au début (une seconde de retard pour exploiter un bloc), il semble s'être calmé.

Minecraft en cours d'exécution montrant la distance de dessin et la charge du serveur

Minecraft indiquant la distance de tirage et la charge du serveur s'exécutant sur un Synology DS111

Installation

  • Ce paquet n'est pas spécifique à la CPU. Si vous avez Java, cela fonctionnera. Pour le moment, cela signifie les processeurs ARM, Intel et QorIQ PowerPC, mais pas les anciens PowerPC.
  • Dans le Panneau de configuration de l'utilisateur dans DSM, activez le service User Homes.
  • Installez le package directement à partir du Centre de paquets dans DSM. Dans Paramètres -> Sources de paquets ajouter mon URL de référentiel de paquets qui est http://packages.pcloadletter.co.uk. Vous devrez d'abord installer l'un de mes packages Java SE pour Embedded (Java 6 ou 7).

Remarques

  • Le paquet récupère le fichier jar du serveur minecraft à partir de Mojang lors de son installation. Je me plie à leur souhait que personne ne le redistribue.
  • Le script serveur démon vérifie la quantité de RAM système et adapte la taille du segment de mémoire Java de manière appropriée. Il applique également quelques modifications de performances à Java pour tenter de réduire la latence de la récupération de place.
  • La première fois que vous exécutez le serveur, un nouveau monde sera créé, ce qui peut prendre quelques minutes. Vous ne pouvez pas interrompre cela, mais vous pouvez vérifier la progression en consultant à plusieurs reprises l'onglet Log.
  • Étant donné que le temps que cela prend pour jouer à Minecraft peut être considérable, lorsque vous désinstallez le paquet, la sauvegarde sera sauvegardée. monde dossier et paramètres à /volume1/public/minecraftworld.todaysdate.bak pour empêcher la suppression accidentelle.
  • Le package prend en charge les mises à niveau vers les versions futures tout en préservant la monde dossier et paramètres du serveur.
  • Si vous souhaitez transplanter un dossier mondial existant sur le serveur, copiez-le dans / volume1 / @ appstore / Minecraft. Vous aurez aussi besoin de courir chown -R minecraft / volume1 / @ appstore / Minecraft accorder la propriété des fichiers à l'utilisateur démon.
  • La première fois que vous exécutez le package, le fichier de configuration du serveur /volume1/@appstore/Minecraft/server.properties est généré. Lors de son prochain lancement, mon script réduit la distance de dessin par défaut pour les processeurs ARM de 10 morceaux à 7 morceaux. Cela était approprié pour mon DS111 afin d'éviter la latence lors de l'extraction de blocs, mais vous souhaiterez peut-être le réduire davantage sur les unités NAS de la série J qui ont moins de RAM et les processeurs plus lents. Autres fichiers du serveur (white-list.txt etc.) se trouvent dans le même dossier. Pour CraftBukkit, les fichiers sont dans le dossier. /volume1/@appstore/Craftbukkit/server.properties (notez la capitalisation – le projet CraftBukkit a semblé changer cela alors que j'avais déjà créé le paquet avec un minuscule «b»).
  • Le moyen le plus simple d’éditer ces fichiers de configuration si vous n’êtes pas vraiment sûr de Linux est d’installer le package Merty de Config File Editor, qui nécessite également l’installation du package officiel Synology Perl (à partir de DSM 4.2). Chargez Config File Editor, puis dans le menu déroulant, éditez sa propre configuration (la dernière de la liste) et ajoutez les lignes suivantes:
    /volume1/@appstore/Minecraft/server.properties,Minecraft-properties
    /volume1/@appstore/Minecraft/white-list.txt,Minecraft-whitelist
    /volume1/@appstore/Minecraft/ops.txt,Minecraft-ops

    Assurez-vous d’ajouter une ligne vierge supplémentaire en dessous, sauvegardez, puis relancez CFE et vous aurez des entrées pour Minecraft dans la liste déroulante. Vous devez redémarrer le package Minecraft pour que les modifications prennent effet.
  • Il était un peu délicat d’arrêter le serveur en douceur sans tuer le processus Java. Nous avons besoin qu'il s'éteigne correctement pour enregistrer les morceaux actifs sur le disque en premier. La plupart des guides sur le Net utilisent le écran binaire qui n’est pas inclus dans Synology DSM, et je ne voulais pas avoir à créer de version du paquet pour chaque architecture de CPU. J'ai trouvé que je pourrais utiliser queue envoyer la dernière ligne du fichier /tmp/stdin.minecraft au serveur (/tmp/stdin.craftbukkit pour le package CraftBukkit). Voici comment Arrêtez la commande est émise. Vous pouvez envoyer vos propres commandes, par exemple echo say Bonjour les joueurs >> /tmp/stdin.minecraft. Vous pouvez vérifier que la commande a bien été reçue en consultant le journal du serveur dans le Centre de paquets.
  • Le serveur s'exécute sur le port TCP par défaut pour Minecraft (25565). Vous devrez donc transférer ce port sur votre routeur si vous souhaitez qu'il soit accessible au public.

Scripts de paquets

Pour plus d’informations, voici les scripts de package afin que vous puissiez voir ce qu’il va faire. Vous pouvez obtenir plus d'informations sur le fonctionnement des packages en lisant le wiki de Synology Package.

installer.sh



#! / bin / sh

# -------- Script d'installation MINECRAFT / CRAFTBUKKIT
# -------- paquet maintenu à pcloadletter.co.uk

si [ "$SYNOPKG_PKGNAME" == "Minecraft" ]; puis
  DOWNLOAD_PATH = "http://s3.amazonaws.com/MinecraftDownload/launcher"
  DOWNLOAD_FILE = "minecraft_server.jar"
  UPGRADE_FILES = "monde server.properties * .txt"
Fi
si [ "$SYNOPKG_PKGNAME" == "Craftbukkit" ]; puis
  DOWNLOAD_PATH = "http://cbukk.it"
  DOWNLOAD_FILE = "craftbukkit-beta.jar"
  UPGRADE_FILES = "server.properties * .txt * .yml world world_nether world_the_end plugins bukkit_update"
Fi

DOWNLOAD_URL = "$ DOWNLOAD_PATH / $ DOWNLOAD_FILE"
DAEMON_USER = "` echo $ SYNOPKG_PKGNAME | awk 'print tolower ($ _)' `"
DAEMON_ID = "Utilisateur du démon $ SYNOPKG_PKGNAME"
DAEMON_PASS = "` openssl rand 12 -base64 2> / dev / null` "
MIGRATION_FOLDER = "$ DAEMON_USER _data_mig"
ENGINE_SCRIPT = "/ var / packages / $ SYNOPKG_PKGNAME /scripts/launcher.sh"
INSTALL_FILES = "$ DOWNLOAD_URL"
source / etc / profile
TEMP_FOLDER = "` find / -maxdepth 2 -name '@tmp' | head -n 1` "
PRIMARY_VOLUME = "/` echo $ TEMP_FOLDER | cut -f2 -d '/' `"
WORLD_BACKUP = "$ PRIMARY_VOLUME / public / $ DAEMON_USER world.`date + "% d-% b  "` .bak "

preinst ()

  si [ -z $JAVA_HOME ]; puis
    echo "Java n'est pas installé ou n'est pas configuré correctement. JAVA_HOME n'est pas défini."
    echo "Téléchargez et installez le package Java Synology à partir de http://wp.me/pVshC-z5"
    sortie 1
  Fi
  
  si [ ! -f $JAVA_HOME/bin/java ]; puis
    echo "Java n'est pas installé ou n'est pas configuré correctement. Le binaire Java n'a pas pu être localisé."
    echo "Téléchargez et installez le package Java Synology à partir de http://wp.me/pVshC-z5"
    sortie 1
  Fi
  
  # est le service utilisateur à la maison activé?
  UH_SERVICE = peut-être
  synouser --add userhometest Testing123 "Utilisateur Test utilisateur" 0 "" ""
  UHT_HOMEDIR = `cat / etc / passwd 


postinst ()
 cut -f6 -d ':' `"
  su - $ DAEMON_USER -s / bin / sh -c "echo export HOME =  '$ DAEMON_HOME ' >> .profile"
  
  #changer le propriétaire de l'arborescence de dossiers
  chown -R $ DAEMON_USER $ SYNOPKG_PKGDEST
  
  sortie 0



preuninst ()

  # assurez-vous que le serveur est arrêté
  su - $ DAEMON_USER -s / bin / sh -c "$ ENGINE_SCRIPT arrêter $ SYNOPKG_PKGNAME $ SYNOPKG_PKGDEST"
  dormir 10
  
  #si un monde existe, sauvegardez-le dans le dossier public, juste au cas où ...
  si [ -d $SYNOPKG_PKGDEST/world ]; puis
    si [ ! -d $WORLD_BACKUP ]; puis
      mkdir -p $ WORLD_BACKUP
    Fi
    pour ITEM dans $ UPGRADE_FILES; faire
      mv $ SYNOPKG_PKGDEST / $ ITEM $ WORLD_BACKUP
    terminé
  Fi
  
  sortie 0



postuninst ()

  #remove démon utilisateur
  synouser --del $ DAEMON_USER
  
  Répertoire de base de l'utilisateur #remove daemon (nécessaire depuis DSM 4.1)
  [ -e /var/services/homes/$DAEMON_USER ] && rm -r / var / services / homes / $ DAEMON_USER
  
  sortie 0



preupgrade ()

  # assurez-vous que le serveur est arrêté
  su - $ DAEMON_USER -s / bin / sh -c "$ ENGINE_SCRIPT arrêter $ SYNOPKG_PKGNAME $ SYNOPKG_PKGDEST"
  dormir 10
  
  #si un monde existe, sauvegardez-le
  si [ -d $SYNOPKG_PKGDEST/world ]; puis
    mkdir $ SYNOPKG_PKGDEST /../$ MIGRATION_FOLDER
    pour ITEM dans $ UPGRADE_FILES; faire
      si [ -e $SYNOPKG_PKGDEST/$ITEM ]; puis
        mv $ SYNOPKG_PKGDEST / $ ITEM $ SYNOPKG_PKGDEST /../$ MIGRATION_FOLDER
      Fi
    terminé
  Fi
  
  sortie 0



postupgrade ()

  # utiliser les fichiers de données migrés de la version précédente
  si [ -d $SYNOPKG_PKGDEST/../$MIGRATION_FOLDER/world ]; puis
    pour ITEM dans $ UPGRADE_FILES; faire
      si [ -e $SYNOPKG_PKGDEST/../$MIGRATION_FOLDER/$ITEM ]; puis
        mv $ SYNOPKG_PKGDEST /../$ MIGRATION_FOLDER / $ ITEM $ SYNOPKG_PKGDEST
      Fi
    terminé
    rmdir $ SYNOPKG_PKGDEST /../$ MIGRATION_FOLDER
    
    L'utilisateur #daemon a été supprimé et recréé. Nous devons donc réinitialiser la propriété (nouvel UID).
    chown -R $ DAEMON_USER $ SYNOPKG_PKGDEST
  Fi
  
  sortie 0

start-stop-status.sh



#! / bin / sh

# -------- MINECRAFT / CRAFTBUKKIT script start-stop-status
# -------- paquet maintenu à pcloadletter.co.uk

DAEMON_USER = "` echo $ SYNOPKG_PKGNAME | awk 'print tolower ($ _)' `"
DAEMON_ID = "Utilisateur du démon $ SYNOPKG_PKGNAME"
ENGINE_SCRIPT = "/ var / packages / $ SYNOPKG_PKGNAME /scripts/launcher.sh"
DAEMON_USER_SHORT = `echo $ DAEMON_USER | couper -c 1-8`

daemon_status ()

    ps 

cas 1 $ en
  début)
    DAEMON_HOME = "` cat / etc / passwd | grep "$ DAEMON_ID" | cut -f6 -d ':' `"
    
    # Définissez le fuseau horaire actuel pour Java afin que les horodatages des journaux soient précis
    #nous devons utiliser les noms de fuseaux horaires modernes pour que Java puisse déterminer l'heure d'été
    SYNO_TZ = `cat /etc/synoinfo.conf | grep fuseau horaire | cut -f2 -d '"'`
    SYNO_TZ = `grep" ^ $ SYNO_TZ "/ usr / share / zoneinfo / Timezone / tzname | sed -e "s /^.*= //" `
    grep "^ export TZ" $ DAEMON_HOME /. profile> / dev / null 
     && sed -i "s% ^ export TZ =. * $% export TZ = '$ SYNO_TZ'%" $ DAEMON_HOME /. profile 
     || echo export TZ =  '$ SYNO_TZ ' >> $ DAEMON_HOME /. profile
    
    su - $ DAEMON_USER -s / bin / sh -c "$ ENGINE_SCRIPT début $ DAEMON_USER $ SYNOPKG_PKGDEST &"
    sortie 0
  ;;
  
  Arrêtez)
    su - $ DAEMON_USER -s / bin / sh -c "$ ENGINE_SCRIPT arrêter $ DAEMON_USER $ SYNOPKG_PKGDEST"
    sortie 0
  ;;
  
  statut)
    if daemon_status; puis
      sortie 0
    autre
      sortie 1
    Fi
  ;;
  
  bûche)
    echo "$ SYNOPKG_PKGDEST /server.log"
    sortie 0
  ;;
esac

launcher.sh



#! / bin / sh

# -------- Script de lancement du serveur MINECRAFT / CRAFTBUKKIT
# -------- paquet maintenu à pcloadletter.co.uk
 
# -------- Permet un arrêt en douceur du serveur sans fichiers binaires spécifiques à la CPU
# -------- Vous pouvez envoyer des commandes au serveur en cours d'exécution de la manière suivante:
# -------- echo say Bonjour les joueurs >> /tmp/stdin.minecraft
# -------- echo say Bonjour les joueurs >> /tmp/stdin.craftbukkit

DAEMON_USER = 2 $
SYNOPKG_PKGDEST = 3 $
DAEMON_USER_SHORT = `echo $ DAEMON_USER | couper -c 1-8`
JAR_FILE = $ SYNOPKG_PKGDEST / $ 2.jar

cas 1 $ en
  début)
    si [ -f /tmp/stdin.$DAEMON_USER ]; puis
      rm /tmp/stdin.$DAEMON_USER
    Fi
    touchez /tmp/stdin.$DAEMON_USER
    cd $ SYNOPKG_PKGDEST
    si [ ! -f syno-marker.txt ]; puis
      si [ -f server.properties ]; puis
        sed -i "s / Un serveur Minecraft / Un serveur Synology Minecraft /" server.properties
  
        Le processeur #ARM est très en retard, réduisez donc la distance de dessin de 10 à 6 morceaux
        cat / proc / cpuinfo | grep "architecture du processeur: 5TE"> / dev / null 
         && sed -i "s / ^ view-distance = 10 / view-distance = 6 /" server.properties
  
        #enregistre que ces mods ont été faits
        echo config mis à jour> syno-marker.txt
      Fi
    Fi
    JAVA_OPTS = '- XX: + UseConcMarkSweepGC -XX: + CMSIncrementalPacing -XX: + AggressiveOpts'
    RAM = $ ((`free | grep Mem: | sed -e" s / ^ * Mem: *  ([0-9]* ). * $ /  1 / "` / 1024))
    si [ $RAM -le 128 ]; puis
      JAVA_MAX_HEAP = 80M
    elif [ $RAM -le 256 ]; puis
      JAVA_MAX_HEAP = 192M
    elif [ $RAM -le 512 ]; puis
      JAVA_MAX_HEAP = 448M
    elif [ $RAM -le 1024 ]; puis
      JAVA_MAX_HEAP = 896M
    elif [ $RAM -le 2048 ]; puis
      JAVA_MAX_HEAP = 1792M
    elif [ $RAM -gt 2048 ]; puis
      JAVA_MAX_HEAP = 2048M
    Fi
    JAVA_START_HEAP = $ JAVA_MAX_HEAP
    tail -n 0 -f /tmp/stdin.$DAEMON_USER | java -Xmx $ JAVA_START_HEAP -Xms $ JAVA_MAX_HEAP $ JAVA_OPTS -jar $ JAR_FILE nogui
  ;;

  Arrêtez)
    echo say arrêter .. >> /tmp/stdin.$DAEMON_USER
    dormir 5
    echo stop >> /tmp/stdin.$DAEMON_USER
    dormir 10
    tuer -9 `ps | grep "^ *[0-9]* $ DAEMON_USER_SHORT. * Tail -n 0 -f /tmp/stdin.$DAEMON_USER "| sed -e" s / ^ *  ([0-9]* ). * $ /  1 / "`
    si [ -f /tmp/stdin.$DAEMON_USER ]; puis
      rm /tmp/stdin.$DAEMON_USER
    Fi
  ;;
esac

Changelog:

  • 0015 mis à jour vers Minecraft 1.5.2, CraftBukkit beta 1.5.2-R0.1
  • 0014 mis à jour vers Minecraft 1.4.7, CraftBukkit beta 1.4.7-R0.1 et correctifs pour DSM 4.2
  • 013 mis à jour vers Minecraft 1.4.6 et CraftBukkit beta 1.4.6-R0.3
  • 012 mis à jour vers Minecraft 1.4.5 et CraftBukkit 1.3.2-R1.0
  • 011 mis à jour à Minecraft 1.4.2
  • 010 mis à jour vers Minecraft 1.3.2 et CraftBukkit 1.3.1-R2.0
  • 009 scripts de package entièrement réécrits pour unifier les packages Minecraft et CraftBukkit
  • 008 mis à jour vers Minecraft 1.3.1, unifie la plupart des scripts en un script d'installation unique et intégrant des améliorations mineures de mes autres packages
  • 007 mis à jour vers Minecraft 1.2.3
  • 006 Réduit le tas Java max à 80 Mo sur des systèmes de 128 Mo, le fuseau horaire fixe prend en charge chaque démarrage de serveur
  • 005 Correction du comportement de la taille maximale du tas Java sur les systèmes de plus de 2 Go de RAM.
  • 004 problème SSL wget fixe empêchant le téléchargement du fichier jar sur certains systèmes
  • 003 mis à jour vers Minecraft 1.1
  • Les fichiers de configuration du serveur 002 sont également migrés lors des mises à niveau de version et sauvegardés lors de la désinstallation. Les modifications de mon script pour server.properties sont fabriqués qu'une seule fois, plutôt que chaque démarrage
  • 001 première version publique

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.