ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Ghostty 如何为系统软件包制作离线构建并安装到指定 DESTDIR

Ghostty 如何为系统软件包制作离线构建并安装到指定 DESTDIR Ghostty 如何为系统软件包制作离线构建并安装到指定 DESTDIR【免费下载链接】ghostty Ghostty is a fast, feature-rich, and cross-platform terminal emulator that uses platform-native UI and GPU acceleration.项目地址: https://gitcode.com/GitHub_Trending/gh/ghostty当你要为发行版打包 Ghostty 时通常需要在构建机上把构建过程和安装过程分离构建机可能只有很短时间的网络窗口甚至完全没有网络而最终文件要落进一个暂存目录DESTDIR再由打包流程用mv或cp移入包管理器的预期位置。PACKAGING.md 给出了面向系统软件包维护者的标准做法先用一个脚本把全部构建依赖拉进本地离线缓存再用zig build --system指向该缓存完成不联网的构建并通过DESTDIR环境变量控制安装位置。需要注意的是PACKAGING.md 开头明确声明该文档只对与其同处一份 Ghostty 源码的版本有效不要拿它去构建其他版本的 Ghostty。准备条件使用 source tarball而不是 Git checkout。打包时推荐使用官方发布的源码包带稳定校验和的 tarball 为 tag 版本提供格式为release.files.ghostty.org/VERSION/ghostty-VERSION.tar.gz其中VERSION是不带前缀的版本号如1.0.0同时提供.minisig签名文件使用 minisign 签名公钥为RWQlAjJC23149WL2sEpT/l0QKy7hMIFhYdQOFy0Z7z7PbneUgvlsnYcV。如果一定要用 Git checkout文档提示步骤相同但可能需要本文没有列出的额外依赖。安装 Ghostty 要求的 Zig 版本。构建 Ghostty 必须使用与当前版本匹配的已发布 Zig 版本。查版本的方法是查看 build.zig 中相关的required_zig常量文档举例时 Ghostty 要求 Zig 0.14.0具体以你所构建的源码树中实际写明的值为准。构建机上准备好一个可写的临时目录用于缓存和DESTDIR文档示例中分别使用/tmp/offline-cache和/tmp/ghostty。第一步联网拉取依赖到离线缓存这是整个流程中唯一需要互联网访问的步骤ZIG_GLOBAL_CACHE_DIR/tmp/offline-cache ./nix/build-support/fetch-zig-cache.sh这条命令的工作方式是ZIG_GLOBAL_CACHE_DIR告诉 Zig 把下载包放入/tmp/offline-cache脚本本身则逐行读取 build.zig.zon.txt 中列出的依赖 URL对每一行执行zig fetch。执行 nix/build-support/fetch-zig-cache.sh 时有两个判断依据脚本开头检查ZIG_GLOBAL_CACHE_DIR是否已设置未设置会直接报错must set ZIG_GLOBAL_CACHE_DIR!并以退出码 1 结束任一行依赖拉取失败时脚本向 stderr 输出Failed to fetch: url并退出。脚本头部的注释说明这是一个临时机制目前zig build --fetch还不能拉取传递依赖等该问题在 Zig 中修复后维护者可以改直接用zig build --fetch。第二步离线构建并安装到 DESTDIR缓存就绪后构建步骤不再需要互联网DESTDIR/tmp/ghostty \ zig build \ --prefix /usr \ --system /tmp/offline-cache/p \ -DoptimizeReleaseFast \ -Dcpubaseline各部分的用途DESTDIR/tmp/ghostty配合--prefix /usr最终文件被安装到/tmp/ghostty下二进制位于/tmp/ghostty/usr/bin/ghostty。这种构建和安装分离的方式正是系统包常用的模式后续安装步骤可以直接对该目录做mv或cp。--system /tmp/offline-cache/p指向离线缓存目录从此禁用一切从互联网拉取包的行为。该标志还会默认让所有依赖走动态链接并默认把二进制构建成 PIEPosition Independent Executable需要覆盖时用-Dpie。-DoptimizeReleaseFast开启优化并禁用安全检查是文档推荐的发行构建模式文档说明安全构建对这类性能敏感的程序当前太慢。其他可用模式还有Debug、ReleaseSafe、ReleaseSmall。-Dcpubaseline按目标架构的baseline CPU 构建避免使用并非所有目标机器都具备的较新 CPU 特性。所有可用的构建选项可以用zig build --help查看全部。需要指定目标三元组时如果系统包需要声明特定的最低 Linux 版本、glibc 版本等追加目标三元组-Dtarget$arch-$os-$abi$arch-$os-$abi是文档中的模板写法需要用实际的架构/系统/ABI 组合替换运行zig targets可以获取完整的目标列表。结果验证构建成功后检查/tmp/ghostty/usr/bin/ghostty是否存在文档示例中DESTDIR/tmp/ghostty、--prefix /usr组合下的预期位置。存在即可进入打包阶段把/tmp/ghostty下的内容移入包管理器预期位置。依赖拉取阶段若出现Failed to fetch: url说明网络窗口内该依赖没拉全需要回到第一步重新执行缓存脚本。限制说明--system除了断开网络依赖外还会默认改变链接方式动态链接和可执行属性PIE如果你要静态链接或非 PIE 产物需要用-Dpie等选项显式覆盖。本文路径只覆盖 Linux 发行版场景下的系统包构建方式文档中另有 libghostty-vt 的 WebAssembly 打包说明zig build -Demit-lib-vt -Dtargetwasm32-freestanding -DoptimizeReleaseSmall产物为zig-out/bin/ghostty-vt.wasm那是给浏览器和 wasm 运行时的打包者用的与 DESTDIR 式的系统包流程相互独立。【免费下载链接】ghostty Ghostty is a fast, feature-rich, and cross-platform terminal emulator that uses platform-native UI and GPU acceleration.项目地址: https://gitcode.com/GitHub_Trending/gh/ghostty创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进