sing-box: add new package
authorVan Waholtz <brvphoenix@gmail.com>
Mon, 12 Dec 2022 13:59:43 +0000 (21:59 +0800)
committerTianling Shen <cnsztl@gmail.com>
Fri, 10 Feb 2023 00:45:15 +0000 (08:45 +0800)
Signed-off-by: Van Waholtz <brvphoenix@gmail.com>
net/sing-box/Makefile [new file with mode: 0644]
net/sing-box/files/sing-box.conf [new file with mode: 0644]
net/sing-box/files/sing-box.init [new file with mode: 0755]
net/sing-box/test.sh [new file with mode: 0644]

diff --git a/net/sing-box/Makefile b/net/sing-box/Makefile
new file mode 100644 (file)
index 0000000..921f599
--- /dev/null
@@ -0,0 +1,140 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=sing-box
+PKG_VERSION:=1.1.5
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/SagerNet/sing-box/tar.gz/v$(PKG_VERSION)?
+PKG_HASH:=a1e642362f41bd0e362cd9c8d2f0d29d2eca6a55a948677f6f03cfb81c4f0657
+
+PKG_LICENSE:=GPL-3.0-or-later
+PKG_LICENSE_FILES:=LICENSE
+PKG_MAINTAINER:=Van Waholtz <brvphoenix@gmail.com>
+
+PKG_BUILD_DEPENDS:=golang/host
+PKG_BUILD_PARALLEL:=1
+PKG_USE_MIPS16:=0
+
+GO_PKG:=github.com/sagernet/sing-box
+GO_PKG_BUILD_PKG:=$(GO_PKG)/cmd/sing-box
+
+include $(INCLUDE_DIR)/package.mk
+include ../../lang/golang/golang-package.mk
+
+define Package/sing-box
+  TITLE:=The universal proxy platform
+  SECTION:=net
+  CATEGORY:=Network
+  URL:=https://sing-box.sagernet.org
+  DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle +kmod-tun
+  USERID:=sing-box=5566:sing-box=5566
+endef
+
+define Package/sing-box/description
+  Sing-box is a universal proxy platform which supports hysteria, SOCKS, Shadowsocks,
+  ShadowsocksR, ShadowTLS, Tor, trojan, VLess, VMess, WireGuard and so on.
+endef
+
+define Package/sing-box/config
+       menu "Select build options"
+               depends on PACKAGE_sing-box
+
+               config SINGBOX_WITH_ACME
+                       bool "Build with ACME TLS certificate issuer support"
+                       default n
+
+               config SINGBOX_WITH_CLASH_API
+                       bool "Build with Clash API support"
+                       default y
+
+               config SINGBOX_WITH_ECH
+                       bool "Build with TLS ECH extension support for TLS outbound"
+                       default n
+
+               config SINGBOX_WITH_EMBEDDED_TOR
+                       bool "Build with embedded Tor support"
+                       default n
+
+               config SINGBOX_WITH_GRPC
+                       bool "Build with standard gRPC support"
+                       default n
+
+               config SINGBOX_WITH_GVISOR
+                       bool "Build with gVisor support"
+                       default y
+
+               config SINGBOX_WITH_LWIP
+                       bool "Build with LWIP Tun stack support"
+                       default n
+
+               config SINGBOX_WITH_QUIC
+                       bool "Build with QUIC support"
+                       default y
+
+               config SINGBOX_WITH_SHADOWSOCKSR
+                       bool "Build with ShadowsocksR support"
+                       default n
+
+               config SINGBOX_WITH_UTLS
+                       bool "Build with uTLS support for TLS outbound"
+                       default y
+
+               config SINGBOX_WITH_V2RAY_API
+                       bool "Build with V2Ray API support"
+                       default n
+
+               config SINGBOX_WITH_WIREGUARD
+                       bool "Build with WireGuard support"
+                       default y
+       endmenu
+endef
+
+PKG_CONFIG_DEPENDS:= \
+       CONFIG_SINGBOX_WITH_ACME \
+       CONFIG_SINGBOX_WITH_CLASH_API \
+       CONFIG_SINGBOX_WITH_ECH \
+       CONFIG_SINGBOX_WITH_EMBEDDED_TOR \
+       CONFIG_SINGBOX_WITH_GRPC \
+       CONFIG_SINGBOX_WITH_GVISOR \
+       CONFIG_SINGBOX_WITH_LWIP \
+       CONFIG_SINGBOX_WITH_QUIC \
+       CONFIG_SINGBOX_WITH_SHADOWSOCKSR \
+       CONFIG_SINGBOX_WITH_UTLS \
+       CONFIG_SINGBOX_WITH_V2RAY_API \
+       CONFIG_SINGBOX_WITH_WIREGUARD
+
+GO_PKG_TAGS:=$(subst $(space),$(comma),$(strip \
+       $(if $(CONFIG_SINGBOX_WITH_ACME),with_acme) \
+       $(if $(CONFIG_SINGBOX_WITH_CLASH_API),with_clash_api) \
+       $(if $(CONFIG_SINGBOX_WITH_ECH),with_ech) \
+       $(if $(CONFIG_SINGBOX_WITH_EMBEDDED_TOR),with_embedded_tor) \
+       $(if $(CONFIG_SINGBOX_WITH_GRPC),with_grpc) \
+       $(if $(CONFIG_SINGBOX_WITH_GVISOR),with_gvisor) \
+       $(if $(CONFIG_SINGBOX_WITH_LWIP),with_lwip) \
+       $(if $(CONFIG_SINGBOX_WITH_QUIC),with_quic) \
+       $(if $(CONFIG_SINGBOX_WITH_SHADOWSOCKSR),with_shadowsocksr) \
+       $(if $(CONFIG_SINGBOX_WITH_UTLS),with_utls) \
+       $(if $(CONFIG_SINGBOX_WITH_V2RAY_API),with_v2ray_api) \
+       $(if $(CONFIG_SINGBOX_WITH_WIREGUARD),with_wireguard) \
+))
+
+define Package/sing-box/conffiles
+/etc/config/sing-box
+/etc/sing-box/
+endef
+
+define Package/sing-box/install
+       $(INSTALL_DIR) $(1)/usr/bin/
+       $(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/sing-box $(1)/usr/bin/sing-box
+
+       $(INSTALL_DIR) $(1)/etc/sing-box
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/release/config/config.json $(1)/etc/sing-box
+
+       $(INSTALL_DIR) $(1)/etc/config/
+       $(INSTALL_CONF) ./files/sing-box.conf $(1)/etc/config/sing-box
+       $(INSTALL_DIR) $(1)/etc/init.d/
+       $(INSTALL_BIN) ./files/sing-box.init $(1)/etc/init.d/sing-box
+endef
+
+$(eval $(call BuildPackage,sing-box))
diff --git a/net/sing-box/files/sing-box.conf b/net/sing-box/files/sing-box.conf
new file mode 100644 (file)
index 0000000..c776790
--- /dev/null
@@ -0,0 +1,7 @@
+
+config sing-box 'main'
+       option enabled '0'
+       option user 'sing-box'
+       option conffile '/etc/sing-box/config.json'
+       option workdir '/usr/share/sing-box'
+
diff --git a/net/sing-box/files/sing-box.init b/net/sing-box/files/sing-box.init
new file mode 100755 (executable)
index 0000000..277c9f2
--- /dev/null
@@ -0,0 +1,39 @@
+#!/bin/sh /etc/rc.common
+
+USE_PROCD=1
+START=99
+
+NAME="sing-box"
+PROG="/usr/bin/sing-box"
+
+start_service() {
+       config_load "$NAME"
+
+       local enabled user group conffile workdir
+       config_get_bool enabled "main" "enabled" "0"
+       [ "$enabled" -eq "1" ] || return 0
+
+       config_get user "main" "user" "root"
+       config_get conffile "main" "conffile"
+       config_get workdir "main" "workdir" "/usr/share/sing-box"
+
+       mkdir -p "$workdir"
+       local group="$(id -ng $user)"
+       chown $user:$group "$workdir"
+
+       procd_open_instance "$NAME.main"
+       procd_set_param command "$PROG" run -c "$conffile" -D "$workdir"
+
+       # Use root user if you want to use the TUN mode.
+       procd_set_param user "$user"
+       procd_set_param file "$conffile"
+       procd_set_param stdout 1
+       procd_set_param stderr 1
+       procd_set_param respawn
+
+       procd_close_instance
+}
+
+service_triggers() {
+       procd_add_reload_trigger "$NAME"
+}
diff --git a/net/sing-box/test.sh b/net/sing-box/test.sh
new file mode 100644 (file)
index 0000000..2470c51
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+sing-box version | grep -F "$PKG_VERSION"