Linux
代码仓库
克隆 Zed 代码仓库。
依赖项
安装 rustup
安装必要的系统库:
shscript/linux如果您希望手动安装系统库,可以在
script/linux文件中找到所需的软件包列表。
链接器
在 Linux 上,Rust 的默认链接器是 LLVM 的 lld。其他链接器,特别是 Wild 和 Mold,可以改进完全和增量构建时间。
Zed 目前在 CI 中使用 Mold,因为它更成熟。对于本地开发,推荐使用 Wild,因为它通常比 Mold 快 5-20%。
可以使用 script/install-mold 和 script/install-wild 安装这些链接器。
要将 Wild 设为默认链接器,请将以下几行添加到您的 ~/.cargo/config.toml 文件中:
[target.x86_64-unknown-linux-gnu]
linker = "clang"
rustflags = ["-C", "link-arg=--ld-path=wild"]
[target.aarch64-unknown-linux-gnu]
linker = "clang"
rustflags = ["-C", "link-arg=--ld-path=wild"]要将 Mold 设为默认链接器:
[target.'cfg(target_os = "linux")']
rustflags = ["-C", "link-arg=-fuse-ld=mold"]从源码构建
安装完依赖项后,您可以使用 Cargo 来构建 Zed。
构建编辑器的调试版本:
cargo run运行测试:
cargo test --workspace在发布模式下,主要用户界面是 cli crate。您可以在开发模式下运行它:
cargo run -p cli安装开发版本
您可以使用以下命令在本地机器上安装构建好的版本:
./script/install-linux此命令会在发布模式下构建 zed 和 cli,将二进制文件安装到 ~/.local/bin/zed,并将 .desktop 文件安装到 ~/.local/share。
注意: 如果您遇到类似以下的链接器错误:
basherror: linking with `cc` failed: exit status: 1 ... = note: /usr/bin/ld: /tmp/rustcISMaod/libaws_lc_sys-79f08eb6d32e546e.rlib(f8e4fd781484bd36-bcm.o): in function `aws_lc_0_25_0_handle_cpu_env': /aws-lc/crypto/fipsmodule/cpucap/cpu_intel.c:(.text.aws_lc_0_25_0_handle_cpu_env+0x63): undefined reference to `__isoc23_sscanf' /usr/bin/ld: /tmp/rustcISMaod/libaws_lc_sys-79f08eb6d32e546e.rlib(f8e4fd781484bd36-bcm.o): in function `pkey_rsa_ctrl_str': /aws-lc/crypto/fipsmodule/evp/p_rsa.c:741:(.text.pkey_rsa_ctrl_str+0x20d): undefined reference to `__isoc23_strtol' /usr/bin/ld: /aws-lc/crypto/fipsmodule/evp/p_rsa.c:752:(.text.pkey_rsa_ctrl_str+0x258): undefined reference to `__isoc23_strtol' collect2: error: ld returned 1 exit status = note: some `extern` functions couldn't be found; some native libraries may need to be installed or have their path specified = note: use the `-l` flag to specify native libraries to link = note: use the `cargo:rustc-link-lib` directive to specify the native libraries to link with Cargo (see https://doc.rust-lang.org/cargo/reference/build-scripts.html#rustc-link-lib) error: could not compile `remote_server` (bin "remote_server") due to 1 previous error原因: 这是由于 aws-lc-rs 的已知错误(不支持 GCC >= 14)造成的:FIPS fails to build with GCC >= 14 & GCC-14 - build failure for FIPS module
您可以参考 linux: Linker error for remote_server when using script/install-linux 了解更多信息。
解决方法: 将远程服务器目标设置为
x86_64-unknown-linux-gnu,如export REMOTE_SERVER_TARGET=x86_64-unknown-linux-gnu; script/install-linux
Wayland 和 X11
Zed 同时支持 X11 和 Wayland。默认情况下,我们会在运行时选择能够找到的任何一个。如果您在 Wayland 上并希望以 X11 模式运行,请使用环境变量 WAYLAND_DISPLAY=''。
Zed 打包说明
此部分面向正在打包 Zed 的发行版维护者。
技术要求
Zed 有两个主要的二进制文件:
- 您需要构建
crates/cli并将其二进制文件以zed的名称放置在$PATH中。 - 您需要构建
crates/zed并将其放置在$PATH/to/cli/../../libexec/zed-editor。例如,如果您打算将 cli 放在~/.local/bin/zed,则将 zed 放在~/.local/libexec/zed-editor。由于某些 Linux 发行版(特别是 Arch)不鼓励使用libexec,您也可以将此二进制文件放在$PATH/to/cli/../../lib/zed/zed-editor(例如~/.local/lib/zed/zed-editor)。 - 如果您要提供
.desktop文件,您可以在crates/zed/resources/zed.desktop.in中找到一个模板,并使用envsubst来填充所需的值。该文件也应重命名为$APP_ID.desktop,以便文件遵循 FreeDesktop 标准。您还应使此桌面文件可执行(chmod 755)。 - 您需要确保安装了必要的库。您可以通过在您的系统上检查构建的二进制文件来获取当前的列表。
- 有关完整构建脚本的示例,请参阅 script/bundle-linux。
- 您可以通过使用环境变量
ZED_UPDATE_EXPLANATION构建(或运行)Zed 来禁用 Zed 的自动更新,并为尝试手动更新 Zed 的用户提供说明。例如:ZED_UPDATE_EXPLANATION="Please use flatpak to update zed."。 - 确保
crates/zed/RELEASE_CHANNEL文件的内容已更新为 'nightly'、'preview' 或 'stable',且没有换行符。这会导致 Zed 使用凭证管理器记住用户的登录信息。
其他注意事项
Zed 更新迅速,发行版维护者通常有不同的限制和优先级。以下几点描述了当前的权衡:
- Zed 是一个快速发展的项目。我们通常每周发布 2-3 个构建版本来解决报告的问题并发布更大的变更。
- Linux 系统上可能存在其他名为
zed的二进制文件(1, 2)。如果您因为这些问题想重命名我们的 CLI 二进制文件,我们建议使用zedit、zeditor或zed-cli。 - Zed 会自动安装常用开发工具的版本,类似于 rustup/rbenv/pyenv。此处的讨论链接。
- 用户可以在本地和从 zed-industries/extensions 安装扩展。扩展可能会安装额外的工具,例如语言服务器。计划的安全改进在此链接中跟踪。
- 默认情况下,Zed 会连接到几个在线服务(AI、遥测、协作)。AI 和我们的遥测可以被用户通过他们的 zed 设置或修补我们的默认设置文件来禁用。
- 由于以上几点,Zed 目前不能很好地与沙箱配合使用。请参阅此讨论。
Flatpak
Zed 当前的 Flatpak 集成在启动时会退出沙箱。依赖 Flatpak 沙箱功能的工作流程可能无法按预期工作。
要在本地构建并安装 Flatpak 包,请按照以下步骤操作:
- 按照此处的说明为您的发行版安装 Flatpak:https://flathub.org/setup。
- 运行
script/flatpak/deps脚本来安装所需的依赖项。 - 运行
script/flatpak/bundle-flatpak。 - 现在包已安装,并且在
target/release/{app-id}.flatpak处有一个可用的包。
内存分析
heaptrack 对于诊断内存泄漏非常有用。要安装它:
$ sudo apt install heaptrack heaptrack-gui
$ cargo install cargo-heaptrack然后,要构建并附加分析器运行 Zed:
$ cargo heaptrack -b zed当退出此 zed 实例时,终端输出将包含一个运行 heaptrack_interpret 的命令,用于将 *.raw.zst 分析文件转换为 *.zst 文件,该文件可以传递给 heaptrack_gui 进行查看。
Perf 记录
如何从正在运行的 Zed 实例获取带有解析符号的火焰图。 当 Zed 占用大量 CPU 时使用它。对于卡顿情况没有用。
事故期间
使用以下命令找到 PID(进程 ID):
ps -eo size,pid,comm | grep zed | sort | head -n 1 | cut -d ' ' -f 2或者在 htop/btop/top 类似的工具中找到 RAM 使用率最高的zed-editor的 PID。安装 perf: 在 Ubuntu(及其衍生版)上运行
sudo apt install linux-tools。Perf 记录: 运行
sudo perf record -p <您刚找到的 pid>,等待几秒钟以收集数据,然后按 Ctrl+C。现在您应该有一个perf.data文件。使输出文件归用户所有: 运行
sudo chown $USER:$USER perf.data获取构建信息: 再次运行 zed 并在命令面板中输入
zed: about以获取确切的 commit。
可以将 perf.data 文件和确切的 commit 发送给 Zed 团队。
事后分析
此步骤可由 Zed 工作人员完成。
- 使用符号构建 Zed: 检出先前找到的 commit 并修改
Cargo.toml。 应用以下差异,然后进行发布构建。
[profile.release]
-debug = "limited"
+debug = "full"将符号添加到 perf 数据库:
perf buildid-cache -v -a <path to release zed binary>从数据库解析符号:
perf inject -i perf.data -o perf_with_symbols.data安装火焰图工具:
cargo install cargo-flamegraph渲染火焰图:
flamegraph --perfdata perf_with_symbols.data
故障排除
Cargo 错误,声称某个依赖项使用了不稳定的功能
尝试运行 cargo clean 和 cargo build。