This bug is not only a problem in version 0.15.3-4, but also in 0.13.1- 2, the version currently in stable, and possibly other versions. I found a complete solution for 0.13.1-2, and part of a solution for the version currently in 0.15.3-4.
In the .service-file of the gnunet service (normally /usr/lib/systemd/system/gnunet.service) variable substitution is used in the "User="-directive, which is not allowed in systemd (https://github.com/systemd/systemd/issues/5501#issuecomment-283362610 ). If you hardcode the gnunet user in this directive like I did here... [Unit] Description=A framework for secure peer-to-peer networking [Service] User=gnunet Type=forking ExecStart=/usr/bin/gnunet-arm -s -c /etc/gnunet.conf ExecStop=/usr/bin/gnunet-arm -e -c /etc/gnunet.conf [Install] WantedBy=multi-user.target ...the systemd part works fine. Unfortunately, there is another problem with the underlying gnunet-arm command, which is used to start the peer. In my version the problem is that it searches for the binary in the wrong place, which can be fixed by specifying its location in the gnunet.conf file like this: [path] GNUNET_HOME = /var/lib/gnunet/ GNUNET_DATA_HOME = /var/lib/gnunet/data/ GNUNET_RUNTIME_DIR = /var/run/gnunet/ [arm] START_SYSTEM_SERVICES = YES START_USER_SERVICES = NO BINARY = /usr/lib/x86_64-linux-gnu/gnunet/libexec/gnunet-service-arm In 0.15.3-4, gnunet-arm doesn't find the log file, which is a problem I wasn't able to find a solution for yet. I hope that these errors can be fixed as fast as possible, especially regarding that these seem to be merely configuration issues. Best regards, Levin Engel