Add unit systemd files
Signed-off-by: Adrien Gallouët <adrien@gallouet.fr>
This commit is contained in:
27
meson.build
27
meson.build
@@ -4,6 +4,13 @@ project('glorytun', 'c',
|
||||
default_options : [ 'buildtype=debugoptimized' ]
|
||||
)
|
||||
|
||||
prefix = get_option('prefix')
|
||||
bindir = join_paths(prefix, get_option('bindir'))
|
||||
|
||||
conf_data = configuration_data()
|
||||
conf_data.set('prefix', prefix)
|
||||
conf_data.set('bindir', bindir)
|
||||
|
||||
add_global_arguments('-DPACKAGE_VERSION="'+meson.project_version()+'"', language : 'c')
|
||||
|
||||
src = [
|
||||
@@ -20,3 +27,23 @@ deps = [
|
||||
]
|
||||
|
||||
executable('glorytun', install: true, sources: src, dependencies: deps)
|
||||
|
||||
systemd = dependency('systemd')
|
||||
|
||||
if systemd.found()
|
||||
systemdutildir = systemd.get_pkgconfig_variable('systemdutildir')
|
||||
configure_file(
|
||||
input: 'systemd/glorytun@.service.in',
|
||||
output: 'glorytun@.service',
|
||||
configuration: conf_data,
|
||||
install_dir: join_paths(systemdutildir, 'system')
|
||||
)
|
||||
install_data('systemd/glorytun.network',
|
||||
install_dir: join_paths(systemdutildir, 'network'))
|
||||
install_data('systemd/glorytun-client.network',
|
||||
install_dir: join_paths(systemdutildir, 'network'))
|
||||
install_data('systemd/glorytun-run',
|
||||
install_dir: bindir)
|
||||
install_data('systemd/glorytun-setup',
|
||||
install_dir: bindir)
|
||||
endif
|
||||
|
||||
10
systemd/glorytun-client.network
Normal file
10
systemd/glorytun-client.network
Normal file
@@ -0,0 +1,10 @@
|
||||
[Match]
|
||||
Name=gtc-*
|
||||
|
||||
[Network]
|
||||
Description=Glorytun client device
|
||||
DHCP=ipv4
|
||||
|
||||
[DHCP]
|
||||
CriticalConnection=yes
|
||||
RouteTable=200
|
||||
29
systemd/glorytun-run
Executable file
29
systemd/glorytun-run
Executable file
@@ -0,0 +1,29 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ ! -f "$1" ]; then
|
||||
echo "usage: $(basename "$0") FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
. "$(readlink -f "$1")"
|
||||
|
||||
DEV="gt${HOST:+c}-$(basename "$1")"
|
||||
|
||||
# Setting BIND is like going to 'expert mode'
|
||||
# This helper is pretty stupid and still needs some work
|
||||
if [ -n "$HOST" ] && [ -z "$BIND" ]; then
|
||||
BIND=$(ip route get "$HOST" | awk '/src/{getline;print $0}' RS=' ')
|
||||
ip rule add from "$BIND" table main pref 32000
|
||||
ip rule add from all table 200 pref 32001
|
||||
fi
|
||||
|
||||
exec glorytun \
|
||||
v4only \
|
||||
keyfile "$1".key \
|
||||
dev "$DEV" \
|
||||
${HOST:+host "$HOST"} \
|
||||
${PORT:+port "$PORT"} \
|
||||
${BIND:+bind "$BIND"} \
|
||||
${BIND_PORT:+bind-port "$BIND_PORT"} \
|
||||
${MTU:+mtu "$MTU"} \
|
||||
${MTU_AUTO:+mtu-auto}
|
||||
36
systemd/glorytun-setup
Executable file
36
systemd/glorytun-setup
Executable file
@@ -0,0 +1,36 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
_ask() {
|
||||
printf "%s: " "$1"
|
||||
read -r "$2"
|
||||
}
|
||||
|
||||
_NAME=tun0
|
||||
_ask "Config filename ($_NAME)" NAME
|
||||
NAME=${NAME:-$_NAME}
|
||||
|
||||
if [ -f /etc/glorytun/"$NAME" ]; then
|
||||
echo "This config already exit!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
_ask "Server ip (enter for server conf)" HOST
|
||||
|
||||
_ask "Server key (enter to generate a new one)" KEY
|
||||
if [ -z "$KEY" ]; then
|
||||
KEY=$(glorytun keygen) || exit
|
||||
echo "Your new key: $KEY"
|
||||
fi
|
||||
|
||||
mkdir -p /etc/glorytun
|
||||
FILE="/etc/glorytun/$NAME"
|
||||
|
||||
echo "${HOST:+HOST=$HOST}" > "$FILE"
|
||||
|
||||
touch "$FILE.key"
|
||||
chmod 600 "$FILE.key"
|
||||
echo "$KEY" > "$FILE.key"
|
||||
|
||||
echo "Done"
|
||||
14
systemd/glorytun.network
Normal file
14
systemd/glorytun.network
Normal file
@@ -0,0 +1,14 @@
|
||||
[Match]
|
||||
Name=gt-*
|
||||
|
||||
[Network]
|
||||
Description=Glorytun server device
|
||||
Address=0.0.0.0/24
|
||||
DHCPServer=yes
|
||||
IPMasquerade=yes
|
||||
|
||||
[DHCPServer]
|
||||
PoolOffset=2
|
||||
PoolSize=1
|
||||
EmitDNS=yes
|
||||
DNS=9.9.9.9
|
||||
12
systemd/glorytun@.service.in
Normal file
12
systemd/glorytun@.service.in
Normal file
@@ -0,0 +1,12 @@
|
||||
[Unit]
|
||||
Description=Glorytun on %I
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Restart=always
|
||||
ExecStart=@bindir@/glorytun-run /etc/glorytun/%i
|
||||
CapabilityBoundingSet=CAP_NET_ADMIN
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Reference in New Issue
Block a user