mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 03:05:07 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			72 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/sh
 | 
						|
#
 | 
						|
# Put the mesh and meshctl binaries into /usr/local/bin
 | 
						|
# Then copy this script into /etc/rc.d/mesh
 | 
						|
# Finally, run:
 | 
						|
#   1. chmod +x /etc/rc.d/mesh /usr/local/bin/{mesh,meshctl}
 | 
						|
#   2. echo "mesh_enable=yes" >> /etc/rc.d
 | 
						|
#   3. service mesh start
 | 
						|
#
 | 
						|
# PROVIDE: mesh
 | 
						|
# REQUIRE: networking
 | 
						|
# KEYWORD:
 | 
						|
 | 
						|
. /etc/rc.subr
 | 
						|
 | 
						|
name="mesh"
 | 
						|
rcvar="mesh_enable"
 | 
						|
 | 
						|
start_cmd="${name}_start"
 | 
						|
stop_cmd="${name}_stop"
 | 
						|
 | 
						|
pidfile="/var/run/mesh/${name}.pid"
 | 
						|
command="/usr/sbin/daemon"
 | 
						|
command_args="-P ${pidfile} -r -f ${mesh_command}"
 | 
						|
 | 
						|
mesh_start()
 | 
						|
{
 | 
						|
	test ! -x /usr/local/bin/mesh && (
 | 
						|
		logger -s -t mesh "Warning: /usr/local/bin/mesh is missing or not executable"
 | 
						|
		logger -s -t mesh "Copy the mesh binary into /usr/local/bin and then chmod +x /usr/local/bin/mesh"
 | 
						|
		return 1
 | 
						|
	)
 | 
						|
 | 
						|
	test ! -f /etc/mesh.conf && (
 | 
						|
		logger -s -t mesh "Generating new configuration file into /etc/mesh.conf"
 | 
						|
		/usr/local/bin/mesh -genconf > /etc/mesh.conf
 | 
						|
	)
 | 
						|
 | 
						|
	tap_path="$(cat /etc/mesh.conf | egrep -o '/dev/tap[0-9]{1,2}$')"
 | 
						|
	tap_name="$(echo -n ${tap_path} | tr -d '/dev/')"
 | 
						|
 | 
						|
	/sbin/ifconfig ${tap_name} >/dev/null 2>&1 || (
 | 
						|
		logger -s -t mesh "Creating ${tap_name} adapter"
 | 
						|
		/sbin/ifconfig ${tap_name} create || logger -s -t mesh "Failed to create ${tap_name} adapter"
 | 
						|
	)
 | 
						|
 | 
						|
	test ! -d /var/run/mesh && mkdir -p /var/run/mesh
 | 
						|
 | 
						|
	logger -s -t mesh "Starting mesh"
 | 
						|
	${command} ${command_args} /usr/local/bin/mesh -useconffile /etc/mesh.conf \
 | 
						|
		1>/var/log/mesh.stdout.log \
 | 
						|
		2>/var/log/mesh.stderr.log &
 | 
						|
}
 | 
						|
 | 
						|
mesh_stop()
 | 
						|
{
 | 
						|
	logger -s -t mesh "Stopping mesh"
 | 
						|
	test -f /var/run/mesh/${name}.pid && kill -TERM $(cat /var/run/mesh/${name}.pid)
 | 
						|
 | 
						|
	tap_path="$(cat /etc/mesh.conf | grep /dev/tap | egrep -o '/dev/.*$')"
 | 
						|
        tap_name="$(echo -n ${tap_path} | tr -d '/dev/')"
 | 
						|
 | 
						|
	/sbin/ifconfig ${tap_name} >/dev/null 2>&1 && (
 | 
						|
		logger -s -t mesh "Destroying ${tap_name} adapter"
 | 
						|
		/sbin/ifconfig ${tap_name} destroy || logger -s -t mesh "Failed to destroy ${tap_name} adapter"
 | 
						|
	)
 | 
						|
}
 | 
						|
 | 
						|
load_rc_config $name
 | 
						|
: ${mesh_enable:=no}
 | 
						|
 | 
						|
run_rc_command "$1"
 |