收起左侧

fnOS 应用安装后 app_service 表 gateway_socket 和 gateway_prefix 为空,如何在非 r

0
回复
21
查看
[ 复制链接 ]

1

主题

0

回帖

0

牛值

江湖小虾

问题描述:

我开发了一个 fnOS 应用(trim.terminal,基于 xterm.js 的 Web 终端),打包成 .fpk 通过应用中心安装。遇到一个问题:框架安装应用时,appcenter.app_service 表中的 gateway_socketgateway_prefix 字段不会从 ui/config 中读取填充,导致访问 /app/trim.terminal 时返回 404。

当前环境:

  • 系统:fnOS(飞牛 NAS OS)
  • 应用通过 .fpk 包安装,框架自动注册到 appcenter 数据库(PostgreSQL)
  • 应用通过 Unix Socket 与 trim_http_cgi 网关通信

已知信息:

  1. app_service 表中 gateway_socketgateway_prefix 字段安装后为空

  2. 手动执行以下 SQL 可修复:
    复制

    UPDATE app_service 
    SET gateway_socket='/var/apps/trim.terminal/target/trim.terminal.sock', 
        gateway_prefix='/app/trim.terminal' 
    WHERE app_id IN (SELECT id FROM app WHERE app_name='trim.terminal') 
      AND (gateway_socket IS NULL OR gateway_socket='');
    
  3. 修复后需重启 trim_http_cgi 服务才能生效

  4. ui/config 中已配置 gatewaySocketgatewayPrefix 字段,但框架安装时未读取

尝试过的方案:

方案 结果
install_callback 脚本中执行 SQL ❌ 框架未调用 install_callback(已确认脚本已安装但未执行)
cmd/mainstart 阶段执行 SQL ✅ 当 run-as: root 时可正常工作(root 可通过 peer auth 访问 PostgreSQL)
同上,但 run-as: package(非 root 用户) ❌ 应用用户无法访问 PostgreSQL(peer auth 仅允许 postgres 系统用户)

核心矛盾:

出于安全考虑,我希望应用以非 root 用户(trim.terminal)运行,但 app_service 表的修复 SQL 需要 PostgreSQL 权限。trim.terminal 用户无法通过 peer auth 连接 PostgreSQL(psql -U postgres 要求当前系统用户为 postgres)。

想请教:

  1. 有没有办法让 fnOS 框架在安装时自动从 ui/config 读取 gatewaySocketgatewayPrefix 填充到 app_service 表?(什么条件下框架会自动填充这两个字段?)
  2. 如何给非 root 的应用用户配置 PostgreSQL 访问权限?比如修改 pg_hba.conf 允许 trim.terminal 用户访问 appcenter 数据库?这样是否安全?
  3. install_callback 在什么条件下会被框架调用?我的另一个应用 trim.openclawinstall_callback 会被正常调用,但 trim.terminal 的不会。两者 manifest 有什么关键区别?

相关文件:

ui/config:


manifest(关键字段):

复制

appname = trim.terminal
install_dep_apps = nodejs_v24
desktop_uidir = ui
desktop_applaunchname = trim.terminal.Application
ctl_stop = true
checkport = false
收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则