Steam-run aarch64 fails to build citing i686 support requirement

Good Evening,

I’m trying to use my home-manager config with nix-on-droid, which (badly explained) seems to host a userspace proot nix instance on android, accessed through termux, in order to give android users access to nixpkgs. It has support for home-manager and I’ve been trying to build my existing home-manager config.

However, my build is failing with the error i686 package set can only be used with the x86 family. This doesn’t make sense to me, as I’m using nixpkgs aarch64-linux. The specific package that’s failing to build is steam-run, which is confusing in itself as this is not specified anywhere I can tell to be installed in my config. My config uses some custom home-manager modules, which makes tracing less simple, but as far as I can tell, steam-run shouldn’t be being installed at all, let alone as an i686-linux build. Any help fixing this would be appreciated.

Logs:

Summary
bash-5.2$ nix-on-droid switch --flake . --show-trace
Building activation package...
evaluation warning: You are using

                      Home Manager version 24.11 and
                      Nixpkgs version 25.05.

                    Using mismatched versions is likely to cause errors and unexpected
                    behavior. It is therefore highly recommended to use a release of Home
                    Manager that corresponds with your chosen release of Nixpkgs.

                    If you insist then you can disable this warning by adding

                      home.enableNixpkgsReleaseCheck = false;

                    to your configuration.
error:
       … while calling the 'derivationStrict' builtin
         at <nix/derivation-internal.nix>:34:12:
           33|
           34|   strict = derivationStrict drvAttrs;
             |            ^
           35|

       … while evaluating derivation 'nix-on-droid-generation'
         whose name attribute is located at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/stdenv/generic/make-derivation.nix:336:7

       … while evaluating attribute 'buildCommand' of derivation 'nix-on-droid-generation'
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/trivial-builders/default.nix:59:17:
           58|         enableParallelBuilding = true;
           59|         inherit buildCommand name;
             |                 ^
           60|         passAsFile = [ "buildCommand" ]

       … while calling the 'getAttr' builtin
         at <nix/derivation-internal.nix>:44:19:
           43|       value = commonAttrs // {
           44|         outPath = builtins.getAttr outputName strict;
             |                   ^
           45|         drvPath = strict.drvPath;

       … while calling the 'derivationStrict' builtin
         at <nix/derivation-internal.nix>:34:12:
           33|
           34|   strict = derivationStrict drvAttrs;
             |            ^
           35|

       … while evaluating derivation 'activation-script'
         whose name attribute is located at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/stdenv/generic/make-derivation.nix:336:7

       … while evaluating attribute 'text' of derivation 'activation-script'
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/trivial-builders/default.nix:102:17:
          101|       ({
          102|         inherit text executable checkPhase allowSubstitutes preferLocalBuild;
             |                 ^
          103|         passAsFile = [ "text" ]

       … from call site
         at /nix/store/3wqs0zryk11j09mhllxsnnaxpswvjfnp-source/modules/build/activation.nix:48:7:
           47|     ${mkActivationCmds cfg.activationBefore}
           48|     ${mkActivationCmds cfg.activation}
             |       ^
           49|     ${mkActivationCmds cfg.activationAfter}

       … while calling 'mkActivationCmds'
         at /nix/store/3wqs0zryk11j09mhllxsnnaxpswvjfnp-source/modules/build/activation.nix:25:22:
           24|
           25|   mkActivationCmds = activation: concatStringsSep "\n" (
             |                      ^
           26|     mapAttrsToList

       … while calling the 'concatStringsSep' builtin
         at /nix/store/3wqs0zryk11j09mhllxsnnaxpswvjfnp-source/modules/build/activation.nix:25:34:
           24|
           25|   mkActivationCmds = activation: concatStringsSep "\n" (
             |                                  ^
           26|     mapAttrsToList

       … while calling anonymous lambda
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/lib/attrsets.nix:1095:10:
         1094|     attrs:
         1095|     map (name: f name attrs.${name}) (attrNames attrs);
             |          ^
         1096|

       … from call site
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/lib/attrsets.nix:1095:16:
         1094|     attrs:
         1095|     map (name: f name attrs.${name}) (attrNames attrs);
             |                ^
         1096|

       … while calling anonymous lambda
         at /nix/store/3wqs0zryk11j09mhllxsnnaxpswvjfnp-source/modules/build/activation.nix:27:14:
           26|     mapAttrsToList
           27|       (name: value: ''
             |              ^
           28|         noteEcho "Activating ${name}"

       … while evaluating the attribute 'installPackages'
         at /nix/store/3wqs0zryk11j09mhllxsnnaxpswvjfnp-source/modules/environment/path.nix:46:5:
           45|
           46|     build.activation.installPackages = ''
             |     ^
           47|       if [[ -e "${config.user.home}/.nix-profile/manifest.json" ]]; then

       … while calling the 'getAttr' builtin
         at <nix/derivation-internal.nix>:44:19:
           43|       value = commonAttrs // {
           44|         outPath = builtins.getAttr outputName strict;
             |                   ^
           45|         drvPath = strict.drvPath;

       … while calling the 'derivationStrict' builtin
         at <nix/derivation-internal.nix>:34:12:
           33|
           34|   strict = derivationStrict drvAttrs;
             |            ^
           35|

       … while evaluating derivation 'nix-on-droid-path'
         whose name attribute is located at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/stdenv/generic/make-derivation.nix:336:7

       … while evaluating attribute 'passAsFile' of derivation 'nix-on-droid-path'
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/trivial-builders/default.nix:60:9:
           59|         inherit buildCommand name;
           60|         passAsFile = [ "buildCommand" ]
             |         ^
           61|           ++ (derivationArgs.passAsFile or [ ]);

       … while evaluating the attribute 'passAsFile'
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/buildenv/default.nix:87:5:
           86|     # XXX: The size is somewhat arbitrary
           87|     passAsFile = if builtins.stringLength pkgs >= 128*1024 then [ "pkgs" ] else [ ];
             |     ^
           88|   }

       … while evaluating a branch condition
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/buildenv/default.nix:87:18:
           86|     # XXX: The size is somewhat arbitrary
           87|     passAsFile = if builtins.stringLength pkgs >= 128*1024 then [ "pkgs" ] else [ ];
             |                  ^
           88|   }

       … in the argument of the not operator
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/buildenv/default.nix:87:48:
           86|     # XXX: The size is somewhat arbitrary
           87|     passAsFile = if builtins.stringLength pkgs >= 128*1024 then [ "pkgs" ] else [ ];
             |                                                ^
           88|   }

       … while calling the 'lessThan' builtin
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/buildenv/default.nix:87:48:
           86|     # XXX: The size is somewhat arbitrary
           87|     passAsFile = if builtins.stringLength pkgs >= 128*1024 then [ "pkgs" ] else [ ];
             |                                                ^
           88|   }

       … while calling the 'stringLength' builtin
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/buildenv/default.nix:87:21:
           86|     # XXX: The size is somewhat arbitrary
           87|     passAsFile = if builtins.stringLength pkgs >= 128*1024 then [ "pkgs" ] else [ ];
             |                     ^
           88|   }

       … while calling the 'toJSON' builtin
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/buildenv/default.nix:82:12:
           81|             nativeBuildInputs buildInputs;
           82|     pkgs = builtins.toJSON chosenOutputs;
             |            ^
           83|     extraPathsFrom = lib.optional includeClosures (writeClosure pathsForClosure);

       … while evaluating list element at index 29

       … while evaluating attribute 'paths'
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/buildenv/default.nix:57:5:
           56|   chosenOutputs = map (drv: {
           57|     paths =
             |     ^
           58|       # First add the usual output(s): respect if user has chosen explicitly,

       … while evaluating list element at index 0
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/buildenv/default.nix:57:5:
           56|   chosenOutputs = map (drv: {
           57|     paths =
             |     ^
           58|       # First add the usual output(s): respect if user has chosen explicitly,

       … while calling the 'getAttr' builtin
         at <nix/derivation-internal.nix>:44:19:
           43|       value = commonAttrs // {
           44|         outPath = builtins.getAttr outputName strict;
             |                   ^
           45|         drvPath = strict.drvPath;

       … while calling the 'derivationStrict' builtin
         at <nix/derivation-internal.nix>:34:12:
           33|
           34|   strict = derivationStrict drvAttrs;
             |            ^
           35|

       … while evaluating derivation 'steam-run'
         whose name attribute is located at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/stdenv/generic/make-derivation.nix:336:7

       … while evaluating attribute 'buildCommand' of derivation 'steam-run'
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/trivial-builders/default.nix:59:17:
           58|         enableParallelBuilding = true;
           59|         inherit buildCommand name;
             |                 ^
           60|         passAsFile = [ "buildCommand" ]

       … while calling the 'getAttr' builtin
         at <nix/derivation-internal.nix>:44:19:
           43|       value = commonAttrs // {
           44|         outPath = builtins.getAttr outputName strict;
             |                   ^
           45|         drvPath = strict.drvPath;

       … while calling the 'derivationStrict' builtin
         at <nix/derivation-internal.nix>:34:12:
           33|
           34|   strict = derivationStrict drvAttrs;
             |            ^
           35|

       … while evaluating derivation 'steam-run-bwrap'
         whose name attribute is located at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/stdenv/generic/make-derivation.nix:336:7

       … while evaluating attribute 'text' of derivation 'steam-run-bwrap'
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/trivial-builders/default.nix:102:17:
          101|       ({
          102|         inherit text executable checkPhase allowSubstitutes preferLocalBuild;
             |                 ^
          103|         passAsFile = [ "text" ]

       … from call site
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/build-fhsenv-bubblewrap/default.nix:316:43:
          315|
          316|   bin = writeShellScript "${name}-bwrap" (bwrapCmd {
             |                                           ^
          317|     initArgs = ''"$@"'';

       … while calling 'bwrapCmd'
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/build-fhsenv-bubblewrap/default.nix:165:5:
          164|   bwrapCmd =
          165|     {
             |     ^
          166|       initArgs ? "",

       … while calling the 'getAttr' builtin
         at <nix/derivation-internal.nix>:44:19:
           43|       value = commonAttrs // {
           44|         outPath = builtins.getAttr outputName strict;
             |                   ^
           45|         drvPath = strict.drvPath;

       … while calling the 'derivationStrict' builtin
         at <nix/derivation-internal.nix>:34:12:
           33|
           34|   strict = derivationStrict drvAttrs;
             |            ^
           35|

       … while evaluating derivation 'steam-run-fhsenv-rootfs'
         whose name attribute is located at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/stdenv/generic/make-derivation.nix:336:7

       … while evaluating attribute 'exportReferencesGraph' of derivation 'steam-run-fhsenv-rootfs'
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/build-fhsenv-bubblewrap/buildFHSEnv.nix:190:5:
          189|     __structuredAttrs = true;
          190|     exportReferencesGraph.graph = lib.concatMap (p: p.paths) allPaths;
             |     ^
          191|     inherit paths paths32 isMultiBuild includeClosures;

       … while evaluating attribute 'graph'
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/build-fhsenv-bubblewrap/buildFHSEnv.nix:190:5:
          189|     __structuredAttrs = true;
          190|     exportReferencesGraph.graph = lib.concatMap (p: p.paths) allPaths;
             |     ^
          191|     inherit paths paths32 isMultiBuild includeClosures;

       … while evaluating list element at index 62
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/build-fhsenv-bubblewrap/buildFHSEnv.nix:190:5:
          189|     __structuredAttrs = true;
          190|     exportReferencesGraph.graph = lib.concatMap (p: p.paths) allPaths;
             |     ^
          191|     inherit paths paths32 isMultiBuild includeClosures;

       … while calling the 'getAttr' builtin
         at <nix/derivation-internal.nix>:44:19:
           43|       value = commonAttrs // {
           44|         outPath = builtins.getAttr outputName strict;
             |                   ^
           45|         drvPath = strict.drvPath;

       … while calling the 'derivationStrict' builtin
         at <nix/derivation-internal.nix>:34:12:
           33|
           34|   strict = derivationStrict drvAttrs;
             |            ^
           35|

       … while evaluating derivation 'glibc-multi-2.40-36'
         whose name attribute is located at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/stdenv/generic/make-derivation.nix:336:7

       … while evaluating attribute 'buildCommand' of derivation 'glibc-multi-2.40-36'
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/build-support/trivial-builders/default.nix:59:17:
           58|         enableParallelBuilding = true;
           59|         inherit buildCommand name;
             |                 ^
           60|         passAsFile = [ "buildCommand" ]

       … while calling the 'throw' builtin
         at /nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source/pkgs/top-level/stage.nix:265:12:
          264|       };
          265|     } else throw "i686 Linux package set can only be used with the x86 family.";
             |            ^
          266|

       error: i686 Linux package set can only be used with the x86 family.

My config can be found here

Yes, I am aware of the home-manager state error, I can’t see any reason why having the previous home-manager release would install an extra package for a different architecture. I’ll fix this at some point once I can actually get the system to build.

Something like

{...}:
let 
  amd64Pkgs = import <nixpkgs> {system="x86_64-linux";};
in
{
  environment.systemPackages = [amd64Pkgs.steam-run];
}

EDIT: seems like i should learn how to properly read. since it is falling in top-level.nix. maybe running nix why-depends .#nix-on-droid nixpkgs#steam-run against your flake will help

That makes sense, thanks! I don’t particularly want to install it in this case. I’m planning on mostly using this for code-server and direnv, so shouldn’t need steam-run at all. I can’t find where it’s being specified to be installed, but I’ll take another look tomorrow and try to remove it.

That has two issues:

  • You can’t guarantee that that’s the correct steam-run
  • why-depends won’t work if the expression won’t even eval

@Cyber_Raven based on this part of the log:

you’re probably running into this issue:

Thanks, turns out that steam-run was included in my shared home-manager configuration that I have setup to be pulled in for all users. Setting that to only include steam-run on an x86_64-linux system fixed the issue.