summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAtemu <atemu.main@gmail.com>2023-07-01 06:23:45 +0200
committerBjørn Forsman <bjorn.forsman@gmail.com>2023-10-19 19:02:31 +0200
commit6c0440387265ed62b88d33eaccbd1473df300084 (patch)
tree8f17bff75a21cb1172285ada01587470f5c72115
parentMerge pull request #262004 from DeterminateSystems/colemickens/nix_2_13_6 (diff)
downloadnixpkgs-6c0440387265ed62b88d33eaccbd1473df300084.tar.gz
buildFHSEnv: cleanup
(cherry picked from commit 167264179b81749dc5550bd29c7efa4e3e7b782e)
-rw-r--r--pkgs/build-support/build-fhsenv-bubblewrap/buildFHSEnv.nix67
1 files changed, 44 insertions, 23 deletions
diff --git a/pkgs/build-support/build-fhsenv-bubblewrap/buildFHSEnv.nix b/pkgs/build-support/build-fhsenv-bubblewrap/buildFHSEnv.nix
index 2d927c7df731..f4fcc79b3936 100644
--- a/pkgs/build-support/build-fhsenv-bubblewrap/buildFHSEnv.nix
+++ b/pkgs/build-support/build-fhsenv-bubblewrap/buildFHSEnv.nix
@@ -36,7 +36,7 @@ let
inherit (stdenv) is64bit;
# use of glibc_multi is only supported on x86_64-linux
- isMultiBuild = multiPkgs != null && stdenv.isx86_64 && stdenv.isLinux;
+ isMultiBuild = stdenv.system == "x86_64-linux";
isTargetBuild = !isMultiBuild;
# list of packages (usually programs) which are only be installed for the
@@ -51,21 +51,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 +117,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 +185,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 +209,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 +243,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}
''