Files
MeowOS-SDK/tuku/pack_tuku.sh
T

93 lines
3.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# pack_tuku.sh — 一键出包 os.meow.picbrowser.mpk(根布局 tar.gz,可选内联签名)。
#
# 布局:mpk 内的条目直接是 app.json + picbrowser(无 <pkg>/ 前缀、无 ./ 前缀),
# 与安装端「.mpk 内容在 tar 根」的解包口径一致。
#
# 一键签名(推荐;os.meow.* 无签名设备会拒装):
# MEOW_SIGN_KEY=/path/to/signing.key ./pack_tuku.sh
#
# 环境变量:
# MEOW_SIGN 指定 meow_sign 可执行文件;未设时依次找 PATH 里的 meow_sign、
# 再回退 $HOME/Proj/MeowOS-For-R3P2/patch_v2/meow_sign/meow_sign。
# MEOW_SIGN_KEY 私钥路径。未设 → 警告并产出未签名包(退出码 0);
# 设了但找不到工具/密钥或签名失败 → 报错退出(不静默交付未签名包)。
# 若同目录存在 <key>.pub,签名后自动 verify。
#
# 注意:签名是往 tar.gz 尾部追加 footer。签名后的 mpk **不要**再跑 tar/gzip 类命令
# (gzip 会报 "trailing garbage ignored",属预期,不是包损坏)。因此根布局断言
# 必须在签名前用 tar -tzf 做。
set -e
cd "$(dirname "$0")"
PKG=os.meow.picbrowser
MPK="$PKG.mpk"
STAGE="build/$PKG"
[ -x picbrowser ] || ./build_tuku.sh
rm -rf "$STAGE"
mkdir -p "$STAGE"
cp app.json picbrowser "$STAGE/"
rm -f "$MPK"
tar -C "$STAGE" -czf "$MPK" app.json picbrowser
# 根布局断言(签名前):第一层有 app.json,且不带 <pkg>/ 或 ./ 前缀。
listing="$(tar -C "$STAGE" -tzf "$MPK")"
printf '%s\n' "$listing"
if ! printf '%s\n' "$listing" | grep -qx 'app.json'; then
echo "错误:$MPK 根层缺少 app.json(布局不是根布局)" >&2
exit 1
fi
if printf '%s\n' "$listing" | grep -q "^\(\./\)\?$PKG/"; then
echo "错误:$MPK 仍带 $PKG/ 前缀(嵌套布局)" >&2
exit 1
fi
find_sign_tool() {
if [ -n "${MEOW_SIGN:-}" ]; then
printf '%s\n' "$MEOW_SIGN"
elif command -v meow_sign >/dev/null 2>&1; then
command -v meow_sign
elif [ -x "$HOME/Proj/MeowOS-For-R3P2/patch_v2/meow_sign/meow_sign" ]; then
printf '%s\n' "$HOME/Proj/MeowOS-For-R3P2/patch_v2/meow_sign/meow_sign"
else
return 1
fi
}
if [ -z "${MEOW_SIGN_KEY:-}" ]; then
echo "警告:未签名(未设置 MEOW_SIGN_KEY),已产出未签名包 $MPK" >&2
echo " 设 MEOW_SIGN_KEY=<私钥> 后重跑,或手动 sign;os.meow.* 未签名设备拒装。" >&2
else
if [ ! -f "$MEOW_SIGN_KEY" ]; then
echo "错误:MEOW_SIGN_KEY=$MEOW_SIGN_KEY 不存在" >&2
exit 1
fi
if ! SIGN_TOOL="$(find_sign_tool)"; then
echo "错误:找不到 meow_sign(可用 MEOW_SIGN=/path/to/meow_sign 指定);$MPK 未签名" >&2
exit 1
fi
if [ ! -x "$SIGN_TOOL" ]; then
echo "错误:$SIGN_TOOL 不可执行(可用 MEOW_SIGN 指定可执行的 meow_sign);$MPK 未签名" >&2
exit 1
fi
if ! "$SIGN_TOOL" sign "$MPK" "$MEOW_SIGN_KEY"; then
echo "错误:meow_sign sign 失败,$MPK 仍是未签名包" >&2
echo " 若提示 cannot execute / required file not found,多半是该二进制与本机不兼容,用 MEOW_SIGN 指定可执行版本。" >&2
exit 1
fi
if [ -f "$MEOW_SIGN_KEY.pub" ]; then
if ! "$SIGN_TOOL" verify "$MPK" "$MEOW_SIGN_KEY.pub"; then
echo "错误:meow_sign verify 失败,$MPK 签名无效" >&2
exit 1
fi
else
echo "提示:未找到 $MEOW_SIGN_KEY.pub,跳过 verify"
fi
# 签名后不要再 tar -t/-z:footer 在 gzip 流外,gzip 会报 trailing garbage(预期)。
fi
ls -la "$MPK"