From d0ac1478552264c75aa1c2b52af42d7ead9fdb60 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 01:07:16 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=9B=B8=20Sync=202024-09-23=2001:07:16?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- luci-app-nekoclash/Makefile | 2 +- .../htdocs/nekoclash/fetch_logs.php | 14 ++- luci-app-nekoclash/htdocs/nekoclash/index.php | 49 ++++------ luci-app-nekoclash/htdocs/nekoclash/mon.php | 29 ++++++ .../htdocs/nekoclash/puernya.php | 89 +++++++++++++++++++ .../htdocs/nekoclash/settings.php | 87 +++++++++--------- .../htdocs/nekoclash/upload.php | 2 +- .../resources/view/tailscale/setting.js | 1 - luci-app-tailscale/po/templates/tailscale.pot | 28 +++--- luci-app-tailscale/po/zh_Hans/tailscale.po | 28 +++--- luci-app-tailscale/po/zh_Hant/tailscale.po | 28 +++--- shadowsocks-rust/Makefile | 4 +- 12 files changed, 235 insertions(+), 126 deletions(-) create mode 100644 luci-app-nekoclash/htdocs/nekoclash/puernya.php diff --git a/luci-app-nekoclash/Makefile b/luci-app-nekoclash/Makefile index 72f090624..58632a7a6 100644 --- a/luci-app-nekoclash/Makefile +++ b/luci-app-nekoclash/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk PKG_MAINTAINER:=Thaolga PKG_NAME:=luci-app-nekoclash PKG_VERSION:=1.3.5 -PKG_RELEASE:=43 +PKG_RELEASE:=44 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git a/luci-app-nekoclash/htdocs/nekoclash/fetch_logs.php b/luci-app-nekoclash/htdocs/nekoclash/fetch_logs.php index 5c98ffec3..01fe46e16 100644 --- a/luci-app-nekoclash/htdocs/nekoclash/fetch_logs.php +++ b/luci-app-nekoclash/htdocs/nekoclash/fetch_logs.php @@ -8,12 +8,20 @@ $allowed_files = [ ]; $file = $_GET['file'] ?? ''; +$max_lines = 100; if (array_key_exists($file, $allowed_files)) { $file_path = $allowed_files[$file]; - + if (file_exists($file_path)) { - echo htmlspecialchars(file_get_contents($file_path)); + $lines = file($file_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + + if (count($lines) > $max_lines) { + $lines = array_slice($lines, -$max_lines); + file_put_contents($file_path, implode(PHP_EOL, $lines)); + } + + echo htmlspecialchars(implode(PHP_EOL, $lines)); } else { http_response_code(404); echo "File not found."; @@ -22,4 +30,4 @@ if (array_key_exists($file, $allowed_files)) { http_response_code(403); echo "Forbidden."; } -?> \ No newline at end of file +?> diff --git a/luci-app-nekoclash/htdocs/nekoclash/index.php b/luci-app-nekoclash/htdocs/nekoclash/index.php index 1b6cbcd61..f82512365 100644 --- a/luci-app-nekoclash/htdocs/nekoclash/index.php +++ b/luci-app-nekoclash/htdocs/nekoclash/index.php @@ -326,8 +326,12 @@ $configDir = '/etc/neko/config'; $start_script_template = <<> $logFile 2>&1 +exec 2>> $singBoxLogFile + if command -v fw4 > /dev/null; then - echo "Detected fw4, configuring nftables rules..." + echo "FW4 Detected." + echo "Starting nftables." echo '#!/usr/sbin/nft -f @@ -394,7 +398,8 @@ table inet singbox { nft -f /etc/nftables.conf elif command -v fw3 > /dev/null; then - echo "Detected fw3, configuring iptables rules..." + echo "FW3 Detected." + echo "Starting iptables." iptables -t mangle -F iptables -t mangle -X @@ -434,7 +439,8 @@ else exit 1 fi -echo "启动sing-box,使用配置文件:%s" +echo "Configs : %s" +exec >> $singBoxLogFile 2>&1 /usr/bin/sing-box run -c %s EOF; @@ -595,8 +601,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { exec("/etc/neko/core/start.sh > $singBoxLogFile 2>&1 &", $output, $returnVar); $version = getSingboxVersion(); $pid = getSingboxPID(); + $currentTimestamp = date('H:i:s'); $logMessage = $returnVar === 0 - ? "Sing-box has been started, version: $version" : "Failed to start Sing-box"; + ? "Sing-box started\n[$currentTimestamp] Core Detected : $version" + : "Failed to start Sing-box\n[$currentTimestamp]"; logToFile($logFile, $logMessage); $singbox_status = $returnVar === 0 ? 1 : 0; } elseif ($_POST['singbox'] === 'disable') { @@ -770,23 +778,6 @@ $singboxStartLogContent = readLogFile($singboxStartLogFile); -
-

语音播报系统

- - - - - -
-
-
- -
-
- -
-
@@ -978,15 +969,13 @@ $singboxStartLogContent = readLogFile($singboxStartLogFile); fetchLogs(); setInterval(fetchLogs, 5000); - - - + + + + - - - - - 双击显示图标 - - - -
- -
- - -
首页 @@ -129,7 +86,6 @@ $singBoxVersion = getSingboxVersion();
-

软体资讯

@@ -168,6 +124,7 @@ $singBoxVersion = getSingboxVersion();
+
@@ -242,7 +199,7 @@ $singBoxVersion = getSingboxVersion(); background-color: #90EE90; } - #updateNekoButton:hover { + #updatePuernyaButton:hover { background-color: #87CEFA; } @@ -286,6 +243,26 @@ $singBoxVersion = getSingboxVersion(); xhr.send(); }); + document.getElementById('updatePuernyaButton').addEventListener('click', function() { + const xhr = new XMLHttpRequest(); + xhr.open('POST', 'puernya.php', true); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + + document.getElementById('logOutput').innerHTML = '开始下载核心更新...'; + + xhr.onload = function() { + if (xhr.status === 200) { + document.getElementById('logOutput').innerHTML += '\n核心更新完成!'; + document.getElementById('logOutput').innerHTML += '\n' + xhr.responseText; + } else { + document.getElementById('logOutput').innerHTML += '\n发生错误:' + xhr.statusText; + } + }; + + xhr.send(); + }); + + document.getElementById('updateCoreButton').addEventListener('click', function() { const xhr = new XMLHttpRequest(); xhr.open('POST', 'core.php', true); @@ -305,6 +282,24 @@ $singBoxVersion = getSingboxVersion(); xhr.send(); }); +
+

语音播报系统

+
+ + + +
+
+
+ +
+
+ +
+ + + diff --git a/luci-app-nekoclash/htdocs/nekoclash/upload.php b/luci-app-nekoclash/htdocs/nekoclash/upload.php index 09b3ea0e2..3487bd4bf 100644 --- a/luci-app-nekoclash/htdocs/nekoclash/upload.php +++ b/luci-app-nekoclash/htdocs/nekoclash/upload.php @@ -176,7 +176,7 @@ function formatSize($size) { 10.0.0.0/24.')); o.default = ''; - o.depends('acceptRoutes', '1'); o.rmempty = true; o = s.taboption('advance',form.Flag, 's2s', _('Site To Site'), _('Use site-to-site layer 3 networking to connect subnets on the Tailscale network.')); diff --git a/luci-app-tailscale/po/templates/tailscale.pot b/luci-app-tailscale/po/templates/tailscale.pot index d0393a896..baeff13ff 100644 --- a/luci-app-tailscale/po/templates/tailscale.pot +++ b/luci-app-tailscale/po/templates/tailscale.pot @@ -13,11 +13,11 @@ msgstr "" msgid "Accept subnet routes that other nodes advertise." msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:176 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175 msgid "Access Control" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185 msgid "Additional Flags" msgstr "" @@ -29,7 +29,7 @@ msgstr "" msgid "Are you sure you want to logout and unbind the current device?" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:196 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:195 msgid "Auth Key" msgstr "" @@ -37,7 +37,7 @@ msgstr "" msgid "Auto Mesh" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185 msgid "Available flags" msgstr "" @@ -50,7 +50,7 @@ msgstr "" msgid "Collecting data ..." msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:188 msgid "Custom Server Settings" msgstr "" @@ -74,7 +74,7 @@ msgstr "" msgid "Expose physical network routes into Tailscale, e.g. 10.0.0.0/24." msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:184 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:183 msgid "Extra Settings" msgstr "" @@ -106,7 +106,7 @@ msgstr "" msgid "Interface Name" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178 msgid "LAN access Tailscale" msgstr "" @@ -114,7 +114,7 @@ msgstr "" msgid "Leave blank to use the device's hostname." msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185 msgid "List of extra flags. Format: --flags=value, e.g. --exit-node=10.0.0.1.
%s for enabling settings upon the initiation of Tailscale." msgstr "" @@ -175,7 +175,7 @@ msgstr "" msgid "RUNNING" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:192 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:191 msgid "Server Address" msgstr "" @@ -203,11 +203,11 @@ msgstr "" msgid "Tailscale" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:176 msgid "Tailscale access LAN" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177 msgid "Tailscale access WAN" msgstr "" @@ -240,15 +240,15 @@ msgstr "" msgid "Unable to get interface info: %s." msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:190 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189 msgid "Use %s to deploy a private server." msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:170 msgid "Use site-to-site layer 3 networking to connect subnets on the Tailscale network." msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179 msgid "WAN access Tailscale" msgstr "" diff --git a/luci-app-tailscale/po/zh_Hans/tailscale.po b/luci-app-tailscale/po/zh_Hans/tailscale.po index 7939a382c..9045ad8c7 100644 --- a/luci-app-tailscale/po/zh_Hans/tailscale.po +++ b/luci-app-tailscale/po/zh_Hans/tailscale.po @@ -19,11 +19,11 @@ msgstr "使用 Tailscale 管理控制台的 DNS 配置。" msgid "Accept subnet routes that other nodes advertise." msgstr "接受其他节点广播的子网路由。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:176 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175 msgid "Access Control" msgstr "访问控制" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185 msgid "Additional Flags" msgstr "参数列表" @@ -35,7 +35,7 @@ msgstr "高级选项" msgid "Are you sure you want to logout and unbind the current device?" msgstr "是否注销当前登录并且解绑当前设备?" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:196 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:195 msgid "Auth Key" msgstr "认证密钥" @@ -43,7 +43,7 @@ msgstr "认证密钥" msgid "Auto Mesh" msgstr "自动组网" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185 msgid "Available flags" msgstr "可用参数" @@ -56,7 +56,7 @@ msgstr "基础选项" msgid "Collecting data ..." msgstr "正在收集数据..." -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:188 msgid "Custom Server Settings" msgstr "自定义服务器" @@ -80,7 +80,7 @@ msgstr "公开网段" msgid "Expose physical network routes into Tailscale, e.g. 10.0.0.0/24." msgstr "广播子网路由至 Tailscale,例如:10.0.0.0/24。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:184 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:183 msgid "Extra Settings" msgstr "附加选项" @@ -112,7 +112,7 @@ msgstr "接口信息" msgid "Interface Name" msgstr "接口名称" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178 msgid "LAN access Tailscale" msgstr "本地局域网访问虚拟局域网" @@ -120,7 +120,7 @@ msgstr "本地局域网访问虚拟局域网" msgid "Leave blank to use the device's hostname." msgstr "留空以使用设备的主机名。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185 msgid "List of extra flags. Format: --flags=value, e.g. --exit-node=10.0.0.1.
%s for enabling settings upon the initiation of Tailscale." msgstr "额外参数的列表。格式:--flags=value,例如 --exit-node=10.0.0.1
在 Tailscale 启动时的%s。" @@ -181,7 +181,7 @@ msgstr "端口" msgid "RUNNING" msgstr "运行中" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:192 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:191 msgid "Server Address" msgstr "服务器地址" @@ -209,11 +209,11 @@ msgstr "运行日志" msgid "Tailscale" msgstr "Tailscale" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:176 msgid "Tailscale access LAN" msgstr "虚拟局域网访问本地局域网" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177 msgid "Tailscale access WAN" msgstr "虚拟局域网访问本地广域网" @@ -246,15 +246,15 @@ msgstr "无法获取接口 %s 的信息:%s。" msgid "Unable to get interface info: %s." msgstr "无法获取接口信息:%s。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:190 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189 msgid "Use %s to deploy a private server." msgstr "使用 %s 部署私有服务器" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:170 msgid "Use site-to-site layer 3 networking to connect subnets on the Tailscale network." msgstr "使用站点到站点的三层网络连接 Tailscale 中的子网。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179 msgid "WAN access Tailscale" msgstr "本地广域网访问虚拟局域网" diff --git a/luci-app-tailscale/po/zh_Hant/tailscale.po b/luci-app-tailscale/po/zh_Hant/tailscale.po index 0d9e041d5..cbf581a2e 100644 --- a/luci-app-tailscale/po/zh_Hant/tailscale.po +++ b/luci-app-tailscale/po/zh_Hant/tailscale.po @@ -19,11 +19,11 @@ msgstr "使用 Tailscale 管理控制台的 DNS 設定。" msgid "Accept subnet routes that other nodes advertise." msgstr "接受其他節點廣播的子網路由。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:176 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175 msgid "Access Control" msgstr "訪問控制" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185 msgid "Additional Flags" msgstr "參數列表" @@ -35,7 +35,7 @@ msgstr "高級選項" msgid "Are you sure you want to logout and unbind the current device?" msgstr "是否註銷當前登錄並且解綁當前設備?" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:196 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:195 msgid "Auth Key" msgstr "認證密鑰" @@ -43,7 +43,7 @@ msgstr "認證密鑰" msgid "Auto Mesh" msgstr "自動組網" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185 msgid "Available flags" msgstr "可用參數" @@ -56,7 +56,7 @@ msgstr "基礎選項" msgid "Collecting data ..." msgstr "正在收集數據..." -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:188 msgid "Custom Server Settings" msgstr "自定義伺服器" @@ -80,7 +80,7 @@ msgstr "公開網段" msgid "Expose physical network routes into Tailscale, e.g. 10.0.0.0/24." msgstr "廣播子網路由至 Tailscale,例如:10.0.0.0/24。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:184 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:183 msgid "Extra Settings" msgstr "附加選項" @@ -112,7 +112,7 @@ msgstr "接口信息" msgid "Interface Name" msgstr "接口名稱" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178 msgid "LAN access Tailscale" msgstr "本地局域網訪問虛擬局域網" @@ -120,7 +120,7 @@ msgstr "本地局域網訪問虛擬局域網" msgid "Leave blank to use the device's hostname." msgstr "留空以使用設備的主機名。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185 msgid "List of extra flags. Format: --flags=value, e.g. --exit-node=10.0.0.1.
%s for enabling settings upon the initiation of Tailscale." msgstr "額外參數的列表。格式:--flags=value,例如 --exit-node=10.0.0.1
在 Tailscale 啟動時的%s。" @@ -181,7 +181,7 @@ msgstr "端口" msgid "RUNNING" msgstr "運行中" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:192 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:191 msgid "Server Address" msgstr "伺服器地址" @@ -209,11 +209,11 @@ msgstr "運行日誌" msgid "Tailscale" msgstr "Tailscale" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:176 msgid "Tailscale access LAN" msgstr "虛擬局域網訪問本地局域網" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177 msgid "Tailscale access WAN" msgstr "虛擬局域網訪問本地廣域網" @@ -246,15 +246,15 @@ msgstr "無法獲取接口 %s 的信息:%s。" msgid "Unable to get interface info: %s." msgstr "無法獲取接口信息:%s。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:190 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189 msgid "Use %s to deploy a private server." msgstr "使用 %s 部署私有伺服器" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:170 msgid "Use site-to-site layer 3 networking to connect subnets on the Tailscale network." msgstr "使用站點到站點的三層網路連線 Tailscale 中的子網。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179 msgid "WAN access Tailscale" msgstr "本地廣域網訪問虛擬局域網" diff --git a/shadowsocks-rust/Makefile b/shadowsocks-rust/Makefile index 6c8072e87..41a960598 100644 --- a/shadowsocks-rust/Makefile +++ b/shadowsocks-rust/Makefile @@ -6,8 +6,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=shadowsocks-rust -PKG_VERSION:=1.20.4 -PKG_RELEASE:=76 +PKG_VERSION:=1.21.0 +PKG_RELEASE:=77 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/shadowsocks/shadowsocks-rust/tar.gz/v$(PKG_VERSION)?