news 2026/9/9 21:15:33

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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),再由打包流程用mvcp移入包管理器的预期位置。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 \ -Doptimize=ReleaseFast \ -Dcpu=baseline

各部分的用途:

  • DESTDIR=/tmp/ghostty配合--prefix /usr:最终文件被安装到/tmp/ghostty下,二进制位于/tmp/ghostty/usr/bin/ghostty。这种"构建和安装分离"的方式正是系统包常用的模式,后续安装步骤可以直接对该目录做mvcp
  • --system /tmp/offline-cache/p:指向离线缓存目录,从此禁用一切从互联网拉取包的行为。该标志还会默认让所有依赖走动态链接,并默认把二进制构建成 PIE(Position Independent Executable),需要覆盖时用-Dpie
  • -Doptimize=ReleaseFast:开启优化并禁用安全检查,是文档推荐的发行构建模式(文档说明安全构建对这类性能敏感的程序当前太慢)。其他可用模式还有DebugReleaseSafeReleaseSmall
  • -Dcpu=baseline:按目标架构的"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 -Dtarget=wasm32-freestanding -Doptimize=ReleaseSmall,产物为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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 21:11:58

.NET 10 新命令 dnx:像 npx 一样按需执行 NuGet 工具

在 Node.js 生态里待久了的人&#xff0c;很难不羡慕那个 npx &#xff1a;想跑个脚手架&#xff0c; npx create-vite 一行搞定&#xff1b;想临时用个工具&#xff0c; npx 一下就跑完&#xff0c;用完还不污染全局环境。Python 那边这两年也有了 uvx &#xff0c;把…

作者头像 李华
网站建设 2026/9/9 21:10:16

C8051F340开发板资料实战:原理图、例程与C2调试全解析

简介&#xff1a;C8051F340开发板全套资料以zip包形式提供&#xff0c;内含原理图与源程序&#xff0c;面向嵌入式开发者、电子竞赛备赛者及混合信号微控制器初学者&#xff0c;可帮助解决外设连接、驱动编写和硬件调试难上手的问题。压缩包共590个文件&#xff0c;大小26.34MB…

作者头像 李华
网站建设 2026/9/9 21:10:10

PLC仿真与组态:玻璃冲洗与交通灯联合控制模型

搞自动化项目的人都有个共同痛点&#xff1a;程序写完了&#xff0c;不敢直接往设备上跑。玻璃冲洗线这种带水泵、风机、传送带的产线&#xff0c;逻辑一旦写错&#xff0c;轻则工件卡滞&#xff0c;重则烧接触器。我自己的习惯是&#xff0c;任何新写的PLC程序&#xff0c;先过…

作者头像 李华