Upgrading Multicraft

Linux - Quick Guide

The "setup.sh" script can be used to simply install a new release over an existing installation. It will keep existing server files in place.
Be sure to back up your entire installation (files and databases) first.

See the Installation Quick Guide on how to use the setup.sh. If you have not deleted the installation directory after the previous installation run it might already have most of the answers pre-filled.

Linux/Windows - Manual Upgrade

It is possible to upgrade the panel first and then upgrade each daemon individually. That way a large installation can be upgraded with minimal overall downtime. It is not recommended to mix panel and daemon versions other than during a short period while the upgrade is underway.
Be sure to back up your entire installation (files and databases) first.

Upgrade the Panel

To upgrade the panel you can simply replace all panel files with the one ones from the "panel" folder in the Multicraft archive.
To do a clean upgrade you can delete all but the "protected/runtime" and "protected/data" directories before putting the new files in place.

Upgrade the Databases

After upgrading the panel you need to re-run the install.php to upgrade the two databases. You can simply click trough the install.php, no changes should be required. The database pages should show you a green message mentioning database upgrades being applied.

Upgrade the Daemon(s)

Upgrading the daemon consists of replacing the "bin" directory of your daemon installation with the new files from the Multicraft package. Depending on your system you might have to stop the daemon first (by default: /home/minecraft/multicraft/bin/multicraft stop" for Linux, or closing the command window for Windows).

When running under Linux in multiuser mode you also need to adapt the useragent permissions:
# chown root:minecraft bin/useragent
# chmod 4550 bin/useragent

The daemon can then be started or restarted:
/home/minecraft/multicraft/bin/multicraft restart

Windows Standalone

The new version can be installed over the current installation but you'll have to run the panel installer to upgrade the databases. To do this you can extract the "install.php" file from the Windows Advanced archive ("multicraft/panel/install.php") and put it in "Multicraft/vendor/multicraft/panel/" of your installation. You can then go to http://localhost/install.php (this may be different for you depending on the IP/port you use to access the panel) and simply click through the installer, you do not have to change anything, it will upgrade the databases as part of these steps. After this is done you need to delete the install.php again.

Version Notes

2.0 Version Notes
  • If you want to allow the new 2.0 panel to communicate with older daemons you have to enable the setting "Support Legacy Daemons" under "Settings" -> "Panel Configuration" -> "Show Advanced Options".
  • If you want to allow older API clients to access the new 2.0 panel you have to enable the setting "Support Legacy API" under "Settings" -> "Panel Configuration" -> "Show Advanced Options".

1.8 Version Notes
If you didn't use the setup.sh script to update, please see the 1.7 version notes below.

It's recommended to delete the file protected/runtime/bukget.sqlite if it exists after applying this upgrade.

Configuration File Changes

Config File Changes in 2.4.0
New settings in 2.4.0 (only new settings are listed, see the multicraft.conf.dist for a full list of available settings).
[multicraft]
## Configure the following settings to connect to the MySQL server using SSL
## The "dbCa" setting also supports the following special values:
## - empty: Don't use SSL (default)
## - "auto": Use the same CA as the "caBundle" setting
## - "none": Accept any server certificate
#dbCa = ca-cert.pem
#dbKey = client-key.pem
#dbCert = client-cert.pem
#dbCheckHostname = true

[backup]
## The regexp used to determine what files are backup packs that can be
## unpacked in the restore section.
## default: \.zip$
#fileFilter = \.zip$

## When this is enabled users can backup their full server into an external
## directory defined using the settings below.
## default: false
#fullBackupEnabled = false

## The directory in which full server backups get saved. Directories for
## individual servers are automatically created within the backup directory as
## needed.
## default: backups (-> "baseDir"/backups)
#fullBackupDirectory = backups

## The template for the initial backup filename, the following variables can be
## used:
## - {DATE} Current date YYYY-MM-DD
## - {TIME} Current time HH:MM
## - {SECONDS} Current seconds
## - {WORLD}, {JAR}, {IP}, {PORT} Current server settings
## default: Backup {DATE} {TIME}.zip
#fullBackupFilename = Backup {DATE} {TIME}.zip

## The command used to create the full backup
#fullBackupCommand = /usr/bin/zip -qr "{FILE}" .
#fullBackupCommandWin = "{MULTICRAFT_DIR}\bin\zip.exe" -qr "{FILE}" .
## The command to move a full backup to the server directory
#fullBackupMoveCommand = /bin/cp -a "{SOURCE}" "{DESTINATION}"
#fullBackupMoveCommandWin = "copy" "{SOURCE}" "{DESTINATION}"

## The regular expression used to ensure that full backups use the correct
## filename extension.
## default: \.zip$
#fullBackupFileFilter = \.zip$

## Once the backup limit set in the panel has been reached the oldest full
## backup will automatically be deleted. If this setting is disabled the
## full backup will fail instead of deleting the oldest full backup.
## default: True
#fullBackupAutoDelete = true

[docker]
## By default server ports will be exposed as TCP only. This setting can be
## used to expose ports as UDP only (exposeProtocol = udp) or both
## (exposeProtocol = tcp, udp). For backward compatibility the following part
## of the default Docker command line has to be removed if UDP only is desired:
## "-p {DOCKER_IP}:{PORT}:{PORT}"
## default: tcp
#exposeProtocol = tcp

## Format for specifying the number of CPUs assigned to the container. Only
## used if SERVER_CPUS is greater than 0.
## default: --cpus=%s
#cpusFormat = --cpus=%s
 
## The command to send a signal to a container
#signalCommand = kill mc{SERVER_ID} --signal="{SIGNAL}"


Config File Changes in 2.3.0
New settings in 2.3.0 (only new settings are listed, see the multicraft.conf.dist for a full list of available settings).
[multicraft]
## The daemon group this daemon belongs to. Currently only used to determine
## which .jar.conf files are available.
## default: empty
#group =

## The Headers to add for server executable and config file downloads
#downloadHeaders = {"Header1": "Value", "Header2": "Value"}
## A list of ciphers to use for downloads
#downloadCiphers = ECDHE-ECDSA-AES128-GCM-SHA256:...
## Same settings as above but for plugin downloads
#downloadUserAgentPlugins = Your Custom User-Agent
#downloadHeadersPlugins = {"Header1": "Value", "Header2": "Value"}
#downloadCiphersPlugins = ECDHE-ECDSA-AES128-GCM-SHA256:...
## Whether to use the external plugin downloader for easier updates in case of
## plugin list compatibility changes
## default: true
#downloadExternalPlugins = true
## A list of IPs to use for plugin downloads. Either a single IP or a comma
## separated list. A random IP will be chosen in case this is a list.
## default: empty
#downloadIpsPlugins = 

## Stop automatically restarting a crashed server if it exceeds a certain
## number of restarts within a set time period. For example: With
## crashRestartLimit=10 and crashRestartPeriod=300 a server will no longer
## automatically restart when it crashes if it already crashed 10 times within
## the last 5 minutes
##
## The number of crash related restarts after which to stop restarting a
## server. 0 to disable.
## default: 0
crashRestartLimit = 0
## The period in seconds during which to count crash related automatic server
## restarts. If this is set to 0 the server will stop restarting regardless of
## the time period the restart limit was hit in.
## default: 300
#crashRestartPeriod = 300

[downloader]
## The path to the Multicraft downloader. This downloader program is used to
## download plugins and can be replaced with a new version without having to
## update the daemon.
## default: bin (-> "baseDir"/downloader)
#downloaderDir = downloader
## The executable of the Multicraft downloader
## default: downloader (-> "baseDir"/"downloaderDir"/downloader)
#downloaderFile = downloader


Config File Changes in 2.2.0
New settings in 2.2.0 (only new settings are listed, see the multicraft.conf.dist for a full list of available settings).
## Automatically update server binaries, conf files or both on daemon
## startup. Valid values:
## - empty      Don't update anything on startup
## - base       Update the server binaries and conf files for the base server
##              types that come with Multicraft. Currently:
##                  minecraft_server.jar.conf, minecraft_optimized.jar.conf,
##                  craftbukkit.jar.conf, spigot.jar.conf
## - initial    Same as "base" but only update if the jar files don't exist
## - binary     Update all server binaries on daemon startup
## - conf       Update all server conf files on daemon startup
## - both       Update all server binaries and conf files on daemon startup
## default: empty
startupServerUpdate = initial

#skipIntegrityCheck - default changed to true

[ftp]
## Starts an FTPS server when enabled
## default: false
#ftps = false

## The certificate file to use for the FTPS server. This is required when the
## "ftps" setting is enabled. You can generate your own self signed certificate
## as described here:
##   https://httpd.apache.org/docs/2.4/ssl/ssl_faq.html#selfcert
## It's not recommended to use the default certificate for live deployments.
## default: ssl/ftps.pem
#ftpsCertfile =  ssl/ftps.pem
## The key file to use for the FTPS server. This can be left empty if the key
## is already contained in the certificate file.
## default:  empty
#ftpsKeyfile = 
## Enable this to force users to use FTPS
## default: false
#ftpsForce = false
## This will allow some older protocols considered insecure to be used by the
## FTPS server to improve compatibility with older clients.
## default: false
#ftpsCompatMode = false

[backup]
#changed defaults
## command = /usr/bin/zip -qr "{WORLD}-tmp.zip" . --exclude {WORLD}*.zip
## commandWin = "{MULTICRAFT_DIR}\bin\zip.exe" -qr "{WORLD}-tmp.zip" . --exclude {WORLD}*.zip

[docker]
## The command to determine the PID of the root process of a container
#pidCommand = inspect -f "{{ .State.Pid }}" mc{SERVER_ID}

## Cleanup existing docker containers using the configured cleanup command
## before trying to run a server.
## default: false
#cleanup = false

## The command to cleanup an existing container before starting a server
#cleanupCommand = rm -f mc{SERVER_ID}



Config File Changes in 2.1.0
New settings in 2.1.0 (only new settings are listed, see the multicraft.conf.dist for a full list of available settings).
[multicraft]
## The User-Agent string to use for server executable and config file downloads
#downloadUserAgent = Your Custom User-Agent
## The User-Agent string to use for plugin downloads
#downloadUserAgentPlugins = Your Custom User-Agent
## Whether or not to add version/architecture/OS parameters when downloading
## config files
## default: true
#downloadAddVersionInfo = true

## When enabled the remote host will be verified when using HTTPS, otherwise
## the host and certificate checks are skipped.
## default: false
#secureDownloads = false

## The CA certificate bundle to use for verifying secure downloads. If set to
## "auto" the daemon will try a set of default paths.
## default: auto
#caBundle = /etc/ssl/certs/ca-certificates.crt

[docker]
All settings in this section are new.


Config File Changes in 2.0.0
New settings in 2.0.0 (only new settings are listed, see the multicraft.conf.dist for a full list of available settings).
[multicraft]
## The maximum number of daemon connections a single client can open.
## default: 50
#maxClientConnections = 50

## The directory containing server templates
## default: templates (-> "baseDir"/templates)
templatesDir = templates

## This file defines the config file to use depending on the executable name
configsFile = server_configs.conf
## This config file contains the default server configuration. It is not
## in the "jar" directory so it does not get listed as a selection in the
## JAR File dropdown.
defaultConfigFile = default_server.conf

## Log all commands the daemon receives from the panel
## default: false
#logCommands = false

## Log server console output to the log file under these conditions:
## always - Always log server console output
## startup - Only log server console output during server startup
## running - Only log server console output after server startup
## never - Never log server console output
## default: startup
#logServerConsole = startup

## The timeout for template setup operations in seconds
## default: 600
#templateSetupTimeout=600

## Disables the template functionality. Please use the setting in the panel to
## disable it there.
## default: false
#templatesDisabled=false

## Advanced: Use TCP keepalive for daemon connections
## default: true
#tcpKeepAlive = true
## Advanced: Use TCP keepalive for FTP connections
## default: true
#ftpTcpKeepAlive = true
## TCP keepalive parameters, use 0 for system default
## default: 0
tcpKeepAliveIdle = 60
tcpKeepAliveInterval = 5
tcpKeepAliveCount = 6

## Advanced: Prefer IPv4 for version check requests.
## Can speed up hostname lookup.
## default: true
#preferIPv4 = true

## Whether to delete the server directory on the old daemon after a server
## move. This is disable by default for safety.
## default: false
#deleteAfterMove = false

## Only allow a single script to be run at a time for each server. If disabled
## there is no limit on the number of scripts that can be running at the same
## time.
## default: false
singleScriptPerServer = true

## The timeout for server executable and config file downloads in seconds.
## default: 15
#downloadTimeout = 15

[ftp]
## Set the level of detail for FTP server log messages in the multicraft.log.
## Errors will always be logged, regardless of this setting.
## Available levels:
## full  - Log all messages
## basic - Don't log client/server communication
## none  - No FTP logging
## default: full
ftpLogLevel = full
## If this setting is enabled the FTP server will not be started when the main
## daemon process is started. You can start the FTP server separately by using
## "start_ftp" instead of "start" as the parameter to the daemon command.
## default: false
ftpSeparate = false
## The PID file for the FTP only process. The path is relative to "baseDir"
## default: multicraft_ftp.pid
ftpPidFile = multicraft_ftp.pid
## The log file to use for the FTP only process. This setting has no effect if
## the FTP server is started as part of the main daemon process (i.e. if
## "ftpSeparate" is false.
## default: multicraft.log (same as the daemon)
ftpLogFile = multicraft.log
## Throttle the FTP bandwidth (experimental)
## Incoming data throttle (Kb/s)
## default: 0 (unlimited) 
#ftpThrottleIn = 0
## Outgoing data throttle (Kb/s)
## default: 0 (unlimited) 
#ftpThrottleOut = 0

[system]
## Enable or disable Linux quota support
## default: false
#enableQuota = false

## The command to set the Linux user quota
## The following variables can be used:
## - Variables from "addUser" comment
## - {QUOTA} The disk space quota in MB
## - {QUOTA_BLOCKS} The disk space quota in blocks
#setUserQuota = /usr/sbin/setquota -u "{USER}" 0 "{QUOTA_BLOCKS}" 0 0 -a

## The script used to fetch quota usage information for the current user
## (in blocks)
## default: scripts/getquota.sh
#quotaCheckScript = scripts/getquota.sh

## The minimum time in seconds between two quota usage checks
## default: 20
#quotaCheckDelay = 20

## The kernel block size to use for quota calculation
## default: 1024
#quotaBlockSize = 1024

## The command to pack a zip file. The following variables can be used:
## - {FILE} The name of the zip archive to create
## - {MULTICRAFT_DIR} The daemon base directory
packCmd = /usr/bin/unzip -quo "{FILE}"
## The same setting for Windows systems
packCmdWin = "{MULTICRAFT_DIR}\bin\unzip.exe" -quo "{FILE}"



Config File Changes in 1.8.0
New settings in 1.8.0
[multicraft]
## The maximum number of daemon connections to allow to this daemon.
## default: 500
#maxConnections = 500

## Allow symlinks where directories are expected. This check is done for
## security.
## default: false
#allowSymlinks = false

## Skip the integrity check for directories. This check is done for
## security, it verifies that a directory entry is consistent with its
## filesystem entry. You can disable this if this check causes issues
## on your particular filesystem.
#default: false
#skipIntegrityCheck = false