mirror of
https://github.com/hotwa/luci-app-openclaw.git
synced 2026-03-31 04:52:33 +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:
@@ -193,6 +193,55 @@ fi
|
||||
# 同步 UCI 到 JSON
|
||||
sync_uci_to_json
|
||||
|
||||
# v2026.3.13: 修复插件配置中的插件名称不匹配问题
|
||||
# OpenClaw 加强了配置验证,plugins.allow 中的名称必须与实际插件名完全匹配
|
||||
# 问题: 旧版本写入的是 "openclaw-qqbot",但实际插件名是 "@tencent-connect/openclaw-qqbot"
|
||||
fix_plugin_config() {
|
||||
local qqbot_ext_dir="${OC_DATA}/.openclaw/extensions/openclaw-qqbot"
|
||||
[ ! -d "$qqbot_ext_dir" ] && return
|
||||
[ ! -f "$CONFIG_FILE" ] && return
|
||||
|
||||
"$NODE_BIN" -e "
|
||||
const fs=require('fs');
|
||||
try{
|
||||
const d=JSON.parse(fs.readFileSync('${CONFIG_FILE}','utf8'));
|
||||
if(!d.plugins)d.plugins={};
|
||||
let modified=false;
|
||||
|
||||
// 修复 plugins.allow 数组中的插件名称
|
||||
if(Array.isArray(d.plugins.allow)){
|
||||
const oldName='openclaw-qqbot';
|
||||
const newName='@tencent-connect/openclaw-qqbot';
|
||||
const idx=d.plugins.allow.indexOf(oldName);
|
||||
if(idx!==-1){
|
||||
if(!d.plugins.allow.includes(newName)){
|
||||
d.plugins.allow[idx]=newName;
|
||||
modified=true;
|
||||
}else{
|
||||
d.plugins.allow.splice(idx,1);
|
||||
modified=true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 同时修复 plugins.entries 中的键名
|
||||
if(d.plugins.entries && d.plugins.entries['openclaw-qqbot']){
|
||||
if(!d.plugins.entries['@tencent-connect/openclaw-qqbot']){
|
||||
d.plugins.entries['@tencent-connect/openclaw-qqbot']=d.plugins.entries['openclaw-qqbot'];
|
||||
}
|
||||
delete d.plugins.entries['openclaw-qqbot'];
|
||||
modified=true;
|
||||
}
|
||||
|
||||
if(modified){
|
||||
fs.writeFileSync('${CONFIG_FILE}',JSON.stringify(d,null,2));
|
||||
console.log('FIXED');
|
||||
}
|
||||
}catch(e){}
|
||||
" 2>/dev/null && chown openclaw:openclaw "$CONFIG_FILE" 2>/dev/null
|
||||
}
|
||||
fix_plugin_config
|
||||
|
||||
# 修复数据目录权限 (防止 root 用户操作后留下无法读取的文件)
|
||||
chown -R openclaw:openclaw "$OC_DATA" 2>/dev/null || true
|
||||
|
||||
|
||||
50
root/etc/profile.d/openclaw.sh
Normal file
50
root/etc/profile.d/openclaw.sh
Normal file
@@ -0,0 +1,50 @@
|
||||
#!/bin/sh
|
||||
# ============================================================================
|
||||
# luci-app-openclaw — 全局环境变量
|
||||
# 仅在 Node.js 已安装时生效,为 SSH 登录用户提供正确的运行环境
|
||||
# 解决 Issue #42: 统一配置文件路径,避免 /root/.openclaw 与 /opt/openclaw/data/.openclaw 混乱
|
||||
# ============================================================================
|
||||
|
||||
NODE_BASE="/opt/openclaw/node"
|
||||
OC_GLOBAL="/opt/openclaw/global"
|
||||
OC_DATA="/opt/openclaw/data"
|
||||
|
||||
# 检查 Node.js 是否已安装
|
||||
[ -x "${NODE_BASE}/bin/node" ] || return 0
|
||||
|
||||
# 添加 Node.js 和 OpenClaw 到 PATH (非侵入式,检查是否已存在)
|
||||
case ":$PATH:" in
|
||||
*":${NODE_BASE}/bin:"*) ;;
|
||||
*) export PATH="${NODE_BASE}/bin:${OC_GLOBAL}/bin:$PATH" ;;
|
||||
esac
|
||||
|
||||
# 设置 Node.js ICU 数据路径
|
||||
export NODE_ICU_DATA="${NODE_BASE}/share/icu"
|
||||
|
||||
# 设置 OpenClaw 核心环境变量
|
||||
# 这些变量确保 openclaw 命令使用正确的配置路径
|
||||
export OPENCLAW_HOME="$OC_DATA"
|
||||
export OPENCLAW_STATE_DIR="${OC_DATA}/.openclaw"
|
||||
export OPENCLAW_CONFIG_PATH="${OC_DATA}/.openclaw/openclaw.json"
|
||||
|
||||
# 设置 HOME 为 OpenClaw 数据目录
|
||||
# 这是解决 Issue #42 的关键:确保 OpenClaw CLI 使用正确的配置路径
|
||||
# 注意:这会影响 cd ~ 等行为,但为了配置一致性是必要的
|
||||
export HOME="$OC_DATA"
|
||||
|
||||
# 创建便捷别名:用户可直接运行 openclaw 命令
|
||||
if [ -x "${OC_GLOBAL}/bin/openclaw" ] || [ -x "${NODE_BASE}/bin/openclaw" ]; then
|
||||
# openclaw 已在 PATH 中,无需别名
|
||||
:
|
||||
else
|
||||
# 尝试查找 openclaw 入口并创建别名
|
||||
for _oc_dir in "${OC_GLOBAL}/lib/node_modules/openclaw" "${OC_GLOBAL}/node_modules/openclaw" "${NODE_BASE}/lib/node_modules/openclaw"; do
|
||||
if [ -f "${_oc_dir}/openclaw.mjs" ]; then
|
||||
alias openclaw="${NODE_BASE}/bin/node ${_oc_dir}/openclaw.mjs"
|
||||
break
|
||||
elif [ -f "${_oc_dir}/dist/cli.js" ]; then
|
||||
alias openclaw="${NODE_BASE}/bin/node ${_oc_dir}/dist/cli.js"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
@@ -1,5 +1,32 @@
|
||||
#!/bin/sh
|
||||
# luci-app-openclaw — 首次安装初始化脚本
|
||||
# luci-app-openclaw — 首次安装/升级初始化脚本
|
||||
|
||||
# ── v1.0.16: 清理错误路径下的配置文件 (Issue #42) ──
|
||||
# 用户在 SSH 中直接运行 openclaw 命令时,可能创建了 /root/.openclaw/ 目录
|
||||
# 需要迁移数据并清理,避免路径混乱
|
||||
if [ -d "/root/.openclaw" ]; then
|
||||
OC_DATA="/opt/openclaw/data"
|
||||
# 迁移 skills 目录 (如果存在且目标不存在)
|
||||
if [ -d "/root/.openclaw/skills" ] && [ ! -d "${OC_DATA}/.openclaw/skills" ]; then
|
||||
mkdir -p "${OC_DATA}/.openclaw"
|
||||
mv "/root/.openclaw/skills" "${OC_DATA}/.openclaw/" 2>/dev/null
|
||||
chown -R openclaw:openclaw "${OC_DATA}/.openclaw/skills" 2>/dev/null
|
||||
fi
|
||||
# 迁移 sessions 目录 (如果存在且目标不存在)
|
||||
if [ -d "/root/.openclaw/sessions" ] && [ ! -d "${OC_DATA}/.openclaw/sessions" ]; then
|
||||
mkdir -p "${OC_DATA}/.openclaw"
|
||||
mv "/root/.openclaw/sessions" "${OC_DATA}/.openclaw/" 2>/dev/null
|
||||
chown -R openclaw:openclaw "${OC_DATA}/.openclaw/sessions" 2>/dev/null
|
||||
fi
|
||||
# 迁移 openclaw.json (仅当目标不存在时)
|
||||
if [ -f "/root/.openclaw/openclaw.json" ] && [ ! -f "${OC_DATA}/.openclaw/openclaw.json" ]; then
|
||||
mkdir -p "${OC_DATA}/.openclaw"
|
||||
mv "/root/.openclaw/openclaw.json" "${OC_DATA}/.openclaw/" 2>/dev/null
|
||||
chown openclaw:openclaw "${OC_DATA}/.openclaw/openclaw.json" 2>/dev/null
|
||||
fi
|
||||
# 清理空的旧目录
|
||||
rmdir "/root/.openclaw" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# 创建 openclaw 系统用户 (无 home, 无 shell)
|
||||
if ! id openclaw >/dev/null 2>&1; then
|
||||
|
||||
Reference in New Issue
Block a user