diff --git a/net/softethervpn5/Makefile b/net/softethervpn5/Makefile new file mode 100644 index 000000000..e6b58925c --- /dev/null +++ b/net/softethervpn5/Makefile @@ -0,0 +1,171 @@ +# Based partially on the versions of el1n and Federico Di Marco + +include $(TOPDIR)/rules.mk + +PKG_NAME:=softethervpn5 +PKG_VERSION:=5.01.9667 +PKG_RELEASE:=1 + +PKG_MAINTAINER:=Andy Walsh +PKG_LICENSE:=GPL-2.0 +PKG_LICENSE_FILES:=COPYING + +PKG_SOURCE:=softether-vpn-src-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://github.com/SoftEtherVPN/SoftEtherVPN/releases/download/$(PKG_VERSION) +PKG_HASH:=c99142c5e55fae055955332964c56d29aba10bec9764ab961aebabf6c3ee1462 + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) +HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/$(PKG_NAME)-$(PKG_VERSION) + +HOST_BUILD_DEPENDS:=ncurses/host readline/host +PKG_BUILD_DEPENDS:=softethervpn5/host + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/host-build.mk +include $(INCLUDE_DIR)/nls.mk +include $(INCLUDE_DIR)/cmake.mk + +TAR_CMD=$(HOST_TAR) -C $(1) $(TAR_OPTIONS) + +define Package/softethervpn5/Default + SECTION:=net + CATEGORY:=Network + SUBMENU:=VPN + TITLE:=softethervpn5 v$(PKG_VERSION) + URL:=http://www.softether.org/ +endef + +define Package/softethervpn5/Default/description + SoftEther VPN supports SSL-VPN, OpenVPN, L2TP, EtherIP, L2TPv3 and IPsec as a single VPN software. + SoftEther VPN is not only an alternative VPN server to existing VPN products (OpenVPN, IPsec and MS-SSTP), + but has also original strong SSL-VPN protocol to penetrate any kinds of firewalls. + Guide: https://wordpress.tirlins.com/2015/03/setting-up-softether-vpn-on-openwrt/ +endef + +define Package/softethervpn5-libs + $(call Package/softethervpn5/Default) + DEPENDS:=+libpthread +librt +libreadline +libopenssl +libncurses +kmod-tun +zlib $(ICONV_DEPENDS) + TITLE+= libs + HIDDEN:=1 +endef + +define Package/softethervpn5-server + $(call Package/softethervpn5/Default) + TITLE+= server + DEPENDS:= +softethervpn5-libs +endef +define Package/softethervpn5-server/description + $(call Package/softethervpn5/Default/description) + + Provides the vpnserver (daemon). +endef + +define Package/softethervpn5-bridge + $(call Package/softethervpn5/Default) + TITLE+= bridge + DEPENDS:= +softethervpn5-libs +endef +define Package/softethervpn5-bridge/description + $(call Package/softethervpn5/Default/description) + + Provides the vpnbridge (daemon). +endef + +define Package/softethervpn5-client + $(call Package/softethervpn5/Default) + TITLE+= client + DEPENDS:= +softethervpn5-libs +endef +define Package/softethervpn5-client/description + $(call Package/softethervpn5/Default/description) + + Provides the vpnclient. +endef + +export USE_MUSL=YES +# BUG: outdated host/include/elf.h +HOST_CFLAGS += $(FPIC) -DAT_HWCAP2=26 +TARGET_CFLAGS += $(FPIC) + +# static build for host (hamcorebuilder), avoid -fpic on ncurses/host and shared libs can't be found on host +define Host/Prepare + $(Host/Prepare/Default) + $(SED) 's,SHARED,STATIC,g' $(HOST_BUILD_DIR)/src/Mayaqua/CMakeLists.txt + $(SED) 's,SHARED,STATIC,g' $(HOST_BUILD_DIR)/src/Cedar/CMakeLists.txt +endef + +define Host/Compile + $(call Host/Compile/Default,hamcorebuilder) +endef + +define Host/Install + $(INSTALL_DIR) $(STAGING_DIR_HOSTPKG)/bin/ + $(INSTALL_BIN) $(HOST_BUILD_DIR)/tmp/hamcorebuilder $(STAGING_DIR_HOSTPKG)/bin/ +endef + +define Build/Compile + $(call Build/Compile/Default,vpnserver vpnbridge vpnclient vpncmd hamcore-archive-build) +endef + +define Build/Install +endef + +define Package/softethervpn5-libs/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_BUILD_DIR)/build/libcedar.so $(1)/usr/lib/ + $(CP) $(PKG_BUILD_DIR)/build/libmayaqua.so $(1)/usr/lib/ + $(INSTALL_DIR) $(1)/usr/libexec/softethervpn + $(CP) $(PKG_BUILD_DIR)/build/hamcore.se2 $(1)/usr/libexec/softethervpn/ + $(INSTALL_BIN) $(PKG_BUILD_DIR)/build/vpncmd $(1)/usr/libexec/softethervpn/ + $(INSTALL_BIN) files/launcher.sh $(1)/usr/libexec/softethervpn/ + $(INSTALL_DATA) files/dummy $(1)/usr/libexec/softethervpn/lang.config + $(INSTALL_DIR) $(1)/usr/bin + $(LN) ../../usr/libexec/softethervpn/launcher.sh $(1)/usr/bin/vpncmd +endef + +define Package/softethervpn5-server/install + $(INSTALL_DIR) $(1)/usr/libexec/softethervpn + $(INSTALL_BIN) $(PKG_BUILD_DIR)/build/vpnserver $(1)/usr/libexec/softethervpn/ + $(INSTALL_DATA) files/dummy $(1)/usr/libexec/softethervpn/vpn_server.config + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) files/vpnserver.init $(1)/etc/init.d/softethervpnserver +endef + +define Package/softethervpn5-bridge/install + $(INSTALL_DIR) $(1)/usr/libexec/softethervpn + $(INSTALL_BIN) $(PKG_BUILD_DIR)/build/vpnbridge $(1)/usr/libexec/softethervpn/ + $(INSTALL_BIN) files/launcher.sh $(1)/usr/libexec/softethervpn/ + $(INSTALL_DATA) files/dummy $(1)/usr/libexec/softethervpn/vpn_bridge.config + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) files/vpnbridge.init $(1)/etc/init.d/softethervpnbridge +endef + +define Package/softethervpn5-client/install + $(INSTALL_DIR) $(1)/usr/libexec/softethervpn + $(INSTALL_BIN) $(PKG_BUILD_DIR)/build/vpnclient $(1)/usr/libexec/softethervpn/ + $(INSTALL_BIN) files/launcher.sh $(1)/usr/libexec/softethervpn/ + $(INSTALL_DATA) files/dummy $(1)/usr/libexec/softethervpn/vpn_client.config + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) files/vpnclient.init $(1)/etc/init.d/softethervpnclient +endef + +define Package/softethervpn5-server/conffiles +/usr/libexec/softethervpn/vpn_server.config +/usr/libexec/softethervpn/lang.config +endef + +define Package/softethervpn5-bridge/conffiles +/usr/libexec/softethervpn/vpn_bridge.config +/usr/libexec/softethervpn/lang.config +endef + +define Package/softethervpn5-client/conffiles +/usr/libexec/softethervpn/vpn_client.config +/usr/libexec/softethervpn/lang.config +endef + +$(eval $(call HostBuild)) +$(eval $(call BuildPackage,softethervpn5-libs)) +$(eval $(call BuildPackage,softethervpn5-server)) +$(eval $(call BuildPackage,softethervpn5-bridge)) +$(eval $(call BuildPackage,softethervpn5-client)) diff --git a/net/softethervpn5/files/dummy b/net/softethervpn5/files/dummy new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/net/softethervpn5/files/dummy @@ -0,0 +1 @@ + diff --git a/net/softethervpn5/files/launcher.sh b/net/softethervpn5/files/launcher.sh new file mode 100644 index 000000000..79707922a --- /dev/null +++ b/net/softethervpn5/files/launcher.sh @@ -0,0 +1,2 @@ +#!/bin/sh +exec "/usr/libexec/softethervpn/${0##*/}" "$@" diff --git a/net/softethervpn5/files/vpnbridge.init b/net/softethervpn5/files/vpnbridge.init new file mode 100644 index 000000000..1311e652b --- /dev/null +++ b/net/softethervpn5/files/vpnbridge.init @@ -0,0 +1,28 @@ +#!/bin/sh /etc/rc.common + +START=90 +USE_PROCD=1 + +start_service(){ + logger -t 'softethervpn5' "Starting softether bridge service." + + [ -d /var/softethervpn ] || mkdir -p -m 0775 /var/softethervpn + + [ -f /var/softethervpn/hamcore.se2 ] || ln -sf /usr/libexec/softethervpn/hamcore.se2 /var/softethervpn/ + [ -f /var/softethervpn/lang.config ] || ln -sf /usr/libexec/softethervpn/lang.config /var/softethervpn/ + + [ -f /var/softethervpn/vpnbridge ] || ln -sf /usr/libexec/softethervpn/vpnbridge /var/softethervpn/ + [ -f /var/softethervpn/vpn_bridge.config ] || ln -sf /usr/libexec/softethervpn/vpn_bridge.config /var/softethervpn/ + + procd_open_instance + procd_set_param env LANG=en_US.UTF-8 + procd_set_param command /var/softethervpn/vpnbridge start --foreground + procd_set_param respawn + procd_close_instance +} + +stop_service(){ + logger -t 'softethervpn5' "Stopping softether bridge service." + + /var/softethervpn/vpnbridge stop +} diff --git a/net/softethervpn5/files/vpnclient.init b/net/softethervpn5/files/vpnclient.init new file mode 100644 index 000000000..e4766f0fe --- /dev/null +++ b/net/softethervpn5/files/vpnclient.init @@ -0,0 +1,28 @@ +#!/bin/sh /etc/rc.common + +START=92 +USE_PROCD=1 + +start_service(){ + logger -t 'softethervpn5' "Starting softether client service." + + [ -d /var/softethervpn ] || mkdir -p -m 0775 /var/softethervpn + + [ -f /var/softethervpn/hamcore.se2 ] || ln -sf /usr/libexec/softethervpn/hamcore.se2 /var/softethervpn/ + [ -f /var/softethervpn/lang.config ] || ln -sf /usr/libexec/softethervpn/lang.config /var/softethervpn/ + + [ -f /var/softethervpn/vpnclient ] || ln -sf /usr/libexec/softethervpn/vpnclient /var/softethervpn/ + [ -f /var/softethervpn/vpn_client.config ] || ln -sf /usr/libexec/softethervpn/vpn_client.config /var/softethervpn/ + + procd_open_instance + procd_set_param env LANG=en_US.UTF-8 + procd_set_param command /var/softethervpn/vpnclient start --foreground + procd_set_param respawn + procd_close_instance +} + +stop_service(){ + logger -t 'softethervpn5' "Stopping softether client service." + + /var/softethervpn/vpnclient stop +} diff --git a/net/softethervpn5/files/vpnserver.init b/net/softethervpn5/files/vpnserver.init new file mode 100644 index 000000000..e6f73da31 --- /dev/null +++ b/net/softethervpn5/files/vpnserver.init @@ -0,0 +1,28 @@ +#!/bin/sh /etc/rc.common + +START=91 +USE_PROCD=1 + +start_service(){ + logger -t 'softethervpn5' "Starting softether vpnserver service." + + [ -d /var/softethervpn ] || mkdir -p -m 0775 /var/softethervpn + + [ -f /var/softethervpn/hamcore.se2 ] || ln -sf /usr/libexec/softethervpn/hamcore.se2 /var/softethervpn/ + [ -f /var/softethervpn/lang.config ] || ln -sf /usr/libexec/softethervpn/lang.config /var/softethervpn/ + + [ -f /var/softethervpn/vpnserver ] || ln -sf /usr/libexec/softethervpn/vpnserver /var/softethervpn/ + [ -f /var/softethervpn/vpn_server.config ] || ln -sf /usr/libexec/softethervpn/vpn_server.config /var/softethervpn/ + + procd_open_instance + procd_set_param env LANG=en_US.UTF-8 + procd_set_param command /var/softethervpn/vpnserver start --foreground + procd_set_param respawn + procd_close_instance +} + +stop_service(){ + logger -t 'softethervpn5' "Stopping softether vpnserver service." + + /var/softethervpn/vpnserver stop +} diff --git a/net/softethervpn5/patches/100-increase-cfg-save-intervall.patch b/net/softethervpn5/patches/100-increase-cfg-save-intervall.patch new file mode 100644 index 000000000..5ce814a7a --- /dev/null +++ b/net/softethervpn5/patches/100-increase-cfg-save-intervall.patch @@ -0,0 +1,17 @@ +--- a/src/Cedar/Server.h 2018-07-21 ++++ b/src/Cedar/Server.h 2018-07-23 +@@ -138,10 +138,10 @@ extern char *SERVER_CONFIG_FILE_NAME; + #define SERVER_CONTROL_TCP_TIMEOUT (60 * 1000) + #define SERVER_FARM_CONTROL_INTERVAL (10 * 1000) + +-#define SERVER_FILE_SAVE_INTERVAL_DEFAULT (5 * 60 * 1000) +-#define SERVER_FILE_SAVE_INTERVAL_MIN (5 * 1000) +-#define SERVER_FILE_SAVE_INTERVAL_MAX (3600 * 1000) +-#define SERVER_FILE_SAVE_INTERVAL_USERMODE (1 * 60 * 1000) ++#define SERVER_FILE_SAVE_INTERVAL_DEFAULT (24 * 60 * 60 * 1000) ++#define SERVER_FILE_SAVE_INTERVAL_MIN (5 * 60 * 1000) ++#define SERVER_FILE_SAVE_INTERVAL_MAX (7 * 24 * 60 * 60 * 1000) ++#define SERVER_FILE_SAVE_INTERVAL_USERMODE (5 * 60 * 1000) + + #define SERVER_LICENSE_VIOLATION_SPAN (SERVER_FARM_CONTROL_INTERVAL * 2) + diff --git a/net/softethervpn5/patches/101-add-config-write-syslog.patch b/net/softethervpn5/patches/101-add-config-write-syslog.patch new file mode 100644 index 000000000..8f2ede5f9 --- /dev/null +++ b/net/softethervpn5/patches/101-add-config-write-syslog.patch @@ -0,0 +1,22 @@ +--- a/src/Cedar/Server.c 2018-07-25 ++++ b/src/Cedar/Server.c 2018-07-26 +@@ -110,7 +110,7 @@ + + // Server.c + // VPN Server module +- ++#include + #include "CedarPch.h" + + static SERVER *server = NULL; +@@ -6601,6 +6601,10 @@ UINT SiWriteConfigurationFile(SERVER *s) + { + return 0; + } ++ ++ openlog("softethervpn-server", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_DAEMON); ++ syslog(LOG_NOTICE, "Writing vpn_server.config (AutoSaveConfigSpan set to < %d > seconds)", (s->AutoSaveConfigSpan / 1000)); ++ closelog(); + + Lock(s->SaveCfgLock); + {