mirror of
https://github.com/caiwx86/small-packages.git
synced 2026-09-10 18:34:09 +08:00
update 2026-05-27 23:25:57
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=bandix
|
||||
PKG_VERSION:=0.12.9
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_LICENSE:=Apache-2.0
|
||||
PKG_MAINTAINER:=timsaya
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
# 使用OpenWrt的Rust映射机制
|
||||
include $(TOPDIR)/feeds/packages/lang/rust/rust-values.mk
|
||||
|
||||
# 二进制文件的文件名和URL
|
||||
RUST_BANDIX_VERSION:=0.12.9
|
||||
RUST_BINARY_FILENAME:=bandix-$(RUST_BANDIX_VERSION)-$(RUSTC_TARGET_ARCH).tar.gz
|
||||
|
||||
|
||||
# 修正下载地址定义方式
|
||||
PKG_SOURCE:=$(RUST_BINARY_FILENAME)
|
||||
PKG_SOURCE_URL:=https://github.com/timsaya/bandix/releases/download/v$(RUST_BANDIX_VERSION)
|
||||
|
||||
# 修正二进制文件校验值
|
||||
ifeq ($(ARCH),aarch64)
|
||||
PKG_HASH:=17803eeb6964187626e6af2e2b0a3b081d87a8017ff2b6505ba313b0c7b8ba7f
|
||||
else ifeq ($(ARCH),arm) # update.sh skip this tag, do not delete this comment
|
||||
# Ref https://github.com/openwrt/packages/blob/master/lang/rust/rust-values.mk
|
||||
|
||||
ARM_CPU_TYPE:=arm-armel
|
||||
ifeq ($(CONFIG_arm_v6)$(CONFIG_arm_v7),)
|
||||
ARM_CPU_TYPE:=$(subst arm-,armv5te-,$(ARM_CPU_TYPE))
|
||||
else ifeq ($(CONFIG_arm_v7),y)
|
||||
ARM_CPU_TYPE:=$(subst arm-,armv7-,$(ARM_CPU_TYPE))
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_HAS_FPU),y)
|
||||
ARM_CPU_TYPE:=$(subst -armel,-armhf,$(ARM_CPU_TYPE))
|
||||
endif
|
||||
|
||||
ifeq ($(ARM_CPU_TYPE),arm-armel)
|
||||
PKG_HASH:=cbf9cf705218211e0a5cd1427049632aa40086831feee2994e9d4b7b2cf46ab4
|
||||
else ifeq ($(ARM_CPU_TYPE),arm-armhf)
|
||||
PKG_HASH:=2901c5f98e77fce574bcaef1aa8c20acd58ca341f3f3bd5f3bc80d745946f632
|
||||
else ifeq ($(ARM_CPU_TYPE),armv5te-armel)
|
||||
PKG_HASH:=390840c939cec718570cd8cbf50ed130fd02d7f75b80d74af251bd1ecd0f43a8
|
||||
else ifeq ($(ARM_CPU_TYPE),armv7-armel)
|
||||
PKG_HASH:=965f9e88398f42cf5535612b58629b89c058db46afaf3c814929a7cfc9fa4e3b
|
||||
else ifeq ($(ARM_CPU_TYPE),armv7-armhf)
|
||||
PKG_HASH:=f47df37959f73b2188f89faf8c9a3217966ca4c1389f695886f263d28911e8fb
|
||||
else
|
||||
PKG_HASH:=dummy
|
||||
endif
|
||||
else ifeq ($(ARCH),mips)
|
||||
PKG_HASH:=318587b09b37d1ab8af96466e5191ce32c4dbc92294f5c55826ebe1a88c7bcab
|
||||
else ifeq ($(ARCH),mipsel)
|
||||
PKG_HASH:=fd1b12b7cd2034aa8afa89901d0d38784528f10921b6c0f806dac9dcbf523085
|
||||
else ifeq ($(ARCH),powerpc64)
|
||||
PKG_HASH:=24dab3f89f8930cb925ec1a20d73111e09bae7e6a87954b56a681395660f6ed4
|
||||
else ifeq ($(ARCH),riscv64)
|
||||
PKG_HASH:=916bf42c60c49df5c3ee6f4a60ce542d2b080788445b9bf47f3322eb9a5b66cf
|
||||
else ifeq ($(ARCH),x86_64)
|
||||
PKG_HASH:=4909cf2e80861d082c4d4870950259d8c6f14e606f9dfa16c92514f178f3ae40
|
||||
else
|
||||
PKG_HASH:=dummy
|
||||
endif
|
||||
|
||||
define Package/$(PKG_NAME)
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=Bandix - Network traffic monitoring tool
|
||||
DEPENDS:=+zoneinfo-all +conntrack +iw
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/description
|
||||
Bandix core service for network traffic monitoring
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
mkdir -p $(PKG_BUILD_DIR)/bin
|
||||
gzip -dc "$(DL_DIR)/$(PKG_SOURCE)" | tar -C $(PKG_BUILD_DIR)/bin --strip-components=1 -xf -
|
||||
$(Build/Patch)
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
# nothing to do
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/bandix $(1)/usr/bin/
|
||||
|
||||
# 添加启动脚本和配置文件
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_BIN) ./files/bandix.init $(1)/etc/init.d/bandix
|
||||
|
||||
# 安装配置文件
|
||||
$(INSTALL_DIR) $(1)/usr/share/bandix
|
||||
$(INSTALL_CONF) ./files/bandix.config $(1)/etc/config/bandix
|
||||
|
||||
# 配置 sysupgrade 保留列表
|
||||
$(INSTALL_DIR) $(1)/lib/upgrade/keep.d
|
||||
$(INSTALL_DATA) ./files/bandix.keep $(1)/lib/upgrade/keep.d/bandix
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/conffiles
|
||||
/etc/config/bandix
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,bandix))
|
||||
@@ -0,0 +1,41 @@
|
||||
|
||||
config bandix 'general'
|
||||
option iface 'br-lan'
|
||||
option port '8686'
|
||||
option data_dir '/usr/share/bandix'
|
||||
|
||||
option language 'auto'
|
||||
option theme 'auto'
|
||||
|
||||
option log_level 'info'
|
||||
option tc_order 'default'
|
||||
option tc_backend 'auto'
|
||||
option netlink_priority ''
|
||||
option tcx_anchor_ingress_id ''
|
||||
option tcx_anchor_egress_id ''
|
||||
|
||||
|
||||
config bandix 'traffic'
|
||||
option enabled '0'
|
||||
option speed_unit 'bytes'
|
||||
option offline_timeout '120'
|
||||
option traffic_realtime_window '600'
|
||||
option traffic_flush_interval '600'
|
||||
option traffic_enable_storage '0'
|
||||
option traffic_export_url ''
|
||||
option traffic_event_url ''
|
||||
option traffic_additional_subnets ''
|
||||
option traffic_exclude_iface_device '0'
|
||||
option traffic_neighbor_flush_enable '0'
|
||||
option traffic_neighbor_flush_interval '600'
|
||||
|
||||
|
||||
config bandix 'connections'
|
||||
option enabled '0'
|
||||
|
||||
|
||||
config bandix 'dns'
|
||||
option enabled '0'
|
||||
option dns_max_records '10000'
|
||||
option dns_enable_storage '0'
|
||||
option dns_flush_interval '900'
|
||||
@@ -0,0 +1,160 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=99
|
||||
USE_PROCD=1
|
||||
PROG=/usr/bin/bandix
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger "bandix"
|
||||
}
|
||||
|
||||
reload_service() {
|
||||
restart
|
||||
}
|
||||
|
||||
start_service() {
|
||||
local iface
|
||||
local port
|
||||
local data_dir
|
||||
local log_level
|
||||
local tc_order
|
||||
local tc_backend
|
||||
local tc_priority
|
||||
local netlink_priority
|
||||
local tcx_anchor_ingress_id
|
||||
local tcx_anchor_egress_id
|
||||
local traffic_enabled
|
||||
local traffic_realtime_window
|
||||
local traffic_flush_interval
|
||||
local traffic_enable_storage
|
||||
local traffic_export_url
|
||||
local traffic_event_url
|
||||
local traffic_additional_subnets
|
||||
local traffic_exclude_iface_device
|
||||
local traffic_neighbor_flush_enable
|
||||
local traffic_neighbor_flush_interval
|
||||
local connections_enabled
|
||||
local dns_enabled
|
||||
local dns_max_records
|
||||
local dns_enable_storage
|
||||
local dns_flush_interval
|
||||
|
||||
config_load 'bandix'
|
||||
config_get iface 'general' 'iface'
|
||||
config_get port 'general' 'port'
|
||||
config_get data_dir 'general' 'data_dir'
|
||||
config_get log_level 'general' 'log_level'
|
||||
config_get tc_order 'general' 'tc_order'
|
||||
config_get tc_backend 'general' 'tc_backend'
|
||||
config_get tc_priority 'general' 'tc_priority'
|
||||
config_get netlink_priority 'general' 'netlink_priority'
|
||||
config_get tcx_anchor_ingress_id 'general' 'tcx_anchor_ingress_id'
|
||||
config_get tcx_anchor_egress_id 'general' 'tcx_anchor_egress_id'
|
||||
config_get_bool traffic_enabled 'traffic' 'enabled'
|
||||
config_get traffic_realtime_window 'traffic' 'traffic_realtime_window'
|
||||
config_get traffic_flush_interval 'traffic' 'traffic_flush_interval'
|
||||
config_get_bool traffic_enable_storage 'traffic' 'traffic_enable_storage'
|
||||
config_get traffic_export_url 'traffic' 'traffic_export_url'
|
||||
config_get traffic_event_url 'traffic' 'traffic_event_url'
|
||||
config_get traffic_additional_subnets 'traffic' 'traffic_additional_subnets'
|
||||
config_get_bool traffic_exclude_iface_device 'traffic' 'traffic_exclude_iface_device' '0'
|
||||
config_get_bool traffic_neighbor_flush_enable 'traffic' 'traffic_neighbor_flush_enable' '0'
|
||||
config_get traffic_neighbor_flush_interval 'traffic' 'traffic_neighbor_flush_interval' '600'
|
||||
config_get_bool connections_enabled 'connections' 'enabled'
|
||||
config_get_bool dns_enabled 'dns' 'enabled'
|
||||
config_get dns_max_records 'dns' 'dns_max_records'
|
||||
config_get_bool dns_enable_storage 'dns' 'dns_enable_storage'
|
||||
config_get dns_flush_interval 'dns' 'dns_flush_interval'
|
||||
|
||||
|
||||
[ "$connections_enabled" != 1 ] && [ "$traffic_enabled" != 1 ] && [ "$dns_enabled" != 1 ] && return 1
|
||||
|
||||
# 构建基础命令行参数
|
||||
local args="--iface $iface --port $port --data-dir $data_dir"
|
||||
if [ -n "$log_level" ]; then
|
||||
args="$args --log-level $log_level"
|
||||
fi
|
||||
if [ -z "$tc_order" ]; then
|
||||
case "$tc_priority" in
|
||||
1) tc_order="first" ;;
|
||||
65535) tc_order="last" ;;
|
||||
*) tc_order="default" ;;
|
||||
esac
|
||||
fi
|
||||
[ -z "$tc_order" ] && tc_order="default"
|
||||
if [ -n "$tc_order" ]; then
|
||||
args="$args --tc-order $tc_order"
|
||||
fi
|
||||
[ -z "$tc_backend" ] && tc_backend="auto"
|
||||
if [ -n "$tc_backend" ]; then
|
||||
args="$args --tc-backend $tc_backend"
|
||||
fi
|
||||
if [ -n "$netlink_priority" ]; then
|
||||
args="$args --netlink-priority $netlink_priority"
|
||||
fi
|
||||
if [ -n "$tcx_anchor_ingress_id" ]; then
|
||||
args="$args --tcx-anchor-ingress-id $tcx_anchor_ingress_id"
|
||||
fi
|
||||
if [ -n "$tcx_anchor_egress_id" ]; then
|
||||
args="$args --tcx-anchor-egress-id $tcx_anchor_egress_id"
|
||||
fi
|
||||
|
||||
# 添加流量监控相关参数
|
||||
if [ "$traffic_enabled" -eq 1 ]; then
|
||||
args="$args --enable-traffic"
|
||||
fi
|
||||
if [ -n "$traffic_realtime_window" ]; then
|
||||
args="$args --traffic-realtime-window $traffic_realtime_window"
|
||||
fi
|
||||
if [ -n "$traffic_flush_interval" ]; then
|
||||
args="$args --traffic-flush-interval $traffic_flush_interval"
|
||||
fi
|
||||
if [ "$traffic_enable_storage" -eq 1 ]; then
|
||||
args="$args --traffic-enable-storage"
|
||||
fi
|
||||
if [ -n "$traffic_export_url" ]; then
|
||||
args="$args --traffic-export-url $traffic_export_url"
|
||||
fi
|
||||
if [ -n "$traffic_event_url" ]; then
|
||||
args="$args --traffic-event-url $traffic_event_url"
|
||||
fi
|
||||
if [ -n "$traffic_additional_subnets" ]; then
|
||||
args="$args --traffic-additional-subnets $traffic_additional_subnets"
|
||||
fi
|
||||
if [ "$traffic_exclude_iface_device" -eq 1 ]; then
|
||||
args="$args --traffic-exclude-iface-device"
|
||||
fi
|
||||
if [ "$traffic_neighbor_flush_enable" -eq 1 ]; then
|
||||
args="$args --traffic-neighbor-flush-enable"
|
||||
fi
|
||||
if [ -n "$traffic_neighbor_flush_interval" ]; then
|
||||
args="$args --traffic-neighbor-flush-interval $traffic_neighbor_flush_interval"
|
||||
fi
|
||||
|
||||
# 添加连接统计监控参数
|
||||
if [ "$connections_enabled" -eq 1 ]; then
|
||||
args="$args --enable-connection"
|
||||
fi
|
||||
|
||||
# 添加 DNS 监控参数
|
||||
if [ "$dns_enabled" -eq 1 ]; then
|
||||
args="$args --enable-dns"
|
||||
fi
|
||||
if [ -n "$dns_max_records" ]; then
|
||||
args="$args --dns-max-records $dns_max_records"
|
||||
fi
|
||||
if [ "$dns_enable_storage" -eq 1 ]; then
|
||||
args="$args --dns-enable-storage"
|
||||
fi
|
||||
if [ -n "$dns_flush_interval" ]; then
|
||||
args="$args --dns-flush-interval $dns_flush_interval"
|
||||
fi
|
||||
|
||||
procd_open_instance bandix
|
||||
procd_set_param command $PROG $args
|
||||
procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-60} ${respawn_retry:-3}
|
||||
procd_set_param stderr 1
|
||||
procd_set_param stdout 1
|
||||
procd_set_param pidfile /var/run/bandix.pid
|
||||
procd_close_instance
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
/usr/share/bandix
|
||||
Executable
+48
@@ -0,0 +1,48 @@
|
||||
#!/bin/bash
|
||||
# dependent: curl jq
|
||||
#
|
||||
|
||||
export CURDIR="$(cd "$(dirname "$0")"; pwd)"
|
||||
|
||||
# func <user> <repo>
|
||||
github_getLatest() {
|
||||
curl -sSL "https://api.github.com/repos/$1/$2/releases/latest"
|
||||
}
|
||||
|
||||
LATEST_INFO="$(github_getLatest timsaya bandix)"
|
||||
|
||||
# version check
|
||||
LATEST_VERSION="$(jq '.tag_name' -r <<< "$LATEST_INFO" | sed 's|^v||')"
|
||||
[ -n "$LATEST_VERSION" ] || exit 1
|
||||
RUST_BANDIX_VERSION="$(sed -n 's|RUST_BANDIX_VERSION:=||p' "$CURDIR/Makefile")"
|
||||
[ "$RUST_BANDIX_VERSION" != "$LATEST_VERSION" ] || exit 0
|
||||
|
||||
# update PKG_HASH
|
||||
# 从 Makefile 中提取 $ARCH 并将它们按字符多寡降序排列, 用于进行模糊匹配
|
||||
ARCHS="$(sed -En '/ifeq \(\$\((ARCH|ARM_CPU_TYPE)\),.+\)$/{s|.+,([^\)]+).*|\1|;p}' "$CURDIR/Makefile" | sort -r)"
|
||||
for (( i=0; i<$(jq -r '.assets | length' <<< "$LATEST_INFO"); i++ )); do
|
||||
name=$(jq -r '.assets['$i'].name | select(contains("bandix"))' <<< "$LATEST_INFO")
|
||||
[ -n "$name" ] || continue
|
||||
browser_download_url=$(jq -r '.assets['$i'].browser_download_url' <<< "$LATEST_INFO")
|
||||
digest_type=$(jq -r '.assets['$i'].digest' <<< "$LATEST_INFO" | cut -f1 -d':')
|
||||
digest=$(jq -r '.assets['$i'].digest' <<< "$LATEST_INFO" | cut -f2 -d':')
|
||||
|
||||
# 精简的 Github Assets name
|
||||
arch="$(awk -F'-' '{ printf "%s-%s", $1, $NF }' <<< "$(sed "s|bandix-$LATEST_VERSION-||;s|\.tar\..*||" <<< "$name")")"
|
||||
for ARCH in $ARCHS; do
|
||||
# 使用从 Makefile 中提取的 $ARCH 对精简的 Github Assets name 进行模糊匹配
|
||||
! grep -Eq "$(sed 's|-armel|-.*abi$|;s|-armhf|-.*abihf$|' <<< "$ARCH")" <<< "$arch" || break
|
||||
unset ARCH
|
||||
done
|
||||
line="$(sed -En "/ifeq \(\\$\((ARCH|ARM_CPU_TYPE)\),$ARCH\)$/=" "$CURDIR/Makefile")"
|
||||
[ -n "$line" ] || continue
|
||||
|
||||
if [[ "$digest_type" != "sha256" ]]; then
|
||||
digest="$(curl -fsSL "$browser_download_url" | sha256sum | awk '{print $1}')"
|
||||
fi
|
||||
sed -i "$((line + 1))s|\(PKG_HASH:=\).*|\1$digest|" "$CURDIR/Makefile"
|
||||
done
|
||||
|
||||
# update version
|
||||
sed -i "s|\(PKG_VERSION:=\).*|\1$LATEST_VERSION|" "$CURDIR/Makefile"
|
||||
sed -i "s|\(RUST_BANDIX_VERSION:=\).*|\1$LATEST_VERSION|" "$CURDIR/Makefile"
|
||||
Reference in New Issue
Block a user