为 Linux 构建 Zed
存储库
克隆 Zed 存储库。
依赖项
-
安装 rustup
-
安装必要的系统库
script/linux
如果您喜欢手动安装系统库,可以在
script/linux
文件中找到所需软件包的列表。
后端依赖项
此部分仍在开发中。说明尚未完成。
如果您正在开发 Zed 的协作功能,则需要安装 Zed 的 collab
服务器的依赖项
或者,如果您安装了 Docker,您可以使用 Docker Compose 启动所有 collab
依赖项
docker compose up -d
从源代码构建
安装依赖项后,您可以使用 Cargo 构建 Zed。
用于调试构建编辑器
cargo run
并运行测试
cargo test --workspace
在发布模式下,主要用户界面是 cli
crate。您可以在开发中使用以下命令运行它
cargo run -p cli
安装开发版本
您可以使用以下命令在您的机器上安装本地构建
./script/install-linux
这将以发布模式构建 Zed 和 cli,并使其在 ~/.local/bin/zed
中可用,并将 .desktop 文件安装到 ~/.local/share
。
注意:如果您遇到类似于以下的链接器错误
error: 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.net.cn/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 无法使用 GCC >= 14 构建 & GCC-14 - FIPS 模块构建失败
您可以参考 linux:使用 script/install-linux 时 remote_server 的链接器错误 获取更多信息。
解决方法:将远程服务器目标设置为
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
并使其二进制文件在$PATH
中可用,名称为zed
。 - 您需要构建
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 标准。 - 您需要确保安装了必要的库。 您可以通过 检查系统上构建的二进制文件 来获取当前列表。
- 有关完整构建脚本的示例,请参见 script/bundle-linux。
- 您可以通过使用环境变量
ZED_UPDATE_EXPLANATION
构建(或运行)Zed 来禁用 Zed 的自动更新并为尝试手动更新 Zed 的用户提供说明。 例如:ZED_UPDATE_EXPLANATION="请使用 flatpak 更新 zed。"
。 - 请确保使用 'nightly'、'preview' 或 'stable'(无换行符)更新
crates/zed/RELEASE_CHANNEL
文件的内容。 这将导致 Zed 使用凭据管理器来记住用户的登录名。
其他注意事项
在 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。
- 运行
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
配置文件转换为可以传递给 heaptrack_gui
以进行查看的 *.zst
文件。
故障排除
Cargo 错误声称依赖项正在使用不稳定功能
尝试 cargo clean
和 cargo build
。
Vulkan/GPU 问题
如果 Zed 由于 GPU 或 Vulkan 问题在运行时崩溃,您可以尝试运行 vkcube(通常作为各种发行版上的 vulkaninfo
软件包的一部分提供),以尝试解决问题出在何处。 尝试通过运行 vkcube -m [x11|wayland]
在 X11 和 Wayland 模式下运行。 某些版本的 vkcube
使用 vkcube
在 X11 中运行,使用 vkcube-wayland
在 Wayland 中运行。
如果您有多个 GPU,您还可以尝试在不同的 GPU 上运行 Zed(例如,使用 vkdevicechooser)以找出问题的根源。