# Gerbera Daemon

You can setup Gerbera to run as a daemon background system process

## Using systemd

This outlines steps of how to add the Gerbera runtime as a system daemon using the Systemd. The gerbera installation uses cmake to configure and install the systemd daemon for gerbera. Default install path is depending on the target distribution. Typical locations are `/etc/systemd/system/gerbera.service`, `/lib/systemd/system/gerbera.service` or `/usr/lib/systemd/system/gerbera.service`

### Create a Gerbera System User

You should run Gerbera as a separate user to avoid vulnerabilities in exposing root access.

Here is a way to create a system user in linux command line

    $ sudo useradd --system gerbera

Verify that the `gerbera` user was created

    $ id -u gerbera
    | Returns the user id of the user

### Set Gerbera Permissions

The gerbera user must have access to `config.xml` file and to the directory referenced as the gerbera home. For example `/etc/gerbera`

    $ sudo mkdir /etc/gerbera
    $ sudo chown -Rv gerbera:gerbera /etc/gerbera

### Enable Systemd Daemon

The cmake installation adds `gerbera.service` service file by default.

Note:

  The installation does not enable the service daemon.

1. Notify `systemd` that a new gerbera.service file exists by executing the following command:

   >     $ sudo systemctl daemon-reload

2. Start up the daemon

   >     $ sudo systemctl start gerbera

### Success

Check the status of gerbera. You should see success similar to below

    $ sudo systemctl status gerbera

    ● gerbera.service - Gerbera Media Server
       Loaded: loaded (/etc/systemd/system/gerbera.service; disabled; vendor preset: disabled)
       Active: active (running) since Wed 2017-09-20 19:48:44 EDT; 47s ago
     Main PID: 4818 (gerbera)
        Tasks: 12 (limit: 4915)
       CGroup: /system.slice/gerbera.service
               └─4818 /usr/local/bin/gerbera -c /etc/gerbera/config.xml

### Troubleshooting

If for some reason the service fails to start. You can troubleshoot the behaviour by starting gerbera from the shell.

    $ su gerbera
    Password:
    $  /usr/local/bin/gerbera -c /etc/gerbera/config.xml

    2025-01-01 19:54:47    INFO: Gerbera UPnP Server version 2.4.0 - https://gerbera.io/
    2025-01-01 19:54:47    INFO: ===============================================================================
    2025-01-01 19:54:47    INFO: Gerbera is free software, covered by the GNU General Public License version 2
    2025-01-01 19:54:47    INFO: Copyright 2016-2025 Gerbera Contributors.
    2025-01-01 19:54:47    INFO: Gerbera is based on MediaTomb: Copyright 2005-2010 Gena Batsyan, Sergey Bostandzhyan, Leonhard Wimmer.
    2025-01-01 19:54:47    INFO: ===============================================================================
    2025-01-01 19:54:47    INFO: Loading configuration from: /etc/gerbera/config.xml
    2025-01-01 19:54:47    INFO: Checking configuration...

## Using Commandline options

If your system uses an old style system V init, commandline options are available to start gerbera as a Daemon:

`--daemon` or `-d`: daemonize after startup.

`--user` or `-u`: when started by root, try to change to user USER after startup. All UIDs, GIDs and supplementary Groups will be set.

`--pidfile` or `-P`: write a pidfile to the specified location. Full path is needed, e.g. /run/gerbera.pid.

## Using solaris

You can use the solaris script provided in `scripts/solaris` to add Gerbera as a service in solaris.

## Using launchd

launchd is the daemon engine in macOS.

### Create new Launch Agent

Use the `scripts/gerbera.io.plist` as a starting point.

Save to user’s launch agent path –> `~/Library/LaunchAgents/gerbera.io.plist`

### Load the Launch Agent

    $ launchctl load ~/Library/LaunchAgents/gerbera.io.plist

### Start the Launch Agent

    $ launchctl start gerbera.io

### Stop the Launch Agent

    $ launchctl stop gerbera.io