Skip to content
latte03Public

About

FnDepot 外部应用源:磁盘瞭望 DiskLens(x86 / arm)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

35 Commits

Folders and files

Repository files navigation

Agan 的飞牛应用源

这是一个面向 FnDepot 的第三方 fnOS 应用源,使用 FnDepot V2 源格式。清单文件是仓库根目录的 fnpack.json。

添加源

在 FnDepot 的“应用源”页面添加以下任一地址:

  • GitHub 仓库地址(推荐):https://github.com/latte03/fnos-apps
  • 清单直链:https://raw.githubusercontent.com/latte03/fnos-apps/main/fnpack.json

仓库必须保持公开,FnDepot 才能无鉴权读取。GitHub 源会优先读取默认分支根目录的 fnpack.json;文件名大小写必须完全一致,客户端不会探测 fndepot.json。

收录应用

应用 appname 架构 版本 上游
磁盘瞭望 DiskLens DiskLens x86 / arm 0.3.3 JoySec123/DiskLens
飞牛夸克下载器 fnos-quark x86 / arm 0.7.12 ElyDemiurge/fnOS-quark
飞牛影视在线扩展 fnmedia-ext all 0.2.0 yujian0815/fnmedia-ext
抖音下载 DouyinDL all 1.0.5 Zyc009234/fnos-douyin-dl
RustFS rustfs-fnos all 1.0.4-2 a10463981/rustfs-fnos
NAS 管家 deskicons x86 / arm 0.3.6 kaf931/fnos-manager
QAS 控制台(夸克自动转存) qas x86 0.3.7 latte03/quark-auto-save

七个应用的安装包都直接引用上游 GitHub Release,并用 sha256 与 size 锁定;本仓库只保存清单、图标和说明。上游发布新版本后,定时工作流会更新清单。

fnmedia-ext 是 MIT、纯 Python 的 all 架构应用,本源默认使用完整版(含 TVBox 运行时);0.8 MB 的公开精简版在应用详情页给出直达链接。

fnOS-quark 使用专有许可,明确禁止复制、镜像或再发布软件本体,因此本仓库不复制它的 FPK、官方图标或截图:安装包只引用官方 Release,预览图直接链接上游,应用图标使用本源自制的通用云下载占位图。

DouyinDL 未提供开源许可证,默认保留所有权利;本源同样不复制它的图标或素材,图标使用自制的通用视频下载占位图。它依赖 nodejs_v22,分享链接下载还需要 NAS 安装 Chromium,服务端口为 8866。

RustFS 是由社区(a10463981)打包的 RustFS for fnOS,上游 RustFS 本体以 Apache-2.0 发布,本仓库直接使用其安装包内图标。它依赖 Docker,安装与升级时需要能访问容器镜像仓库;包内没有架构相关二进制,一个 all 包同时用于 x86 与 ARM(ARM 上游未做真机验证)。

deskicons(NAS 管家)未提供开源许可证。应用图标直接取自上游安装包(与安装后 NAS 上的 /vol1/@appcenter/deskicons/ui/images/icon_256.png 一致),预览图链接上游 docs/ 截图。它依赖 nodejs_v22,没有固定 TCP 端口,并且在 FPK 里声明以 root 运行(管理容器、计划任务、SSH 与存储文件需要),安装前请确认接受这一点。

qas(QAS 控制台)以 AGPL-3.0 发布,是源作者自己的项目;本仓库直接使用其安装包内图标。它是原生 Go 应用(不是 Docker 应用),仅发布 x86 安装包,服务端口为 8710。

源格式速查(V2)

顶层结构

{
  "schema_version": "2",
  "source_info": {
    "name": "源名称",
    "author": "源作者",
    "homepage": "https://example.com",
    "description": "源简介"
  },
  "apps": {
    "sample.app": {
      "display_name": "示例应用",
      "desc": "应用简介。",
      "platform": ["all"],
      "categories": ["系统工具"],
      "icon_url": "./apps/sample.app/icon.png",
      "run_as": "package",
      "install_type": "",
      "is_docker": false,
      "releases": {
        "1.0.0": {
          "packages": {
            "all": {
              "download_url": "https://example.com/sample.app-1.0.0.fpk",
              "sha256": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
              "size": 12345678
            }
          }
        }
      }
    }
  }
}

schema_version 必须是字符串 "2";数字 2、"2.0"、"2.1" 都会被拒绝。source_info.name 与 source_info.author 必填。

应用字段

apps 的键就是 FPK manifest 里的 appname,大小写敏感,只能使用字母、数字、点、下划线和短横线,且必须以字母或数字开头。

字段 必填 说明
display_name 是 应用显示名称
desc 是 应用简介,支持 HTML 文本
platform 是 字符串或数组,只允许 all、x86、arm
categories 是 固定分类,最多两个,第一个为主分类
icon_url 是 图标地址,PNG 或 WebP,建议小于 500 KB
run_as 是 只允许 package 或 root
install_type 是 空字符串表示存储空间,root 表示系统空间
is_docker 是 必须是布尔值
releases 是 版本映射,单文件模式必填
preview_urls 否 预览图数组,最多读取前 8 张,单张小于 2 MB
readme_url 否 详情页 README 地址,小于 1 MB
bug_report_url 否 问题反馈地址
maintainer / maintainer_url 否 上游维护者与链接
distributor / distributor_url 否 分发者与链接
service_port 否 服务端口,没有 TCP 端口时留空字符串
details_url / details_updated_at 否 拆分详情文件模式,本仓库未使用
i18n 否 名称与简介的本地化

固定分类只有九个:影音娱乐、系统工具、编程开发、AI赋能、生活服务、智能智控、教育学习、游戏地带、硬件驱动。不要填写“全部”。

版本与安装包

releases 的键是可比较的版本号,推荐 SemVer,不能使用 latest 或日期文本。每个版本的结构:

{
  "changelog": "本次更新内容。",
  "updated_at": "2026-10-20T05:24:31Z",
  "os_min_version": "1.1.31",
  "os_max_version": "",
  "packages": {
    "x86": { "download_url": "...", "sha256": "...", "size": 12345678 },
    "arm": { "download_url": "...", "sha256": "...", "size": 12345678 }
  }
}
  • packages 的键只能是 all、x86、arm;其他键会让版本校验失败。
  • 每个架构分支必须有 download_url;sha256 为 64 位十六进制,size 为字节数。
  • x86 设备按 packages.x86 → packages.all 回退;arm 设备按 packages.arm → packages.all 回退。
  • 字段合并顺序为:应用级 → 版本级 → packages.all → packages.[当前架构]。
  • download_url 不会从其他架构分支继承。

限制与错误处理

  • 主清单约 2 MB,拆分详情文件约 512 KB,单源最多 5,000 个应用、单应用最多 100 个版本。
  • 源级错误(JSON 语法、顶层结构、schema_version、缺少 source_info)会中止整次同步,但保留旧缓存。
  • 应用级错误只跳过该应用;版本或安装包级错误只跳过该分支,并回退到 all。
  • 相对 URL 按清单文件所在目录解析,也可以直接写绝对 URL。

完整规则以上游 FnDepot README 为准。

仓库结构

.
├─ fnpack.json                 # FnDepot V2 源清单
├─ apps/
│  ├─ DiskLens/
│  │  ├─ icon.png              # 256 × 256 PNG 图标
│  │  └─ README.md             # 详情页说明
│  ├─ fnos-quark/
│  │  ├─ icon.png              # 本源自制的通用占位图标
│  │  └─ README.md             # 详情页说明
│  ├─ fnmedia-ext/
│  │  ├─ icon.png              # 上游 MIT 图标
│  │  └─ README.md             # 详情页说明
│  ├─ DouyinDL/
│  │  ├─ icon.png              # 本源自制的通用占位图标
│  │  └─ README.md             # 详情页说明
│  ├─ rustfs-fnos/
│  │  ├─ icon.png              # 上游安装包内图标(Apache-2.0)
│  │  └─ README.md             # 详情页说明
│  └─ deskicons/
│     ├─ icon.png              # 上游安装包内图标
│     └─ README.md             # 详情页说明
│  └─ qas/
│     ├─ icon.png              # 上游安装包内图标(AGPL-3.0)
│     └─ README.md             # 详情页说明
├─ scripts/
│  ├─ lib/upstream.mjs         # 各同步脚本共用的上游 pin 自愈逻辑
│  ├─ sync-disklens.mjs        # 跟随 DiskLens Release 更新清单
│  ├─ sync-fnos-quark.mjs      # 跟随 fnOS-quark Release 更新清单
│  ├─ sync-fnmedia-ext.mjs     # 跟随 fnmedia-ext Release 更新清单
│  ├─ sync-douyin-dl.mjs       # 跟随 DouyinDL Release 更新清单
│  ├─ sync-rustfs.mjs          # 跟随 RustFS Release 更新清单
│  ├─ sync-fnos-manager.mjs    # 跟随 NAS 管家 Release 更新清单
│  ├─ sync-qas.mjs             # 跟随 QAS 控制台 Release 更新清单
│  └─ validate.mjs             # 按 V2 规则校验
└─ .github/workflows/
   ├─ sync-apps.yml            # 每日检查七个上游的新版本
   └─ validate.yml             # push / PR 时校验清单

自动同步

七个同步脚本分别跟随各自的上游 Release:

  • sync-disklens.mjs 找到 DiskLens-<version>-amd64.fpk 与 -arm64.fpk,读取仓库内 fnos/manifest 核对 appname、版本、名称、简介和 changelog。
  • sync-fnos-quark.mjs 找到 fnos-quark-<version>-x86_64.fpk 与 -arm64.fpk。上游只发布 FPK,脚本会下载 x86_64 包,从包内 manifest 读取 appname、application_version、display_name、desc、service_port、os_min_version,并从 config/privilege 读取 run_as。
  • sync-fnmedia-ext.mjs 默认找到完整版 fnmedia-ext-<version>-full.fpk;加 --slim 可切到公开精简版 fnmedia-ext-<version>.fpk。它从包内 manifest 读取 appname、version、platform、display_name、desc、os_min_version,并从 config/privilege 读取 run_as。
  • sync-douyin-dl.mjs 读取固定文件名 DouyinDL.fpk,从包内 manifest 读取 appname、version、display_name、desc、service_port、os_min_version、changelog,并从 config/privilege 读取 run_as。
  • sync-rustfs.mjs 找到 rustfs-fnos-<version>-all.fpk,从包内 manifest 读取 appname、version、platform、display_name、desc、service_port、os_min_version,从 config/privilege 读取 run_as,从 config/resource 判断是否为 Docker 应用;changelog 优先取 Release 正文。
  • sync-fnos-manager.mjs 找到 NAS.-<version>-x86_64.fpk 与 -arm64.fpk(上游 tag 不带 v 前缀)。上游同样只发布 FPK,脚本会下载 x86_64 包,从包内 manifest 读取 appname、version、display_name、desc、platform、os_min_version,并从 config/privilege 读取 run_as;预览图按同步到的 tag 指向上游 docs/images/readme/ 的截图。
  • sync-qas.mjs 找到 qas_<version>_x86.fpk,从包内 manifest 读取 appname、version、platform、display_name、desc、service_port、os_min_version、changelog,并从 config/privilege 读取 run_as。

七者都会读取 GitHub 提供的 sha256 摘要(缺失时下载文件自行计算),把新版本写入 fnpack.json,保留已有版本并按发布时间倒序排列。历史版本的校验值也会自动核对:上游在原 tag 重传资产时刷新 size/sha256,上游删除的版本则从清单移除,这段逻辑在 scripts/lib/upstream.mjs 里由各脚本共用。

node scripts/sync-disklens.mjs
node scripts/sync-fnos-quark.mjs
node scripts/sync-fnmedia-ext.mjs
node scripts/sync-fnmedia-ext.mjs --slim
node scripts/sync-fnmedia-ext.mjs --dry-run
node scripts/sync-fnmedia-ext.mjs --tag v0.2.0
node scripts/sync-fnmedia-ext.mjs --fpk /path/to/fnmedia-ext-0.2.0-full.fpk
node scripts/sync-fnmedia-ext.mjs --proxy https://gh-proxy.com/
node scripts/sync-fnmedia-ext.mjs --force
node scripts/sync-douyin-dl.mjs
node scripts/sync-douyin-dl.mjs --dry-run
node scripts/sync-douyin-dl.mjs --tag v1.0.5
node scripts/sync-douyin-dl.mjs --fpk /path/to/DouyinDL.fpk
node scripts/sync-douyin-dl.mjs --proxy https://gh-proxy.com/
node scripts/sync-douyin-dl.mjs --force
node scripts/sync-rustfs.mjs
node scripts/sync-rustfs.mjs --dry-run
node scripts/sync-rustfs.mjs --tag v1.0.4-2
node scripts/sync-rustfs.mjs --fpk /path/to/rustfs-fnos-1.0.4-2-all.fpk
node scripts/sync-rustfs.mjs --proxy https://gh-proxy.com/
node scripts/sync-rustfs.mjs --force
node scripts/sync-fnos-manager.mjs
node scripts/sync-fnos-manager.mjs --dry-run
node scripts/sync-fnos-manager.mjs --tag 0.3.6
node scripts/sync-fnos-manager.mjs --fpk /path/to/NAS.-0.3.6-x86_64.fpk
node scripts/sync-fnos-manager.mjs --proxy https://gh-proxy.com/
node scripts/sync-fnos-manager.mjs --force
node scripts/sync-qas.mjs
node scripts/sync-qas.mjs --dry-run
node scripts/sync-qas.mjs --tag v0.3.7
node scripts/sync-qas.mjs --fpk /path/to/qas_0.3.7_x86.fpk
node scripts/sync-qas.mjs --proxy https://gh-proxy.com/
node scripts/sync-qas.mjs --force

已存在的版本在下载地址不变(即上游原地重传)时会自动刷新校验值;下载地址变化时默认报错退出,需要 --force 才会覆盖。GitHub Actions 每天 03:17 UTC 运行一次,也可以在 Actions 页面手动触发,并可用 disklens_tag / quark_tag / fnmedia_tag / douyin_tag / rustfs_tag / manager_tag / qas_tag 指定上游版本;工作流会在提交前用 GitHub Release API 的 digest 字段核对全部安装包的 sha256 与 size(非 GitHub 地址或 API 未提供 digest 时回退为下载核对)。GitHub 可能在仓库连续 60 天无活动后暂停定时工作流,届时在 Actions 页面手动运行 Sync app sources 即可。

新增应用

  1. 新建 apps/<appname>/,放入 icon.png(PNG/WebP,小于 500 KB)和可选的 README.md。
  2. 在 fnpack.json 的 apps 下增加条目,键必须与 FPK manifest 的 appname 完全一致。
  3. 至少写入一个版本;每个架构分支填写 download_url、sha256、size。
  4. 运行 node scripts/validate.mjs,再提交。

本地校验

jq empty fnpack.json
node scripts/validate.mjs
node scripts/validate.mjs --remote   # 额外下载安装包核对摘要,较慢
git diff --check

validate.mjs 会检查顶层结构、必填字段、分类与架构取值、版本号、安装包分支、本地图标/说明文件的类型与大小,以及 sha256 格式和 size 是否为非负整数。

说明

  • 本仓库只提供索引与元数据。应用版权归各自上游所有;DiskLens 与 fnmedia-ext 以 MIT 许可证发布,RustFS 及其社区应用包、qas 以 Apache-2.0 / AGPL-3.0 发布,fnOS-quark 为专有软件,DouyinDL 与 deskicons 未提供 LICENSE、默认保留所有权利。
  • 安装包引用上游 Release 地址。上游在原 tag 重传资产时,同步脚本会自动刷新 size/sha256;上游删除某个版本时,该版本会从清单移除,保证清单里的下载地址始终可用。镜像前请先确认上游许可证是否允许(DiskLens、fnmedia-ext、RustFS、qas 可以;fnOS-quark、DouyinDL、deskicons 需要先联系作者)。
  • fnmedia-ext 依赖官方「影视」(trim.media)保持安装并启用;DouyinDL 与 deskicons 依赖 nodejs_v22(FPK manifest 已声明),DouyinDL 的分享链接下载还需要 NAS 安装 Chromium;RustFS 依赖 Docker 与容器镜像仓库访问。这些依赖由 fnOS 或用户环境处理,FnDepot 只负责下载安装包。
  • deskicons 在 FPK 中声明以 root 运行,用于容器、计划任务、SSH 和存储文件等系统级操作。
  • fnOS-quark 和 DouyinDL 的预览图直接链接上游(如有),应用图标是本源自制的通用占位图,不是上游官方素材;RustFS、deskicons 与 qas 的图标取自各自上游安装包(deskicons 与安装在 NAS 上的图标一致)。
  • 源名称、简介与字段规则可能随 FnDepot 更新;升级客户端后建议重新检查上游 README。

About

FnDepot 外部应用源:磁盘瞭望 DiskLens(x86 / arm)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages