diff options
author | Atemu <atemu.main@gmail.com> | 2023-07-08 13:53:41 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-08 13:53:41 +0200 |
commit | 67eec418ab1bb44ce222944caaf62aeda5efa145 (patch) | |
tree | 1c6c86ad6f9e9cc86fd7f809b575f1caa37a4024 /pkgs/build-support | |
parent | 43b091f45cc5b058d3a237668ee227bdd43894c0 (diff) | |
parent | 67ac4b83ec29bc943447e6377aa3472efa33e3be (diff) |
Merge pull request #240860 from Atemu/fhsenv-no-multiarch
buildFHSEnv: disable multiArch by default
Diffstat (limited to 'pkgs/build-support')
-rw-r--r-- | pkgs/build-support/build-fhsenv-bubblewrap/buildFHSEnv.nix | 70 |
1 files changed, 46 insertions, 24 deletions
diff --git a/pkgs/build-support/build-fhsenv-bubblewrap/buildFHSEnv.nix b/pkgs/build-support/build-fhsenv-bubblewrap/buildFHSEnv.nix index 2d927c7df7317..3e6fc922906f9 100644 --- a/pkgs/build-support/build-fhsenv-bubblewrap/buildFHSEnv.nix +++ b/pkgs/build-support/build-fhsenv-bubblewrap/buildFHSEnv.nix @@ -12,6 +12,7 @@ , profile ? "" , targetPkgs ? pkgs: [] , multiPkgs ? pkgs: [] +, multiArch ? false # Whether to include 32bit packages , extraBuildCommands ? "" , extraBuildCommandsMulti ? "" , extraOutputsToInstall ? [] @@ -35,8 +36,8 @@ let inherit (stdenv) is64bit; - # use of glibc_multi is only supported on x86_64-linux - isMultiBuild = multiPkgs != null && stdenv.isx86_64 && stdenv.isLinux; + # "use of glibc_multi is only supported on x86_64-linux" + isMultiBuild = multiArch && stdenv.system == "x86_64-linux"; isTargetBuild = !isMultiBuild; # list of packages (usually programs) which are only be installed for the @@ -51,21 +52,34 @@ let # these match the host's architecture, glibc_multi is used for multilib # builds. glibcLocales must be before glibc or glibc_multi as otherwiese # the wrong LOCALE_ARCHIVE will be used where only C.UTF-8 is available. - basePkgs = with pkgs; - [ glibcLocales - (if isMultiBuild then glibc_multi else glibc) - (toString gcc.cc.lib) bashInteractiveFHS coreutils less shadow su - gawk diffutils findutils gnused gnugrep - gnutar gzip bzip2 xz - ]; - baseMultiPkgs = with pkgsi686Linux; - [ (toString gcc.cc.lib) - ]; + basePkgs = with pkgs; [ + glibcLocales + (if isMultiBuild then glibc_multi else glibc) + (toString gcc.cc.lib) + bashInteractiveFHS + coreutils + less + shadow + su + gawk + diffutils + findutils + gnused + gnugrep + gnutar + gzip + bzip2 + xz + ]; + baseMultiPkgs = with pkgsi686Linux; [ + (toString gcc.cc.lib) + ]; 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 - exec ${if stdenv.isx86_64 && stdenv.isLinux then pkgsi686Linux.glibc.bin else pkgs.glibc.bin}/bin/ldconfig -f /etc/ld.so.conf -C /etc/ld.so.cache "$@" + 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 "$@" ''; + etcProfile = writeText "profile" '' export PS1='${name}-chrootenv:\u@\h:\w\$ ' export LOCALE_ARCHIVE='/usr/lib/locale/locale-archive' @@ -104,7 +118,7 @@ let # Compose /etc for the chroot environment etcPkg = runCommandLocal "${name}-chrootenv-etc" { } '' mkdir -p $out/etc - cd $out/etc + pushd $out/etc # environment variables ln -s ${etcProfile} profile @@ -172,13 +186,18 @@ let ln -s lib64 lib # copy glibc stuff - cp -rsHf ${staticUsrProfileTarget}/lib/32/* lib32/ && chmod u+w -R lib32/ + cp -rsHf ${staticUsrProfileTarget}/lib/32/* lib32/ + chmod u+w -R lib32/ # copy content of multiPaths (32bit libs) - [ -d ${staticUsrProfileMulti}/lib ] && cp -rsHf ${staticUsrProfileMulti}/lib/* lib32/ && chmod u+w -R lib32/ + if [ -d ${staticUsrProfileMulti}/lib ]; then + cp -rsHf ${staticUsrProfileMulti}/lib/* lib32/ + chmod u+w -R lib32/ + fi # copy content of targetPaths (64bit libs) - cp -rsHf ${staticUsrProfileTarget}/lib/* lib64/ && chmod u+w -R lib64/ + cp -rsHf ${staticUsrProfileTarget}/lib/* lib64/ + chmod u+w -R lib64/ # symlink 32-bit ld-linux.so ln -Ls ${staticUsrProfileTarget}/lib/32/ld-linux.so.2 lib/ @@ -191,13 +210,15 @@ let # the target profile is the actual profile that will be used for the chroot setupTargetProfile = '' mkdir -m0755 usr - cd usr + pushd usr + ${setupLibDirs} - ${lib.optionalString isMultiBuild '' + + '' + lib.optionalString isMultiBuild '' if [ -d "${staticUsrProfileMulti}/share" ]; then cp -rLf ${staticUsrProfileMulti}/share share fi - ''} + '' + '' if [ -d "${staticUsrProfileTarget}/share" ]; then if [ -d share ]; then chmod -R 755 share @@ -223,18 +244,19 @@ let ln -s "$i" fi done + + popd ''; in runCommandLocal "${name}-fhs" { passthru = { - inherit args multiPaths targetPaths; + inherit args multiPaths targetPaths ldconfig; }; } '' mkdir -p $out - cd $out + pushd $out + ${setupTargetProfile} - cd $out ${extraBuildCommands} - cd $out ${lib.optionalString isMultiBuild extraBuildCommandsMulti} '' |