From 97bed2c6a0cf6c7405efa05ef4755600d398ee67 Mon Sep 17 00:00:00 2001 From: Eric Rodrigues Pires Date: Tue, 14 Jul 2026 16:21:41 -0300 Subject: [PATCH] Use musl to build on Nix --- .envrc | 2 +- .tack/pins.lock.json | 20 +++----- .tack/pins.toml | 4 -- default.nix | 4 -- flake.nix | 4 -- nix/checks.nix | 88 ---------------------------------- nix/default.nix | 62 ++++++++++++------------ nix/modules/tests/websites.nix | 1 - nix/packages.nix | 2 +- shell.nix | 4 -- 10 files changed, 38 insertions(+), 153 deletions(-) diff --git a/.envrc b/.envrc index a1934a1..6c89b42 100644 --- a/.envrc +++ b/.envrc @@ -1,3 +1,3 @@ watch_dir .tack -watch_dir nix +watch_file ./nix/default.nix use nix diff --git a/.tack/pins.lock.json b/.tack/pins.lock.json index 97b3bee..7e7f721 100644 --- a/.tack/pins.lock.json +++ b/.tack/pins.lock.json @@ -1,26 +1,18 @@ { - "crane": { - "type": "github", - "owner": "ipetkov", - "repo": "crane", - "rev": "80db5bdc391be8a1794f6d8a2d56e3a84ebcede2", - "narHash": "sha256-G6R9IT/xwFuu+CYBWDUAok6AdC4ERC4ZfPPFtEpxnZE=", - "lastModified": 1783203018 - }, "nixpkgs": { "type": "github", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f205b5574fd0cb7da5b702a2da51507b7f4fdd1b", - "narHash": "sha256-/NAkDSsve+GNM0Bt6tleJdCGfsTlK89nPjkVOzZMo0s=", - "lastModified": 1783279667 + "rev": "6cdc7fc76e8bf7fde9fa43a849fcaaa70e230dee", + "narHash": "sha256-FmieJB8/OUvNxbkboi7+IGfIuSXY3nF/hZQm8kD0r50=", + "lastModified": 1783915482 }, "rust-overlay": { "type": "github", "owner": "oxalica", "repo": "rust-overlay", - "rev": "e8e9d70b96113fd49ccde6c3e08fb260b6ef5dd6", - "narHash": "sha256-zSX553aXiIKJHWzUF6nrDKgeNRlfNK/SdyNYSbs2nkM=", - "lastModified": 1783614422 + "rev": "a794b72f1297136a654424de0348d32e76a9f14e", + "narHash": "sha256-5Dk8H/H9fqjr7kS4MKqdBOzVsTK5r1/PMjC6eQuXd54=", + "lastModified": 1784004965 } } diff --git a/.tack/pins.toml b/.tack/pins.toml index 64c729f..0554bb2 100644 --- a/.tack/pins.toml +++ b/.tack/pins.toml @@ -29,7 +29,3 @@ type = "fetch" [inputs.rust-overlay] url = "github:oxalica/rust-overlay/master" type = "fetch" - -[inputs.crane] -url = "github:ipetkov/crane/master" -type = "fetch" diff --git a/default.nix b/default.nix index c962832..5460ca5 100644 --- a/default.nix +++ b/default.nix @@ -21,15 +21,11 @@ inherit system; overlays = [ (import inputs.rust-overlay) ]; }, - craneLib ? (import inputs.crane { inherit pkgs; }).overrideToolchain ( - p: p.rust-bin.stable.latest.default - ), }: (import ./nix { inherit system inputs pkgs - craneLib ; }).sandhole diff --git a/flake.nix b/flake.nix index f6f8634..8fea931 100644 --- a/flake.nix +++ b/flake.nix @@ -77,16 +77,12 @@ inherit system; overlays = [ (import inputs.rust-overlay) ]; }; - craneLib = (import inputs.crane { inherit pkgs; }).overrideToolchain ( - p: p.rust-bin.stable.latest.default - ); inherit (import ./nix { inherit system pkgs - craneLib ; }) packages diff --git a/nix/checks.nix b/nix/checks.nix index c811721..0e5ad43 100644 --- a/nix/checks.nix +++ b/nix/checks.nix @@ -15,99 +15,11 @@ # with this program. If not, see . { - cargoArtifacts, - commonArgs, - craneLib, pkgs, sandhole, - sandhole-no_default_features, - src, - udp_over_tcp, ... }: { - inherit sandhole sandhole-no_default_features udp_over_tcp; - - sandhole-clippy = craneLib.cargoClippy ( - commonArgs - // { - inherit cargoArtifacts; - } - ); - - sandhole-doc = craneLib.cargoDoc ( - commonArgs - // { - inherit cargoArtifacts; - } - ); - - sandhole-fmt = craneLib.cargoFmt { - inherit src; - }; - - sandhole-test = - let - sandhole-nextest-archive = craneLib.mkCargoDerivation ( - commonArgs - // { - inherit cargoArtifacts; - pname = "sandhole-nextest-archive"; - doCheck = false; - nativeBuildInputs = (commonArgs.nativeBuildInputs or [ ]) ++ [ pkgs.cargo-nextest ]; - buildPhaseCargoCommand = '' - cargo nextest archive --archive-format tar-zst --archive-file archive.tar.zst - ''; - installPhaseCommand = '' - mkdir -p $out - cp archive.tar.zst $out - ''; - } - ); - in - pkgs.testers.runNixOSTest { - name = "sandhole-nextest"; - nodes = { - machine = - { pkgs, ... }: - { - virtualisation.diskSize = 4096; - environment.defaultPackages = [ - pkgs.cargo - pkgs.rustc - ]; - systemd.services.sandhole-nextest = { - description = "Sandhole tests"; - wantedBy = [ "multi-user.target" ]; - after = [ "network-online.target" ]; - wants = [ "network-online.target" ]; - path = [ - pkgs.cargo - pkgs.cargo-nextest - ]; - script = '' - cp -r ${src}/* . - cargo nextest run \ - --archive-file ${sandhole-nextest-archive}/archive.tar.zst \ - --workspace-remap . - ''; - serviceConfig = { - StateDirectory = "sandhole-nextest"; - StateDirectoryMode = "0750"; - WorkingDirectory = "/var/lib/sandhole-nextest"; - Type = "oneshot"; - RemainAfterExit = "yes"; - Restart = "no"; - }; - }; - }; - }; - testScript = '' - machine.start() - machine.wait_for_unit("sandhole-nextest.service") - ''; - }; - sandhole-module-test-blacklist = pkgs.testers.runNixOSTest ( import ./modules/tests/blacklist.nix { inherit pkgs sandhole; } ); diff --git a/nix/default.nix b/nix/default.nix index 41f445b..6a882bd 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -21,43 +21,51 @@ inherit system; overlays = [ (import inputs.rust-overlay) ]; }, - craneLib ? (import inputs.crane { inherit pkgs; }).overrideToolchain ( - p: p.rust-bin.stable.latest.default - ), }: let - inherit (pkgs) lib; + inherit (pkgs) pkgsStatic lib; + + rustPlatform = pkgsStatic.makeRustPlatform { + cargo = pkgsStatic.rust-bin.stable.latest.default; + rustc = pkgsStatic.rust-bin.stable.latest.default; + }; src = lib.fileset.toSource { root = ../.; fileset = lib.fileset.unions [ - (craneLib.fileset.commonCargoSources ../.) + ../Cargo.toml + ../Cargo.lock ../README.md + ../.cargo ../.config/nextest.toml - ../tests/data + ../sandhole_socket + ../src + ../udp_over_tcp + ../tests ]; }; commonArgs = { inherit src; + __structuredAttrs = true; strictDeps = true; + cargoLock.lockFile = ../Cargo.lock; nativeBuildInputs = [ - pkgs.cmake - pkgs.installShellFiles - pkgs.perl + pkgsStatic.cmake + pkgsStatic.installShellFiles + pkgsStatic.perl ] - ++ lib.optionals (system == "x86_64-darwin" || system == "aarch64-darwin") [ pkgs.lld ]; + ++ lib.optionals (system == "x86_64-darwin" || system == "aarch64-darwin") [ pkgsStatic.lld ]; }; - cargoArtifacts = craneLib.buildDepsOnly commonArgs; - - sandhole = craneLib.buildPackage ( + sandhole = rustPlatform.buildRustPackage ( commonArgs // { - inherit cargoArtifacts; + pname = (lib.importTOML ../Cargo.toml).package.name; + version = (lib.importTOML ../Cargo.toml).package.version; doCheck = false; - postInstall = lib.optionalString (pkgs.stdenv.buildPlatform.canExecute pkgs.stdenv.hostPlatform) '' + postInstall = lib.optionalString (pkgsStatic.stdenv.buildPlatform.canExecute pkgsStatic.stdenv.hostPlatform) '' installShellCompletion --cmd sandhole \ --bash <($out/bin/sandhole --completions bash) \ --fish <($out/bin/sandhole --completions fish) \ @@ -74,20 +82,15 @@ let } ); - sandhole-no_default_features = sandhole.overrideAttrs { - cargoExtraArgs = "--locked --no-default-features"; - }; + sandhole-no_default_features = sandhole.overrideAttrs { buildNoDefaultFeatures = true; }; - udp_over_tcp = craneLib.buildPackage ( + udp_over_tcp = rustPlatform.buildRustPackage ( commonArgs // { - inherit cargoArtifacts; - inherit (craneLib.crateNameFromCargoToml { cargoToml = ../udp_over_tcp/Cargo.toml; }) - pname - version - ; + pname = (lib.importTOML ../udp_over_tcp/Cargo.toml).package.name; + version = (lib.importTOML ../udp_over_tcp/Cargo.toml).package.version; + buildAndTestSubdir = "udp_over_tcp"; doCheck = false; - cargoExtraArgs = "-p sandhole_udp_over_tcp"; meta = { name = "sandhole_udp_over_tcp"; description = "Proxy UDP traffic for Sandhole via SSH"; @@ -113,20 +116,15 @@ in checks = import ./checks.nix { inherit - cargoArtifacts - commonArgs - craneLib pkgs sandhole - sandhole-no_default_features - udp_over_tcp - src ; }; - shell = craneLib.devShell { + shell = pkgs.mkShell { packages = [ # General dependencies + pkgs.rust-bin.stable.latest.default pkgs.just # Book dependencies diff --git a/nix/modules/tests/websites.nix b/nix/modules/tests/websites.nix index 788da7b..356f98e 100644 --- a/nix/modules/tests/websites.nix +++ b/nix/modules/tests/websites.nix @@ -133,7 +133,6 @@ in sandholeHost = "192.168.10.10"; sandholePort = 2222; sandholeKeyPath = "/etc/ssh_key"; - sandholeExecArguments = "http2"; }; }; }; diff --git a/nix/packages.nix b/nix/packages.nix index d2b4d0e..041c03f 100644 --- a/nix/packages.nix +++ b/nix/packages.nix @@ -48,7 +48,7 @@ in docker = pkgs.dockerTools.buildImage { name = "sandhole"; - tag = "latest"; + tag = "musl"; config.Entrypoint = [ (lib.getExe sandhole) ]; }; diff --git a/shell.nix b/shell.nix index 1b9cdf6..32974df 100644 --- a/shell.nix +++ b/shell.nix @@ -21,15 +21,11 @@ inherit system; overlays = [ (import inputs.rust-overlay) ]; }, - craneLib ? (import inputs.crane { inherit pkgs; }).overrideToolchain ( - p: p.rust-bin.stable.latest.default - ), }: (import ./nix { inherit system inputs pkgs - craneLib ; }).shell -- 2.51.2