mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-07-27 10:31:38 +08:00
🛸 Sync 2026-07-04 19:06:12
This commit is contained in:
parent
0ec008c9bf
commit
673a352ca1
@ -1,137 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# Copyright (C) 2023 ImmortalWrt.org
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=daed-next
|
||||
PKG_VERSION:=2023-12-02-102cb56
|
||||
CORE_VERSION:=core-$(shell date "+%Y-%m-%d")
|
||||
PKG_RELEASE:=4
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=102cb562b6962b44c47f38092284d2ab2506a702
|
||||
PKG_SOURCE_URL:=https://github.com/daeuniverse/daed-revived-next.git
|
||||
PKG_MIRROR_HASH:=skip
|
||||
|
||||
PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)/wing
|
||||
PKG_BUILD_DEPENDS:=golang/host bpf-headers
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
PKG_BUILD_FLAGS:=no-mips16
|
||||
|
||||
GO_PKG:=github.com/daeuniverse/dae-wing
|
||||
GO_PKG_LDFLAGS:= \
|
||||
-X '$(GO_PKG)/db.AppDescription=$(PKG_NAME) is a integration solution of dae, API and UI.'
|
||||
GO_PKG_LDFLAGS_X:= \
|
||||
$(GO_PKG)/db.AppName=$(PKG_NAME) \
|
||||
$(GO_PKG)/db.AppVersion=$(PKG_VERSION)-$(CORE_VERSION)
|
||||
GO_PKG_GCFLAGS:=-l=4
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/bpf.mk
|
||||
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
||||
|
||||
define Package/daed-next/Default
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=Web Servers/Proxies
|
||||
URL:=https://github.com/daeuniverse/daed-revived-next
|
||||
endef
|
||||
|
||||
define Package/daed-next
|
||||
$(call Package/daed-next/Default)
|
||||
TITLE:=daed-next is a backend of dae
|
||||
# You need enable KERNEL_DEBUG_INFO_BTF and KERNEL_BPF_EVENTS
|
||||
DEPENDS:=$(GO_ARCH_DEPENDS) $(BPF_DEPENDS) \
|
||||
+ca-bundle +kmod-sched-core +kmod-sched-bpf +kmod-xdp-sockets-diag +kmod-veth \
|
||||
+node +v2ray-geoip +v2ray-geosite +zoneinfo-asia
|
||||
endef
|
||||
|
||||
define Package/daed-next/description
|
||||
daed-next is a backend of dae, provides a method to bundle arbitrary
|
||||
frontend, dae and geodata into one binary.
|
||||
endef
|
||||
|
||||
define Package/daed-next/conffiles
|
||||
/etc/daed-next/wing.db
|
||||
/etc/config/daed-next
|
||||
endef
|
||||
|
||||
define Download/daed-next
|
||||
URL:=https://github.com/QiuSimons/luci-app-daed-next/releases/download/daed-web-$(PKG_VERSION)/
|
||||
URL_FILE:=daed-web-$(PKG_VERSION).squashfs
|
||||
FILE:=daed-web-$(PKG_VERSION).squashfs
|
||||
HASH:=skip
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
( \
|
||||
$(TAR) --strip-components=1 -C $(PKG_BUILD_DIR)/../ -xzf $(DL_DIR)/$(PKG_NAME)-$(PKG_VERSION).tar.gz ; \
|
||||
rm -rf $(PKG_BUILD_DIR) && git clone https://github.com/daeuniverse/dae-wing $(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)/wing ; \
|
||||
rm -rf $(PKG_BUILD_DIR)/dae-core && git clone https://github.com/daeuniverse/dae $(PKG_BUILD_DIR)/dae-core ; \
|
||||
rm -rf $(PKG_BUILD_DIR)/dae-core/control/kern/headers && git clone https://github.com/daeuniverse/dae_bpf_headers $(PKG_BUILD_DIR)/dae-core/control/kern/headers ; \
|
||||
pushd $(PKG_BUILD_DIR)/dae-core ; \
|
||||
sed -i -e 's!default:"30s"!default:"600s"!g' -e 's!default:"HEAD"!default:"CONNECT"!g' -e 's!default:"dns.google.com:53,8.8.8.8,2001:4860:4860::8888"!default:"one.one.one.one:53,1.0.0.1,2606:4700:4700::1111"!g' -e 's!default:"http://cp.cloudflare.com,1.1.1.1,2606:4700:4700::1111"!default:"http://cp.cloudflare.com,1.0.0.1,2606:4700:4700::1111"!g' config/config.go ; \
|
||||
go get -u=patch ; \
|
||||
go mod tidy ; \
|
||||
popd ; \
|
||||
pushd $(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)/wing ; \
|
||||
wget -qO - https://github.com/daeuniverse/dae-wing/commit/ca0296173d36746335efed1923ff08c1300f7a61.patch | patch -p1 ; \
|
||||
go get -u=patch ; \
|
||||
go mod tidy ; \
|
||||
popd ; \
|
||||
)
|
||||
endef
|
||||
|
||||
DAE_CFLAGS:= \
|
||||
-O2 -Wall -Werror \
|
||||
-DMAX_MATCH_SET_LEN=64 \
|
||||
-I$(BPF_HEADERS_DIR)/tools/lib \
|
||||
-I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/asm/mach-generic
|
||||
|
||||
ifneq ($(CONFIG_USE_MUSL),)
|
||||
TARGET_CFLAGS += -D_LARGEFILE64_SOURCE
|
||||
endif
|
||||
|
||||
define Build/Compile
|
||||
( \
|
||||
pushd $(PKG_BUILD_DIR) ; \
|
||||
$(MAKE) deps ; \
|
||||
$(GO_GENERAL_BUILD_CONFIG_VARS) \
|
||||
$(GO_PKG_BUILD_CONFIG_VARS) \
|
||||
$(GO_PKG_BUILD_VARS) \
|
||||
go generate ./... ; \
|
||||
cd dae-core ; \
|
||||
$(GO_GENERAL_BUILD_CONFIG_VARS) \
|
||||
$(GO_PKG_BUILD_CONFIG_VARS) \
|
||||
$(GO_PKG_BUILD_VARS) \
|
||||
BPF_CLANG="$(CLANG)" \
|
||||
BPF_STRIP_FLAG="-strip=$(LLVM_STRIP)" \
|
||||
BPF_CFLAGS="$(DAE_CFLAGS)" \
|
||||
BPF_TARGET="bpfel,bpfeb" \
|
||||
go generate control/control.go ; \
|
||||
popd ; \
|
||||
$(call GoPackage/Build/Compile) ; \
|
||||
)
|
||||
endef
|
||||
|
||||
define Package/daed-next/install
|
||||
$(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR))
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/dae-wing $(1)/usr/bin/dae-wing
|
||||
|
||||
$(INSTALL_DIR) $(1)/usr/share/daed-next
|
||||
$(INSTALL_DATA) $(DL_DIR)/daed-web-$(PKG_VERSION).squashfs $(1)/usr/share/daed-next/daed-web.squashfs
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_CONF) $(CURDIR)/files/daed-next.config $(1)/etc/config/daed-next
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) $(CURDIR)/files/daed-next.init $(1)/etc/init.d/daed-next
|
||||
endef
|
||||
|
||||
$(eval $(call Download,daed-next))
|
||||
$(eval $(call GoBinPackage,daed-next))
|
||||
$(eval $(call BuildPackage,daed-next))
|
||||
@ -1,8 +0,0 @@
|
||||
|
||||
config daed-next 'config'
|
||||
option enabled '0'
|
||||
option listen_port '3000'
|
||||
option log_enabled '0'
|
||||
option log_maxbackups '1'
|
||||
option log_maxsize '1'
|
||||
|
||||
@ -1,59 +0,0 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=99
|
||||
USE_PROCD=1
|
||||
NODE_BIN=/usr/bin/node
|
||||
WING_BIN=/usr/bin/dae-wing
|
||||
WEB_SQUASHFS=/usr/share/daed-next/daed-web.squashfs
|
||||
GEODATA=/usr/share/v2ray
|
||||
|
||||
get_config() {
|
||||
config_get_bool enabled $1 enabled "0"
|
||||
config_get listen_port $1 listen_port "3000"
|
||||
config_get log_enabled $1 log_enabled "0"
|
||||
config_get log_maxbackups $1 log_maxbackups "1"
|
||||
config_get log_maxsize $1 log_maxsize "1"
|
||||
}
|
||||
|
||||
start_service() {
|
||||
config_load "daed-next"
|
||||
config_foreach get_config "daed-next"
|
||||
|
||||
[ "$enabled" -eq "1" ] || return 1
|
||||
[ "$log_enabled" -eq "1" ] && log_path="/var/log/daed-next/daed-next.log" || log_path="/dev/null"
|
||||
mkdir -p /var/log/daed-next
|
||||
true > /var/log/daed-next/daed-next.log
|
||||
|
||||
# dae-wing
|
||||
procd_open_instance dae-wing
|
||||
procd_set_param env DAE_LOCATION_ASSET=$GEODATA
|
||||
procd_set_param command $WING_BIN run
|
||||
procd_append_param command --config "/etc/daed-next/"
|
||||
procd_append_param command --logfile "$log_path"
|
||||
procd_append_param command --logfile-maxbackups "$log_maxbackups"
|
||||
procd_append_param command --logfile-maxsize "$log_maxsize"
|
||||
procd_set_param limits core="unlimited"
|
||||
procd_set_param limits nofile="1000000 1000000"
|
||||
procd_set_param stdout 0
|
||||
procd_set_param stderr 0
|
||||
procd_set_param respawn 300 5 10
|
||||
procd_close_instance dae-wing
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger "daed-next"
|
||||
}
|
||||
|
||||
stop_service() {
|
||||
sleep 2
|
||||
mount_points=$(mount | grep '/tmp/daed-next' | awk '{print $3}')
|
||||
for mp in $mount_points; do
|
||||
umount -l "$mp" || { echo "Failed to force unmount $mp"; }
|
||||
done
|
||||
}
|
||||
|
||||
reload_service() {
|
||||
stop
|
||||
sleep 2
|
||||
start
|
||||
}
|
||||
@ -1,18 +0,0 @@
|
||||
# Copyright (C) 2016 Openwrt.org
|
||||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-daed-next
|
||||
PKG_VERSION:=1.0.0
|
||||
PKG_RELEASE:=1
|
||||
|
||||
LUCI_TITLE:=LuCI support for daed-next
|
||||
LUCI_PKGARCH:=all
|
||||
LUCI_DEPENDS:=+daed-next +bash +luci-compat
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
@ -1,36 +0,0 @@
|
||||
local sys = require "luci.sys"
|
||||
local http = require "luci.http"
|
||||
|
||||
module("luci.controller.daed-next", package.seeall)
|
||||
|
||||
function index()
|
||||
if not nixio.fs.access("/etc/config/daed-next") then
|
||||
return
|
||||
end
|
||||
|
||||
local page = entry({"admin", "services", "daed-next"}, alias("admin", "services", "daed-next", "basic"), _("DAED Next"), -1)
|
||||
page.dependent = true
|
||||
page.acl_depends = { "luci-app-daed-next" }
|
||||
|
||||
entry({"admin", "services", "daed-next", "basic"}, cbi("daed-next/basic"), _("Basic Setting"), 1).leaf = true
|
||||
entry({"admin", "services", "daed-next", "dashboard"}, template("daed-next/dashboard"), _("Dashboard"), 2).leaf = true
|
||||
entry({"admin", "services", "daed-next", "log"}, cbi("daed-next/log"), _("Logs"), 3).leaf = true
|
||||
entry({"admin", "services", "daed-next", "status"}, call("act_status")).leaf = true
|
||||
entry({"admin", "services", "daed-next", "get_log"}, call("get_log")).leaf = true
|
||||
entry({"admin", "services", "daed-next", "clear_log"}, call("clear_log")).leaf = true
|
||||
end
|
||||
|
||||
function act_status()
|
||||
local e = {}
|
||||
e.running = sys.call("pgrep -x /usr/bin/dae-wing >/dev/null") == 0
|
||||
http.prepare_content("application/json")
|
||||
http.write_json(e)
|
||||
end
|
||||
|
||||
function get_log()
|
||||
http.write(sys.exec("cat /var/log/daed-next/daed-next.log"))
|
||||
end
|
||||
|
||||
function clear_log()
|
||||
sys.call("true > /var/log/daed-next/daed-next.log")
|
||||
end
|
||||
@ -1,76 +0,0 @@
|
||||
local m, s
|
||||
|
||||
m = Map("daed-next", translate("DAE Dashboard"))
|
||||
m.description = translate("A Linux high-performance transparent proxy solution based on eBPF")
|
||||
|
||||
m:section(SimpleSection).template = "daed-next/daed-next_status"
|
||||
|
||||
s = m:section(TypedSection, "daed-next")
|
||||
s.addremove = false
|
||||
s.anonymous = true
|
||||
|
||||
if nixio.fs.stat("/sys/fs/bpf","type") ~= "dir" then
|
||||
s.rawhtml = true
|
||||
s.template = "daed-next/daed-next_error"
|
||||
end
|
||||
|
||||
o = s:option(Flag, "enabled", translate("Enabled"))
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Button, "Dashboard Toggle", translate("Dashboard Toggle"))
|
||||
o.inputtitle = translate("Toggle")
|
||||
o.inputstyle = "reload"
|
||||
o.description = translate("Dashboard is a frontend management panel, meant for configuration use only.")
|
||||
o.write = function()
|
||||
luci.sys.exec("/etc/daed-next/dashboard.sh &> /dev/null &")
|
||||
end
|
||||
|
||||
enable = s:option(Flag, "subscribe_auto_update", translate("Enable Auto Subscribe Update"))
|
||||
enable.rmempty = false
|
||||
|
||||
o = s:option(Value, "daed_username", translate("Username"))
|
||||
o.default = Username
|
||||
o.password = true
|
||||
o:depends('subscribe_auto_update', '1')
|
||||
|
||||
o = s:option(Value, "daed_password", translate("Password"))
|
||||
o.default = Password
|
||||
o.password = true
|
||||
o:depends('subscribe_auto_update', '1')
|
||||
|
||||
o = s:option(ListValue, "subscribe_update_week_time", translate("Update Cycle"))
|
||||
o:value("*", translate("Every Day"))
|
||||
o:value("1", translate("Every Monday"))
|
||||
o:value("2", translate("Every Tuesday"))
|
||||
o:value("3", translate("Every Wednesday"))
|
||||
o:value("4", translate("Every Thursday"))
|
||||
o:value("5", translate("Every Friday"))
|
||||
o:value("6", translate("Every Saturday"))
|
||||
o:value("7", translate("Every Sunday"))
|
||||
o.default = "*"
|
||||
o:depends('subscribe_auto_update', '1')
|
||||
|
||||
update_time = s:option(ListValue, "subscribe_update_day_time", translate("Update Time (Every Day)"))
|
||||
for t = 0, 23 do
|
||||
update_time:value(t, t..":00")
|
||||
end
|
||||
update_time.default = 0
|
||||
update_time:depends('subscribe_auto_update', '1')
|
||||
|
||||
o = s:option(Value, "listen_port", translate("Web Listen port"))
|
||||
o.datatype = "and(port,min(1))"
|
||||
o.default = 3000
|
||||
|
||||
o = s:option(Flag, "log_enabled", translate("Enable Logs"))
|
||||
o.default = 0
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Value, "log_maxbackups", translate("Logfile retention count"))
|
||||
o.default = 1
|
||||
o:depends("log_enabled", "1")
|
||||
|
||||
o = s:option(Value, "log_maxsize", translate("Logfile Max Size (MB)"))
|
||||
o.default = 1
|
||||
o:depends("log_enabled", "1")
|
||||
|
||||
return m
|
||||
@ -1,5 +0,0 @@
|
||||
m = Map("daed-next")
|
||||
|
||||
m:append(Template("daed-next/daed-next_log"))
|
||||
|
||||
return m
|
||||
File diff suppressed because one or more lines are too long
@ -1,33 +0,0 @@
|
||||
<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
function clear_log(btn) {
|
||||
XHR.get('<%=url([[admin]], [[services]], [[daed-next]], [[clear_log]])%>', null,
|
||||
function(x, data) {
|
||||
if(x && x.status == 200) {
|
||||
var log_textarea = document.getElementById('log_textarea');
|
||||
log_textarea.innerHTML = "";
|
||||
log_textarea.scrollTop = log_textarea.scrollHeight;
|
||||
}
|
||||
location.reload();
|
||||
}
|
||||
);
|
||||
}
|
||||
var scrolled = false;
|
||||
XHR.poll(2, '<%=url([[admin]], [[services]], [[daed-next]], [[get_log]])%>', null,
|
||||
function(x, data) {
|
||||
if(x && x.status == 200) {
|
||||
var log_textarea = document.getElementById('log_textarea');
|
||||
log_textarea.innerHTML = x.responseText;
|
||||
if (!scrolled) {
|
||||
log_textarea.scrollTop = log_textarea.scrollHeight;
|
||||
scrolled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
//]]>
|
||||
</script>
|
||||
<fieldset class="cbi-section" id="_log_fieldset">
|
||||
<input class="cbi-button cbi-input-remove" type="button" onclick="clear_log()" value="<%:Clear logs%>" style="margin-left: 10px; margin-top: 10px;">
|
||||
<textarea id="log_textarea" class="cbi-input-textarea" style="width: calc(100% - 20px); height: 645px; margin: 10px;" data-update="change" rows="5" wrap="off" readonly="readonly"></textarea>
|
||||
</fieldset>
|
||||
@ -1,46 +0,0 @@
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
XHR.poll(5, '<%=url("admin/services/daed-next/status")%>', null,
|
||||
function(x, data)
|
||||
{
|
||||
var tb = document.getElementById('daed-next_status');
|
||||
if (data && tb)
|
||||
{
|
||||
if (data.running)
|
||||
{
|
||||
tb.innerHTML = '<em style=\"color:green\"><b><%:dae-wing%> <%:RUNNING%></b></em>';
|
||||
}
|
||||
else
|
||||
{
|
||||
tb.innerHTML = '<em style=\"color:red\"><b><%:dae-wing%> <%:NOT RUNNING%></b></em>';
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
//]]></script>
|
||||
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
XHR.poll(5, '<%=url("admin/services/daed-next/dashboardstatus")%>', null,
|
||||
function(x, data) {
|
||||
console.log('Received data:', data);
|
||||
|
||||
var dashboardstatus = document.getElementById('daed-next_dashboardstatus');
|
||||
var dashboardPidExists = <%=luci.sys.exec("[ -e '/tmp/log/daed-next/dashboard.pid' ] && echo '1' || echo '0'")%>;
|
||||
|
||||
if (dashboardPidExists) {
|
||||
dashboardstatus.innerHTML = '<em style=\"color:green\"><b><%:Dashboard%> <%:RUNNING%></b></em>';
|
||||
} else {
|
||||
dashboardstatus.innerHTML = '<em style=\"color:red\"><b><%:Dashboard%> <%:NOT RUNNING%></b></em>';
|
||||
}
|
||||
}
|
||||
);
|
||||
//]]></script>
|
||||
|
||||
<style>.mar-10 {margin-left: 50px; margin-right: 10px;}</style>
|
||||
<fieldset class="cbi-section">
|
||||
<p id="daed-next_status">
|
||||
<em><b><%:Collecting data...%></b></em>
|
||||
</p>
|
||||
<p id="daed-next_dashboardstatus">
|
||||
<em><b><%:Collecting data...%></b></em>
|
||||
</p>
|
||||
</fieldset>
|
||||
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
zh_Hans
|
||||
@ -1,86 +0,0 @@
|
||||
msgid "DAED Next"
|
||||
msgstr ""
|
||||
|
||||
msgid "DAE Dashboard"
|
||||
msgstr "DAE 仪表板"
|
||||
|
||||
msgid "A Linux high-performance transparent proxy solution based on eBPF"
|
||||
msgstr "一个基于 eBPF 的 Linux 高性能透明代理解决方案"
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "启用"
|
||||
|
||||
msgid "Web Listen port"
|
||||
msgstr "Web 监听端口"
|
||||
|
||||
msgid "Enable Logs"
|
||||
msgstr "启用日志"
|
||||
|
||||
msgid "Logfile retention count"
|
||||
msgstr "日志文件保留数量"
|
||||
|
||||
msgid "Logfile Max Size (MB)"
|
||||
msgstr "日志文件大小(MB)"
|
||||
|
||||
msgid "Logs"
|
||||
msgstr "日志"
|
||||
|
||||
msgid "Clear logs"
|
||||
msgstr "清空日志"
|
||||
|
||||
msgid "Basic Setting"
|
||||
msgstr "基本设置"
|
||||
|
||||
msgid "RUNNING"
|
||||
msgstr "运行中"
|
||||
|
||||
msgid "NOT RUNNING"
|
||||
msgstr "未运行"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "收集数据..."
|
||||
|
||||
msgid "Open Web Interface"
|
||||
msgstr "打开 Web 界面"
|
||||
|
||||
msgid "The kernel does not support eBPF"
|
||||
msgstr "内核不支持 eBPF"
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr "仪表板"
|
||||
|
||||
msgid "DAED Next is not running"
|
||||
msgstr "DAED Next 未运行"
|
||||
|
||||
msgid "Please start the DAED Next service first and try again"
|
||||
msgstr "请先启动 DAED Next 服务后重试"
|
||||
|
||||
msgid "dae-wing or dashboard is not running"
|
||||
msgstr "DAE-WING 或 仪表板 未运行"
|
||||
|
||||
msgid "Please start the dae-wing service and the dashboard service first and try again"
|
||||
msgstr "请先启动 DAE-WING 和 仪表板 服务后重试"
|
||||
|
||||
msgid "Enable Auto Subscribe Update"
|
||||
msgstr "启用订阅自动更新"
|
||||
|
||||
msgid "Update Cycle"
|
||||
msgstr "更新周期"
|
||||
|
||||
msgid "Update Time (Every Day)"
|
||||
msgstr "更新时间(每天)"
|
||||
|
||||
msgid "Username"
|
||||
msgstr "用户名"
|
||||
|
||||
msgid "Password"
|
||||
msgstr "密码"
|
||||
|
||||
msgid "Dashboard Toggle"
|
||||
msgstr "仪表板开关"
|
||||
|
||||
msgid "Toggle"
|
||||
msgstr "开/关"
|
||||
|
||||
msgid "Dashboard is a frontend management panel, meant for configuration use only."
|
||||
msgstr "仪表板是一个前端管理面板,仅应在配置过程中启用。(登录后若浏览器未自动跳转,请手动刷新页面)"
|
||||
@ -1,36 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
USERNAME=$(uci -q get daed-next.config.daed_username)
|
||||
PASSWORD=$(uci -q get daed-next.config.daed_password)
|
||||
PORT=2023
|
||||
GRAPHQL_URL="http://127.0.0.1:"$PORT"/graphql"
|
||||
CRON_FILE="/etc/crontabs/root"
|
||||
RANDOM_SEED=$RANDOM
|
||||
RANDOM_NUM=$((RANDOM_SEED % 10 + 1))
|
||||
|
||||
login() {
|
||||
LOGIN=$(curl -s -X POST -H "Content-Type: application/json" -d '{"query":"query Token($username: String!, $password: String!) {\n token(username: $username, password: $password)\n}","variables":{"username":"'"$USERNAME"'","password":"'"$PASSWORD"'"}}' $GRAPHQL_URL)
|
||||
JSON=${LOGIN#\"}
|
||||
JSON=${LOGIN%\"}
|
||||
TOKEN=$(echo $JSON | sed -n 's/.*"token":"\([^"]*\)".*/\1/p')
|
||||
}
|
||||
|
||||
update_subscription() {
|
||||
SUBSCRIPTION_ID_LIST=$(curl -s -X POST -H "Authorization: $TOKEN" -d '{"query": "query Subscriptions {\n subscriptions {\nid\ntag\nstatus\nlink\ninfo\nupdatedAt\nnodes {\nedges {\nid\nname\nprotocol\nlink\n}\n}\n}\n}", "operationName": "Subscriptions"}' $GRAPHQL_URL | grep -o '"id":"[^"]*","tag"' | grep -o 'id":"[^"]*' | grep -o '[^"]*$')
|
||||
echo "$SUBSCRIPTION_ID_LIST" | while read -r id; do
|
||||
curl -X POST -H "Authorization: $TOKEN" -d '{"query":"mutation UpdateSubscription($id: ID!) {\n updateSubscription(id: $id) {\n id\n }\n}","variables":{"id":"'"$id"'"},"operationName":"UpdateSubscription"}' $GRAPHQL_URL
|
||||
done
|
||||
}
|
||||
|
||||
reload() {
|
||||
curl -X POST -H "Authorization: $TOKEN" -d '{"query":"mutation Run($dry: Boolean!) {\n run(dry: $dry)\n}","variables":{"dry":false},"operationName":"Run"}' $GRAPHQL_URL
|
||||
}
|
||||
|
||||
resetcron() {
|
||||
touch $CRON_FILE
|
||||
sed -i '/daed-next_sub.sh/d' $CRON_FILE 2>/dev/null
|
||||
[ "$(uci -q get daed-next.config.subscribe_auto_update)" -eq 1 ] && echo "${RANDOM_NUM} $(uci -q get daed-next.config.subscribe_update_day_time) * * $(uci -q get daed-next.config.subscribe_update_week_time) /etc/daed-next/daed-next_sub.sh >/dev/null 2>&1" >>$CRON_FILE
|
||||
crontab $CRON_FILE
|
||||
}
|
||||
|
||||
login && update_subscription && reload && resetcron
|
||||
@ -1,37 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
NODE_BIN=/usr/bin/node
|
||||
WEB_SQUASHFS=/usr/share/daed-next/daed-web.squashfs
|
||||
PID_FILE=/tmp/log/daed-next/dashboard.pid
|
||||
DAED_NEXT_DIR=/var/daed-next
|
||||
|
||||
start_server() {
|
||||
listen_port=$(uci -q get daed-next.config.listen_port)
|
||||
if [ ! -d "$DAED_NEXT_DIR" ]; then
|
||||
mkdir -p "$DAED_NEXT_DIR"
|
||||
fi
|
||||
mount -t squashfs "$WEB_SQUASHFS" "$DAED_NEXT_DIR" || { echo "Mount failed"; }
|
||||
|
||||
ARGS="PORT=$listen_port HOSTNAME=0.0.0.0"
|
||||
/bin/sh -c "$ARGS $NODE_BIN $DAED_NEXT_DIR/server.js" &
|
||||
echo $! > "$PID_FILE"
|
||||
}
|
||||
|
||||
stop_server() {
|
||||
if [ -f "$PID_FILE" ]; then
|
||||
PID=$(cat "$PID_FILE")
|
||||
kill "$PID" || { echo "Failed to kill process $PID"; }
|
||||
rm -f "$PID_FILE"
|
||||
|
||||
mount_points=$(mount | grep '/tmp/daed-next' | awk '{print $3}')
|
||||
for mp in $mount_points; do
|
||||
umount -l "$mp" || { echo "Failed to force unmount $mp"; }
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
if [ -e "$PID_FILE" ]; then
|
||||
stop_server
|
||||
else
|
||||
start_server
|
||||
fi
|
||||
@ -1,48 +0,0 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2023 Tianling Shen <cnsztl@immortalwrt.org>
|
||||
|
||||
USE_PROCD=0
|
||||
START=99
|
||||
|
||||
CONF="daed-next"
|
||||
PROG="/usr/bin/dae-wing"
|
||||
LOG="/var/log/daed-next/daed-next.log"
|
||||
CRON_FILE="/etc/crontabs/root"
|
||||
RANDOM_SEED=$RANDOM
|
||||
RANDOM_NUM=$((RANDOM_SEED % 10 + 1))
|
||||
|
||||
setcron() {
|
||||
touch $CRON_FILE
|
||||
sed -i '/daed-next_sub.sh/d' $CRON_FILE 2>/dev/null
|
||||
[ "$(uci -q get daed-next.config.subscribe_auto_update)" -eq 1 ] && echo "${RANDOM_NUM} $(uci -q get daed-next.config.subscribe_update_day_time) * * $(uci -q get daed-next.config.subscribe_update_week_time) /etc/daed-next/daed-next_sub.sh >/dev/null 2>&1" >>$CRON_FILE
|
||||
crontab $CRON_FILE
|
||||
}
|
||||
|
||||
delcron() {
|
||||
sed -i '/daed-next_sub.sh/d' $CRON_FILE 2>/dev/null
|
||||
crontab $CRON_FILE
|
||||
}
|
||||
|
||||
start_service() {
|
||||
config_load "$CONF"
|
||||
|
||||
local enabled
|
||||
config_get_bool enabled "config" "enabled" "0"
|
||||
if [ "$enabled" -eq 0 ]; then
|
||||
delcron
|
||||
return 1
|
||||
fi
|
||||
setcron
|
||||
}
|
||||
|
||||
stop_service() {
|
||||
delcron
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger "$CONF"
|
||||
}
|
||||
|
||||
reload_service() {
|
||||
restart
|
||||
}
|
||||
@ -1,5 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
rm -rf /tmp/luci-*
|
||||
|
||||
exit 0
|
||||
@ -1,11 +0,0 @@
|
||||
{
|
||||
"luci-app-daed-next": {
|
||||
"description": "Grant UCI access for luci-app-daed-next",
|
||||
"read": {
|
||||
"uci": [ "daed-next" ]
|
||||
},
|
||||
"write": {
|
||||
"uci": [ "daed-next" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
2
quectel_MHI/Makefile
Normal file → Executable file
2
quectel_MHI/Makefile
Normal file → Executable file
@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=pcie_mhi
|
||||
PKG_VERSION:=1.3.8
|
||||
PKG_RELEASE:=31
|
||||
PKG_RELEASE:=32
|
||||
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
125
vmlinux-btf/Makefile
Normal file
125
vmlinux-btf/Makefile
Normal file
@ -0,0 +1,125 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-only
|
||||
#
|
||||
# Detached kernel BTF for CO-RE eBPF (dae/daed) on firmware whose kernel was
|
||||
# built without CONFIG_DEBUG_INFO_BTF. Builds a shadow kernel from the same
|
||||
# OpenWrt source + .config with BTF enabled, then pahole-encodes a detached
|
||||
# vmlinux.btf. cilium/ebpf finds it at /usr/lib/debug/boot/vmlinux-<release>.
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=vmlinux-btf
|
||||
PKG_VERSION:=$(LINUX_VERSION)
|
||||
PKG_RELEASE:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
define Package/vmlinux-btf
|
||||
SECTION:=kernel
|
||||
CATEGORY:=Kernel
|
||||
TITLE:=Kernel vmlinux.btf for CO-RE compatibility
|
||||
endef
|
||||
|
||||
define Package/vmlinux-btf/description
|
||||
Supplies detached kernel BTF so CO-RE eBPF programs (dae/daed) load on
|
||||
kernels built without CONFIG_DEBUG_INFO_BTF. Builds a shadow kernel from the
|
||||
OpenWrt kernel source with BTF enabled and encodes a detached vmlinux.btf.
|
||||
endef
|
||||
|
||||
define Package/vmlinux-btf/postinst
|
||||
#!/bin/sh
|
||||
if [ -z "$${IPKG_INSTROOT}" ]; then
|
||||
ln -sf /usr/lib/debug/boot/vmlinux /usr/lib/debug/boot/vmlinux-$$(uname -r)
|
||||
fi
|
||||
endef
|
||||
|
||||
define Package/vmlinux-btf/prerm
|
||||
#!/bin/sh
|
||||
if [ -z "$${IPKG_INSTROOT}" ]; then
|
||||
rm -f /usr/lib/debug/boot/vmlinux-$$(uname -r)
|
||||
fi
|
||||
endef
|
||||
|
||||
PAHOLE_JOBS := $(if $(filter -j%,$(PKG_JOBS)),$(patsubst -j%,%,$(filter -j%,$(PKG_JOBS))),1)
|
||||
|
||||
# The SDK ships an extracted kernel but no dl/ tarball, so fetch vanilla source.
|
||||
KERNEL_MAJOR:=$(firstword $(subst ., ,$(LINUX_VERSION)))
|
||||
LINUX_TARBALL_URL:=https://cdn.kernel.org/pub/linux/kernel/v$(KERNEL_MAJOR).x/$(LINUX_SOURCE)
|
||||
|
||||
define Build/Prepare
|
||||
mkdir -p $(PKG_BUILD_DIR) $(DL_DIR)
|
||||
[ -f "$(DL_DIR)/$(LINUX_SOURCE)" ] || \
|
||||
wget -nv -O "$(DL_DIR)/$(LINUX_SOURCE)" "$(LINUX_TARBALL_URL)"
|
||||
$(TAR) -C $(PKG_BUILD_DIR) -xf $(DL_DIR)/$(LINUX_SOURCE)
|
||||
mv $(PKG_BUILD_DIR)/linux-$(LINUX_VERSION) $(PKG_BUILD_DIR)/shadow-kernel
|
||||
cp $(LINUX_DIR)/.config $(PKG_BUILD_DIR)/shadow-kernel/.config
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
$(PKG_BUILD_DIR)/shadow-kernel/scripts/config \
|
||||
--file $(PKG_BUILD_DIR)/shadow-kernel/.config \
|
||||
--disable WERROR \
|
||||
--enable CGROUPS \
|
||||
--enable CGROUP_BPF \
|
||||
--enable SOCK_CGROUP_DATA \
|
||||
--enable KALLSYMS \
|
||||
--enable PERF_EVENTS \
|
||||
--enable TRACEPOINTS \
|
||||
--enable KPROBES \
|
||||
--enable UPROBES \
|
||||
--enable BPF \
|
||||
--enable BPF_SYSCALL \
|
||||
--enable BPF_JIT \
|
||||
--enable BPF_JIT_DEFAULT_ON \
|
||||
--enable INET \
|
||||
--enable NET_INGRESS \
|
||||
--enable NET_EGRESS \
|
||||
--enable BPF_STREAM_PARSER \
|
||||
--enable XDP_SOCKETS \
|
||||
--enable NET_SCHED \
|
||||
--enable NET_SCH_INGRESS \
|
||||
--enable NET_CLS \
|
||||
--enable NET_CLS_ACT \
|
||||
--enable KPROBE_EVENTS \
|
||||
--enable UPROBE_EVENTS \
|
||||
--enable BPF_EVENTS \
|
||||
--enable DEBUG_KERNEL \
|
||||
--enable DEBUG_INFO \
|
||||
--disable DEBUG_INFO_NONE \
|
||||
--enable DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT \
|
||||
--disable DEBUG_INFO_REDUCED \
|
||||
--disable DEBUG_INFO_SPLIT \
|
||||
--enable DEBUG_INFO_BTF \
|
||||
--set-str EXTRA_FIRMWARE "" \
|
||||
--set-str INITRAMFS_SOURCE ""
|
||||
|
||||
$(MAKE) -C $(PKG_BUILD_DIR)/shadow-kernel \
|
||||
$(KERNEL_MAKE_FLAGS) \
|
||||
KBUILD_HOSTLDFLAGS="$(KBUILD_HOSTLDFLAGS) -lz" \
|
||||
olddefconfig
|
||||
|
||||
$(MAKE) -C $(PKG_BUILD_DIR)/shadow-kernel \
|
||||
$(KERNEL_MAKE_FLAGS) \
|
||||
$(PKG_JOBS) \
|
||||
KBUILD_HOSTLDFLAGS="-L$(STAGING_DIR_HOST)/lib -lz" \
|
||||
vmlinux
|
||||
|
||||
pahole \
|
||||
--jobs=$(PAHOLE_JOBS) \
|
||||
--btf_encode_detached=$(PKG_BUILD_DIR)/vmlinux-btf \
|
||||
$(PKG_BUILD_DIR)/shadow-kernel/vmlinux
|
||||
endef
|
||||
|
||||
define Build/Clean
|
||||
rm -rf $(PKG_BUILD_DIR)
|
||||
endef
|
||||
|
||||
define Package/vmlinux-btf/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib/debug/boot
|
||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/vmlinux-btf $(1)/usr/lib/debug/boot/vmlinux
|
||||
$(LN) vmlinux $(1)/usr/lib/debug/boot/vmlinux-$(LINUX_VERSION)
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,vmlinux-btf))
|
||||
Loading…
Reference in New Issue
Block a user