mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2025-04-29 22:55:06 +03:00

2. added SCTP protocol and schema support 3. added set of NAS models support (Asustor, ReadyNAS, Drobo, QNAP, WD, Synology, Terramaster) 4. moved to fc00::/7 private segment 5. added Windows, MacOS and Linux UI for peers edit and current status
120 lines
3 KiB
Bash
120 lines
3 KiB
Bash
#!/bin/sh
|
|
QPKG_CONF="/etc/config/qpkg.conf"
|
|
CONF="/etc/config/mesh.conf"
|
|
QPKG_NAME="mesh"
|
|
QPKG_DIR=$(/sbin/getcfg $QPKG_NAME Install_Path -f $QPKG_CONF)
|
|
KERNEL_MODULES+=" tun"
|
|
|
|
load_kernel_modules(){
|
|
local KERNEL_VERSION=$(/bin/uname -r)
|
|
local KERNEL_MODULES_PATH="/lib/modules"
|
|
for M in ${KERNEL_MODULES}; do
|
|
if [ -f ${KERNEL_MODULES_PATH}/vpn/${M}.ko ]; then
|
|
/sbin/insmod ${KERNEL_MODULES_PATH}/vpn/${M}.ko
|
|
continue
|
|
fi
|
|
if [ -f ${KERNEL_MODULES_PATH}/qvpn/${M}.ko ]; then
|
|
/sbin/insmod ${KERNEL_MODULES_PATH}/qvpn/${M}.ko
|
|
continue
|
|
fi
|
|
if [ -f ${KERNEL_MODULES_PATH}/misc/${M}.ko ]; then
|
|
/sbin/insmod ${KERNEL_MODULES_PATH}/misc/${M}.ko
|
|
continue
|
|
fi
|
|
if [ -f ${KERNEL_MODULES_PATH}/others/${M}.ko ]; then
|
|
/sbin/insmod ${KERNEL_MODULES_PATH}/others/${M}.ko
|
|
continue
|
|
fi
|
|
if [ -f ${KERNEL_MODULES_PATH}/${KERNEL_VERSION}/${M}.ko ]; then
|
|
/sbin/insmod ${KERNEL_MODULES_PATH}/${KERNEL_VERSION}/${M}.ko
|
|
continue
|
|
fi
|
|
done
|
|
}
|
|
|
|
create_tun(){
|
|
if ( [ ! -c /dev/net/tun ] ); then
|
|
if ( [ ! -d /dev/net ] ); then
|
|
mkdir -m 755 /dev/net
|
|
fi
|
|
mknod /dev/net/tun c 10 200
|
|
chmod 0755 /dev/net/tun
|
|
fi
|
|
|
|
# Load the tun module if not already loaded
|
|
if ( !(lsmod | grep -q "^tun\s") ); then
|
|
insmod /lib/modules/tun.ko
|
|
fi
|
|
}
|
|
|
|
start_service ()
|
|
{
|
|
exec 2>>/tmp/mesh.log
|
|
set -x
|
|
|
|
#enable ipv6
|
|
sysctl -w net.ipv6.conf.all.disable_ipv6=0
|
|
sysctl -w net.ipv6.conf.default.disable_ipv6=0
|
|
|
|
# Create the necessary file structure for /dev/net/tun
|
|
create_tun
|
|
load_kernel_modules
|
|
|
|
#. /etc/init.d/vpn_common.sh && load_kernel_modules
|
|
|
|
if [ ! -f '/etc/config/apache/extra/apache-mesh.conf' ] ; then
|
|
ln -sf $QPKG_DIR/apache-mesh.conf /etc/config/apache/extra/
|
|
apache_reload=1
|
|
fi
|
|
|
|
if ! grep '/etc/config/apache/extra/apache-mesh.conf' /etc/config/apache/apache.conf ; then
|
|
echo 'Include /etc/config/apache/extra/apache-mesh.conf' >> /etc/config/apache/apache.conf
|
|
apache_reload=1
|
|
fi
|
|
|
|
if [ -n "$apache_reload" ] ; then
|
|
/usr/local/apache/bin/apachectl -k graceful
|
|
fi
|
|
|
|
# Launch the mesh in the background.
|
|
${QPKG_DIR}/bin/mesh -useconffile "$CONF" \
|
|
-httpaddress "http://127.0.0.1:19019" \
|
|
-wwwroot "$QPKG_DIR/www" \
|
|
-logto "$QPKG_DIR/var/log/mesh.log" &
|
|
if [ $? -ne 0 ]; then
|
|
echo "Starting $QPKG_NAME failed"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
stop_service ()
|
|
{
|
|
# Kill mesh
|
|
pid=`pidof -s mesh`
|
|
if [ -z "$pid" ]; then
|
|
echo "mesh was not running"
|
|
exit 0
|
|
fi
|
|
kill "$pid"
|
|
}
|
|
|
|
case "$1" in
|
|
start)
|
|
start_service
|
|
;;
|
|
|
|
stop)
|
|
stop_service
|
|
;;
|
|
|
|
restart)
|
|
$0 stop
|
|
$0 start
|
|
;;
|
|
|
|
*)
|
|
echo "Usage: $0 {start|stop|restart}"
|
|
exit 1
|
|
esac
|
|
|
|
exit 0
|