build-fhsenv-bubblewrap: reference 32-bit binaries only if multiArch

Fixes issues using bubblewrap'd fhsenvs in scenarios where i686 is not
supported (such as Rosetta 2 emulation in a Linux VM on Apple Silicon).
This commit is contained in:
Thomas Watson 2024-04-06 15:11:48 -05:00
parent 14ac570560
commit 9bcd91ba09
2 changed files with 7 additions and 8 deletions

View File

@ -40,12 +40,11 @@ let
isMultiBuild = multiArch && stdenv.system == "x86_64-linux"; isMultiBuild = multiArch && stdenv.system == "x86_64-linux";
isTargetBuild = !isMultiBuild; isTargetBuild = !isMultiBuild;
# list of packages (usually programs) which are only be installed for the # list of packages (usually programs) which match the host's architecture
# host's architecture # (which includes stuff from multiPkgs)
targetPaths = targetPkgs pkgs ++ (if multiPkgs == null then [] else multiPkgs pkgs); targetPaths = targetPkgs pkgs ++ (if multiPkgs == null then [] else multiPkgs pkgs);
# list of packages which are installed for both x86 and x86_64 on x86_64 # list of packages which are for x86 (only multiPkgs, only for x86_64 hosts)
# systems
multiPaths = multiPkgs pkgsi686Linux; multiPaths = multiPkgs pkgsi686Linux;
# base packages of the chroot # base packages of the chroot
@ -76,8 +75,8 @@ let
]; ];
ldconfig = writeShellScriptBin "ldconfig" '' ldconfig = writeShellScriptBin "ldconfig" ''
# due to a glibc bug, 64-bit ldconfig complains about patchelf'd 32-bit libraries, so we're using 32-bit ldconfig # due to a glibc bug, 64-bit ldconfig complains about patchelf'd 32-bit libraries, so we use 32-bit ldconfig when we have them
exec ${if stdenv.system == "x86_64-linux" then pkgsi686Linux.glibc.bin else pkgs.glibc.bin}/bin/ldconfig -f /etc/ld.so.conf -C /etc/ld.so.cache "$@" exec ${if isMultiBuild then pkgsi686Linux.glibc.bin else pkgs.glibc.bin}/bin/ldconfig -f /etc/ld.so.conf -C /etc/ld.so.cache "$@"
''; '';
etcProfile = writeText "profile" '' etcProfile = writeText "profile" ''
@ -251,7 +250,7 @@ let
in runCommandLocal "${name}-fhs" { in runCommandLocal "${name}-fhs" {
passthru = { passthru = {
inherit args baseTargetPaths targetPaths baseMultiPaths ldconfig; inherit args baseTargetPaths targetPaths baseMultiPaths ldconfig isMultiBuild;
}; };
} '' } ''
mkdir -p $out mkdir -p $out

View File

@ -252,7 +252,7 @@ let
--symlink /etc/ld.so.cache ${glibc}/etc/ld.so.cache \ --symlink /etc/ld.so.cache ${glibc}/etc/ld.so.cache \
--ro-bind ${glibc}/etc/rpc ${glibc}/etc/rpc \ --ro-bind ${glibc}/etc/rpc ${glibc}/etc/rpc \
--remount-ro ${glibc}/etc \ --remount-ro ${glibc}/etc \
'' + optionalString (stdenv.isx86_64 && stdenv.isLinux) (indentLines '' '' + optionalString fhsenv.isMultiBuild (indentLines ''
--tmpfs ${pkgsi686Linux.glibc}/etc \ --tmpfs ${pkgsi686Linux.glibc}/etc \
--symlink /etc/ld.so.conf ${pkgsi686Linux.glibc}/etc/ld.so.conf \ --symlink /etc/ld.so.conf ${pkgsi686Linux.glibc}/etc/ld.so.conf \
--symlink /etc/ld.so.cache ${pkgsi686Linux.glibc}/etc/ld.so.cache \ --symlink /etc/ld.so.cache ${pkgsi686Linux.glibc}/etc/ld.so.cache \