# 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/ # 「普通二进制/工具」仓库:交叉编译产物 + 构建/元信息 / build.sh # 交叉编译脚本(可重复执行;可搬,路径相对本目录) manifest.md # 元信息:来源/版本/arch/校验/产物路径/安装目标 bin/ # 交叉编译产物(静态 mipsel,如存在) (.c 源码如自研也放此) mpk/ # 「.mpk 文件」仓库:MeowAPPs 软件包(.mpk = tar.gz) README.md # .mpk 规范说明(格式/字段/安装) .mpk # 成品包(app.json + meow 二进制 + 资源;不含 data/cache) ``` > 两者定位不同:`bins/` 是**宿主侧工具**(服务/二进制,如 mDNS 应答器、netd),由 > **meow_svcd** 托管、打进固件或按需从卡 `MeowOS/opt//` 部署;`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`,应答 `.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 ` 直接安装。 ## 目标架构与工具链 - 架构:`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= state=… pid=… restart=… exit=…`。守护默认**后台**;`-f/--foreground` 前台(供 supervisor `fork/exec`+`waitpid` 托管)。 - **服务目录规则(双源板载优先)**:固件工具 → 板载 `/usr/data/meow/services.d/.conf`(Data 区, 拔卡保留);TF 工具/第三方 → TF `MeowOS/services.d/.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 `;`nyai index ` 为目录生成 `Packages` 索引 (Package/Version/Filename/Size/SHA256/Depends/Description);`nyai export ` 打包导出。 - **部署 `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//bin`,写 `bins//build.sh`(用 zig-mipsel-cc,`-Os -static`)。 2. 跑 `build.sh`,产出放 `bins//bin/`。 3. 写 `bins//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//`,由 MeowOS 启动时从卡加载(拔卡降级不崩)。 - **按需取用**:从 `MeowOS/opt//` 按需部署,不一定要全部入库;若某工具体积仍偏重(如 mdnsd 的 885~994KB),可评估更小方案(OpenWrt linkd / libmdns,或自研极简响应器——仅回 A 记录 + `_ssh` 服务)以塞进固件 <200KB。 - `.mpk` → 经 `nyai` 装到 `MeowAPPs/<包名>/`(数据建 `MeowData/<包名>/{data,cache}`)。