Editing Server on Linux

From Eco - English Wiki

Your changes will be displayed to readers once an authorized user accepts them. (help)

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
== Important Foreword ==
== Important Foreword ==
If you run into trouble or have a question, you can make inquiries in the #server-help channel in the {{Eco Discord}}
First, a disclaimer: [[Strange Loop Games]] does provide a Linux server build, but they do not offer official support for it at this time. It is provided as a convenience, not a product.
 
If you run into trouble or have a question, you can make inquiries in the #server-help channel in the {{Eco Discord}}, but keep in mind the information above.
== Prerequisites ==
== Prerequisites ==
EcoServer is compiled natively for Linux but requires some packages.
=== Mono No More ===
Prior to [[Version#v9.0.0|version 9.0]] of Eco, it was required that you run with a very old build (no later than 5.14) of the Mono development libraries, and use Mono to run the server. This is no longer the case. Install the latest Mono libraries with the commands:
<syntaxhighlight lang="bash">
sudo apt update
sudo apt install libgdiplus
</syntaxhighlight>
See [https://www.mono-project.com/docs/gui/libgdiplus/ libgdiplus] for more information.


To install the required packages for Linux, use:<syntaxhighlight lang="bash">
=== .NET Core Libraries ===
./install.sh
Eco is now built with and is run leveraging [https://docs.microsoft.com/en-us/dotnet/core .NET Core], and runs as a native binary on Linux. You will have to [https://docs.microsoft.com/en-us/dotnet/core/install/linux install the .NET Core 3.1 libraries], repositories for which Microsoft makes available for several Linux distributions. Follow the directions on Microsoft's site for instructions for installing the libraries.
</syntaxhighlight>This will install the following packages:
* [https://www.mono-project.com/docs/gui/libgdiplus/ libgdiplus]


* [https://www.gnu.org/software/libc/libc.html libc6-dev]
== Eco Dedicated Server files ==
== Eco Dedicated Server files ==
There are two primary options for acquisition of the Eco dedicated server: getting it directly from Strange Loop Games, or through Valve Software's Steam platform.
There are two primary options for acquisition of the Eco dedicated server: getting it directly from Strange Loop Games, or through Valve Software's Steam platform.
Line 22: Line 27:
</syntaxhighlight>
</syntaxhighlight>
=== SLG Direct Download ===
=== SLG Direct Download ===
An archive of the current release of the Eco Dedicated Server as of this writing (Beta 9.4.1) can be found [https://play.eco/ here]. The following series of commands will download the archive, and set the Eco Dedicated Server up in an <tt>Eco</tt> subdirectory of your home directory, and save a copy of the install archive into a <tt>dist</tt> subdirectory of your home directory:
An archive of the current release of the Eco Dedicated Server as of this writing (Beta 9.4.1) can be found [https://play.eco/s3/release/EcoServerLinux_v0.9.4.1-beta.zip here]. The following series of commands will download the archive, and set the Eco Dedicated Server up in an <tt>Eco</tt> subdirectory of your home directory, and save a copy of the install archive into a <tt>dist</tt> subdirectory of your home directory:
<syntaxhighlight lang="sh">
<syntaxhighlight lang="sh">
mkdir -p ~/Eco
mkdir -p ~/Eco
Line 51: Line 56:
</syntaxhighlight>
</syntaxhighlight>
== Systemd service script ==
== Systemd service script ==
You can choose to create the service either system-wide OR as a user based service. The latter you CAN do without root but if you can't sudo/be root to use the loginctl command it won't stay around when you're logged out, and won't start on boot.
If you wish to set up a systemd service to have ECO run automatically, this will do the trick:


If you've visited this before, note the example service files have been changed to actually cleanly shutdown the Eco server!  The prior version of both examples in this Wiki would NOT correctly stop the server.
Using your favorite editor (vi, nano etc.) edit /usr/lib/systemd/system/EcoServer.service and paste the following:
 
For system-wide setup you can do the following -- using your favorite editor (vi, nano etc.) edit /etc/systemd/system/EcoServer.service or /usr/lib/systemd/system/EcoServer.service (which depends on your platform, generally though /usr/lib/systemd is for installed packages, not local modifications) and paste the following making sure to update User, Group, WorkingDirectory, and ExecStart.
 
WorkingDirectory is going to be the root of your ECO server.  If you'd normally start on the command line from /games/Eco then WorkingDirectory should be /games/Eco
<syntaxhighlight lang="shell">
<syntaxhighlight lang="shell">
[Unit]
[Unit]
Description=Eco Server
Description=Eco Server
# The below may or may not work correctly depending on platform, it's important that systemd is asked to start this after networking is online at the very least.
After=syslog.target network.target nss-lookup.target network-online.target
[Service]
[Service]
Type=simple
Type=simple
Line 73: Line 71:
Group=ecoserver
Group=ecoserver
Environment="DOTNET_BUNDLE_EXTRACT_BASE_DIR=%h/.net"
Environment="DOTNET_BUNDLE_EXTRACT_BASE_DIR=%h/.net"
WorkingDirectory=/home/ecoserver/Eco_server
#ExecStartPre=/home/ark/server/steamcmd +login [username] +force_install_dir /home/ecoserver/Eco_server/ +app_update 739590 +quit
# change to where your steamcmd exists if you want to automatically update on each restart.
ExecStart=/bin/bash -c 'cd /home/ecoserver/Eco_server && exec /home/ecoserver/Eco_server/EcoServer'
#ExecStartPre=/home/ark/server/steamcmd +login anonymous +force_install_dir /home/ecoserver/Eco_server/ +app_update 739590 +quit
ExecStop=killall -TERM srcds_linux
# ExecStart MUST be a full path!  IE starting with /
ExecStart=/home/ecoserver/Eco_server/EcoServer
ExecStop=kill -TERM $MAINPID
[Install]
[Install]
WantedBy=multi-user.target
WantedBy=multi-user.target
</syntaxhighlight>
</syntaxhighlight>
ExecStartPre is commented out because I was not able to get it to work without user input due to Steam Guard.
Then update the systemd service by running the following:<syntaxhighlight lang="shell">
Then update the systemd service by running the following:<syntaxhighlight lang="shell">
sudo systemctl daemon-reload
sudo systemctl daemon-reload
Line 91: Line 87:
sudo systemctl status EcoServer
sudo systemctl status EcoServer
</syntaxhighlight>
</syntaxhighlight>
You can also deploy using a systemd user service which means you won't need root to start/stop/restart. You'll have to remove the User and Group lines from the unit, and if you want it to start on boot you'll need to enable that for the user.
As root or a user with sudo access (this step is critical when setting up the service as a user service if you do not want systemd to shut the server down every time you logout!!):
<syntaxhighlight lang="shell">
sudo loginctl enable-linger ecoserv
</syntaxhighlight>
User based service unit example:
<syntaxhighlight lang="shell">
[Unit]
Description=Eco Server
# The below may or may not work correctly depending on platform, it's important that systemd is asked to start this after networking is online at the very least.
After=syslog.target network.target nss-lookup.target network-online.target
[Service]
Type=simple
Restart=on-failure
RestartSec=5
StartLimitInterval=60s
StartLimitBurst=3
Environment="DOTNET_BUNDLE_EXTRACT_BASE_DIR=%h/.net"
WorkingDirectory=%h/Eco_server
# change to where your steamcmd exists if you want to automatically update on each restart.
#ExecStartPre=/home/ark/server/steamcmd +login anonymous +force_install_dir %h/Eco_server/ +app_update 739590 +quit
# ExecStart MUST be a full path!  IE starting with /
ExecStart=%h/Eco_server/EcoServer
ExecStop=kill -TERM $MAINPID
[Install]
WantedBy=default.target
</syntaxhighlight>
As the ecoserv user (or whatever user you choose) create the directory for the unit file(s) if it doesn't exist, and place the above unit file within that directory:
<syntaxhighlight lang="shell">
# creates the whole path if it doesn't exist
mkdir -p ~/.config/systemd/user/
# edit the file here ... ~/.config/systemd/user/EcoServer.service ... or whatever you name it, just as long as it ends in .service
systemctl --user daemon-reload
systemctl --user enable EcoServer
systemctl --user start EcoServer
</syntaxhighlight>
Notice the --user flag to systemctl AND not using sudo. In a user service you can not set the User and Group, and the WantedBy target must be default.target so we remove/change those in the service file.  As a user service you can also use %h instead of /home/ecoserv (or whatever) to reference the user home directory, systemd will expand that for us.
'''Debian/Ubuntu Version'''
'''Debian/Ubuntu Version'''
<syntaxhighlight lang="shell">
<syntaxhighlight lang="shell">
Line 148: Line 101:
Group=eco
Group=eco
LimitNOFILE=100000
LimitNOFILE=100000
WorkingDirectory=/gameservers/eco
ExecStartPre=/usr/games/steamcmd +login anonymous +force_install_dir /gamesservers/eco +app_update 739590 default validate +quit
ExecStartPre=/usr/games/steamcmd +login anonymous +force_install_dir /gamesservers/eco +app_update 739590 default validate +quit
ExecStart=/gamesservers/eco/EcoServer
ExecStart=/bin/bash -c 'cd /gamesservers/eco && exec /gamesservers/eco/EcoServer'
ExecReload=kill -TERM $MAINPID
ExecReload=/bin/kill -s TERM $MAINPID
ExecStop=kill -TERM $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
[Install]
WantedBy=multi-user.target
WantedBy=multi-user.target
</syntaxhighlight>
</syntaxhighlight>
 
== Stopping the Server ==
 
To safely shut down the Eco server, send SIGINT or press Control+C with the <tt>EcoServer</tt> process interactively to initiate a safe shutdown.
==Stopping the Server==
To safely shut down the Eco server, send SIGTERM (saves world), SIGINT (immediate stop! does not save the world!) or press {{key|Ctrl+C}} with the <tt>EcoServer</tt> process interactively to initiate a safe shutdown.


Please not that this procedure doesn't work with Eco versions prior to 9.0.0-beta.
Please not that this procedure doesn't work with Eco versions prior to 9.0.0-beta.
Line 173: Line 123:
You will need to make sure that the Docker container is exposing the ports and map them to ports on the host that are open in the hosts firewall and router.
You will need to make sure that the Docker container is exposing the ports and map them to ports on the host that are open in the hosts firewall and router.
==Troubleshooting==
==Troubleshooting==
===Missing GDI library===
===Missing GDI library ===
You may sometimes get a crash on an attempted initial startup with an error resembling the following:
You may sometimes get a crash on an attempted initial startup with an error resembling the following:
<syntaxhighlight lang="sh">
<syntaxhighlight lang="sh">
Line 186: Line 136:


If this happens, try clicking on the "+" symbol in the "Your Worlds" area, then adding in the external IP and port you used (probably 3000). Unfortunately, https://www.yougetsignal.com/tools/open-ports/ does _not_ accurately reflect one's ability to connect to the server.
If this happens, try clicking on the "+" symbol in the "Your Worlds" area, then adding in the external IP and port you used (probably 3000). Unfortunately, https://www.yougetsignal.com/tools/open-ports/ does _not_ accurately reflect one's ability to connect to the server.
[[Category: Server management]]
Please note that all contributions to Eco - English Wiki are considered to be released under the CC BY-NC-SA 4.0 (see Eco:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following hCaptcha:

Cancel Editing help (opens in new window)

Templates used on this page: