mirror of
https://github.com/logos-messaging/logos-messaging-go.git
synced 2026-01-02 22:13:06 +00:00
feat: systemd
This commit is contained in:
parent
5e3c9fdfa1
commit
21f4e4b3eb
@ -73,13 +73,15 @@ func scalePerc(value float64) float64 {
|
||||
|
||||
const dialTimeout = 7 * time.Second
|
||||
|
||||
const nonRecoverableErrorCode = 166
|
||||
|
||||
func nonRecoverErrorMsg(format string, a ...any) error {
|
||||
err := fmt.Errorf(format, a...)
|
||||
return nonRecoverError(err)
|
||||
}
|
||||
|
||||
func nonRecoverError(err error) error {
|
||||
return cli.Exit(err.Error(), 166)
|
||||
return cli.Exit(err.Error(), nonRecoverableErrorCode)
|
||||
}
|
||||
|
||||
// Execute starts a go-waku node with settings determined by the Options parameter
|
||||
|
||||
88
docs/operators/how-to/setup-systemd.md
Normal file
88
docs/operators/how-to/setup-systemd.md
Normal file
@ -0,0 +1,88 @@
|
||||
# Set up a systemd service
|
||||
|
||||
This page will take you through how to set up a `systemd` service for go-waku.
|
||||
|
||||
`systemd` is used in order to have a command or a program run when your device boots (i.e. add it as a service).
|
||||
Once this is done, you can start/stop enable/disable from the linux prompt.
|
||||
|
||||
!!! abstract "`systemd`"
|
||||
[`systemd`](https://systemd.io/) is a service manager designed specifically for Linux: it cannot be used on Windows / Mac.
|
||||
You can find out more about `systemd` [here](https://fedoramagazine.org/what-is-an-init-system/).
|
||||
|
||||
!!! note "Package manager installations"
|
||||
When installing go-waku via your package manager, a user and service will already have been created for you and you can skip straight to the configuration section.
|
||||
|
||||
### 1. Create the service file
|
||||
|
||||
`systemd` services are created by placing a [service](https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html) file in `/etc/systemd/system`, or, if go-waku was installed by a package manager, `/usr/lib/systemd/system`.
|
||||
|
||||
A good starting point is the [example service file](https://raw.githubusercontent.com/waku-org/go-waku/scripts/linux/waku.service) in the go-waku repository.
|
||||
|
||||
```sh
|
||||
# Download example service file and save it to `/etc/systemd/system/go-waku.service`
|
||||
curl -s https://raw.githubusercontent.com/waku-org/go-waku/scripts/linux/go-waku.service | sudo tee /etc/systemd/system/waku.service > /dev/null
|
||||
```
|
||||
|
||||
The format of service files is documented in the [systemd manual](https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html).
|
||||
|
||||
!!! note
|
||||
go-waku has two return codes for errors:
|
||||
- `1` returned for recoverable errors
|
||||
- `166` returned for non-recoverable errors.
|
||||
The example service file uses 166 in `RestartPreventExitStatus` to prevent automated restarts for non recoverable errors.
|
||||
|
||||
### 2. Configure your service
|
||||
|
||||
Service is configured by editing the service file directly, or using `systemctl edit` to create an override.
|
||||
|
||||
```sh
|
||||
# Edit the systemd file to match your installation
|
||||
sudo vi /etc/systemd/system/waku.service
|
||||
|
||||
# If you installed go-waku via the package manager, use `systemctl edit` instead
|
||||
sudo systemctl edit waku.service
|
||||
```
|
||||
|
||||
!!! note
|
||||
The example assumes go-waku was installed in `/usr/bin/waku`.
|
||||
If you installed go-waku elsewhere, make sure to update this path.
|
||||
|
||||
### 3. Notify systemd of the newly added service
|
||||
|
||||
Every time you add or update a service, the `systemd` daemon must be notified of the changes:
|
||||
|
||||
```sh
|
||||
sudo systemctl daemon-reload
|
||||
```
|
||||
|
||||
### 4. Start the service
|
||||
|
||||
```sh
|
||||
# start go-waku node
|
||||
sudo systemctl start waku
|
||||
|
||||
# (Optional) Set go-waku to start automatically at boot
|
||||
sudo systemctl enable waku
|
||||
```
|
||||
|
||||
### 5. Check the status of the service
|
||||
|
||||
`systemctl status` will show if go-waku is up and running, or has stopped for some reason.
|
||||
|
||||
```sh
|
||||
sudo systemctl status waku.service
|
||||
```
|
||||
|
||||
You can also follow the logs using the following command:
|
||||
|
||||
```sh
|
||||
sudo journalctl -uf waku.service
|
||||
```
|
||||
|
||||
This will show you the waku logs at the default setting. Press `ctrl-c` to stop following the logs.
|
||||
|
||||
To rewind logs — by one day, say — run:
|
||||
|
||||
```sh
|
||||
sudo journalctl -u waku.service --since yesterday
|
||||
```
|
||||
@ -18,28 +18,28 @@ cp ${parent_path}/build/waku ${tmpdir}
|
||||
|
||||
strip --strip-unneeded ${tmpdir}/waku
|
||||
|
||||
cp ${parent_path}/scripts/linux/waku.service ${tmpdir}
|
||||
|
||||
pushd ${tmpdir}
|
||||
|
||||
fpm_build () {
|
||||
fpm \
|
||||
-s dir -t $1 \
|
||||
-p gowaku-${VERSION}-x86_64.$1 \
|
||||
--name go-waku \
|
||||
--license "MIT, Apache 2.0" \
|
||||
--version ${VERSION} \
|
||||
--architecture x86_64 \
|
||||
--depends libc6 \
|
||||
--description "Go implementation of Waku v2 protocol" \
|
||||
--url "https://github.com/waku-org/go-waku" \
|
||||
--maintainer "Richard Ramos <richard@status.im>" \
|
||||
waku=/usr/bin/waku
|
||||
}
|
||||
fpm \
|
||||
-s dir -t deb \
|
||||
-p gowaku-${VERSION}-x86_64.deb \
|
||||
--name go-waku \
|
||||
--license "MIT, Apache 2.0" \
|
||||
--version ${VERSION} \
|
||||
--architecture x86_64 \
|
||||
--depends libc6 \
|
||||
--description "Go implementation of Waku v2 protocol" \
|
||||
--url "https://github.com/waku-org/go-waku" \
|
||||
--maintainer "Richard Ramos <richard@status.im>" \
|
||||
--deb-systemd=waku.service \
|
||||
waku=/usr/bin/waku
|
||||
|
||||
fpm_build "deb"
|
||||
fpm_build "rpm"
|
||||
|
||||
ls
|
||||
fpm -s deb -t rpm -p gowaku-${VERSION}-x86_64.rpm *.deb
|
||||
|
||||
mv *.deb *.rpm ${parent_path}/build/.
|
||||
|
||||
ls ${parent_path}/build/.
|
||||
|
||||
popd
|
||||
|
||||
44
scripts/linux/waku.service
Normal file
44
scripts/linux/waku.service
Normal file
@ -0,0 +1,44 @@
|
||||
# To configure the service, use `systemctl edit waku.service`
|
||||
# and override the environment variables in this file
|
||||
#
|
||||
# To completely override the start command, override the `ExecStart` value
|
||||
# instead by first emptying it, then specifying a new one:
|
||||
#
|
||||
# [Service]
|
||||
# ExecStart=
|
||||
# ExecStart=/usr/bin/waku --cluster-id=1
|
||||
|
||||
[Unit]
|
||||
Description=Waku
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
[Service]
|
||||
# TWN
|
||||
Environment=CLUSTER_ID=1
|
||||
|
||||
# Default ports
|
||||
Environment=TCP_PORT=9000
|
||||
Environment=REST_ENABLED=true
|
||||
Environment=REST_PORT=8645
|
||||
Environment=METRICS_ENABLED=true
|
||||
Environment=METRICS_PORT=8008
|
||||
|
||||
# Default group = waku
|
||||
WorkingDirectory=/var/lib/waku
|
||||
TimeoutSec=1200
|
||||
Restart=always
|
||||
|
||||
# List of non-recoverable error codes
|
||||
RestartPreventExitStatus=166
|
||||
|
||||
ExecStart=/usr/bin/waku \
|
||||
--cluster-id=${CLUSTER_ID} \
|
||||
--port=${TCP_PORT} \
|
||||
--rest=${REST_ENABLED} \
|
||||
--rest-port=${REST_PORT} \
|
||||
--metrics=${METRICS_ENABLED} \
|
||||
--metrics-port=${METRICS_PORT}
|
||||
Loading…
x
Reference in New Issue
Block a user