如何使用rust-overlay配置稳定版、测试版和 nightly 版Rust?

如何使用rust-overlay配置稳定版、测试版和 nightly 版Rust?

【免费下载链接】rust-overlay Pure and reproducible nix overlay of binary distributed rust toolchains 【免费下载链接】rust-overlay 项目地址: https://gitcode.com/gh_mirrors/ru/rust-overlay

rust-overlay是一个纯且可复现的Nix覆盖层,用于打包二进制分发的Rust工具链。它是nixpkgs-mozilla的兼容替代品,提供了非覆盖层和Nix Flake接口,帮助开发者轻松配置稳定版、测试版和nightly版Rust环境。

快速了解rust-overlay

rust-overlay的核心优势在于预获取工具链组件的哈希值,确保评估过程纯净且无需网络访问。这些哈希值通过GitHub Actions每日自动更新,支持从1.29.0开始的稳定版本以及2024-01-01之后的nightly版本。目前主要支持x86_64-linux平台的nixos-unstable和受支持的NixOS发行版。

安装rust-overlay

经典Nix覆盖层安装

你可以将以下代码添加到~/.config/nixpkgs/overlays.nix文件中:

[ (import (builtins.fetchTarball "https://github.com/oxalica/rust-overlay/archive/master.tar.gz")) ]

然后通过nix命令安装Rust工具链:

$ nix-env -iA nixpkgs.rust-bin.stable.latest.default

或者,你也可以将其添加到nix通道:

$ nix-channel --add https://github.com/oxalica/rust-overlay/archive/master.tar.gz rust-overlay
$ nix-channel --update

之后,你可以在nix shell环境中使用它,例如:import <nixpkgs> { overlays = [ (import <rust-overlay>) ]; }

Nix Flakes安装

对于快速体验,只需使用nix shell命令即可将最新的稳定Rust工具链带入环境:

$ nix shell github:oxalica/rust-overlay
$ rustc --version
$ cargo --version

配置不同版本的Rust

配置稳定版Rust

使用以下代码获取最新的稳定版Rust默认配置文件:

rust-bin.stable.latest.default

如果你只需要rustc、cargo和rust-std等核心组件,可以选择最小配置文件:

rust-bin.stable.latest.minimal

若需要特定版本的稳定版Rust,例如1.48.0:

rust-bin.stable."1.48.0".default

配置测试版(Beta)Rust

获取最新的测试版Rust默认配置文件:

rust-bin.beta.latest.default

同样,你也可以选择最小配置文件:

rust-bin.beta.latest.minimal

指定测试版日期,例如2021-01-01:

rust-bin.beta."2021-01-01".default

配置Nightly版Rust

为避免某些组件缺失导致构建失败,建议使用selectLatestNightlyWith函数选择最新的可用nightly版本:

rust-bin.selectLatestNightlyWith (toolchain: toolchain.default)

或者选择最小配置文件:

rust-bin.selectLatestNightlyWith (toolchain: toolchain.minimal)

如果你需要特定日期的nightly版本,例如2020-12-31:

rust-bin.nightly."2020-12-31".default

高级配置

添加额外组件或目标支持

你可以通过覆盖(override)来添加额外的组件或目标支持。例如,为最新稳定版添加"rust-src"组件和"arm-unknown-linux-gnueabihf"目标:

rust-bin.stable.latest.default.override {
  extensions = [ "rust-src" ];
  targets = [ "arm-unknown-linux-gnueabihf" ];
}

从rust-toolchain文件导入配置

如果你已有rustup的rust-toolchain文件,可以使用fromRustupToolchainFile函数直接导入配置:

rust-bin.fromRustupToolchainFile ./rust-toolchain

特定rustc git修订版的工具链

对于需要特定rustc git修订版的场景,例如开发MIRI等Rust组件,可以使用fromRustcRev函数:

rust-bin.fromRustcRev {
  rev = "a2cd91ceb0f156cb442d75e12dc77c3d064cdde4";
  components = {
    rustc = "sha256-x+OkPVStX00AiC3GupIdGzWluIK1BnI4ZCBbg72+ZuI=";
    rust-src = "sha256-13PpzzYtd769Xkb0QzHpNfYCOnLMWFolc9QyYq98z2k=";
  };
}

在NixOS配置中使用

以下是在NixOS配置中使用rust-overlay的示例:

{
  description = "My configuration";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    rust-overlay = {
      url = "github:oxalica/rust-overlay";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = { nixpkgs, rust-overlay, ... }: {
    nixosConfigurations = {
      hostname = nixpkgs.lib.nixosSystem {
        system = "x86_64-linux";
        modules = [
          ./configuration.nix # 你的系统配置
          ({ pkgs, ... }: {
            nixpkgs.overlays = [ rust-overlay.overlays.default ];
            environment.systemPackages = [ pkgs.rust-bin.stable.latest.default ];
          })
        ];
      };
    };
  };
}

在开发环境中使用

使用nix develop创建一个包含默认beta Rust工具链的开发环境:

{
  description = "A devShell example";

  inputs = {
    nixpkgs.url      = "github:NixOS/nixpkgs/nixos-unstable";
    rust-overlay.url = "github:oxalica/rust-overlay";
    flake-utils.url  = "github:numtide/flake-utils";
  };

  outputs = { self, nixpkgs, rust-overlay, flake-utils, ... }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        overlays = [ (import rust-overlay) ];
        pkgs = import nixpkgs {
          inherit system overlays;
        };
      in
      {
        devShells.default = with pkgs; mkShell {
          buildInputs = [
            openssl
            pkg-config
            eza
            fd
            rust-bin.beta.latest.default
          ];

          shellHook = ''
            alias ls=eza
            alias find=fd
          '';
        };
      }
    );
}

从nixpkgs-mozilla迁移

  1. 将通道URL更改为https://github.com/oxalica/rust-overlay/archive/master.tar.gz,或对于Nix Flakes,将URL更改为github:oxalica/rust-overlay
  2. latest.*rustChannel*.*等属性与nixpkgs-mozilla兼容,无需其他更改。
  3. 你也可以选择迁移到rust-bin接口,以获得更多功能,如"特定组件可用的最新nightly"或"从rust-toolchain文件导入"。

通过以上步骤,你可以轻松配置和管理不同版本的Rust工具链,满足各种开发需求。详细的API参考请参见docs/reference.md,交叉编译相关内容请参见docs/cross_compilation.md

【免费下载链接】rust-overlay Pure and reproducible nix overlay of binary distributed rust toolchains 【免费下载链接】rust-overlay 项目地址: https://gitcode.com/gh_mirrors/ru/rust-overlay

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值