fix(build): M56 r1 评审三条 P2 + 一条观察(脚本权限/可复现口径注释/watchdog 参数去内联+入门禁/REPACK 显式失败)
- P2-1 repack_repro.sh 提交为 100755(scripts/build/ 下唯一非 755 的 .sh,而头注释就让人直接执行) - P2-2 注释与事实对齐:写明 squashfs/分片/ota_update.in 可复现,但 .upt 仍有 93 字节 Rock Ridge TF backup date 差异(genisoimage 无覆盖开关),验收口径仍是 体积+unpack 0 diff+进包 md5 - P2-3 watchdog 参数不再内联复制:build_watchdog.sh 认 ZIGCC(照 build_netmgrd.sh 口径), rebuild_binaries.sh 改成调它;meow_watchdog 加入 test_time32_abi.sh 的 BUILD_TARGETS(11 个)。 改后重编仍逐字节 25f769509a43d0f66287efd456c64281 / 100116,与内联那版一致 - 观察1:REPACK 显式指定但不存在 -> exit 1(此前会静默回退到不可复现的旧 repack.sh)
This commit is contained in:
1 parent
d34406ac22
commit
28fbc6094a
5 files changed
+35
-15
No files matched your search
@@ -7,7 +7,10 @@
|
|||||||
set -e
|
set -e
|
||||||
cd "$(dirname "$0")"
|
cd "$(dirname "$0")"
|
||||||
ROOT=../..
|
ROOT=../..
|
||||||
CC="$ROOT/.tools/zig-mipsel-cc"
|
# 交叉编译器:ZIGCC env 优先(与 build_netmgrd.sh 同口径;干净 worktree 里 <root>/.tools
|
||||||
|
# 这个符号链接通常不存在,重编驱动会直接传 ZIGCC 进来),其次 <root>/.tools/,最后 $HOME/.tools/
|
||||||
|
CC="${ZIGCC:-$ROOT/.tools/zig-mipsel-cc}"
|
||||||
|
[ -x "$CC" ] || CC="$HOME/.tools/zig-mipsel-cc"
|
||||||
INC="$ROOT/patch_v2/meow_launcherd" # meow_ipc.h(音量收编 v2:MSG_AUDIO_VOLUME/MSG_ACK)
|
INC="$ROOT/patch_v2/meow_launcherd" # meow_ipc.h(音量收编 v2:MSG_AUDIO_VOLUME/MSG_ACK)
|
||||||
|
|
||||||
if [ "$1" = "host" ]; then
|
if [ "$1" = "host" ]; then
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
# 缺陷版(4263 的 a1 直接指向调用方 8 字节缓冲、无宽度转换)两条都不成立。
|
# 缺陷版(4263 的 a1 直接指向调用方 8 字节缓冲、无宽度转换)两条都不成立。
|
||||||
#
|
#
|
||||||
# 用法(任意目录):
|
# 用法(任意目录):
|
||||||
# bash patch_v2/sdk/test_time32_abi.sh # 只跑构建门禁(10 个组件)
|
# bash patch_v2/sdk/test_time32_abi.sh # 只跑构建门禁(11 个组件)
|
||||||
# bash patch_v2/sdk/test_time32_abi.sh <mipsel-bin> ... # 构建门禁 + 二进制检查
|
# bash patch_v2/sdk/test_time32_abi.sh <mipsel-bin> ... # 构建门禁 + 二进制检查
|
||||||
# bash patch_v2/sdk/test_time32_abi.sh --no-builds <bin> ... # 只跑二进制检查(旧用法)
|
# bash patch_v2/sdk/test_time32_abi.sh --no-builds <bin> ... # 只跑二进制检查(旧用法)
|
||||||
# 可用 OBJDUMP=<path> 指定 objdump(默认 llvm-objdump)。
|
# 可用 OBJDUMP=<path> 指定 objdump(默认 llvm-objdump)。
|
||||||
@@ -34,7 +34,7 @@ OD="${OBJDUMP:-llvm-objdump}"
|
|||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "用法: $0 [--builds|--no-builds] [mipsel-binary ...]" >&2
|
echo "用法: $0 [--builds|--no-builds] [mipsel-binary ...]" >&2
|
||||||
echo " 无参数 / --builds 只跑构建门禁(10 个 M43 组件)" >&2
|
echo " 无参数 / --builds 只跑构建门禁(11 个 M43 组件 + meow_watchdog)" >&2
|
||||||
echo " <binary> ... 构建门禁 + 二进制检查" >&2
|
echo " <binary> ... 构建门禁 + 二进制检查" >&2
|
||||||
echo " --no-builds <binary> 只跑二进制检查" >&2
|
echo " --no-builds <binary> 只跑二进制检查" >&2
|
||||||
}
|
}
|
||||||
@@ -52,6 +52,7 @@ meow_svc_perf|patch_v2/meow_svc_perf/build_svc_perf.sh
|
|||||||
meow_powermgr|patch_v2/meow_powermgr/build_powermgr.sh
|
meow_powermgr|patch_v2/meow_powermgr/build_powermgr.sh
|
||||||
meowpanel|patch_v2/meowpanel/build_meowpanel.sh
|
meowpanel|patch_v2/meowpanel/build_meowpanel.sh
|
||||||
meow_audio|patch_v2/meow_audiod/build_audiod.sh
|
meow_audio|patch_v2/meow_audiod/build_audiod.sh
|
||||||
|
meow_watchdog|patch_v2/meow_watchdog/build_watchdog.sh
|
||||||
'
|
'
|
||||||
|
|
||||||
# 语义断言:要求 16 字节写回与「被调函数填的 8 字节 ts32 缓冲」存在数据依赖。
|
# 语义断言:要求 16 字节写回与「被调函数填的 8 字节 ts32 缓冲」存在数据依赖。
|
||||||
|
|||||||
@@ -173,12 +173,21 @@ fi
|
|||||||
|
|
||||||
echo "==> repack"
|
echo "==> repack"
|
||||||
# 优先用可复现打包器(scripts/build/repack_repro.sh:mksquashfs -repro-time +
|
# 优先用可复现打包器(scripts/build/repack_repro.sh:mksquashfs -repro-time +
|
||||||
# genisoimage -creation-date + mtime 归一化,同一输入两次打包逐字节相同)。
|
# genisoimage -creation-date + mtime 归一化)。可复现口径**到 squashfs/元数据为止**:
|
||||||
# 它不在时退回历史 repack.sh(产物布局相同,只是时间戳随墙钟)。
|
# rootfs.squashfs / 分片 / ota_update.in 两次打包逐字节相同;`.upt` 本身仍差约 93 字节
|
||||||
|
# (genisoimage 写的 Rock Ridge TF backup date,无覆盖开关),故 .upt 验收仍是
|
||||||
|
# 「体积 + unpack 0 diff + 进包 md5」。
|
||||||
|
# 未设 REPACK 时才回退历史 repack.sh(产物布局相同,时间戳全随墙钟);
|
||||||
|
# **显式指定了却不存在 → 直接失败**,免得「以为用了可复现打包器、其实悄悄退回旧路径」。
|
||||||
# 两者都按 bash 显式执行:repack.sh 的 #!/usr/bin/env bash 在 Android 上无 /usr/bin/env,
|
# 两者都按 bash 显式执行:repack.sh 的 #!/usr/bin/env bash 在 Android 上无 /usr/bin/env,
|
||||||
# 且经 su 跑时 termux-exec 的 LD_PRELOAD 被丢弃 → bad interpreter(M13 实测)。
|
# 且经 su 跑时 termux-exec 的 LD_PRELOAD 被丢弃 → bad interpreter(M13 实测)。
|
||||||
REPACK="${REPACK:-$ROOT/scripts/build/repack_repro.sh}"
|
if [ -n "${REPACK:-}" ]; then
|
||||||
|
[ -f "$REPACK" ] || { echo "!!! REPACK 显式指定但不存在: $REPACK"; exit 1; }
|
||||||
|
else
|
||||||
|
REPACK="$ROOT/scripts/build/repack_repro.sh"
|
||||||
[ -f "$REPACK" ] || REPACK="$ROOT/hiby_os_crack/scripts/repack.sh"
|
[ -f "$REPACK" ] || REPACK="$ROOT/hiby_os_crack/scripts/repack.sh"
|
||||||
|
fi
|
||||||
|
echo " repack = $REPACK"
|
||||||
# 内核镜像(unpacked_v14/xImage)未入库:干净 checkout / git worktree 里没有它,
|
# 内核镜像(unpacked_v14/xImage)未入库:干净 checkout / git worktree 里没有它,
|
||||||
# 用 XIMAGE 指到主 checkout 的那份(普通 checkout 下默认值即可)。
|
# 用 XIMAGE 指到主 checkout 的那份(普通 checkout 下默认值即可)。
|
||||||
XIMAGE="${XIMAGE:-$ROOT/unpacked_v14/xImage}"
|
XIMAGE="${XIMAGE:-$ROOT/unpacked_v14/xImage}"
|
||||||
|
|||||||
@@ -144,11 +144,10 @@ echo " ZIG=$ZIG ($("$ZIG" version 2>/dev/null || echo '?'))"
|
|||||||
[ "$do_audiod" = 1 ] && { run audiod patch_v2/meow_audiod bash build_audiod.sh; report patch_v2/meow_audiod/meow_audiod; }
|
[ "$do_audiod" = 1 ] && { run audiod patch_v2/meow_audiod bash build_audiod.sh; report patch_v2/meow_audiod/meow_audiod; }
|
||||||
[ "$do_audio" = 1 ] && { run audio patch_v2/meow_audiod bash build_audiod.sh cli; report patch_v2/meow_audiod/meow_audio; }
|
[ "$do_audio" = 1 ] && { run audio patch_v2/meow_audiod bash build_audiod.sh cli; report patch_v2/meow_audiod/meow_audio; }
|
||||||
[ "$do_launcherd" = 1 ] && { ensure_ui_a; run launcherd patch_v2/meow_launcherd bash build_launcher.sh; report patch_v2/meow_launcherd/meow_launcherd; }
|
[ "$do_launcherd" = 1 ] && { ensure_ui_a; run launcherd patch_v2/meow_launcherd bash build_launcher.sh; report patch_v2/meow_launcherd/meow_launcherd; }
|
||||||
# watchdog:不走 build_watchdog.sh —— 它按自身位置推 ROOT=../.. 再取 <root>/.tools/zig-mipsel-cc,
|
# watchdog:走它自己的 build_watchdog.sh(编译参数只有一份,改脚本即改批次)。
|
||||||
# 该符号链接只在主 checkout 里(worktree 没有),直接跑会「找不到编译器」。这里按它的同一组参数
|
# 该脚本的 CC 认 ZIGCC env(M56 r1 起的口径),所以 worktree 里 <root>/.tools 不存在也能编;
|
||||||
# (-Os -Wall -Wextra -static + MEOW_TIME32_LIBC_OVERRIDES + ../sdk/meow_time32.c)显式调用 $ZIGCC。
|
# 这里显式传 ZIGCC=,与其余组件同一个编译器,不再内联复制参数。
|
||||||
[ "$do_watchdog" = 1 ] && { run watchdog patch_v2/meow_watchdog "$ZIGCC" -Os -Wall -Wextra -static \
|
[ "$do_watchdog" = 1 ] && { run watchdog patch_v2/meow_watchdog env ZIGCC="$ZIGCC" bash build_watchdog.sh
|
||||||
-I../meow_launcherd -DMEOW_TIME32_LIBC_OVERRIDES meow_watchdog.c ../sdk/meow_time32.c -o meow_watchdog
|
|
||||||
report patch_v2/meow_watchdog/meow_watchdog; }
|
report patch_v2/meow_watchdog/meow_watchdog; }
|
||||||
|
|
||||||
echo "==> 完成。产物自证:bash scripts/build/verify_fingerprints.sh"
|
echo "==> 完成。产物自证:bash scripts/build/verify_fingerprints.sh"
|
||||||
Regular → Executable
+12
-4
@@ -1,11 +1,19 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# repack_repro.sh — .upt 打包(mksquashfs + 分片 md5 链 + ISO),**时间戳可复现**
|
# repack_repro.sh — .upt 打包(mksquashfs + 分片 md5 链 + ISO),时间戳尽量可复现
|
||||||
#
|
#
|
||||||
# 与 hiby_os_crack/scripts/repack.sh 的产物布局逐字节等价(ota_update.in / ota_v0.ok /
|
# 与 hiby_os_crack/scripts/repack.sh 的产物布局逐字节等价(ota_update.in / ota_v0.ok /
|
||||||
# ota_config.in / rootfs.squashfs.NNNN.<prev-md5> / ota_md5_rootfs.squashfs.<md5>),
|
# ota_config.in / rootfs.squashfs.NNNN.<prev-md5> / ota_md5_rootfs.squashfs.<md5>),
|
||||||
# 只是把「墙钟时间」从产物里拿掉,使同一输入**连续打包两次逐字节相同**:
|
# 只把墙钟时间从「squashfs + 元数据」里拿掉。**可复现到什么程度(实测口径,别夸大)**:
|
||||||
|
# ✅ bytes-reproducible:rootfs.squashfs、ota_md5_rootfs.squashfs.*、ota_update.in、
|
||||||
|
# 分片文件名与内容、xImage 侧 —— 同一输入连续两次打包全部相同。
|
||||||
|
# ❌ not bytes-reproducible:`.upt`(ISO)本身。genisoimage 会给 Rock Ridge `TF`
|
||||||
|
# 记录写 **backup date**(TF flag=0x1a,第三个 7 字节字段),该字段取墙钟且**没有
|
||||||
|
# 覆盖开关**(`-creation-date` 只定卷的创建/修改时间)。M56 实测两次打包 `cmp -l`
|
||||||
|
# 恰好 93 字节不同,全在该字段(分钟字节),载荷 0 差异。
|
||||||
|
# 因此 `.upt` 的验收口径仍是:**体积 + unpack 0 diff + 进包 md5**。
|
||||||
#
|
#
|
||||||
|
# 时间戳处理:
|
||||||
# 1) squashfs:`-repro-time <epoch>`(= -mkfs-time + -inode-time;mksquashfs 4.7 起)。
|
# 1) squashfs:`-repro-time <epoch>`(= -mkfs-time + -inode-time;mksquashfs 4.7 起)。
|
||||||
# 只加 -all-time 不够 —— 超级块的 mkfs_time 仍是墙钟(M60 实测)。本脚本按
|
# 只加 -all-time 不够 —— 超级块的 mkfs_time 仍是墙钟(M60 实测)。本脚本按
|
||||||
# `mksquashfs -help-all` 能力探测,依次尝试:
|
# `mksquashfs -help-all` 能力探测,依次尝试:
|
||||||
@@ -13,8 +21,8 @@
|
|||||||
# -mkfs-time <t> -inode-time <t> (4.6)
|
# -mkfs-time <t> -inode-time <t> (4.6)
|
||||||
# -mkfs-time <t> -all-time <t> (老版本)
|
# -mkfs-time <t> -all-time <t> (老版本)
|
||||||
# 都没有 → 告警并按旧口径(体积 + unpack 0 diff + 进包 md5)出货。
|
# 都没有 → 告警并按旧口径(体积 + unpack 0 diff + 进包 md5)出货。
|
||||||
# 2) ISO:genisoimage 的卷创建时间用 `-creation-date <YYYYMMDDhhmmsscc>` 固定,
|
# 2) ISO:卷创建时间用 `-creation-date <秒数>` 固定,并把暂存目录里所有文件/目录的
|
||||||
# 并把暂存目录里所有文件/目录的 mtime touch 到同一 epoch(ISO 目录记录取文件 mtime)。
|
# mtime touch 到同一 epoch(ISO 目录记录取文件 mtime)。backup date 无解,见上。
|
||||||
#
|
#
|
||||||
# 用法:
|
# 用法:
|
||||||
# repack_repro.sh -i <squashfs-root> -k <xImage> -o <out.upt>
|
# repack_repro.sh -i <squashfs-root> -k <xImage> -o <out.upt>
|
||||||
|
|||||||
Reference in new issue
Block a user