# MineOS

# Serveradministration
## Export aus Nitradoservern:
<https://wiki.nitrado.net/de/Map_herunterladen_bei_Minecraft>  
Dafür brauchst du zusätzlich den Client von Filezilla:
<https://filezilla-project.org/download.php?type=client>

Dabei sollte eine ZIP-Datei rauskommen, die du eventuell selber noch erstellen musst, indem du das Überverzeichnis manuell zipst, was heruntergeladen wird.

## Neuen Server aufsetzen

### Import bestehender Welten in MineOS

<https://minecraft.codeemo.com/mineoswiki/index.php?title=Importing_a_world>  

Eigentlich nur verkehrt herum wie beim Export. Ich empfehle Filezilla, damit hab ich es getestet. Logins sind wie folgt:  
Server: sftp://Serveradresse  
User: sftp_user  
Port: 15900  

Importieren kannst du, indem du mit Rechtsklick hoch- bzw runterladen entsprechende Dateien hin und her schiebst. Nach dem Import sieht es dann etwa so aus:

[![unknown.png](https://wiki.ngl.cloud/uploads/images/gallery/2022-12/scaled-1680-/unknown.png)](https://wiki.ngl.cloud/uploads/images/gallery/2022-12/unknown.png)

Der Linke Teil ist dabei dein Rechner und funktioniert wie der Explorer. Rechts ist der Server. Du musst noch in den korrekten Importpfad auf dem Server navigieren, das sieht dann so aus:

[![unknown.png](https://wiki.ngl.cloud/uploads/images/gallery/2022-12/scaled-1680-/1vxunknown.png)](https://wiki.ngl.cloud/uploads/images/gallery/2022-12/1vxunknown.png)

Eine Testdatei liegt zum Vergleich drin. Du kannst sie dir auch gerne runterladen und aufmachen, um zu vergleichen, wie deine Datei aussieht.
Wenn hier eure Welt als ZIP drin liegt, geht es auf der Verwaltungsebene weiter.

### Start eines Importservers

Mit der importierten ZIP kannst du jetzt einen neuen Server starten.

[![unknown.png](https://wiki.ngl.cloud/uploads/images/gallery/2022-12/scaled-1680-/Msbunknown.png)](https://wiki.ngl.cloud/uploads/images/gallery/2022-12/Msbunknown.png)

```Create Server from Archive``` erstellt eine neue Standard Serverinstanz. Diese wird dann am oberen Bildschirmrand unter ```Currently Selected Servers``` ausgewählt.
Die Software ist so eingestellt, dass nur der erste Server aus dem Internet erreichbar ist, daher werden weitere Serverinstanzen zwar laufen, aber nicht erreichbar sein.
Sobald der Server ausgewählt ist, kannst du auf der linken Seite die Serversettings sehen. Alles andere sind Einstellungen für die Software, an denen bitte nicht rumspielen, weil es sonst evtl nicht mehr läuft (auch wenn ich das schnell zurücksetzen kann, falls doch mal was schief geht).

[![unknown.png](https://wiki.ngl.cloud/uploads/images/gallery/2022-12/scaled-1680-/Znpunknown.png)](https://wiki.ngl.cloud/uploads/images/gallery/2022-12/Znpunknown.png)

### Vorbereitung MC-Server-Framework / Update MC-Server
Bevor der Server gestartet werden kann, muss eine MC-Server-Datei geladen werden.
#### Servertypen
##### Vanilla
Der Vanilla Minecraftserver ist in der aktuellsten Version immer unter Profiles downloadbar.  Danach entsprechend auf der Serverseite die zu benutzende Version umstellen und den Server neustarten.

##### Alternativ: Paper
Für alternative Server muss nur die neuste Paper-Datei statt der Vanilla-Datei heruntergeladen und analog zur Vanilla-Variante auf der Serverseite als JAR ausgewählt werden. Vorsicht, die neuste Version ist nicht immer oben! Danach den Server neustarten.
! Achtung !: Wenn Paper genutzt wird und man wieder zu Vanilla zurück will, müssen einige manuelle Änderungen am Save vorgenommen werden: <https://docs.papermc.io/paper/migration> Sektion From Paper to Vanilla.

[![Paper.png](https://wiki.ngl.cloud/uploads/images/gallery/2023-08/scaled-1680-/paper.png)](https://wiki.ngl.cloud/uploads/images/gallery/2023-08/paper.png)

##### Alternativ: Fabric
Vanilla-ähnlicher Server mit wenig Optimierungen. Farms und Exploits funktionieren wie in Vanilla auf Kosten von zusätzlichen Lags und schlechterer Performance im Vergleich zu Paper. Muss händisch eingerichtet werden. Siehe Fabric Dokumentation.

##### Revert einer Fabric/Spigot Welt zurück zu Vanilla
<https://serverminer.com/article/how-to-convert-a-paper-spigot-world-to-a-vanilla-world/>

#### Update Ablauf Quick-Checklist
1. Server stoppen
2. Vanilla bzw. Alternative herunterladen
3. Auf Serverseite "Accept EULA" und erst danach "Restart" anklicken

### Server Settings
Auf einem neuen Server sollten alle Einstellungen wie folgt sein:
Unter Server Actions:  
Change profile to: akutellste
Eventuell musst du einmal auf Accept EULA klicken, wenn es nicht starten, weil Java geupdated wurde, sollte aber im Normalfall nicht passieren.  
Broadcast to LAN: an  
Start server on boot: an  
Alles andere auf Standard lassen.  

### Java Settings
Change runnable to: Entweder minecraft-server-1.19 (nicht gemoddet) oder spigot 1.19 (für modded) bzw. die entsprechend aktuelle Version der Alternativen. Ich rate aus Performancegründen zu Paper.  
Memory Allocation:
XmX: 8192 (geht bis 9000, falls der Server langsam ist oder crasht, alles darüber lässt das System in der aktuellen Konfiguration abstürzen. Spiel ruhig damit rum und probiers aus, allerdings muss der Server nach jeder Änderung neu gestartet werden.)
Xms: 4096 (Bitte nicht ändern)
Additional Java Arguments und Additional Jar arguments auf Standard bei Problemen ansonsten siehe Paper-Dokumentation.

Alles andere ist für den Betrieb nicht relevant. 

## Backups
Unter Restore Points kannst du Sicherungen anlegen, falls ihr mal was Dummes machen wollt, die lassen sich danach per Knopfdruck einfach wieder einspielen. Archives erstellt die ZIP für einen Export direkt im Browser statt mit dem Umweg über Filezilla.

[![unknown.png](https://wiki.ngl.cloud/uploads/images/gallery/2022-12/scaled-1680-/Znpunknown.png)](https://wiki.ngl.cloud/uploads/images/gallery/2022-12/Znpunknown.png)


Jetzt sollte der Server für alle unter Serveradresse erreichbar sein.

## Administration des laufenden Servers

Falls ihr rcon für Servercommands benutzt, ist die Adresse dafür Serveradresse:15889
Falls ihr die Serverkonsole braucht, um z.B. jemanden zum Admin zu machen oder den Gamemodus zu ändern, ist die unter Logging/logs/latest.log, was sichtbar ist, sobald man oben wieder einen Server ausgesucht hat.

[![unknown.png](https://wiki.ngl.cloud/uploads/images/gallery/2022-12/scaled-1680-/TL5unknown.png)](https://wiki.ngl.cloud/uploads/images/gallery/2022-12/TL5unknown.png)


### Löschen
Um den Server zu löschen, einfach den Server stoppen, alle drei Haken unter Delete Server setzen und auf delete drücken. Danach kann z.B. ein alter Server importiert werden oder Server für eine neue Welt erstellt werden. 
Server importieren. Wenn du oben die Datei korrekt importiert hast, dann sollte jetzt, wenn du auf "Import a Server" klickst, deine ZIP dort auftauchen.

### Finetuning
Je nachdem, welchen Basisserver ihr nutzt (Vanilla, Spigot, Paper, etc.), entsprechende Guides und Settings nutzen.  
#### Minecraft-spezifisch
Schon etwas veraltet, aber immer noch applicable für die Basisoptionen:
<https://www.spigotmc.org/threads/guide-server-optimization%E2%9A%A1.283181/> 

Aktueller:  
<https://apexminecrafthosting.com/server-optimization/>

#### Java-spezifisch
<https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/>

#### Paper-spezifisch:
<https://docs.papermc.io/paper/aikars-flags>
<https://github.com/YouHaveTrouble/minecraft-optimization>
Für Exploits/Special Farming:
<https://shockbyte.com/billing/knowledgebase/495/How-to-Allow-Bedrock-Breaking-TNT-Duping-and-Other-Exploits-in-PaperMC-Servers.html>

Die entsprechende Datei lässt sich per SSH/Filezilla aufrufen/ändern.
# Host Administration
## Protected SFTP access
MineOS bindmount in crontab for sftp user, because no fstab in LXC:  
@reboot mount -o bind  /root/mineos-path/gamefiles/minecraft/import/ /home/sftp_user/minecraft-import-directory/

## Issues
### Server instance not starting - blocked port

<https://discourse.codeemo.com/t/cant-start-server-in-webui/5732>

1. Check usage of 25565 with ```netstat -tulpn | grep 25565```
2. Kill PID
3. Start instance in WebUI

### External Access Issues
1. Check accessibility at <https://mcsrvstat.us/>
2. Internal Portforwarding seems to make trouble on LXC setups, thus the standard ports have to be used. Make sure, 25565 is open and forwarded on TCP and UDP traffic in router.

### Server Profiles not refreshing
<https://wiki.codeemo.com/maint/webui.html>\
```supervisorctl restart mineos```

### Host OS Upgrade
Reinstall npm
Navigate to mineos root folder
run ```npm rebuild```

### Bootsettings reference:
```-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true```
<https://www.spigotmc.org/wiki/timings/>

### Vanilla-like experience in Paper
<https://docs.papermc.io/paper/vanilla/>