Ceres, the VP Terrain Manager

Setting Up Ceres for Systemd

This page applies to the Linux version of Ceres.

Download Ceres

Download the most current version of Ceres for Linux.

NOTE: As of Nov 19, 2023, Ceres for Linux uses the same program for GUI and non-GUI (systemd) modes; CeresService has been removed.

Extract the downloaded zip file somewhere in your home directory; for example:

mkdir ~/Ceres && cd ~/Ceres
unzip ../Ceres_release-0-0-4_linux_x64.zip

Make sure you have installed .NET Runtime version 8.0.

Configuration

You will need to create the configuration file, config.toml, before running Ceres. You can do this automatically by running the GUI, or manually using the information below.

Create the config.toml file using the following as a guideline.
version = 1

[login]
username = ""
password = ""
botname = ""
world = ""

[avatar]
x = 0.0
y = 0.0
z = 0.0
yaw = 0.0
pitch = 0.0
type = 0

[options]
single_user_mode = true
notify_users = true
default_texture = 0
default_height = 0.0
default_rotation = 0
texture_min = 0
texture_max = 65535

Fill in the appropriate values in the [login] section.

The single_user_mode option must be set to true if running in a world where you do not have "eminent domain" permissions.

Run the command dotnet Ceres.dll -- --no-gui to be sure Ceres starts and operates as expected. Then, you can Ctrl+C to shutdown the instance and install it as a systemd service.

Installation
Now you should set up the systemd service folder for Ceres; example: /srv/ceres
sudo mkdir /srv/ceres
sudo chown yourUsername /srv/ceres
cp ~/CeresService/* /srv/ceres

Make sure the config.toml file is in this directory.

Create the file /etc/systemd/system/ceres.service using the following as a guideline.
[Unit]
Description=Ceres VP Terrain Manager

[Service]
# systemd will run this executable to start the service
# if /usr/bin/dotnet doesn't work, use `which dotnet` to find correct dotnet executable path
ExecStart=/usr/bin/dotnet /srv/ceres/Ceres.dll -- --no-gui
# IMPORTANT: set the working directory so that Ceres finds the correct files
WorkingDirectory=/srv/ceres
# to query logs using journalctl, set a logical name here
SyslogIdentifier=Ceres

# Use your username to keep things simple.
# If you pick a different user, make sure dotnet and all permissions are set correctly to run the app
# To update permissions, use 'chown yourusername -R /srv/ceres' to take ownership of the folder and files,
User=yourUsername

# This environment variable is necessary when dotnet isn't loaded for the specified user.
# To figure out this value, run 'env | grep DOTNET_ROOT' when dotnet has been loaded into your shell.
Environment=DOTNET_ROOT=/usr/share/dotnet

[Install]
WantedBy=multi-user.target

Make sure to update the User to your username. Refer to the comments in the file for a basic explanation.

Reload the systemd configuration files and then start the service.
sudo systemctl daemon-reload
sudo systemctl start ceres
sudo systemctl status ceres
To auto-start Ceres when the OS starts, use the systemctl enable command.
sudo systemctl enable ceres
If you want Ceres to auto-restart if it crashes, add Restart=always to the [Unit] section of /etc/systemd/system/ceres.service.
# ensure the service restarts after crashing
Restart=always
# amount of time to wait before restarting the service                        
RestartSec=5