Я пытаюсь создать деривацию для одного из моих исполняемых проектов, и для него требуется версия Rust, которой еще нет в каналах nixpkgs, поэтому я создал деривацию nix, которая устанавливает нужную мне версию:
{ mkDerivation, stdenv, fetchurl }:
rec {
version = "1.33.0";
platform = mkDerivation rec {
ver = version;
name = "rust-${ver}";
platform = if stdenv.system == "x86_64-linux" then "x86_64-unknown-linux-gnu"
else if stdenv.system == "x86_64-darwin" then "x86_64-apple-darwin"
else abort "unsupported platform";
pkgSha = if stdenv.system == "x86_64-linux" then "6623168b9ee9de79deb0d9274c577d741ea92003768660aca184e04fe774393f"
else if stdenv.system == "x86_64-darwin" then "864e7c074a0b88e38883c87c169513d072300bb52e1d320a067bd34cf14f66bd"
else abort "unsupported platform";
src = fetchurl {
url = "https://static.rust-lang.org/dist/rust-${ver}-${platform}.tar.gz";
sha256 = pkgSha;
};
phases = ["unpackPhase" "installPhase"];
installPhase = ''
mkdir -p $out
./install.sh --prefix=$out
'';
};
rustc = platform;
cargo = platform;
}
Это очень легко для меня включить в мою оболочку, так как мне просто нужно включить buildInputs = [ rust.rustc rust.cargo ]
, и у меня сразу же появится Rust 1.33.
Я использовал carnix-0.9.8 для настройки файлов Cargo.nix
, crates-io.nix
и crates-io.list
. Из-за этого библиотеки, от которых я зависел, устанавливаются в хранилище nix, как и любой другой производный, и мой процесс сборки теоретически заканчивается тем, что он вообще не использует Cargo.
Мне уже нужна собственная библиотека безопасности macOS, поэтому я уже создал файл default.nix
:
{ pkgs ? import <nixpkgs-18.09> {}
, unstable ? import <nixpkgs> {}
, stdenv ? pkgs.stdenv
, licenses ? pkgs.lib.licenses
, maintainers ? pkgs.stdenv.maintainers }:
let
rust = import ./nixpkgs/rust-1.33.nix {
mkDerivation = pkgs.stdenv.mkDerivation;
fetchurl = pkgs.fetchurl;
stdenv = pkgs.stdenv;
};
cratesIO = import ./crates-io.nix {
lib = stdenv.lib;
buildRustCrate = unstable.buildRustCrate;
buildRustCrateHelpers = unstable.buildRustCrateHelpers;
};
cargo = ...
frameworks = ...
security = ...
orizentic = (cargo.orizentic {}).override { ... };
in pkgs.symlinkJoin rec {
...
}
А затем я установил build.rs
файл, который выдает ошибки, если версия Rust, используемая для сборки, не является по крайней мере версией 1.33.0.
Как мне вставить мой Ржавчина в buildRustCrate
и buildRustCrateHelpers
?
Для справки, вот вся версия Rust моего проекта .