NixOS / nixpkgs

Nix Packages collection & NixOS
MIT License
17.17k stars 13.43k forks source link

Build failure: pkgsCross.aarch64-multiplatform.tailscale #327515

Closed colemickens closed 3 weeks ago

colemickens commented 1 month ago

Steps To Reproduce

nix  build -L github:nixos/nixpkgs/nixos-unstable#legacyPackages.x86_64-linux.pkgsCross.aarch64-multiplatform.tailscale

fails:

tailscale-aarch64-unknown-linux-gnu> Running phase: configurePhase
tailscale-aarch64-unknown-linux-gnu> calling 'preConfigure' function hook '_multioutConfig'
tailscale-aarch64-unknown-linux-gnu> Running phase: buildPhase
tailscale-aarch64-unknown-linux-gnu> Building subPackage ./cmd/tailscaled
tailscale-aarch64-unknown-linux-gnu> Running phase: installPhase
tailscale-aarch64-unknown-linux-gnu> evaling implicit 'postInstall' string hook
tailscale-aarch64-unknown-linux-gnu> /nix/store/846nz10b9zjjvql2mqv341dvqm6ijrma-tailscale-aarch64-unknown-linux-gnu-1.68.2/bin/tailscale: line 33: /nix/store/846nz10b9zjjvql2mqv341dvqm6ijrma-tailscale-aarch64-unknown-linux-gnu-1.68.2/bin/.tailscaled-wrapped: cannot execute binary file: Exec format error
tailscale-aarch64-unknown-linux-gnu> /nix/store/846nz10b9zjjvql2mqv341dvqm6ijrma-tailscale-aarch64-unknown-linux-gnu-1.68.2/bin/tailscale: line 33: /nix/store/846nz10b9zjjvql2mqv341dvqm6ijrma-tailscale-aarch64-unknown-linux-gnu-1.68.2/bin/.tailscaled-wrapped: Success
tailscale-aarch64-unknown-linux-gnu> /nix/store/846nz10b9zjjvql2mqv341dvqm6ijrma-tailscale-aarch64-unknown-linux-gnu-1.68.2/bin/tailscale: line 33: /nix/store/846nz10b9zjjvql2mqv341dvqm6ijrma-tailscale-aarch64-unknown-linux-gnu-1.68.2/bin/.tailscaled-wrapped: cannot execute binary file: Exec format error
tailscale-aarch64-unknown-linux-gnu> /nix/store/846nz10b9zjjvql2mqv341dvqm6ijrma-tailscale-aarch64-unknown-linux-gnu-1.68.2/bin/tailscale: line 33: /nix/store/846nz10b9zjjvql2mqv341dvqm6ijrma-tailscale-aarch64-unknown-linux-gnu-1.68.2/bin/.tailscaled-wrapped: cannot execute binary file: Exec format error
tailscale-aarch64-unknown-linux-gnu> /nix/store/846nz10b9zjjvql2mqv341dvqm6ijrma-tailscale-aarch64-unknown-linux-gnu-1.68.2/bin/tailscale: line 33: /nix/store/846nz10b9zjjvql2mqv341dvqm6ijrma-tailscale-aarch64-unknown-linux-gnu-1.68.2/bin/.tailscaled-wrapped: Success
tailscale-aarch64-unknown-linux-gnu> /nix/store/846nz10b9zjjvql2mqv341dvqm6ijrma-tailscale-aarch64-unknown-linux-gnu-1.68.2/bin/tailscale: line 33: /nix/store/846nz10b9zjjvql2mqv341dvqm6ijrma-tailscale-aarch64-unknown-linux-gnu-1.68.2/bin/.tailscaled-wrapped: Success
tailscale-aarch64-unknown-linux-gnu> installShellCompletion: error: installed shell completion file `/nix/store/846nz10b9zjjvql2mqv341dvqm6ijrma-tailscale-aarch64-unknown-linux-gnu-1.68.2/share/bash-completion/completions/tailscale.bash' does not exist or has zero size
tailscale-aarch64-unknown-linux-gnu> /nix/store/wnbrksan5znxv61w053kvq0n980yvhs2-stdenv-linux/setup: line 193: pop_var_context: head of shell_variables not a function context

see: https://github.com/NixOS/nixpkgs/pull/319894

cc: @peterablehmann @sciyoshi

Additional context

n/a

Notify maintainers

Metadata

Please run nix-shell -p nix-info --run "nix-info -m" and paste the result.

[user@system:~]$ nix-shell -p nix-info --run "nix-info -m"
output here

Add a :+1: reaction to issues you find important.

colemickens commented 1 month ago

(Fixed the title, my bad)

eclairevoyant commented 1 month ago

The current (4c10b45022a90a37da40c709e9551aed15788cf3) tailscale builds fine for me on x86_64-linux, but I gave it a try to be more "correct" anyway.

I attempted to change postInstall to the following as a fix:


  postInstall = ''
    ln -s $out/bin/tailscaled $out/bin/tailscale
  '' + lib.optionalString stdenv.hostPlatform.isLinux ''
    wrapProgram $out/bin/tailscaled \
      --prefix PATH : ${lib.makeBinPath [ iproute2 iptables getent shadow ]} \
      --suffix PATH : ${lib.makeBinPath [ procps ]}

    local INSTALL="$out/bin/tailscale"

    sed -i -e "s#/usr/sbin#$out/bin#" -e "/^EnvironmentFile/d" ./cmd/tailscaled/tailscaled.service
    install -D -m0444 -t $out/lib/systemd/system ./cmd/tailscaled/tailscaled.service
  '' + lib.optionalString (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.emulatorAvailable buildPackages) ''
    installShellCompletion --cmd tailscale \
      --bash <(${stdenv.hostPlatform.emulator buildPackages} $out/bin/tailscale completion bash) \
      --fish <(${stdenv.hostPlatform.emulator buildPackages} $out/bin/tailscale completion fish) \
      --zsh <(${stdenv.hostPlatform.emulator buildPackages} $out/bin/tailscale completion zsh)
  '';

However I seem to get the following error:

evaling implicit 'postInstall' string hook
installShellCompletion: error: installed shell completion file `/nix/store/np9vqbjfl9jk7fl22vax9hbh4rs7r70m-tailscale-aarch64-unknown-linux-gnu-1.68.2/share/bash-completion/completions/tailscale.bash' does not exist or has zero size
/nix/store/wnbrksan5znxv61w053kvq0n980yvhs2-stdenv-linux/setup: line 193: pop_var_context: head of shell_variables not a function context

I also tried running ${stdenv.hostPlatform.emulator buildPackages} $out/bin/tailscale completion bash itself in the postInstall just to see what happens, and got an exec format error, presumably that's the cause of not having a completion in the first place.