Project

General

Profile

PathInterposer » History » Revision 7

Revision 6 (Denis 'GNUtoo' Carikli, 12/01/2020 07:18 PM) → Revision 7/15 (dl lud, 04/30/2021 09:16 PM)

h1. PathInterposer 

 h2. Warnings h2 .Warnings 

 This page is a work in progress, so it might contains mistakes, inaccuracies, etc. 

 h2. Introduction 

 TODO 

 

 h2. how it works 

 During the build: 
 * The host path is saved to out/.path_interposer_origpath 
 * The host path is changed to a new one 
 * The path interposer is used to access host binaries. It uses the saved path for that. 

 With Trisquel 8, and Replicant 11, here's an example of how the path looks like for applications being launched through the path interposer[1]: 
 <pre> 
 /home/replicant/replicant-11/prebuilts/jdk/jdk11/linux-x86/bin 
 /home/replicant/replicant-11/prebuilts/jdk/jdk11/linux-x86/bin 
 /home/replicant/replicant-11/out/soong/host/linux-x86/bin 
 /home/replicant/replicant-11/out/host/linux-x86/bin 
 /home/replicant/replicant-11/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin 
 /home/replicant/replicant-11/development/scripts 
 /home/replicant/replicant-11/prebuilts/devtools/tools 
 /home/replicant/replicant-11/external/selinux/prebuilts/bin 
 /home/replicant/replicant-11/prebuilts/misc/linux-x86/dtc 
 /home/replicant/replicant-11/prebuilts/misc/linux-x86/libufdt 
 /home/replicant/replicant-11/prebuilts/clang/host/linux-x86/llvm-binutils-stable 
 /home/replicant/replicant-11/prebuilts/android-emulator/linux-x86_64 
 /home/replicant/replicant-11/prebuilts/asuite/acloud/linux-x86 
 /home/replicant/replicant-11/prebuilts/asuite/aidegen/linux-x86 
 /home/replicant/replicant-11/prebuilts/asuite/atest/linux-x86 
 /home/replicant/bin 
 /home/replicant/.local/bin 
 /usr/local/sbin 
 /usr/local/bin 
 /usr/sbin 
 /usr/bin 
 /sbin 
 /bin 
 /usr/games 
 </pre> 

 Here we can deduce that the paths set by the Android build system take precedence over the host paths. 

 fn1. This has been deduced by prints with the following patch: 
 <pre> 
 --- a/cmd/path_interposer/main.go 
 +++ b/cmd/path_interposer/main.go 
 @@ -116,6 +116,10 @@ func Main(stdout, stderr io.Writer, interposer string, args []string, opts mainO 
                 return 1, fmt.Errorf("Failed to set PATH env: %v", err) 
         } 
 
 +         fmt.Fprintln(os.Stderr, "####################################") 
 +         fmt.Fprintln(os.Stderr, os.Getenv("PATH")) 
 +         fmt.Fprintln(os.Stderr, "####################################") 
 + 
         if config := opts.config(base); config.Log || config.Error { 
                 var procs []paths.LogProcess 
                 if opts.lookupParents != nil { 
 </pre> 

 

 h2. Launching host binaries without touching the prebuilts 

 In Replicant 10, we could use out/.path/python3 as python3 interpreter assuming that we enabled it in build/soong/ui/build/paths/config.go 

 for instance in the Mesa (external/mesa3d) Android.mk we had: 
 <pre> 
 MESA_PYTHON2 := out/.path/python2 
 MESA_PYTHON3 := out/.path/python3 
 </pre> 

 This worked because 'python2' and 'python3' were only available in the host path: 
 <pre> 
 $ for path in $(echo /home/replicant/replicant-10/prebuilts/jdk/jdk9/linux-x86/bin:/home/replicant/replicant-10/prebuilts/jdk/jdk9/linux-x86/bin:/home/replicant/replicant-10/out/soong/host/linux-x86/bin:/home/replicant/replicant-10/out/host/linux-x86/bin:/home/replicant/replicant-10/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin:/home/replicant/replicant-10/development/scripts:/home/replicant/replicant-10/prebuilts/devtools/tools:/home/replicant/replicant-10/external/selinux/prebuilts/bin:/home/replicant/replicant-10/prebuilts/misc/linux-x86/dtc:/home/replicant/replicant-10/prebuilts/misc/linux-x86/libufdt:/home/replicant/replicant-10/prebuilts/android-emulator/linux-x86_64:/home/replicant/replicant-10/prebuilts/asuite/acloud/linux-x86:/home/replicant/replicant-10/prebuilts/asuite/aidegen/linux-x86:/home/replicant/replicant-10/prebuilts/asuite/atest/linux-x86:/home/replicant/bin:/home/replicant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games | sed 's#:#\n#g') ; do ls "${path}/python3" ; done 
 ls: cannot access '/home/replicant/replicant-10/prebuilts/jdk/jdk9/linux-x86/bin/python3': No such file or directory 
 ls: cannot access '/home/replicant/replicant-10/prebuilts/jdk/jdk9/linux-x86/bin/python3': No such file or directory 
 ls: cannot access '/home/replicant/replicant-10/out/soong/host/linux-x86/bin/python3': No such file or directory 
 ls: cannot access '/home/replicant/replicant-10/out/host/linux-x86/bin/python3': No such file or directory 
 ls: cannot access '/home/replicant/replicant-10/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/python3': No such file or directory 
 ls: cannot access '/home/replicant/replicant-10/development/scripts/python3': No such file or directory 
 ls: cannot access '/home/replicant/replicant-10/prebuilts/devtools/tools/python3': No such file or directory 
 ls: cannot access '/home/replicant/replicant-10/external/selinux/prebuilts/bin/python3': No such file or directory 
 ls: cannot access '/home/replicant/replicant-10/prebuilts/misc/linux-x86/dtc/python3': No such file or directory 
 ls: cannot access '/home/replicant/replicant-10/prebuilts/misc/linux-x86/libufdt/python3': No such file or directory 
 ls: cannot access '/home/replicant/replicant-10/prebuilts/android-emulator/linux-x86_64/python3': No such file or directory 
 ls: cannot access '/home/replicant/replicant-10/prebuilts/asuite/acloud/linux-x86/python3': No such file or directory 
 ls: cannot access '/home/replicant/replicant-10/prebuilts/asuite/aidegen/linux-x86/python3': No such file or directory 
 ls: cannot access '/home/replicant/replicant-10/prebuilts/asuite/atest/linux-x86/python3': No such file or directory 
 ls: cannot access '/home/replicant/bin/python3': No such file or directory 
 ls: cannot access '/home/replicant/.local/bin/python3': No such file or directory 
 ls: cannot access '/usr/local/sbin/python3': No such file or directory 
 ls: cannot access '/usr/local/bin/python3': No such file or directory 
 ls: cannot access '/usr/sbin/python3': No such file or directory 
 /usr/bin/python3 
 ls: cannot access '/sbin/python3': No such file or directory 
 ls: cannot access '/bin/python3': No such file or directory 
 ls: cannot access '/usr/games/python3': No such file or directory 
 </pre> 

 For instance @prebuilts/python/linux-x86/2.7.5/bin/python@ wasn't in the path.