# sr6110_rebuild **Repository Path**: webxx/sr6110_rebuild ## Basic Information - **Project Name**: sr6110_rebuild - **Description**: sr6110 rebuild enable dropbear etc. - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-25 - **Last Updated**: 2026-10-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # sr6110_rebuild 给 **ZTE SR6110**(巡天 AX3000 Pro+,ZX279133)定制固件并刷入槽 A 的工具链。 特点是**保留厂商内核和厂商用户态**,只重建 rootfs —— 所以 WiFi、交换机、PON 全部照常工作, 你拿到的就是"原厂系统 + 你的改动":SSH、持久 `/etc`、完整命令行工具、你自己的程序、自定义防火墙。 ``` U-Boot ──tftpboot──▶ sr6110-rebuild.itb (OpenWrt 内核 + initramfs,只在内存运行) │ │ 执行:srfix ▼ 从槽 B 读原厂 rootfs(解密 → 挂载 → 拷贝) 覆盖你的 payload 跑你的 hook 删掉 remove.list 里的文件 mkfs.jffs2 → 加密 → 写入槽 A 自动更新版本头 CRC │ ▼ 重启 → 厂商内核 + 你重建的 rootfs ``` **在你执行 `srfix` 之前,flash 一点都不会被写。** 单纯 `bootm sr6110-rebuild.itb` 进去看看是绝对安全的。 --- ## 环境要求 | 项目 | 说明 | |---|---| | Linux / WSL2 | bash、python3(不需要 rsync)| | 磁盘空间 | 约 10 GB(构建树 + 编译产物)| | 网络(仅首次)| 克隆 OpenWrt 分支,约 1-2 GB | | 串口 | `ttyAMA0 115200 8n1`,用来打断 U-Boot | | TFTP 服务 | 仓库自带 `host/tftpd.py` | 静态工具(`busybox`、`dropbear`、`srdec`、`srcrypt`、`mtdwrite`、`losetup`、`mkfs.jffs2`) **已预编译提交**,所以构建树准备好之后,出镜像是可以离线完成的。 --- ## 一条命令开始 ```bash git clone <本仓库地址> sr6110_rebuild cd sr6110_rebuild ./build.sh ``` 第一次运行会问你三个问题(都带默认值,**回车即可**): ``` 构建目录(OpenWrt 源码 / 从快照恢复到这里) [~/sr6110_openwrt]: 镜像输出目录(给 TFTP 用) [~/tftp]: 离线快照路径(没有就留空,将联网克隆) []: ``` 问完自动做完剩下所有事: ``` 配置 → 准备环境 → 叠加改动 + 安装静态工具 → 编译 → 校验镜像内容 → 拷到 TFTP 目录 → 打印刷机步骤 ``` **产物**:`out/sr6110-rebuild.itb`(同时复制到 `TFTP_DIR`),并打印 sha256。 ### 环境从哪来(自动判断,无需你干预) | 情况 | 行为 | |---|---| | `env/` 里放了离线快照 | **完全离线**:自动解压恢复 + 构建 | | `IW_DIR` 里已有构建树 | 直接复用 | | 两者都没有 | 联网 `git clone` 上游分支(约 1-2 GB)| 所以最省事的两种用法: ```bash # A. 有网 ./build.sh # 首次填回车,自动克隆后构建 # B. 断网 / 上游仓库被删 # 把 sr6110-snapshot-*.tar.zst 丢进 env/,然后 ./build.sh # 自动恢复 + 构建 ``` ### 常用开关 ```bash ./build.sh --clean-env # 删掉构建树从头来 ./build.sh --no-deploy # 不拷到 TFTP 目录 ./build.sh --rebuild-tools # 用 tools/src 重新编译静态工具 rm config.env && ./build.sh # 重新配置 ``` 也可以预先用环境变量跳过交互(适合脚本化): ```bash IW_DIR=/data/openwrt TFTP_DIR=/srv/tftp ./build.sh ``` `make` 是同一套的别名:`make build` / `make setup` / `make deploy`。 ### 首次构建要多久(实体机实测) 8 线程 / 5 GB 内存 / 全新源码副本,`JOBS=4`: | 阶段 | 耗时 | |---|---| | 宿主工具(mpc、elfutils、mtd-utils…)| ~8 分钟 | | **交叉工具链**(binutils + gcc ×2 + musl)| **~34 分钟** | | 目标包 + 内核 6.18 | ~11 分钟 | | 镜像打包 + 校验 | ~1 分钟 | | **合计** | **约 55 分钟** | 第二次构建(增量)通常 1-3 分钟。内存紧张时把 `config.env` 里的 `JOBS` 调小。 --- ## 刷完之后有什么 | 能力 | 说明 | |---|---| | SSH | 静态 dropbear,用户 `Z500_w9bZ` 和 `root`,密码 `Sr6110Net` | | 持久 `/etc` | overlayfs,upper 目录在腾出来的 YBB 插件分区(约 5 MB)| | 持久数据区 | `/etc/data/{dlspeed,uu,status}`,约 13 MB | | 完整工具链 | `/etc/srfix-bin` 里 70+ 个 busybox applet(dd、nc、od、dos2unix…)| | 自定义防火墙 | `SRFIX` iptables 链,开机由 `/etc/rc_ext` 应用一次 | | WireGuard | `/etc/wg`:`wireguard.ko` + `wg-tool2` + `wg-start.sh`,开机由 `/etc/rc_ext` 启动 | | NAS(sshfs)| `/etc/nasbin`:sshfs 3.7.3 + dbclient + fusermount3 + `mount-nas.sh` / `umount-nas.sh` | | 串口 shell | `ttyAMA0` 上是真正的登录 shell | | 网络 / WiFi / PON | 完全没动,还是厂商那套 | 刷机镜像本身是**精简过的**:48 个包、零 feed、无 LuCI/OpenSSL, 体积从 13.0 MB 降到 11.4 MB。细节见 [docs/BUILD.md](docs/BUILD.md#6b-精简配置为什么只有-48-个包)。 --- ## 目录结构 ``` build.sh ← 唯一入口:./build.sh config.env 首次运行自动生成(已 gitignore) env/ 放离线快照的地方(已 gitignore) openwrt/ 我们对 OpenWrt 树的改动,原样叠加进去 config 裁剪过的 .config(48 个包) feeds.conf 空的:不需要任何 feed target/linux/zte/ DTS、image Makefile、内核配置 .../zx279133/base-files/ srfix、hook、remove.list、防火墙、uci-defaults prebuilt/ 预编译的静态 aarch64 工具,结构与 base-files 一致 tools/src/ srdec / srcrypt / mtdwrite / losetup 的 C 源码 scripts/ configure.sh 交互式写 config.env build.sh 一条命令:准备 → 构建 → 校验 → 部署 setup.sh 叠加 overlay + 安装 prebuilt + 写 .config deploy.sh 把镜像拷到 TFTP_DIR dump-header.sh 从全盘备份里提取 vendor/hdr_block.bin make-snapshot.sh 打离线快照 restore-snapshot.sh 从快照恢复构建环境 verify-snapshot.sh 校验快照完整性 host/ verify-itb.py 校验镜像里 srfix 需要的东西是否齐全 mk_hdr.py 按 rootfs 密文 CRC 生成版本头块 tftpd.py 极简 TFTP 服务器 recv_dump.py 接收设备主动推送的文件(nc) vendor/ 你自己的固件数据放这里(已 gitignore) out/ 构建产物(已 gitignore) ``` --- ## 怎么定制 日常要改的东西都在一个地方: | 想做什么 | 改哪个文件 | |---|---| | 加程序 / 加配置文件 | `openwrt/.../base-files/etc/srfix/payload/<路径>` | | 改现有厂商文件 | `openwrt/.../base-files/etc/srfix/hook.sh`(用 `$ROOT`)| | 腾出 26.7 MB 分区里的空间 | `openwrt/.../base-files/etc/srfix/remove.list` | | 开机自启 | 在 `hook.sh` 里往 `/etc/rc_ext` 追加(**不要**改 `/etc/inittab`)| | 加防火墙规则 | `openwrt/.../base-files/etc/srfix/payload/etc/srfix-fw` | 详见 [docs/CUSTOMIZE.md](docs/CUSTOMIZE.md)。 --- ## 文档 | 文档 | 内容 | |---|---| | [docs/BUILD.md](docs/BUILD.md) | 构建内部流程、overlay 内容、常见失败 | | [docs/FLASH.md](docs/FLASH.md) | 刷机步骤、版本头机制、回滚方法 | | [docs/CUSTOMIZE.md](docs/CUSTOMIZE.md) | payload / hook / remove.list / 自启 / 防火墙 | | [docs/SNAPSHOT.md](docs/SNAPSHOT.md) | **离线自足**:快照、校验、恢复、3-2-1 存放 | | [docs/FAQ.md](docs/FAQ.md) | 已经踩过的坑 | --- ## 离线自足(别人删仓库也能用) 默认构建要从 6 个外部仓库拉源码。如果想让项目完全自主可控: ```bash # 打一个离线快照(源码 + dl,约 150 MB) ./scripts/make-snapshot.sh # 校验它 ./scripts/verify-snapshot.sh sr6110-snapshot-*.tar.zst # 断网、上游全消失,从快照重建 ./scripts/restore-snapshot.sh sr6110-snapshot-*.tar.zst ./scripts/build.sh --skip-setup ``` 快照 + 本仓库(1.6 MB)+ 你自己的全盘备份(128 MB)= **约 280 MB, 在完全断网、所有 upstream 都被删除的情况下仍可构建并刷回一台可用设备。** 精确的版本 pin 记在 [feeds.lock](feeds.lock)。存放建议(3-2-1 原则)见 [docs/SNAPSHOT.md](docs/SNAPSHOT.md)。 --- ## 第三方程序与私钥 `openwrt/.../etc/srfix/payload/` 是权威副本:`./build.sh` 在编译前会把它 `rsync -a --delete` 覆盖到构建树(`$IW_DIR/target/linux/.../base-files/`), **只改仓库就生效**;`prebuilt/` 的静态工具由 `setup.sh` 在同步之后补进去。 | 路径 | 内容 | |---|---| | `payload/etc/wg/` | `wireguard.ko`、`wg-tool2`、`wg-start.sh`、`pc.pub` | | `payload/etc/nasbin/` | `sshfs`、`dbclient`、`fusermount3`、`mount-nas.sh`、`umount-nas.sh` | 两个**私钥永远不进 git**: | 文件 | 用途 | |---|---| | `/etc/wg/server.key` | WireGuard 身份。换了它,PC / 手机上现有的配置全部失效 | | `/etc/wg/ssh/id_ed25519` | NAS 的 SSH 私钥(`mount-nas.sh` 用)| 它们放在仓库外的 `~/sr6110-secrets/`(默认位置,可用 `config.env` 里的 `SECRETS_DIR` 改)。`build.sh` 把它们复制进构建树的 payload,hook 再 `chmod 600`(`srfix` 对所有 payload 文件强制 755)。第一次这样准备: ```bash mkdir -p ~/sr6110-secrets && chmod 700 ~/sr6110-secrets ssh Z500_w9bZ@192.168.10.2 'cat /etc/wg/server.key' > ~/sr6110-secrets/wg-server.key ssh Z500_w9bZ@192.168.10.2 'cat /etc/wg/ssh/id_ed25519' > ~/sr6110-secrets/wg-ssh-id_ed25519 chmod 600 ~/sr6110-secrets/* ``` 缺了密钥 `build.sh` **直接报错退出**,不会悄悄生成新密钥把现有配置作废 (`wg-start.sh` 里只有"镜像里意外没有私钥"时才现场生成并记录新公钥)。 `pc.pub` 是客户端的**公**钥,可以进仓库。 --- ## 安全须知 - 槽 A 是正在运行的系统。刷坏了引导器会回退到槽 B,而**厂商系统启动后会拿槽 B 覆盖槽 A**, 你刚刷的东西就被抹掉了。所以版本头必须写对 —— `srfix` 会替你做,并且写后校验。 - **务必备份你自己这台机器的 128 MB 全盘镜像**。写坏 U-Boot 时它是唯一的回头路, 见 [vendor/README.md](vendor/README.md)。 - 看到 `srfix` 打印 `!! HEADER NOT UPDATED` 时,**不要**执行 `cspstart`。 --- ## 法律说明 本仓库**不包含任何厂商固件**。如果你需要 `vendor/hdr_block.bin` 或全盘备份, 请从你自己的设备提取(见 [vendor/README.md](vendor/README.md))。 OpenWrt 构建树在构建时从它自己的仓库克隆,遵循其原有许可。