ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

chsrc 的 deb 包:Debian/Ubuntu 下安装、构建与 CI 发布全指南

chsrc 的 deb 包:Debian/Ubuntu 下安装、构建与 CI 发布全指南 CLI开发工具【免费下载链接】chsrcchsrc 全平台通用换源工具与框架. Change Source everywhere for every software项目地址https://gitcode.com/gh_mirrors/ch/chsrc点击查看免费下载本文以pkg/deb/目录下的官方文档README.md、BUILD.md、CI.md为骨架结合仓库中真实的 debian 打包配置、Makefile 与测试脚本源码系统讲解 chsrc 全平台换源工具在 Debian/Ubuntu 体系下的 deb 包使用全流程。读完本文你将掌握普通用户安装 deb 包的方法、高级用户手动构建与交叉编译的完整步骤以及 deb 包自动化构建与发布CI/CD的触发机制。chsrc 是一个用 C 编写的Change Source everywhere全平台通用换源工具能够自动检测并为各种软件源apt、pip、npm、RubyGems 等切换到更快的镜像。为了覆盖 Debian 系发行版用户项目维护了独立的 deb 打包目录 pkg/deb/既提供现成的二进制包供普通用户下载也开放了完整的构建规则供高级用户自行打包。本文将从安装 — 构建 — 验证 — CI 发布 — 底层原理五个层次展开。一、deb 包相关文件总览pkg/deb/目录围绕 deb 包维护了三类文件CI 配置文件、构建配置与测试脚本。官方 README.md 将其归纳如下文件作用.github/workflows/pkg-deb.ymlCI 配置文件详见 CI.mdCI.mddeb 包 CI/CD 情况说明./debian/即 pkg/deb/debian/deb 包构建配置目录BUILD.md如何手动构建 deb 包Makefiledeb 包构建 Makefiledeb-installation-test.shdeb 包已正确安装测试脚本需要注意的是镜像仓库中未包含.github/workflows/pkg-deb.yml文件本身但其构建与发布策略已完整记录在 CI.md 中见下文六、CI 自动化构建与发布。此外项目顶层 pkg/README.md 也确认了 deb 是 chsrc 已完成的打包分发渠道之一- [x] deb。二、普通用户安装两条命令完成根据 README.md 的说明普通用户应从项目的 GitHub Releases 页面下载适合自己平台的 deb 包然后执行sudo dpkg -i chsrc_*.deb sudo apt-get install -f # Fix any dependency issues第一条命令dpkg -i完成包的解包与安装chsrc_*.deb通配符可匹配下载到的具体版本文件名如chsrc_0.2.3-1_amd64.deb第二条命令apt-get install -f用于自动修复可能存在的依赖问题。由于 debian/control 中声明的Depends: ${shlibs:Depends}, ${misc:Depends}会在构建时展开为对libc6等共享库的依赖在大多数已经装好基础运行库的系统上dpkg -i通常即可直接成功但为了稳妥官方流程仍建议补齐这条依赖修复命令。安装完成后chsrc二进制会被放置到/usr/bin/chsrc并提供chsrc help、chsrc list等子命令。项目顶层 Makefile 的install目标显示deb 包除二进制外还会安装 man 手册/usr/share/man/man1/chsrc.1源文件为 doc/chsrc.1以及 bash 自动补全脚本/usr/share/bash-completion/completions/chsrc源文件为 tool/completion/bash_completion.sh。三、debian/ 目录结构详解deb 包的构建元数据全部位于 pkg/deb/debian/。官方 README.md 给出的目录结构如下debian/ ├── changelog # 版本更新日志 ├── compat # debhelper 兼容性版本 ├── control # 包控制信息和依赖 ├── copyright # 版权信息 ├── postinst # 安装后脚本 ├── prerm # 卸载前脚本 └── rules # 构建规则其中postinst和prerm是带x执行权限的可执行文件。对照当前仓库实际内容目录中共有 6 个文件changelog、control、copyright、postinst、prerm、rules。README 中列出的compat文件在当前的 debhelper 13 时代已不再需要——这一改动记录在 pkg/deb/Makefile 的注释中这些本是 debhelper 兼容性版本debian/compat为 9 时所需要定义的 targets然而现在已经为版本 13debian/compat 已移除不再需要这些 targets仅出于实用目的保留。各文件的职责如下3.1 control包控制信息与依赖debian/control 是 dpkg 元数据的核心分为源包段与二进制包段Source: chsrc Section: utils Priority: optional Maintainer: sanchuanhehe wyihe5520gmail.com Build-Depends: debhelper-compat ( 13), build-essential, libc6-dev Standards-Version: 4.6.0 Homepage: https://chsrc.run/ Package: chsrc Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: Change Source - A tool for changing software sourcesBuild-Depends声明构建期依赖debhelper-compat ( 13)固定 debhelper 兼容级别为 13这正是debian/compat文件被移除的原因、build-essential提供编译工具链、libc6-dev提供 C 标准库开发头文件Architecture: any表示该包可以针对任意架构编译为下文交叉编译提供了合法性基础Depends使用 debhelper 的模板变量${shlibs:Depends}自动收集二进制链接到的共享库依赖与${misc:Depends}收集 debhelper 生成的依赖构建时由dh_shlibdeps自动展开。3.2 changelog版本历史debian/changelog 遵循 Debian 标准的 changelog 格式按时间倒序记录chsrc (0.2.3-1) unstable; urgencymedium * v0.2.3 已发布 -- 曾奥然 ccmywishqq.com Wed, 29 Oct 2025 11:29:05 0800目前已收录0.0.1-1首个 deb 包、0.1.9-1、0.2.3-1三个版本。该文件同时也会被安装到系统/usr/share/doc/chsrc/changelog.Debian.gz用户可随时查阅见下文 4.4 节。3.3 copyright版权与许可证声明debian/copyright 采用 Debian 的 machine-readable copyright 格式SPDX 1.0按文件划分许可证Files: *项目主体代码License 为GPL-3Files: lib/xy.h核心头文件 lib/xy.hLicense 为MITFiles: pkg/deb/debian/*本打包目录自身License 为GPL-3。该文件在安装后位于/usr/share/doc/chsrc/copyright供用户核查许可证义务。3.4 postinst安装后脚本debian/postinst 在包配置阶段configure执行三项工作更新 man 数据库mandb -q /usr/share/man/man1/chsrc.1确保man chsrc立即可用确保可执行权限chmod x /usr/bin/chsrc打印安装提示提醒用户重启终端以启用自动补全并建议运行chsrc help开始使用。脚本对abort-upgrade|abort-remove|abort-deconfigure等中断场景为空处理并以#DEBHELPER#标记由 debhelper 自动展开维护片段。3.5 prerm卸载前脚本debian/prerm 处理remove|upgrade|deconfigure等卸载场景。由于 chsrc 卸载无需清理特殊系统状态目前各分支均为空实现Nothing special to do during removal仅保留 Debian 脚本的标准骨架与#DEBHELPER#占位。3.6 rules构建规则核心debian/rules 是 deb 构建的真正驱动者其工作机制值得展开%: dh $ override_dh_auto_build: $(MAKE) -C $(Chsrc-Root-Dir) build-in-release-mode override_dh_auto_install: $(MAKE) -C $(Chsrc-Root-Dir) install DESTDIR$(CURDIR)/debian/chsrcdebuild调用dpkg-buildpackage后者通过fakeroot debian/rules target执行本文件由于通配目标%:的存在所有任务都会被透传给 debhelper 序列debian/rules target等价于dh target将依次调用dh clean、dh build此处被override_dh_auto_build覆盖、dh binary此处被override_dh_auto_install覆盖override_dh_auto_build切换到 chsrc 仓库根目录Chsrc-Root-Dir $(CURDIR)/../../即仓库根目录调用顶层 Makefile 的build-in-release-mode目标编译发布模式二进制override_dh_auto_install以DESTDIR$(CURDIR)/debian/chsrc调用顶层 Makefile 的install目标将二进制、man 页、补全脚本安装到临时 staging 目录中再由dh_install/dh_compress等后续步骤收集成最终.deb。四、高级用户手动构建 deb 包普通用户直接下载 Release 包即可高级用户可按 BUILD.md 自行构建。4.1 构建前置依赖sudo apt-get update sudo apt-get install build-essential debhelper devscripts fakerootbuild-essentialC 编译工具链gcc、make 等debhelper提供dh系列构建辅助工具兼容级别 13 由 debian/control 的Build-Depends声明devscripts提供debuild封装命令fakeroot在非 root 环境下模拟 root 权限使包内文件获得正确的属主与权限。4.2 一键构建git clone https://github.com/RubyMetric/chsrc.git cd chsrc # 进入 deb 目录 cd pkg/deb # 执行构建命令 ./Makefile deb-make注意./Makefile deb-make实际上是让 make 以该文件作为 Makefile 执行deb-make目标——而由 pkg/deb/Makefile 源码可知其真正暴露的目标是all默认目标、deb-build、deb-prepare、deb-clean其中deb-build依赖deb-prepare并执行debuild -us -uc -b。因此更规范的写法是make -f Makefile # 等价于 make -f Makefile deb-builddebuild -us -uc -b中各参数含义-us跳过源码签名、-uc跳过 changelog 签名本地构建无需 GPG、-b仅构建二进制包。构建产物.deb、.ddeb、.changes、.buildinfo、.build会输出到pkg/deb/的上级目录仓库根目录中。4.3 调试构建与产物检查# 启用详细输出 DEB_BUILD_OPTIONSnocheck debuild -us -uc -b # 检查构建日志 less ../chsrc_*.build # 检查包内容 dpkg --contents ../chsrc_*.deb # 或 dpkg-deb --contents ../chsrc_*.debDEB_BUILD_OPTIONSnocheck指示 debhelper 跳过测试阶段若顶层规则在构建中启用了check适合本地快速迭代dpkg --contents与dpkg-deb --contents等价均可列出包内文件清单用于核对二进制、man 页与补全脚本是否如 3.6 节所述正确打包。4.4 交叉编译得益于 debian/control 的Architecture: any可以用dpkg-buildpackage的-a参数为目标架构交叉编译# For ARM64 CCaarch64-linux-gnu-gcc dpkg-buildpackage -us -uc -b -aarm64 # For ARMv7 (armhf) CCarm-linux-gnueabihf-gcc dpkg-buildpackage -us -uc -b -aarmhf前提是系统已安装对应的交叉工具链如gcc-aarch64-linux-gnu、gcc-arm-linux-gnueabihf并通过CC...环境变量告知编译系统使用目标架构编译器。4.5 安装与安装情况验证sudo dpkg -i ../chsrc_*.deb sudo apt-get install -f # 修复依赖问题 # 运行安装测试脚本 bash ./deb-installation-test.sh # 查看文档安装情况 man chsrc # 查看 deb 包的 copyright cat /usr/share/doc/chsrc/copyright # 查看 deb 包 changelog zless /usr/share/doc/chsrc/changelog.Debian.gzman chsrc依赖 doc/chsrc.1 这份 troff 格式手册被正确安装并由 postinst 刷新 man 数据库changelog.Debian.gz来自 debian/changelogcopyright来自 debian/copyright。4.6 清理构建产物./Makefile deb-clean从 pkg/deb/Makefile 源码看deb-clean会删除 staging 目录debian/chsrc/以及上级目录中所有chsrc_*.deb、chsrc-dbgsym_*.ddeb、chsrc_*.changes、chsrc_*.buildinfo、chsrc_*.build构建产物。4.7 卸载与完全清除sudo apt-get remove chsrc仅删除程序本体如需连配置文件一起彻底清除sudo apt-get purge chsrc4.8 常见故障排查BUILD.md 给出的排查要点构建失败检查 debian/control 中的Build-Depends依赖是否完整、版本是否匹配尤其是 debhelper 兼容级别 13交叉编译失败确认目标架构的交叉工具链已正确安装且CC环境变量指向的编译器与-a指定的架构一致安装测试失败检查 postinst 脚本是否有错误——例如mandb不存在或 man 页路径错误都会导致configure阶段异常。五、安装正确性的自动化验证pkg/deb/deb-installation-test.sh 是官方提供的已正确安装验证脚本set -e任一测试失败即退出共包含 3 组检查Test 1 — 二进制存在且可执行校验/usr/bin/chsrc文件存在且带-x可执行权限对应 postinst 中的chmod x /usr/bin/chsrc。Test 2 — man 页存在校验/usr/share/man/man1/chsrc.1是否存在。注意这是WARNING级别而非错误——man 页缺失不会导致测试失败。Test 3 — 基本功能可用实际执行/usr/bin/chsrc help与/usr/bin/chsrc list两个子命令验证二进制在安装环境下能够正常运行对应 postinst 中Run chsrc help to get started的提示。全部通过后脚本输出All installation tests of deb package chsrc passed!。这套脚本既可用于本地手工构建后的验证BUILD.md 中bash ./deb-installation-test.sh也可作为 CI 发布前把关的最后一道工序。六、CI 自动化构建与发布CI.md 记录了 deb 包从构建到发布的完整 CI/CD 策略。6.1 支持的架构与构建产物当前 CI 支持amd64x86_64架构的构建每次 CI 构建产生两类产物deb 包文件chsrc_version-1_arch.deb命名与 debian/changelog 中的版本号对应如chsrc_0.2.3-1_amd64.debAPT 仓库元数据Packages与Packages.gz用于将产物组织成可供 apt 直接消费的软件源。6.2 自动触发时机CI 在三种情况下自动运行Push 事件当代码 push 到gh-build分支时自动构建并将 deb 包上传到名为pre的特定 release 中可理解为预发布通道Release 事件当创建新的 release 时自动构建并将 deb 包上传到最新的这个 release 中正式发布通道手动触发可在 GitHub Actions 页面手动触发构建用于按需验证。6.3 手动发布流程官方建议的发布步骤确保所有代码已合并到主分支更新版本号和 debian/changelog版本号需要与 git tag 保持一致创建并推送 git taggit tag v1.2.3 git push origin v1.2.3在 GitHub 上创建 release触发 6.2 中的 Release 事件CI 将自动构建并上传 deb 包。七、从源码理解打包链路将各文档串联起来chsrc 的 deb 打包完整链路是debuild -us -uc -b └─ dpkg-buildpackage └─ fakeroot debian/rules target └─ dh target ├─ override_dh_auto_build → make -C 仓库根 build-in-release-mode # 顶层 Makefile 编译发布版 └─ override_dh_auto_install → make -C 仓库根 install DESTDIRdebian/chsrc # 安装到 staging └─ 顶层 install 目标 install -D -m 755 release二进制 /usr/bin/chsrc install -D -m 644 doc/chsrc.1 /usr/share/man/man1/chsrc.1 install -D -m 644 tool/completion/bash_completion.sh /usr/share/bash-completion/completions/chsrc顶层 Makefile 的build-in-release-mode目标使用发布优化参数CFLAGS_optimization编译与开发模式区分顶层 Makefile 的install目标通过DESTDIR前缀完成重定位安装这正是 debhelper staging 目录机制能够工作的前提pkg/deb/debian/rules 通过$(CURDIR)/../../回到仓库根目录因此构建必须在pkg/deb目录下进行pkg/deb/Makefile 注释也强调了这一约束。理解这条链路后无论是排查构建失败、扩展新架构如arm64还是定制安装内容都能精准定位到对应的 Makefile 目标与 debian 配置文件的改动位置。小结chsrc 的 deb 包体系是一条完整、自洽的工程链路面向普通用户提供下载即装的二进制体验dpkg -i两条命令面向高级用户开放可复现的手工构建流程依赖声明、一键构建、交叉编译、产物检查、卸载清理面向维护者提供自动化发布通道gh-build分支、Release 事件与手动触发三类入口。核心配置集中在 pkg/deb/debian/ 的 6 个文件中构建入口是 pkg/deb/Makefile 与顶层 Makefile安装正确性由 deb-installation-test.sh 把关三者共同保证了 Debian/Ubuntu 用户能够以最标准的方式获得 chsrc 的换源能力。赞分享CLI开发工具【免费下载链接】chsrcchsrc 全平台通用换源工具与框架. Change Source everywhere for every software项目地址https://gitcode.com/gh_mirrors/ch/chsrc点击查看免费下载相关推荐如何为旧版 Debian 或 Ubuntu 用 cargo-deb 构建 Helix .deb 包如何为旧版 Debian 或 Ubuntu 用 cargo deb 构建 Helix .deb 包 Helix 发布页提供的官方 .deb 包可能使用了比你系统代码编辑器开发工具CLIHTTPie Debian/Ubuntu 打包实战独立二进制、FPM 构建与 .deb 索引发布全流程HTTPie Debian/Ubuntu 打包实战独立二进制、FPM 构建与 .deb 索引发布全流程 本篇技术指南以仓库 docs/packaging/liCLI开发工具x-cmd release debDebian/Ubuntu DEB 包构建与发布实战指南x cmd release debDebian/Ubuntu DEB 包构建与发布实战指南 导读 x cmd release deb 是 x cmd 项目为CLI开发工具AI Agent人工智能包管理器上一篇DownKyi终极指南3步轻松下载B站8K超高清视频下一篇UmiJS 4 终极性能优化指南5步解决打包文件过大导致的页面加载缓慢问题创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表