Files

7.1 KiB
Raw Permalink Blame History

mips-repo — MeowOS 板载 mipsel 软件仓库(宿主侧)

目标设备:R3 Pro II / MeowOS 固件(mipsel-linux-muslsf,静态,无 glibc 依赖)。 用途:存放针对该设备的交叉编译二进制与构建信息,便于复用到后续固件 / TF 卡 (MeowOS/opt 目录;MeowLib 未定义/未用——MeowOpt 与 MeowOS/opt 命名需归一:代码用 MeowOS/opt,文档 MeowOpt 指卡上外部工具目录。[源:审计 2026-08-30])。

仓库结构(两半:bins/ 普通二进制工具 + mpk/ .mpk 软件包)

mips-repo/
  README.md                # 本文件
  bins/                    # 「普通二进制/工具」仓库:交叉编译产物 + 构建/元信息
    <tool>/
      build.sh             # 交叉编译脚本(可重复执行;可搬,路径相对本目录)
      manifest.md          # 元信息:来源/版本/arch/校验/产物路径/安装目标
      bin/<tool>           # 交叉编译产物(静态 mipsel,如存在)
      (<tool>.c 源码如自研也放此)
  mpk/                     # 「.mpk 文件」仓库:MeowAPPs 软件包(.mpk = tar.gz)
    README.md              # .mpk 规范说明(格式/字段/安装)
    <pkg>.mpk              # 成品包(app.json + meow 二进制 + 资源;不含 data/cache)

两者定位不同:bins/ 是宿主侧工具(服务/二进制,如 mDNS 应答器、netd),由 meow_svcd 托管、打进固件或按需从卡 MeowOS/opt/<tool>/ 部署;mpk/ 是应用层 软件包(MeowAPP 分发单元),用 nyai 安装到 MeowAPPs/<包名>/。

当前已入库工具

bins/(普通二进制 / 工具仓库)

  • bins/mdnsd/:Apple mDNSResponder-2881.0.25 交叉编译产物(mipsel-linux-muslsf 静态)。两种变体同在 bin/:
    • bin/mdnsd = SAResponder(mDNSResponderPosix,单服务注册型,-n/-f 只发布/回指定服务)strip 后 885.6 KB;
    • bin/mdnsd.bin = 完整 mdnsd 守护进程(通用宿主响应器,回任意 .local 查询)strip 后 994 KB。 ⚠️ 实测(内核无 IPv6)两者均失败:socket AF_INET6: Address family not supported by protocol;且即便 make HAVE_IPV6=0 编译通过、daemon 能跑,也不发布主机名 A 记录(IPC 服务型守护进程,等客户端注册)。故 mDNS 方案A 判为不达标,由 bins/meow_mdns/ 替代(见下)。
  • bins/meow_mdns/:自研极简 IPv4-only mDNS 应答器(~77.6 KB,mipsel-linux-muslsf 静态)。join 224.0.0.251:5353,应答 <host>.local A + _ssh._tcp.local PTR/SRV/TXT;零 IPv6 依赖。部署到 TF MeowOS/opt/mdnsd/mdnsd(95 KB < 阈值,可考虑进固件,实际已改板载 /usr/bin/meow_mdns,见下)。详见 bins/meow_mdns/manifest.md。⚠️ 手机热点丢弃客户端间组播→ 设备能应答、主机收不到(avahi 只认组播应答),avahi-resolve *.local 仍超时(网络层热点隔离,非应答器缺陷),需主机 DNS 兜底。

mpk/(.mpk 软件包仓库)

  • 目前为空(仅 README.md 说明规范)。MeowAPPs 成品包 .mpk 集中放此,供 nyai 经 sources.list(本地源 = MeowOS/opt/repo)或 nyai install <x.mpk> 直接安装。

目标架构与工具链

  • 架构:mipsel(MIPS32r2, little-endian)
  • 运行库:musl(静态链接,避免 libc 版本/动态加载差异)
  • 交叉编译器:~/.tools/zig-mipsel-cc(zig 目标 mips-linux-musl)
  • 目标静态库 sysroot:~/.tools/mipsel-linux-muslsf-cross/mipsel-linux-muslsf

服务管理:meow_svcd CLI(托管 bins/ 下的服务)

bins/ 里的常驻服务(如 meow_mdns)由 meow_svcd(类 systemd/systemctl,固件 /usr/bin/meow_svcd,板载 etc/init.d/S89meow_svcd 开机自启)托管,SSH 到设备后可直接用:

meow_svcd status                 # 列出所有服务与状态(card_present/wifi_up/services=N)
meow_svcd restart meow_mdns      # 重启单服务(如板载 mDNS 应答器)
meow_svcd stop all               # 停止全部服务
meow_svcd reload                 # 重读板载+TF 双源 services.d
meow_svcd start meow_mdns        # 启动单服务
meow_svcd pid                    # 打印守护进程 pid
  • 控制走 AF_UNIX 单行文本,默认 socket /tmp/meow_svcd.sock;应答 OK / ERR no-such-service / 多行 svc=<name> state=… pid=… restart=… exit=…。守护默认后台;-f/--foreground 前台(供 supervisor fork/exec+waitpid 托管)。
  • 服务目录规则(双源板载优先):固件工具 → 板载 /usr/data/meow/services.d/<name>.conf(Data 区, 拔卡保留);TF 工具/第三方 → TF MeowOS/services.d/<name>.conf(随卡存在/消失);同名板载优先(TF 被屏蔽 + WARN)。
  • 详见 patch_v2/meow_svcd/meow_svcd.md / docs/MEOWOS_SPEC_REF.md §4。

应用包:.mpk 规范 & nyai

.mpk 是 MeowOS 的应用分发单元(MeowAPPs),规范与 nyai 用法见 APPS.md 附录 §3(.mpk) / §5(nyai)。 要点:

  • 包名 = 文件名茎 = app.json 的 package(如 os.meow.hello → os.meow.hello.mpk)。
  • 格式:.mpk = tar.gz,含 app.json + meow 二进制 + 资源,不含 data/cache(运行时按设备生成)。
  • 安装:nyai install <pkg或文件.mpk>;nyai index <dir> 为目录生成 Packages 索引 (Package/Version/Filename/Size/SHA256/Depends/Description);nyai export <pkg> 打包导出。
  • 部署 nyai:MeowOS/opt/bin/nyai(卡,随 TF_CARD_LAYOUT 外围工具目录)。M2.12+ 固件 meow_card_path.sh 已前插 MeowOS/opt/bin 可直呼;更早固件上 SSH 需绝对路径 /usr/data/mnt/sd_0/MeowOS/opt/bin/nyai 或 export PATH=/usr/data/mnt/sd_0/MeowOS/opt/bin:$PATH。

新增一个工具/包的流程

  • 工具(进 bins/):
    1. mkdir -p bins/<tool>/bin,写 bins/<tool>/build.sh(用 zig-mipsel-cc,-Os -static)。
    2. 跑 build.sh,产出放 bins/<tool>/bin/<tool>。
    3. 写 bins/<tool>/manifest.md:来源(如 Apple-OSS/mDNSResponder 版本)、ARCH、file 输出摘要、ls -l 大小、构建命令、安装路径(固件 or TF MeowOpt)。
  • 应用包(进 mpk/):
    1. 打包不含 data/cache 的 MeowAPPs/<包名>/ → mpk/<包名>.mpk(或 nyai export)。
    2. nyai index mpk/ 生成/刷新 Packages 索引(供经源安装)。
    3. .mpk 字段与安装语义见 mpk/README.md / APPS.md 附录 §3。

部署到哪里

  • 体积小(约 <200KB)→ 可直接打进固件(/usr/bin 或由 supervisor/meow_svcd 启动)。
  • 体积大 → 放 TF 卡 MeowOS/opt/<tool>/,由 MeowOS 启动时从卡加载(拔卡降级不崩)。
  • 按需取用:从 MeowOS/opt/<tool>/ 按需部署,不一定要全部入库;若某工具体积仍偏重(如 mdnsd 的 885~994KB),可评估更小方案(OpenWrt linkd / libmdns,或自研极简响应器——仅回 A 记录 + _ssh 服务)以塞进固件 <200KB。
  • .mpk → 经 nyai 装到 MeowAPPs/<包名>/(数据建 MeowData/<包名>/{data,cache})。