mirror of
https://github.com/hotwa/luci-app-openclaw.git
synced 2026-03-30 20:25:44 +00:00
release v2.0.0: 适配 OpenClaw v2026.3.13
重大变更: - 配置管理菜单重构,更清晰的导航结构 - 新增高级配置菜单 - 新增全局环境变量 /etc/profile.d/openclaw.sh 修复: - QQ 机器人插件配置名称不匹配 (#XX) - 安装运行环境报错缺少 libstdcpp6 (#28) - 环境变量路径混乱 (#42) 新增: - 查看日志功能 - 飞书 Bot 配置流程优化 适配: - Node.js 版本升级到 22.16.0 - OpenClaw 版本升级到 v2026.3.13 - 依赖声明新增 libstdcpp6
This commit is contained in:
@@ -41,6 +41,11 @@ mkdir -p "$DATA_DIR/etc/init.d"
|
||||
cp "$PKG_DIR/root/etc/init.d/openclaw" "$DATA_DIR/etc/init.d/"
|
||||
chmod +x "$DATA_DIR/etc/init.d/openclaw"
|
||||
|
||||
# profile.d (v1.0.16+: 全局环境变量)
|
||||
mkdir -p "$DATA_DIR/etc/profile.d"
|
||||
cp "$PKG_DIR/root/etc/profile.d/openclaw.sh" "$DATA_DIR/etc/profile.d/"
|
||||
chmod +x "$DATA_DIR/etc/profile.d/openclaw.sh"
|
||||
|
||||
# bin
|
||||
mkdir -p "$DATA_DIR/usr/bin"
|
||||
cp "$PKG_DIR/root/usr/bin/openclaw-env" "$DATA_DIR/usr/bin/"
|
||||
@@ -68,6 +73,11 @@ cp "$PKG_DIR/root/usr/share/openclaw/web-pty.js" "$DATA_DIR/usr/share/openclaw/"
|
||||
# Web PTY UI
|
||||
cp -r "$PKG_DIR/root/usr/share/openclaw/ui" "$DATA_DIR/usr/share/openclaw/"
|
||||
|
||||
# profile.d 环境变量脚本 (v1.0.16+)
|
||||
mkdir -p "$DATA_DIR/etc/profile.d"
|
||||
cp "$PKG_DIR/root/etc/profile.d/openclaw.sh" "$DATA_DIR/etc/profile.d/"
|
||||
chmod +x "$DATA_DIR/etc/profile.d/openclaw.sh"
|
||||
|
||||
# i18n (po2lmo 可选)
|
||||
mkdir -p "$DATA_DIR/usr/lib/lua/luci/i18n"
|
||||
if command -v po2lmo >/dev/null 2>&1 && [ -f "$PKG_DIR/po/zh-cn/openclaw.po" ]; then
|
||||
@@ -86,7 +96,7 @@ mkdir -p "$CTRL_DIR"
|
||||
cat > "$CTRL_DIR/control" << EOF
|
||||
Package: ${PKG_NAME}
|
||||
Version: ${PKG_VERSION}-${PKG_RELEASE}
|
||||
Depends: luci-compat, luci-base, curl, openssl-util, script-utils, tar
|
||||
Depends: luci-compat, luci-base, curl, openssl-util, script-utils, tar, libstdcpp6
|
||||
Source: https://github.com/10000ge10000/luci-app-openclaw
|
||||
SourceName: ${PKG_NAME}
|
||||
License: GPL-3.0
|
||||
@@ -101,20 +111,84 @@ EOF
|
||||
cat > "$CTRL_DIR/postinst" << 'EOF'
|
||||
#!/bin/sh
|
||||
[ -n "${IPKG_INSTROOT}" ] || {
|
||||
( . /etc/uci-defaults/99-openclaw ) && rm -f /etc/uci-defaults/99-openclaw
|
||||
# ══════════════════════════════════════════════════════════════
|
||||
# 配置文件冲突处理 (opkg 将新配置保存为 .opkg 后缀)
|
||||
# ══════════════════════════════════════════════════════════════
|
||||
# opkg 配置文件冲突处理流程:
|
||||
# 1. opkg 检测到 /etc/config/openclaw 已存在且内容不同
|
||||
# 2. opkg 保留旧配置,将新配置保存为 /etc/config/openclaw-opkg
|
||||
# 3. postinst 需要合并用户配置到新配置文件
|
||||
|
||||
OLD_CONFIG="/etc/config/openclaw"
|
||||
NEW_CONFIG="/etc/config/openclaw-opkg"
|
||||
|
||||
if [ -f "$NEW_CONFIG" ]; then
|
||||
echo "检测到配置文件冲突,正在智能合并..."
|
||||
|
||||
# 步骤1: 从旧配置中提取用户设置 (在替换之前!)
|
||||
# 使用 sed 直接解析 UCI 格式,不依赖 uci 命令
|
||||
USER_ENABLED=$(sed -n "s/^\s*option\s\+enabled\s\+['\"]\\?\\([^'\"]*\\)['\"]\\?.*/\\1/p" "$OLD_CONFIG" 2>/dev/null | tail -1)
|
||||
USER_PORT=$(sed -n "s/^\s*option\s\+port\s\+['\"]\\?\\([^'\"]*\\)['\"]\\?.*/\\1/p" "$OLD_CONFIG" 2>/dev/null | tail -1)
|
||||
USER_BIND=$(sed -n "s/^\s*option\s\+bind\s\+['\"]\\?\\([^'\"]*\\)['\"]\\?.*/\\1/p" "$OLD_CONFIG" 2>/dev/null | tail -1)
|
||||
USER_TOKEN=$(sed -n "s/^\s*option\s\+token\s\+['\"]\\?\\([^'\"]*\\)['\"]\\?.*/\\1/p" "$OLD_CONFIG" 2>/dev/null | tail -1)
|
||||
USER_PTY_PORT=$(sed -n "s/^\s*option\s\+pty_port\s\+['\"]\\?\\([^'\"]*\\)['\"]\\?.*/\\1/p" "$OLD_CONFIG" 2>/dev/null | tail -1)
|
||||
|
||||
# 步骤2: 备份旧配置 (带时间戳)
|
||||
BAK_FILE="/etc/config/openclaw.$(date +%Y%m%d%H%M%S).bak"
|
||||
cp "$OLD_CONFIG" "$BAK_FILE" 2>/dev/null || true
|
||||
echo "旧配置已备份到: $BAK_FILE"
|
||||
|
||||
# 步骤3: 使用新配置文件
|
||||
mv "$NEW_CONFIG" "$OLD_CONFIG" 2>/dev/null || cp "$NEW_CONFIG" "$OLD_CONFIG" 2>/dev/null || true
|
||||
rm -f "$NEW_CONFIG" 2>/dev/null || true
|
||||
|
||||
# 步骤4: 合并用户设置到新配置
|
||||
# 直接使用 sed 修改配置文件,兼容性更好
|
||||
[ -n "$USER_ENABLED" ] && sed -i "s/^\(\s*option\s\+enabled\s\+\).*/\\1'$USER_ENABLED'/" "$OLD_CONFIG" 2>/dev/null || true
|
||||
[ -n "$USER_PORT" ] && sed -i "s/^\(\s*option\s\+port\s\+\).*/\\1'$USER_PORT'/" "$OLD_CONFIG" 2>/dev/null || true
|
||||
[ -n "$USER_BIND" ] && sed -i "s/^\(\s*option\s\+bind\s\+\).*/\\1'$USER_BIND'/" "$OLD_CONFIG" 2>/dev/null || true
|
||||
[ -n "$USER_TOKEN" ] && sed -i "s/^\(\s*option\s\+token\s\+\).*/\\1'$USER_TOKEN'/" "$OLD_CONFIG" 2>/dev/null || true
|
||||
[ -n "$USER_PTY_PORT" ] && sed -i "s/^\(\s*option\s\+pty_port\s\+\).*/\\1'$USER_PTY_PORT'/" "$OLD_CONFIG" 2>/dev/null || true
|
||||
|
||||
echo "配置合并完成,用户设置已保留"
|
||||
fi
|
||||
|
||||
# 执行 uci-defaults 初始化脚本
|
||||
if [ -f /etc/uci-defaults/99-openclaw ]; then
|
||||
( . /etc/uci-defaults/99-openclaw ) && rm -f /etc/uci-defaults/99-openclaw
|
||||
fi
|
||||
|
||||
# 清理 LuCI 缓存
|
||||
rm -f /tmp/luci-indexcache /tmp/luci-modulecache/* /tmp/luci-indexcache.*.json 2>/dev/null
|
||||
|
||||
# 重启 Web PTY (使其加载新文件和新 token)
|
||||
PTY_PID=$(pgrep -f 'web-pty.js' 2>/dev/null | head -1)
|
||||
[ -n "$PTY_PID" ] && kill "$PTY_PID" 2>/dev/null || true
|
||||
|
||||
exit 0
|
||||
}
|
||||
EOF
|
||||
chmod +x "$CTRL_DIR/postinst"
|
||||
|
||||
cat > "$CTRL_DIR/prerm" << 'EOF'
|
||||
#!/bin/sh
|
||||
[ -n "${IPKG_INSTROOT}" ] || {
|
||||
# 升级前备份当前配置
|
||||
if [ -f /etc/config/openclaw ]; then
|
||||
cp /etc/config/openclaw /etc/config/openclaw.pre-upgrade.bak 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
EOF
|
||||
chmod +x "$CTRL_DIR/prerm"
|
||||
|
||||
cat > "$CTRL_DIR/postrm" << 'EOF'
|
||||
#!/bin/sh
|
||||
[ -n "${IPKG_INSTROOT}" ] || {
|
||||
rm -f /tmp/luci-indexcache /tmp/luci-modulecache/* 2>/dev/null
|
||||
# 清理备份文件 (仅在完全卸载时)
|
||||
if [ "$1" = "0" ]; then
|
||||
rm -f /etc/config/openclaw.user.bak /etc/config/openclaw.pre-upgrade.bak 2>/dev/null
|
||||
fi
|
||||
}
|
||||
EOF
|
||||
chmod +x "$CTRL_DIR/postrm"
|
||||
@@ -145,3 +219,8 @@ echo "文件大小: ${IPK_SIZE} bytes"
|
||||
echo "安装大小: ${INSTALLED_SIZE} KB"
|
||||
echo ""
|
||||
echo "安装方法: opkg install ${PKG_NAME}_${PKG_VERSION}-${PKG_RELEASE}_all.ipk"
|
||||
|
||||
# ── 同步构建 .run 包 ──
|
||||
echo ""
|
||||
echo "=== 同步构建 .run 包 ==="
|
||||
"$SCRIPT_DIR/build_run.sh" "$OUT_DIR"
|
||||
|
||||
Reference in New Issue
Block a user