Crates.io | svgen |
lib.rs | svgen |
version | 0.2.0 |
source | src |
created_at | 2019-05-01 10:35:01.900942 |
updated_at | 2019-06-13 12:18:31.165269 |
description | Runit service generator |
homepage | |
repository | https://gitlab.com/faulesocke/svgen |
max_upload_size | |
id | 131343 |
size | 48,838 |
A small utility to generate runit services from templates.
This tool looks for service templates in the directory /etc/svgen/templates/
and instantiates them using instance descriptions in /etc/svgen/instances
. A template is a directory containing at least a run
file and optionally other files. Each line in the instances file must be of the form <template-name>@<instance-name>
. Instantiation means that the files from the template are read, the string __INSTANCE__
is replaced with the instance name and then a new service directory under /etc/sv/generated/<instance-line>
is created. The processed files from the template directory are then written to the service directory while an existing log
file is handled specially and installed as log/run
. Afterwards the service is symlinked in /service/
to activate it.
In this example we build a template for [wg-quick
], a simple program to setup wireguard VPN connections. This is a good example, since we usually have a bunch of VPN interfaces we want to set up and all the corresponding runit services would look nearly identical. Create a new directory /etc/svgen/templates/wg-quick/
and put the following into the run
file:
#!/bin/sh
wg-quick up "__INSTANCE__"
exec chpst -b "wg-quick@__INSTANCE__" pause
The __INSTANCE__
string will get replaced upon instantiation of this template and takes the role of the interface name. In order to tear-down the network when the service is stopped, we also need a finish
script:
#!/bin/sh
wg-quick down "__INSTANCE__"
Now, let's imagine you have configured two wireguard networks, wg-net1
and wg-net2
. In order to create services for them create the following /etc/svgen/instances
file:
# wireguard
wg-quick@wg-net1
wg-quick@wg-net2
Now run
chmod +x run finish
svgen
This will generate two services under /etc/sv/generated/
and symlink to them from /service/
.
To build the program, run
cargo build --release
and afterwards run as root:
bash
./install.sh
See the documentation for a full description on how this program operates.
This project is licensed under the GNU AGPL version 3 or later, see the LICENSE
file for more information.