让包管理器识别同版本重构建与降级?)
termux-packages 怎么用 TERMUX_PKG_REVISION 与 epoch如 1:5.0.0让包管理器识别同版本重构建与降级【免费下载链接】termux-packagesA package build system for Termux.项目地址: https://gitcode.com/GitHub_Trending/te/termux-packages在维护 termux-packages 仓库里的一个包时会遇到两种情况一是上游没有发新版本但你修改了补丁或构建配置包必须重新构建二是需要把包回退到旧版本或者上游版本号规则变了比如从日期式版本号改成语义化版本。这两种情况下如果build.sh里的版本信息不变apt 不会把新构建的包当作更新来分发。本文解决的就是这个问题同版本重构建通过TERMUX_PKG_REVISION实现降级与版本号规则变更通过TERMUX_PKG_VERSION里的 epoch形如1:5.0.0实现。适用环境是 termux-packages 仓库的构建脚本packages/name/build.sh依据是 CONTRIBUTING.md 中 Rebuilding package with no version change 与 Downgrading the package or changing versioning scheme 两节以及仓库内 lint 与构建脚本的实际行为。先判断该用哪一个情况手段修改位置补丁、构建配置、构建选项变化需要重构建但TERMUX_PKG_VERSION不变设置或递增TERMUX_PKG_REVISIONbuild.sh中紧跟TERMUX_PKG_VERSION的下一行包需要降级或版本号规则整体变更给TERMUX_PKG_VERSION加 epoch格式{EPOCH}:{VERSION}build.sh的TERMUX_PKG_VERSION变量CONTRIBUTING.md 的原话重构建是为了让包被识别为更新而 epoch 是to tell package manager force recognize new version as package update告诉包管理器把新版本强制识别为包的更新。同版本重构建设置 TERMUX_PKG_REVISION写法与位置TERMUX_PKG_REVISION必须紧挨在TERMUX_PKG_VERSION正下方这是 CONTRIBUTING.md 明确要求的TERMUX_PKG_VERSION1.0 TERMUX_PKG_REVISION4如果这个变量已经存在递增它的值如果不存在新建这一行。构建系统如何处理这个值可以看 termux_step_start_build.shTERMUX_PKG_REVISION的默认值是0见 termux_step_setup_variables.sh当它不为0时构建出的完整包版本会追加-$TERMUX_PKG_REVISION后缀。也就是说TERMUX_PKG_VERSION1.0配TERMUX_PKG_REVISION4最终包版本是1.0-4比仓库里已发布的1.0-0或不带后缀的1.0更大apt 因此把它当更新处理。递增必须 1且版本升级时要删掉它lint-packages.sh 对版本变更做了三层检查写build.sh时要按它的规则来修改包构建后TERMUX_PKG_VERSION或TERMUX_PKG_REVISION必须有一个变大否则 CI 报FAILED提示 Version of xxx has not been incremented版本没变时TERMUX_PKG_REVISION必须恰好 1顺序递增CI 会给出Got: x - y / Expected: x - z的对照一旦TERMUX_PKG_VERSION本身升级了TERMUX_PKG_REVISION必须删掉重置为 0否则 CI 报 TERMUX_PKG_VERSION was bumped but TERMUX_PKG_REVISION wasnt reset。CONTRIBUTING.md 的更新包流程同样写明升级版本时Be careful to not remove the epoch并且If there isTERMUX_PKG_REVISIONvariable set, remove it. Revision should be set only for subsequent package builds within the same version.用 revbump 自动递增可选CI 失败信息中直接给出了自动化工具./scripts/bin/revbump package。revbump 的行为包的build.sh里已有TERMUX_PKG_REVISION时将其 1没有时在TERMUX_PKG_VERSION行下方插入TERMUX_PKG_REVISION1./scripts/bin/revbump --dependencies package则对把package写进TERMUX_PKG_DEPENDS或TERMUX_PKG_BUILD_DEPENDS的所有包批量递增。注意副作用这个脚本会直接改写仓库中对应的build.sh文件用之前确认当前分支允许修改--dependencies模式会改动多个包适合主库升级如 OpenSSL 升级后重构建其依赖这类场景而不适用于只想改一个包的场景。降级与版本规则变更给 TERMUX_PKG_VERSION 加 epoch当包需要降级、或版本号体系变化时TERMUX_PKG_REVISION不够用要设 epoch。epoch 写在同一个变量里格式为{EPOCH}:{VERSION}CONTRIBUTING.mdTERMUX_PKG_VERSION1:5.0.0仓库里有真实用例packages/fmt/build.shTERMUX_PKG_VERSION1:11.2.0 TERMUX_PKG_SRCURLhttps://github.com/fmtlib/fmt/archive/refs/tags/${TERMUX_PKG_VERSION#*:}.tar.gz注意 epoch 会进入TERMUX_PKG_VERSION的值所以下游引用版本的字符串要剔除前缀。上面 fmt 用的是${TERMUX_PKG_VERSION#*:}CONTRIBUTING.md 给出的示例是${TERMUX_PKG_VERSION:2}截取方式两种写法目的相同TERMUX_PKG_SRCURL必须指向与TERMUX_PKG_VERSION和TERMUX_PKG_SHA256对应的确定性下载地址。版本字符串的合法格式来自 CONTRIBUTING.md 的版本规则必须以数字开头除.、-、外不允许特殊字符冒号:仅在指定 epoch 时允许。合法示例1.0、20201001、10a带 epoch 示例1:2.6.0。两条与降级直接相关的约束lint-packages.sh 在检测到新包版本小于仓库基线版本时除了 epoch 之外还提示如果只是回退到旧版本可用really后缀例如TERMUX_PKG_VERSIONnewreallyold。这是文档给出的两条替代路径epoch 用于版本规则整体变更的场景。CONTRIBUTING.md 明确要求非 termux collaborator 提交降级 PR 时必须在 PR 描述中说明降级原因没有正当理由的降级 PR 会被拒绝。验证看 CI 的 lint 结果修改build.sh后提交 PR验证方式是检查 GitHub ActionsCI状态其中版本检查来自 lint-packages.sh。它先用dpkg --validate-version校验版本串合法性再与基线版本比较输出形如PASS - 1.0-0 - 1.0-1或失败时FAILED 1.0-0 - 1.0-0 Version of xxx has not been incremented. Either TERMUX_PKG_VERSION or TERMUX_PKG_REVISION need to be modified in the build.sh when changing a package build. You can use ./scripts/bin/revbump xxx to do this automatically.出现FAILED就按提示修补TERMUX_PKG_REVISION或递增它再重推CONTRIBUTING.md 要求 CI 失败时要么修好、要么关闭 PR维护者只会在问题很小时代劳。另外 scripts/updates/utils/termux_pkg_upgrade_version.sh 这类版本升级工具在改TERMUX_PKG_VERSION的同时会删掉TERMUX_PKG_REVISION行与版本升级必须清除 REVISION的规则一致。提交信息的配套写法按 CONTRIBUTING.md 的 commit 规范这两类改动对应固定前缀降级用dwnpkg(repo/package): 旧版本号提交信息须说明降级理由因共享库升级等触发的重构建用rebuild(repo/package)批量重构建依赖时的示例格式是rebuild(deps:main/openssl): link against OpenSSL 3.0。repo取main、root或x11对应包所在目录如 root-packages、x11-packages。限制epoch 与 REVISION 都是让 apt 把新构建识别为更新的手段不是独立版本号REVISION 只在同一TERMUX_PKG_VERSION内的后续构建使用版本一升级就必须移除epoch 一旦加上后续升级版本时不能误删CONTRIBUTING.md 在更新流程第一步特意提醒了这一点。版本不能以 Git hash 或分支名充当使用特定 Git commit 时TERMUX_PKG_VERSION必须是YYYY.MM.DD或YYYYMMDD形式的提交日期。本文只覆盖build.sh中版本与重构建的声明构建本身仍要走仓库既有的构建流程build.sh里其它变量依赖、补丁等的修改规则不在本文范围。【免费下载链接】termux-packagesA package build system for Termux.项目地址: https://gitcode.com/GitHub_Trending/te/termux-packages创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考