#!/bin/sh # # Put the yggdrasil and yggdrasilctl binaries into /usr/local/bin # Then copy this script into /usr/local/etc/rc.d/yggdrasil # Finally, run: # 1. chmod +x /etc/rc.d/yggdrasil /usr/local/bin/{yggdrasil,yggdrasilctl} # 2. sysrc yggdrasil_enable=YES # 3. service yggdrasil start # # PROVIDE: yggdrasil # REQUIRE: NETWORKING # KEYWORD: . /etc/rc.subr name="yggdrasil" rcvar="yggdrasil_enable" start_cmd="${name}_start" stop_cmd="${name}_stop" yggdrasil_command="%%PREFIX%%/bin/yggdrasil" pidfile="/var/run/yggdrasil/${name}.pid" command="/usr/sbin/daemon" command_args="-P ${pidfile} -r -S -m 3 -s info -T yggdrasil ${yggdrasil_command}" yggdrasil_start() { test ! -x %%PREFIX%%/bin/yggdrasil && ( logger -s -t yggdrasil "Warning: %%PREFIX%%/bin/yggdrasil is missing or not executable" logger -s -t yggdrasil "Copy the yggdrasil binary into %%PREFIX%%/bin and then chmod +x %%PREFIX%%/bin/yggdrasil" return 1 ) test ! -f %%PREFIX%%/etc/yggdrasil.conf && ( logger -s -t yggdrasil "Generating new configuration file into %%PREFIX%%/etc/yggdrasil.conf" %%PREFIX%%/bin/yggdrasil -genconf > %%PREFIX%%/etc/yggdrasil.conf ) mkdir -p /var/run/yggdrasil logger -s -t yggdrasil "Starting yggdrasil" ${command} ${command_args} -useconffile %%PREFIX%%/etc/yggdrasil.conf \ 1>/var/log/yggdrasil.stdout.log \ 2>/var/log/yggdrasil.stderr.log & } yggdrasil_stop() { logger -s -t yggdrasil "Stopping yggdrasil" test -f /var/run/yggdrasil/${name}.pid && kill -TERM $(cat /var/run/yggdrasil/${name}.pid) tap_name="$(egrep '^[ \t]+IfName:' %%PREFIX%%/etc/yggdrasil.conf | sed 's/[ \t]*IfName:[ \t]*//')" /sbin/ifconfig ${tap_name} >/dev/null 2>&1 && ( logger -s -t yggdrasil "Destroying ${tap_name} adapter" /sbin/ifconfig ${tap_name} destroy || logger -s -t yggdrasil "Failed to destroy ${tap_name} adapter" ) } load_rc_config $name : ${yggdrasil_enable:=no} run_rc_command "$1"