#!/bin/bash # pack_reader_mpk.sh — 把 os.meow.reader 打成 .mpk(tar.gz),并把 LGPL 合规材料并入包内。 # .mpk = app.json + reader 二进制 + icon.png + resources/licenses/{NOTICE,GPL-3.0.txt,LGPL-3.0.txt} # (不含 data/cache;符合 APPS.md §3 与 mips-repo/mpk/README.md 的 .mpk 规范) # # 合规目的:让「接收者随包拿到」NOTICE + GPL-3.0 全文 + LGPL-3.0 全文, # 满足 LGPL-3.0 §4(a)(显著通知)与 §4(b)(随 Combined Work 附 GPL + LGPL 两份文本)。 # # 用法: # ./build_reader.sh # 先编出 reader 二进制(本脚本不重编) # ./pack_reader_mpk.sh # → ./os.meow.reader.mpk(未签名) # 签名(可选,正式分发:install 期验签,os.meow.* 无签拒装): # ../meow_sign/meow_sign sign os.meow.reader.mpk "$HOME/Project/R3ProII/.keys/signing.key" # # 只做打包/sign 提示,不改阅读器功能逻辑。 set -e cd "$(dirname "$0")" PKG="os.meow.reader" MPK="$PKG.mpk" [ -f "reader" ] || { echo "找不到 ./reader —— 请先运行 ./build_reader.sh 编出二进制"; exit 1; } [ -f "app.json" ] || { echo "找不到 ./app.json"; exit 1; } [ -f "resources/licenses/NOTICE" ] || { echo "找不到 resources/licenses/NOTICE(合规材料缺失)"; exit 1; } STAGE="$(mktemp -d)" trap 'rm -rf "$STAGE"' EXIT # 组装 MeowAPPs// 布局(.mpk 内相对路径,顶层不含包名目录) cp app.json "$STAGE/" cp icon.png "$STAGE/" 2>/dev/null || true cp reader "$STAGE/" mkdir -p "$STAGE/resources/licenses" cp resources/licenses/NOTICE resources/licenses/GPL-3.0.txt resources/licenses/LGPL-3.0.txt \ "$STAGE/resources/licenses/" # busybox tar + gzip(与 launcher/nyai 同管道语义);-cz 直接出 . tar czf "$MPK" -C "$STAGE" app.json reader icon.png resources echo "== packed $MPK ==" tar tzvf "$MPK" echo "md5: $(md5sum "$MPK" | cut -d' ' -f1)" echo echo "含合规材料:resources/licenses/NOTICE + GPL-3.0.txt + LGPL-3.0.txt" echo "未签名。正式分发前 run:" echo " ../meow_sign/meow_sign sign $MPK \"\$HOME/Project/R3ProII/.keys/signing.key\""