mirror of
https://github.com/caiwx86/small-packages.git
synced 2026-10-26 19:02:52 +08:00
update 2026-07-27 22:20:34
This commit is contained in:
1 parent
079ea4f182
commit
20b786ab77
6243 files changed
-2850540
No files matched your search
@@ -1,20 +0,0 @@
|
||||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-msd_lite
|
||||
|
||||
LUCI_TITLE:=LuCI app for msd_lite
|
||||
LUCI_PKGARCH:=all
|
||||
LUCI_DEPENDS:=+msd_lite
|
||||
LUCI_DESCRIPTION:=LuCI support for msd_lite
|
||||
|
||||
define Package/luci-app-msd_lite/conffiles
|
||||
/etc/config/msd_lite
|
||||
endef
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
@@ -1,131 +0,0 @@
|
||||
'use strict';
|
||||
'require view';
|
||||
'require fs';
|
||||
'require form';
|
||||
'require poll';
|
||||
'require uci';
|
||||
'require rpc';
|
||||
'require tools.widgets as widgets';
|
||||
|
||||
const callServiceList = rpc.declare({
|
||||
object: 'service',
|
||||
method: 'list',
|
||||
params: ['name'],
|
||||
expect: { '': {} }
|
||||
});
|
||||
|
||||
function getServiceStatus() {
|
||||
return L.resolveDefault(callServiceList('msd_lite'), {}).then((res) => {
|
||||
var isRunning = false;
|
||||
try {
|
||||
isRunning = res['msd_lite']?.['instances']?.['msd_lite-c']?.['running'] || false;
|
||||
} catch (e) {
|
||||
console.error('Error checking service status:', e);
|
||||
}
|
||||
return isRunning;
|
||||
});
|
||||
}
|
||||
|
||||
function renderStatus(isRunning) {
|
||||
var spanTemp = '<em><span style="color:%s"><strong>%s %s</strong></span></em>';
|
||||
var renderHTML;
|
||||
if (isRunning)
|
||||
renderHTML = spanTemp.format('green', _('msd_lite'), _('Running'));
|
||||
else
|
||||
renderHTML = spanTemp.format('red', _('msd_lite'), _('Not Running'));
|
||||
|
||||
return renderHTML;
|
||||
}
|
||||
|
||||
return view.extend({
|
||||
load: function () {
|
||||
return Promise.all([
|
||||
uci.load('msd_lite')
|
||||
]);
|
||||
},
|
||||
|
||||
render: function () {
|
||||
var m, s, o;
|
||||
|
||||
m = new form.Map('msd_lite', _('Multi Stream daemon Lite'),
|
||||
_('The lightweight version of Multi Stream daemon (msd) for organizing IPTV streaming over HTTP.'));
|
||||
|
||||
// Status section
|
||||
s = m.section(form.TypedSection, null, _('Service Status'));
|
||||
s.anonymous = true;
|
||||
s.render = function () {
|
||||
poll.add(function () {
|
||||
return L.resolveDefault(getServiceStatus()).then((res) => {
|
||||
var view = document.getElementById('service_status');
|
||||
if (view) {
|
||||
view.innerHTML = renderStatus(res);
|
||||
}
|
||||
});
|
||||
}, 5);
|
||||
|
||||
return E('div', { class: 'cbi-section', id: 'status_bar' }, [
|
||||
E('p', { id: 'service_status' }, _('Collecting data...'))
|
||||
]);
|
||||
}
|
||||
|
||||
s = m.section(form.NamedSection, 'default', 'msd_lite');
|
||||
s.tab('settings', _('Basic Settings'));
|
||||
|
||||
o = s.taboption('settings', form.Flag, 'enabled', _('Enable'), _('Enable Msd_lite service'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('settings', form.DynamicList, 'address', _('Bind address'));
|
||||
o.datatype = 'ipaddrport';
|
||||
o.rmempty = false;
|
||||
o.placeholder = '0.0.0.0:8080';
|
||||
|
||||
o = s.taboption('settings', widgets.NetworkSelect, 'network', _('Source interface'),
|
||||
_('Used for receiving multicast.'));
|
||||
o.nocreate = true;
|
||||
o.optional = true;
|
||||
|
||||
o = s.taboption('settings', form.Value, 'threads', _('Worker threads'),
|
||||
_('Set 0 or leave empty to auto detect.'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = '0';
|
||||
|
||||
o = s.taboption('settings', form.Flag, 'bind_to_cpu', _('Bind threads to CPUs'));
|
||||
o.default = o.disabled;
|
||||
|
||||
o = s.taboption('settings', form.Flag, 'drop_slow_clients', _('Disconnect slow clients'));
|
||||
o.default = o.disabled;
|
||||
|
||||
o = s.taboption('settings', form.Value, 'precache_size', _('Pre cache size'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = '4096';
|
||||
|
||||
o = s.taboption('settings', form.Value, 'ring_buffer_size', _('Ring buffer size'),
|
||||
_('Stream receive ring buffer size.'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = '1024';
|
||||
|
||||
o = s.taboption('settings', form.Value, 'multicast_recv_buffer_size', _('Receive buffer size'),
|
||||
_('Multicast socket receive buffer size.'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = '512';
|
||||
|
||||
o = s.taboption('settings', form.Value, 'multicast_recv_timeout', _('Receive timeout'),
|
||||
_('Multicast receive timeout (seconds).'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = '2';
|
||||
|
||||
o = s.taboption('settings', form.Value, 'rejoin_time', _('IGMP/MLD rejoin time'),
|
||||
_('IGMP/MLD leave+join interval in seconds. 0 disables.'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = '0';
|
||||
|
||||
o = s.taboption('settings', form.ListValue, 'loglevel', _('Log Level'),
|
||||
_('Syslog severity level: 0=emerg, 7=debug'));
|
||||
for (let i = 0; i <= 7; i++) {
|
||||
o.value(i.toString(), i.toString());
|
||||
}
|
||||
o.default = '0';
|
||||
|
||||
return m.render();
|
||||
}
|
||||
});
|
||||
@@ -1,89 +0,0 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Language: zh_Hans\n"
|
||||
|
||||
#: luci-app-msd-lite
|
||||
msgid "Multi Stream daemon Lite"
|
||||
msgstr "多流守护进程精简版"
|
||||
|
||||
msgid "The lightweight version of Multi Stream daemon (msd) for organizing IPTV streaming over HTTP."
|
||||
msgstr "精简版 Multi Stream daemon (msd),用于通过 HTTP 组织 IPTV 流媒体传输。"
|
||||
|
||||
msgid "Service Status"
|
||||
msgstr "服务状态"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "正在收集数据..."
|
||||
|
||||
msgid "msd_lite"
|
||||
msgstr "msd_lite"
|
||||
|
||||
msgid "Running"
|
||||
msgstr "运行中"
|
||||
|
||||
msgid "Not Running"
|
||||
msgstr "未运行"
|
||||
|
||||
msgid "Basic Settings"
|
||||
msgstr "基本设置"
|
||||
|
||||
msgid "Enable"
|
||||
msgstr "启用"
|
||||
|
||||
msgid "Enable Msd_lite service"
|
||||
msgstr "启用 Msd_lite 服务"
|
||||
|
||||
msgid "Bind address"
|
||||
msgstr "绑定地址"
|
||||
|
||||
msgid "Source interface"
|
||||
msgstr "源接口"
|
||||
|
||||
msgid "Used for receiving multicast."
|
||||
msgstr "用于接收组播。"
|
||||
|
||||
msgid "Worker threads"
|
||||
msgstr "工作线程数"
|
||||
|
||||
msgid "Set 0 or leave empty to auto detect."
|
||||
msgstr "设为 0 或留空以自动检测。"
|
||||
|
||||
msgid "Bind threads to CPUs"
|
||||
msgstr "线程绑定 CPU"
|
||||
|
||||
msgid "Disconnect slow clients"
|
||||
msgstr "断开慢速客户端"
|
||||
|
||||
msgid "Pre cache size"
|
||||
msgstr "预缓存大小"
|
||||
|
||||
msgid "Ring buffer size"
|
||||
msgstr "环形缓冲区大小"
|
||||
|
||||
msgid "Stream receive ring buffer size."
|
||||
msgstr "流接收环形缓冲区大小。"
|
||||
|
||||
msgid "Receive buffer size"
|
||||
msgstr "接收缓冲区大小"
|
||||
|
||||
msgid "Multicast socket receive buffer size."
|
||||
msgstr "组播套接字接收缓冲区大小。"
|
||||
|
||||
msgid "Receive timeout"
|
||||
msgstr "接收超时"
|
||||
|
||||
msgid "Multicast receive timeout (seconds)."
|
||||
msgstr "组播接收超时时间(秒)。"
|
||||
|
||||
msgid "IGMP/MLD rejoin time"
|
||||
msgstr "IGMP/MLD 重入时间"
|
||||
|
||||
msgid "IGMP/MLD leave+join interval in seconds. 0 disables."
|
||||
msgstr "IGMP/MLD 离开+加入间隔时间(秒)。0 表示禁用。"
|
||||
|
||||
msgid "Log Level"
|
||||
msgstr "日志级别"
|
||||
|
||||
msgid "Syslog severity level: 0=emerg, 7=debug"
|
||||
msgstr "系统日志严重级别:0=紧急,7=调试"
|
||||
@@ -1,30 +0,0 @@
|
||||
config msd_lite 'default'
|
||||
option 'enabled' '0'
|
||||
|
||||
# Bind address
|
||||
list 'address' '0.0.0.0:7088'
|
||||
list 'address' '[::]:7088'
|
||||
# For multicast receive
|
||||
option 'network' ''
|
||||
|
||||
# syslog Severity level: 0=emerg - 7=debug
|
||||
option loglevel '0'
|
||||
|
||||
# 0 = auto detect
|
||||
option 'threads' '0'
|
||||
# Bind threads to CPUs
|
||||
option 'bind_to_cpu' '0'
|
||||
|
||||
# Disconnect slow clients
|
||||
option 'drop_slow_clients' '0'
|
||||
# Pre cache size
|
||||
option 'precache_size' '4096'
|
||||
# Stream receive ring buffer size
|
||||
option 'ring_buffer_size' '1024'
|
||||
# Multicast receive socket buffer size
|
||||
option 'multicast_recv_buffer_size' '512'
|
||||
# Multicast receive timeout
|
||||
option 'multicast_recv_timeout' '2'
|
||||
# Do IGMP/MLD leave+join every X seconds
|
||||
option 'rejoin_time' '0'
|
||||
|
||||
@@ -1,131 +0,0 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
. /lib/functions/network.sh # 导入网络相关函数库
|
||||
|
||||
START=99 # 启动优先级
|
||||
USE_PROCD=1 # 使用 procd 管理进程
|
||||
|
||||
NAME="msd_lite" # 服务名称
|
||||
PROG="/usr/bin/$NAME" # 可执行程序路径
|
||||
CONF="/etc/$NAME/$NAME.conf.sample" # 模板配置文件路径
|
||||
CONFDIR="/var/run/$NAME" # 运行时生成配置文件目录
|
||||
CONFIG_SECTION="default" # 使用固定配置节名称
|
||||
|
||||
# 添加网络触发器
|
||||
add_interface_triggers() {
|
||||
local enabled network
|
||||
# 读取配置节中的 enabled
|
||||
config_get_bool enabled "$CONFIG_SECTION" "enabled" "0"
|
||||
# 读取配置节中的 network 字段
|
||||
config_get network "$CONFIG_SECTION" "network"
|
||||
# 如果 enabled = 1 且 network 非空,则为该 network 添加接口变更触发器
|
||||
[ "$enabled" -eq 0 -o -z "$network" ] || procd_add_reload_interface_trigger "$network"
|
||||
}
|
||||
|
||||
# 启动服务
|
||||
start_service() {
|
||||
local seconds="0"
|
||||
local enabled address network interface
|
||||
local bindlist addr bind_to_cpu drop_slow_clients
|
||||
local loglevel threads precache_size ring_buffer_size
|
||||
local multicast_recv_buffer_size multicast_recv_timeout rejoin_tim
|
||||
|
||||
config_load "$NAME"
|
||||
|
||||
# 检查服务是否启用
|
||||
config_get_bool enabled "$CONFIG_SECTION" "enabled" "0"
|
||||
[ "$enabled" -eq 1 ] || return 0
|
||||
|
||||
# 获取地址列表
|
||||
config_get address "$CONFIG_SECTION" "address"
|
||||
# 地址不能为空
|
||||
[ -n "$address" ] || {
|
||||
logger -p daemon.err -t "$NAME" "No bind addresses configured."
|
||||
return 1
|
||||
}
|
||||
|
||||
# 获取网络接口
|
||||
config_get network "$CONFIG_SECTION" "network"
|
||||
# 若配置了 network,则尝试最多10秒等待对应接口上线
|
||||
if [ -n "$network" ]; then
|
||||
while [ "$seconds" -le 10 ]; do
|
||||
network_flush_cache
|
||||
network_get_device interface "$network"
|
||||
[ -n "$interface" ] && break
|
||||
seconds=$((seconds + 2))
|
||||
sleep 2
|
||||
done
|
||||
[ -n "$interface" ] || logger -p daemon.warn -t "$NAME" "Interface for network '$network' not found after 10 seconds"
|
||||
fi
|
||||
|
||||
# 生成绑定地址的 XML 列表
|
||||
for addr in $address; do
|
||||
bindlist="${bindlist:+$bindlist\\n\\t\\t\\t}<bind><address>$addr</address></bind>"
|
||||
done
|
||||
|
||||
# 读取并转换布尔配置为 yes/no
|
||||
config_get_bool bind_to_cpu "$CONFIG_SECTION" "bind_to_cpu" 0
|
||||
[ "$bind_to_cpu" = "1" ] && bind_to_cpu="yes" || bind_to_cpu="no"
|
||||
|
||||
config_get_bool drop_slow_clients "$CONFIG_SECTION" "drop_slow_clients" 0
|
||||
[ "$drop_slow_clients" = "1" ] && drop_slow_clients="yes" || drop_slow_clients="no"
|
||||
|
||||
# 读取其他配置参数
|
||||
config_get loglevel "$CONFIG_SECTION" "loglevel" "0"
|
||||
config_get threads "$CONFIG_SECTION" "threads" "0"
|
||||
config_get precache_size "$CONFIG_SECTION" "precache_size" "4096"
|
||||
config_get ring_buffer_size "$CONFIG_SECTION" "ring_buffer_size" "1024"
|
||||
config_get multicast_recv_buffer_size "$CONFIG_SECTION" "multicast_recv_buffer_size" "512"
|
||||
config_get multicast_recv_timeout "$CONFIG_SECTION" "multicast_recv_timeout" "2"
|
||||
config_get rejoin_time "$CONFIG_SECTION" "rejoin_time" "0"
|
||||
|
||||
# 创建配置目录
|
||||
mkdir -p "$CONFDIR"
|
||||
# 通过模板替换生成具体的配置文件
|
||||
sed -e "s,@logLevel@,$loglevel,g" \
|
||||
-e "s,@threadsCountMax@,$threads,g" \
|
||||
-e "s,@fBindToCPU@,$bind_to_cpu,g" \
|
||||
-e "s,@bindList@,$bindlist,g" \
|
||||
-e "s,@ifName@,$interface,g" \
|
||||
-e "s,@fDropSlowClients@,$drop_slow_clients,g" \
|
||||
-e "s,@precache@,$precache_size,g" \
|
||||
-e "s,@ringBufSize@,$ring_buffer_size,g" \
|
||||
-e "s,@rcvBuf@,$multicast_recv_buffer_size,g" \
|
||||
-e "s,@rcvTimeout@,$multicast_recv_timeout,g" \
|
||||
-e "s,@rejoinTime@,$rejoin_time,g" \
|
||||
"$CONF" > "$CONFDIR/$NAME.conf"
|
||||
|
||||
# 使用 procd 启动服务
|
||||
procd_open_instance "$NAME-c"
|
||||
procd_set_param command "$PROG"
|
||||
procd_append_param command -c "$CONFDIR/$NAME.conf"
|
||||
|
||||
procd_set_param limits core="unlimited"
|
||||
procd_set_param limits nofile="1000000 1000000"
|
||||
|
||||
procd_set_param respawn
|
||||
procd_set_param stderr 1
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
# 停止服务
|
||||
stop_service() {
|
||||
# 停止服务并删除配置文件
|
||||
procd_kill "$NAME-c" >/dev/null 2>&1
|
||||
rm -f "$CONFDIR/$NAME.conf"
|
||||
}
|
||||
|
||||
restart() {
|
||||
stop_service
|
||||
start_service
|
||||
}
|
||||
|
||||
# 添加服务触发器
|
||||
service_triggers() {
|
||||
# 添加配置文件变更触发器
|
||||
procd_add_reload_trigger "$NAME" "/etc/init.d/$NAME" restart
|
||||
|
||||
# 添加网络接口触发器
|
||||
config_load "$NAME"
|
||||
add_interface_triggers
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"admin/services/msd_lite": {
|
||||
"title": "Multi Stream daemon Lite",
|
||||
"order": 91,
|
||||
"action": {
|
||||
"type": "view",
|
||||
"path": "msd_lite"
|
||||
},
|
||||
"depends": {
|
||||
"acl": [ "luci-app-msd_lite" ],
|
||||
"fs": { "/etc/config/msd_lite": "file" }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"luci-app-msd_lite": {
|
||||
"description": "Grant UCI access for luci-app-msd_lite",
|
||||
"read": {
|
||||
"uci": [ "msd_lite" ]
|
||||
},
|
||||
"write": {
|
||||
"uci": [ "msd_lite" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user