
bottom 打包与分发指南预编译产物、手动构建与安装源接入【免费下载链接】bottomYet another cross-platform graphical process/system monitor.项目地址: https://gitcode.com/GitHub_Trending/bo/bottom本文是 bottom跨平台图形化进程/系统监控终端工具二进制名为btm的打包与分发技术指南面向希望参与包维护、构建发布产物或为各发行版/包管理器编写安装源的开发者。读完本文你将掌握如何获取与复现官方预编译二进制stable 与 nightly、如何用cargo手动构建并生成 manpage 与各 shell 的补全文件、如何理解Cargo.toml中与.deb/MSI/RPM 相关的打包元数据以及如何为 bottom 仓库新增一个安装渠道并提交 PR。分发渠道总览官方如何产出安装包bottom 的发布产物主要分为两类均由 GitHub Actions 构建stable稳定版最新稳定版发布页提供tar.gz与zip两种格式的预编译二进制。二进制包内还附带自动生成的 shell 补全文件zsh、bash、fish、PowerShell打包者在集成这些二进制时也应当一并安装补全文件。nightly每日构建每天 00:00 UTC 基于main分支构建一次同样发布在 releases 页面适合想提前体验新特性或验证跨平台构建是否成功的用户。两套构建共用同一个核心工作流build_releases.yml由 nightly 与 stable 的部署工作流分别包装调用。构建产物主要包括各平台二进制、Windows 的 MSI 安装器、Debian 及其衍生发行版的.deb包详见 构建流程文档 与 部署流程文档。手动构建从源码产出 release 二进制如果你不想直接分发官方预编译二进制而是希望自己从源码构建前提是安装了最新稳定版 Rustrustup update stable随后执行cargo build --release --locked其中--locked会强制使用 Cargo.lock 中锁定的依赖版本保证构建可复现。从 Cargo.toml 的包信息看当前版本为0.14.8rust-version声明为1.95.0注释明确说明这不是官方的 MSRV只是作者验证过仍可构建的最低版本edition 2024默认二进制名为btmdefault-run btm。几个与 release 构建强相关的细节特性开关deploy特性聚合了battery电池监控基于starship-battery、nvidiaGPU 监控基于nvml-wrapper与zfsZFS 磁盘 IO 计数而default特性就是deploy。因此普通的cargo build --release即包含全部发布功能CI 构建时显式指定--features deploy --locked以锁定依赖并只启用发布所需 crate。release 配置[profile.release]启用了lto true、codegen-units 1、strip symbols并以opt-level 3全量优化适合产出体积小、性能好的分发二进制。工具链相关构建过程依赖clap命令行参数解析、clap_complete系列补全生成与clap_mangenmanpage 生成等 build-dependencies详见 Cargo.toml。manpage 与 shell 补全的自动生成bottom 通过根目录的 build.rs 在编译期自动生成一份 manpage 和多个 shell 的补全文件默认覆盖BashZshFishPowerShellElvish此外build.rs 实际还会生成Fig与Nushell的补全见 build.rs因此手动构建时你得到的补全种类比文档列出的还要多。生成逻辑受环境变量控制设置非空的BTM_GENERATE即可触发例如BTM_GENERATEtrue cargo build --release --locked生成产物默认输出到target/tmp/bottom/下completion 在target/tmp/bottom/completion/manpage 为target/tmp/bottom/manpage/btm.1。如果你希望重新生成可以删除/修改这些产物或把BTM_GENERATE改为另一个非空值以重触发构建脚本。两个输出目录也可分别覆盖COMPLETION_DIR补全文件输出目录MANPAGE_DIRmanpage 输出目录例如在 CI 中通常这样组合使用BTM_GENERATEtrue \ COMPLETION_DIRtarget/tmp/bottom/completion/ \ MANPAGE_DIRtarget/tmp/bottom/manpage/ \ cargo build --release --features deploy --locked从 build.rs 的实现可以印证脚本通过clap_complete::generate_to依次为 Bash、Zsh、Fish、PowerShell、Elvish、Fig、Nushell 生成补全再用clap_mangen::Man渲染出btm.1manpage目录不存在时用create_dir_all自动创建。同时脚本会监听BTM_GENERATE环境变量变化cargo:rerun-if-env-changed确保修改该变量后能触发重新构建。另一个值得打包者留意的细节build.rs 还支持通过BTM_BUILD_RELEASE_CALLERci让版本号带上 git 提交哈希产出形如0.14.8-nightly-8位哈希的 nightly 版本号见 build.rs这正是 nightly 产物区分于 stable 版本的机制。从 Cargo.toml 看主流打包格式的落点虽然发布流程在 CI 中完成但cargo-deb、cargo-wix、RPM 等工具所需的元数据都内联在 Cargo.toml 的[package.metadata.*]中手动打包时可直接复用.debcargo-deb[package.metadata.deb]定义了section utility并把target/release/btm安装到/usr/bin/同时安装 LICENSE、压缩后的 manpagebtm.1.gz、Bash/Fish/Zsh 三份补全、desktop/bottom.desktop 桌面入口以及 assets/icons/bottom-system-monitor.svg 图标还通过 variants 为arm64armhf声明了libc6:arm64 ( 2.28)的依赖约束见 Cargo.toml。MSIcargo-wix[package.metadata.wix]指定输出名为bottom_installer.msi产品图标使用 assets/icons/bottom.icoWiX 模板位于 wix/main.wxs其中通过sys.BUILDARCH预处理器判断 x64/arm64 使用ProgramFiles64Folder32 位回退到ProgramFilesFolder。RPM[package.metadata.generate-rpm]与.deb的资产布局基本一致同样是二进制、LICENSE、manpage、补全、desktop 与 SVG 图标见 Cargo.toml。官方构建中x86 架构的.deb/RPM 由对应工具原生产出ARM 架构armv7、aarch64的.deb则借助 Docker 容器正确设置架构与依赖并会用dpkg二次校验架构正确性。此外仓库根目录的 Cross.toml 展示了跨平台交叉编译的配置方式例如[build.env]透传RUST_BACKTRACE与BTM_GENERATE并为x86_64-unknown-netbsd目标提供 pre-build 脚本安装 NetBSD 的libkvm等系统库——如果你要为自己的目标平台做交叉构建可以参考这个文件。为 bottom 添加一个安装源当你为某个发行版或包管理器打好了包希望它出现在 bottom 官方仓库的安装列表中时流程很简单Fork 仓库克隆到本地。编辑 README.md在Installation小节当前位于README.md#L137起下新增你的安装方式与说明并在文档顶部的目录Table of Contents中同步加入对应条目。提交并打开 Pull Request合并到main分支。这类安装源相关的 PR 通常会被很快审核通过。关于 PR 的具体规范模板、checklist、CI 检查、squash 合并等请参阅 issues-and-pull-requests.md。值得参考的是README.md 目前已经收录了大量社区维护的安装渠道包括 Alpineapk add bottom、Arch Linuxsudo pacman -S bottom及 AUR 的bottom-git、Debian/Ubuntu.deb、Fedora/CentOS 系的 COPR 与 Terra、Gentooemerge、Nixnix profile install nixpkgs#bottom等新增渠道时保持同样的行文风格即可。常见问题与最佳实践小结依赖锁定无论手动构建还是打包都建议使用--locked避免因依赖漂移导致行为不一致README 也提示省略--locked可能带来依赖兼容问题。补全与 manpage 别漏官方二进制默认附带补全文件打包时请一并安装 Bash/Zsh/Fish/PowerShell 的补全并考虑 Elvish、Fig、Nushell 的产物。区分 nightly 与 stablenightly 基于main分支每日构建版本号含 git 哈希适合测试正式分发应以 stable 为准。ARM 架构注意架构声明产出.deb时务必通过dpkg等工具校验架构字段避免安装到错误的 CPU 架构上。发布流程联动tag 形如x.y.z会触发稳定版部署并生成 draft releasecrates.io 发布使用cargo publishChocolatey 与 winget 等渠道由维护者通过独立仓库手动/半自动跟进详见 部署流程文档。【免费下载链接】bottomYet another cross-platform graphical process/system monitor.项目地址: https://gitcode.com/GitHub_Trending/bo/bottom创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考