termux / proot

An chroot-like implementation using ptrace.
https://wiki.termux.com/wiki/PRoot
Other
761 stars 160 forks source link

with qemu, things break a lot #92

Open ghost opened 4 years ago

ghost commented 4 years ago
mkdir test
cd tesr
curl https://partner-images.canonical.com/core/eoan/current/ubuntu-eoan-core-cloudimg-amd64-root.tar.gz | proot -l tar xzv
LD_PRELOAD= proot -0 -r . -b /dev -b /proc -b /sys -w / -q qemu-x86_64 /bin/su -lc 'gzip --help'

results in

/usr/bin/gzip: Invalid argument

it could have smth to do with

$ gzip --help
FORTIFY: %n not allowed on Android
[1]    14207 abort      gzip --help

termux-info:

Packages CPU architecture:
aarch64
Subscribed repositories:
# sources.list
deb https://termux.org/packages/ stable main
# x11-repo (sources.list.d/x11.list)
deb https://dl.bintray.com/xeffyr/x11-packages x11 main
# game-repo (sources.list.d/game.list)
deb https://dl.bintray.com/grimler/game-packages-24 games stable
# unstable-repo (sources.list.d/unstable.list)
deb https://dl.bintray.com/xeffyr/unstable-packages unstable main
# science-repo (sources.list.d/science.list)
deb https://dl.bintray.com/grimler/science-packages-24 science stable
Updatable packages:
All packages up to date
Android version:
10
Kernel build information:
Linux localhost 4.14.113-17369399 #1 SMP PREEMPT Fri Dec 13 17:35:51 KST 2019 aarch64 Android
Device manufacturer:
samsung
Device model:
SM-G975F
ghost commented 4 years ago

oh and also

$ LD_PRELOAD= proot -0 -r . -b /dev -b /proc -b /sys -w / -q qemu-x86_64 /bin/su -lc 'ls -alh /'
ls: /: Function not implemented
ls: /sys: Function not implemented
ls: /bin: Function not implemented
ls: /host-rootfs: Function not implemented
ls: /opt: Function not implemented
ls: /dev: Function not implemented
ls: /var: Function not implemented
ls: /proc: Function not implemented
ls: /home: Function not implemented
total 140K
drwx------  18 root root 4.0K Jan 22 03:11 .
drwx------  18 root root 4.0K Jan 22 03:11 ..
lrwx------   1 root root   18 Jan 17 13:49 bin -> usr/bin
drwx------   2 root root 4.0K Oct 14 14:35 boot
drwxr-xr-x  21 root root 6.9K Jan 21 23:22 dev
drwx------  30 root root 4.0K Jan 22 03:11 etc
drwx------   2 root root 4.0K Oct 14 14:35 home
drwxr-xr-x  27 root root 4.0K Dec 31  2008 host-rootfs
lrwx------   1 root root   18 Jan 17 13:49 lib -> usr/lib
lrwx------   1 root root   18 Jan 17 13:49 lib32 -> usr/lib32
lrwx------   1 root root   18 Jan 17 13:49 lib64 -> usr/lib64
lrwx------   1 root root   18 Jan 17 13:49 libx32 -> usr/libx32
drwx------   2 root root 4.0K Jan 17 13:49 media
drwx------   2 root root 4.0K Jan 17 13:49 mnt
drwx------   2 root root 4.0K Jan 17 13:49 opt
dr-xr-xr-x 645 root root    0 Jan  1  1970 proc
drwx------   2 root root 4.0K Jan 17 13:50 root
drwx------   4 root root 4.0K Jan 17 13:49 run
lrwx------   1 root root   18 Jan 17 13:49 sbin -> usr/sbin
drwx------   2 root root 4.0K Jan 17 13:49 srv
dr-xr-xr-x  17 root root    0 Jan 21 23:22 sys
drwx------   2 root root 4.0K Jan 17 13:50 tmp
drwx------  13 root root 4.0K Jan 17 13:49 usr
drwx------  11 root root 4.0K Jan 17 13:50 var
michalbednarski commented 4 years ago

Where is that qemu binary from?

Using qemu-user-static from unstable-packages repository (I couldn't find build script for it) I've got /usr/bin/gzip: Invalid argument error, however this happens without proot as well:

$ qemu-x86_64 usr/bin/gzip
usr/bin/gzip: Invalid argument
$ qemu-x86_64 usr/bin/ls
/lib64/ld-linux-x86-64.so.2: No such file or directory

(The second is expected error as path to linker is not valid in host system, however for gzip qemu failed with Invalid argument and didn't try to load linker (gzip also specifies /lib64/ld-linux-x86-64.so.2 as its linker))

With qemu-user-x86_64 package from main Termux repo problem does not occur, however it is neccessary to add -b /data switch to proot as proot couldn't guess correct LD_LIBRARY_PATH for qemu.

ghost commented 4 years ago

hmm, using qemu-user-x86_64 proot does this

proot error: execve("/usr/bin/sh"): Function not implemented
proot info: possible causes:
  * the program is a script but its interpreter (eg. /bin/sh) was not found;
  * the program is an ELF but its interpreter (eg. ld-linux.so) was not found;
  * the program is a foreign binary but qemu was not specified;
  * qemu does not work correctly (if specified);
  * the loader was not found or doesn't work.
fatal error: see `proot --help`.
proot error: trying to remove a directory outside of '/data/data/com.termux/files/usr/tmp', please report this error.
proot error: cant remove '/data/data/com.termux/files/usr/tmp/proot-9437-bVvsho': Directory not empty

/data, /system, and /vendor are -b'd

michalbednarski commented 4 years ago

That error indicates that proot wasn't even able to start qemu in first place. using qemu-x86_64 from qemu-user-x86_64 works on my device so I'd need trace from your device in order to see whats going on:

LD_PRELOAD= PROOT_VERBOSE=9 strace -vs5000 -o trace.txt proot -0 -r . -b /dev -b /proc -b /sys -b /data -b /system -w / -q qemu-x86_64 /bin/su -lc 'gzip --help'
ghost commented 4 years ago
proot info: Checking for f2fs case sensitivity bug
proot info: f2fs bug not present on device
proot info: binding = /dev/null:/etc/ld.so.preload
proot info: binding = /:/host-rootfs
proot info: binding = /system
proot info: binding = /data
proot info: binding = /sys
proot info: binding = /proc
proot info: binding = /dev
proot info: binding = /data/data/com.termux/files/home/tmp:/
proot info: vpid 1: translate("/" + "/bin/su")
proot info: vpid 1:          -> "/data/data/com.termux/files/home/tmp/usr/bin/su"
proot info: vpid 1: translate("/" + "/bin/su")
proot info: vpid 1:          -> "/data/data/com.termux/files/home/tmp/usr/bin/su"
proot info: host rootfs = /host-rootfs
proot info: glue rootfs = /data/data/com.termux/files/usr/tmp/proot-5848-CAsihR
proot info: exe = /usr/bin/su
proot info: argv = /bin/su -lc gzip --help
proot info: qemu = /data/data/com.termux/files/usr/bin/qemu-x86_64
proot info: initial cwd = /
proot info: verbose level = 9
proot info: pid 5848: access to "/dev/pts/0" (fd 0) won't be translated until closed
proot info: pid 5848: access to "/proc/5848/fd" (fd 3) won't be translated until closed
proot info: vpid 1: sysenter start: prctl(0x26, 0x1, 0x0, 0x0, 0x0, 0x0) = 0x26 [0x7ffa1d3340, 0]
proot info: vpid 1: sysenter end: prctl(0x26, 0x1, 0x0, 0x0, 0x0, 0x0) = 0x26 [0x7ffa1d3340, 0]
proot info: vpid 1: sysexit start: prctl(0x0, 0x1, 0x0, 0x0, 0x0, 0x0) = 0x0 [0x7ffa1d3340, 0]
proot info: vpid 1: sysexit end: prctl(0x0, 0x1, 0x0, 0x0, 0x0, 0x0) = 0x0 [0x7ffa1d3340, 0]
proot info: vpid 1: sysenter start: prctl(0x16, 0x2, 0x7ffa1d3360, 0x0, 0x0, 0x0) = 0x16 [0x7ffa1d3340, 0]
proot info: vpid 1: sysenter end: prctl(0x16, 0x2, 0x7ffa1d3360, 0x0, 0x0, 0x0) = 0x16 [0x7ffa1d3340, 0]
proot info: vpid 1: sysexit start: prctl(0x0, 0x2, 0x7ffa1d3360, 0x0, 0x0, 0x0) = 0x0 [0x7ffa1d3340, 0]
proot info: vpid 1: sysexit end: prctl(0x0, 0x2, 0x7ffa1d3360, 0x0, 0x0, 0x0) = 0x0 [0x7ffa1d3340, 0]
proot info: vpid 1: sysenter start: execve(0x7bcb6150d0, 0x7ffa1d55e8, 0x7ffa1d5608, 0x20, 0x40100401, 0xaa810101aaaaaaaa) = 0x7bcb6150d0 [0x7ffa1d3390, 0]
proot info: vpid 1: translate("/" + "/usr/bin/su")
proot info: vpid 1:          -> "/data/data/com.termux/files/home/tmp/usr/bin/su"
proot info: vpid 1: translate("/" + "/host-rootfs/system/bin/linker64")
proot info: vpid 1: sysenter end: void(0xfffffffffffffffe, 0x7ffa1d32cf, 0x7ffa1d23f7, 0x20, 0x40100401, 0xaa810101aaaaaaaa) = 0xfffffffffffffffe [0x7ffa1d23f7, 0]
proot info: vpid 1: sysexit start: void(0x7bcb6150d0, 0x7ffa1d32cf, 0x7ffa1d23f7, 0x20, 0x40100401, 0xaa810101aaaaaaaa) = 0x7bcb6150d0 [0x7ffa1d23f7, 0]
proot info: vpid 1: sysexit end: execve(0xfffffffffffffffe, 0x7ffa1d55e8, 0x7ffa1d5608, 0x20, 0x40100401, 0xaa810101aaaaaaaa) = 0xfffffffffffffffe [0x7ffa1d3390, 0]
proot info: vpid 1: seccomp SIGSYS: execve(0xfffffffffffffffe, 0x7ffa1d55e8, 0x7ffa1d5608, 0x20, 0x40100401, 0xaa810101aaaaaaaa) = 0xfffffffffffffffe [0x7ffa1d3390, 0]
proot info: vpid 1: sysenter start: write(0x2, 0x7ffa1d2c50, 0xd, 0x6f72686300302e31, 0x58a70df895, 0x7ffa1d2c5d) = 0x2 [0x7ffa1d29e0, 0]
proot info: vpid 1: sysenter end: write(0x2, 0x7ffa1d2c50, 0xd, 0x6f72686300302e31, 0x58a70df895, 0x7ffa1d2c5d) = 0x2 [0x7ffa1d29e0, 0]
proot error: proot info: vpid 1: sysexit start: write(0xd, 0x7ffa1d2c50, 0xd, 0x6f72686300302e31, 0x58a70df895, 0x7ffa1d2c5d) = 0xd [0x7ffa1d29e0, 0]
proot info: vpid 1: sysexit end: write(0xd, 0x7ffa1d2c50, 0xd, 0x6f72686300302e31, 0x58a70df895, 0x7ffa1d2c5d) = 0xd [0x7ffa1d29e0, 0]
proot info: vpid 1: sysenter start: write(0x2, 0x7ffa1d2d40, 0x15, 0x75732f, 0x58a70ddc39, 0x7ffa1d2d55) = 0x2 [0x7ffa1d2ad0, 0]
proot info: vpid 1: sysenter end: write(0x2, 0x7ffa1d2d40, 0x15, 0x75732f, 0x58a70ddc39, 0x7ffa1d2d55) = 0x2 [0x7ffa1d2ad0, 0]
execve("/usr/bin/su")proot info: vpid 1: sysexit start: write(0x15, 0x7ffa1d2d40, 0x15, 0x75732f, 0x58a70ddc39, 0x7ffa1d2d55) = 0x15 [0x7ffa1d2ad0, 0]
proot info: vpid 1: sysexit end: write(0x15, 0x7ffa1d2d40, 0x15, 0x75732f, 0x58a70ddc39, 0x7ffa1d2d55) = 0x15 [0x7ffa1d2ad0, 0]
proot info: vpid 1: sysenter start: write(0x2, 0x58a70df8a9, 0x2, 0x7bcbc12580, 0x58a70ddc39, 0x7ffa1d2d55) = 0x2 [0x7ffa1d3230, 0]
proot info: vpid 1: sysenter end: write(0x2, 0x58a70df8a9, 0x2, 0x7bcbc12580, 0x58a70ddc39, 0x7ffa1d2d55) = 0x2 [0x7ffa1d3230, 0]
: proot info: vpid 1: sysexit start: write(0x2, 0x58a70df8a9, 0x2, 0x7bcbc12580, 0x58a70ddc39, 0x7ffa1d2d55) = 0x2 [0x7ffa1d3230, 0]
proot info: vpid 1: sysexit end: write(0x2, 0x58a70df8a9, 0x2, 0x7bcbc12580, 0x58a70ddc39, 0x7ffa1d2d55) = 0x2 [0x7ffa1d3230, 0]
proot info: vpid 1: sysenter start: write(0x2, 0x7ffa1d2c50, 0x19, 0x7571696e7520746f, 0x7bcbb432a0, 0x7ffa1d2c69) = 0x2 [0x7ffa1d29e0, 0]
proot info: vpid 1: sysenter end: write(0x2, 0x7ffa1d2c50, 0x19, 0x7571696e7520746f, 0x7bcbb432a0, 0x7ffa1d2c69) = 0x2 [0x7ffa1d29e0, 0]
Function not implemented
proot info: vpid 1: sysexit start: write(0x19, 0x7ffa1d2c50, 0x19, 0x7571696e7520746f, 0x7bcbb432a0, 0x7ffa1d2c69) = 0x19 [0x7ffa1d29e0, 0]
proot info: vpid 1: sysexit end: write(0x19, 0x7ffa1d2c50, 0x19, 0x7571696e7520746f, 0x7bcbb432a0, 0x7ffa1d2c69) = 0x19 [0x7ffa1d29e0, 0]
proot info: vpid 1: sysenter start: write(0x2, 0x7ffa1d2c50, 0xc, 0x6f72686300302e31, 0x58a70df89f, 0x7ffa1d2c5c) = 0x2 [0x7ffa1d29e0, 0]
proot info: vpid 1: sysenter end: write(0x2, 0x7ffa1d2c50, 0xc, 0x6f72686300302e31, 0x58a70df89f, 0x7ffa1d2c5c) = 0x2 [0x7ffa1d29e0, 0]
proot info: proot info: vpid 1: sysexit start: write(0xc, 0x7ffa1d2c50, 0xc, 0x6f72686300302e31, 0x58a70df89f, 0x7ffa1d2c5c) = 0xc [0x7ffa1d29e0, 0]
proot info: vpid 1: sysexit end: write(0xc, 0x7ffa1d2c50, 0xc, 0x6f72686300302e31, 0x58a70df89f, 0x7ffa1d2c5c) = 0xc [0x7ffa1d29e0, 0]
proot info: vpid 1: sysenter start: write(0x2, 0x7ffa1d2d40, 0x14b, 0x7ffa1d2e00, 0x58a70ddf04, 0x7ffa1d2e8b) = 0x2 [0x7ffa1d2ad0, 0]
proot info: vpid 1: sysenter end: write(0x2, 0x7ffa1d2d40, 0x14b, 0x7ffa1d2e00, 0x58a70ddf04, 0x7ffa1d2e8b) = 0x2 [0x7ffa1d2ad0, 0]
possible causes:
  * the program is a script but its interpreter (eg. /bin/sh) was not found;
  * the program is an ELF but its interpreter (eg. ld-linux.so) was not found;
  * the program is a foreign binary but qemu was not specified;
  * qemu does not work correctly (if specified);
  * the loader was not found or doesn't work.proot info: vpid 1: sysexit start: write(0x14b, 0x7ffa1d2d40, 0x14b, 0x7ffa1d2e00, 0x58a70ddf04, 0x7ffa1d2e8b) = 0x14b [0x7ffa1d2ad0, 0]
proot info: vpid 1: sysexit end: write(0x14b, 0x7ffa1d2d40, 0x14b, 0x7ffa1d2e00, 0x58a70ddf04, 0x7ffa1d2e8b) = 0x14b [0x7ffa1d2ad0, 0]
proot info: vpid 1: sysenter start: write(0x2, 0x7bcbc125f7, 0x1, 0x7bcbc12580, 0x58a70ddf04, 0x7ffa1d2e8b) = 0x2 [0x7ffa1d3280, 0]
proot info: vpid 1: sysenter end: write(0x2, 0x7bcbc125f7, 0x1, 0x7bcbc12580, 0x58a70ddf04, 0x7ffa1d2e8b) = 0x2 [0x7ffa1d3280, 0]

proot info: vpid 1: sysexit start: write(0x1, 0x7bcbc125f7, 0x1, 0x7bcbc12580, 0x58a70ddf04, 0x7ffa1d2e8b) = 0x1 [0x7ffa1d3280, 0]
proot info: vpid 1: sysexit end: write(0x1, 0x7bcbc125f7, 0x1, 0x7bcbc12580, 0x58a70ddf04, 0x7ffa1d2e8b) = 0x1 [0x7ffa1d3280, 0]
proot info: vpid 1: sysenter start: write(0x2, 0x7ffa1d2d90, 0x21, 0x0, 0x58a70dda36, 0x7ffa1d2db1) = 0x2 [0x7ffa1d2b20, 0]
proot info: vpid 1: sysenter end: write(0x2, 0x7ffa1d2d90, 0x21, 0x0, 0x58a70dda36, 0x7ffa1d2db1) = 0x2 [0x7ffa1d2b20, 0]
fatal error: see `proot --help`.
proot info: vpid 1: sysexit start: write(0x21, 0x7ffa1d2d90, 0x21, 0x0, 0x58a70dda36, 0x7ffa1d2db1) = 0x21 [0x7ffa1d2b20, 0]
proot info: vpid 1: sysexit end: write(0x21, 0x7ffa1d2d90, 0x21, 0x0, 0x58a70dda36, 0x7ffa1d2db1) = 0x21 [0x7ffa1d2b20, 0]
proot info: vpid 1: sysenter start: mprotect(0x7bcd167000, 0x1000, 0x3, 0x0, 0x58a70dda36, 0x7ffa1d2db1) = 0x7bcd167000 [0x7ffa1d33e0, 0]
proot info: vpid 1: sysenter end: mprotect(0x7bcd167000, 0x1000, 0x3, 0x0, 0x58a70dda36, 0x7ffa1d2db1) = 0x7bcd167000 [0x7ffa1d33e0, 0]
proot info: vpid 1: sysexit start: mprotect(0x0, 0x1000, 0x3, 0x0, 0x58a70dda36, 0x7ffa1d2db1) = 0x0 [0x7ffa1d33e0, 0]
proot info: vpid 1: sysexit end: mprotect(0x0, 0x1000, 0x3, 0x0, 0x58a70dda36, 0x7ffa1d2db1) = 0x0 [0x7ffa1d33e0, 0]
proot info: vpid 1: sysenter start: mprotect(0x7bcd167000, 0x1000, 0x1, 0x0, 0x58a70dda36, 0x7ffa1d2db1) = 0x7bcd167000 [0x7ffa1d33e0, 0]
proot info: vpid 1: sysenter end: mprotect(0x7bcd167000, 0x1000, 0x1, 0x0, 0x58a70dda36, 0x7ffa1d2db1) = 0x7bcd167000 [0x7ffa1d33e0, 0]
proot info: vpid 1: sysexit start: mprotect(0x0, 0x1000, 0x1, 0x0, 0x58a70dda36, 0x7ffa1d2db1) = 0x0 [0x7ffa1d33e0, 0]
proot info: vpid 1: sysexit end: mprotect(0x0, 0x1000, 0x1, 0x0, 0x58a70dda36, 0x7ffa1d2db1) = 0x0 [0x7ffa1d33e0, 0]
proot info: vpid 1: sysenter start: fstatat64(0xffffff9c, 0x7bcb61c4c0, 0x7ffa1d3278, 0x100, 0x58a70dda36, 0x7ffa1d2db1) = 0xffffff9c [0x7ffa1d3270, 0]
proot info: vpid 1: translate("/" + "/data/data/com.termux/files/home/tmp/etc/ld.so.preload")
proot info: vpid 1:          -> "/data/data/com.termux/files/home/tmp/etc/ld.so.preload"
proot info: vpid 1: sysenter end: fstatat64(0xffffff9c, 0x7ffa1d3239, 0x7ffa1d3278, 0x100, 0x58a70dda36, 0x7ffa1d2db1) = 0xffffff9c [0x7ffa1d3239, 0]
proot info: ptrace acceleration (seccomp mode 2, new syscall order) enabled
proot info: skipping PTRACE_EVENT_SECCOMP for already handled sysenter
proot info: vpid 1: sysexit start: fstatat64(0x0, 0x7ffa1d3239, 0x7ffa1d3278, 0x100, 0x58a70dda36, 0x7ffa1d2db1) = 0x0 [0x7ffa1d3239, 0]
proot info: vpid 1: sysexit end: fstatat64(0x0, 0x7bcb61c4c0, 0x7ffa1d3278, 0x100, 0x58a70dda36, 0x7ffa1d2db1) = 0x0 [0x7ffa1d3270, 0]
proot info: vpid 1: sysenter start: unlinkat(0xffffff9c, 0x7bcb61c4c0, 0x0, 0x100, 0x58a70dda36, 0x7ffa1d2db1) = 0xffffff9c [0x7ffa1d3270, 0]
proot info: vpid 1: translate("/" + "/data/data/com.termux/files/home/tmp/etc/ld.so.preload")
proot info: vpid 1:          -> "/data/data/com.termux/files/home/tmp/etc/ld.so.preload"
proot info: vpid 1: sysenter end: unlinkat(0xffffff9c, 0x7ffa1d3239, 0x0, 0x100, 0x58a70dda36, 0x7ffa1d2db1) = 0xffffff9c [0x7ffa1d3270, 0]
proot info: vpid 1: sysenter start: fstatat64(0xffffff9c, 0x7bcb61c420, 0x7ffa1d3278, 0x100, 0x58a70dda36, 0x7ffa1d2db1) = 0xffffff9c [0x7ffa1d3270, 0]
proot info: vpid 1: translate("/" + "/data/data/com.termux/files/home/tmp/host-rootfs")
proot info: vpid 1:          -> "/data/data/com.termux/files/home/tmp/host-rootfs"
proot info: vpid 1: sysenter end: fstatat64(0xffffff9c, 0x7ffa1d323f, 0x7ffa1d3278, 0x100, 0x58a70dda36, 0x7ffa1d2db1) = 0xffffff9c [0x7ffa1d323f, 0]
proot info: vpid 1: sysexit start: fstatat64(0x0, 0x7ffa1d323f, 0x7ffa1d3278, 0x100, 0x58a70dda36, 0x7ffa1d2db1) = 0x0 [0x7ffa1d323f, 0]
proot info: vpid 1: sysexit end: fstatat64(0x0, 0x7bcb61c420, 0x7ffa1d3278, 0x100, 0x58a70dda36, 0x7ffa1d2db1) = 0x0 [0x7ffa1d3270, 0]
proot info: vpid 1: sysenter start: unlinkat(0xffffff9c, 0x7bcb61c420, 0x200, 0x100, 0x58a70dda36, 0x7ffa1d2db1) = 0xffffff9c [0x7ffa1d3270, 0]
proot info: vpid 1: translate("/" + "/data/data/com.termux/files/home/tmp/host-rootfs")
proot info: vpid 1:          -> "/data/data/com.termux/files/home/tmp/host-rootfs"
proot info: vpid 1: sysenter end: unlinkat(0xffffff9c, 0x7ffa1d323f, 0x200, 0x100, 0x58a70dda36, 0x7ffa1d2db1) = 0xffffff9c [0x7ffa1d3270, 0]
proot info: vpid 1: sysenter start: fstatat64(0xffffff9c, 0x7bcb61c380, 0x7ffa1d3278, 0x100, 0x58a70dda36, 0x7ffa1d2db1) = 0xffffff9c [0x7ffa1d3270, 0]
proot info: vpid 1: translate("/" + "/data/data/com.termux/files/home/tmp/system")
proot info: vpid 1:          -> "/data/data/com.termux/files/home/tmp/system"
proot info: vpid 1: sysenter end: fstatat64(0xffffff9c, 0x7ffa1d3244, 0x7ffa1d3278, 0x100, 0x58a70dda36, 0x7ffa1d2db1) = 0xffffff9c [0x7ffa1d3244, 0]
proot info: vpid 1: sysexit start: fstatat64(0x0, 0x7ffa1d3244, 0x7ffa1d3278, 0x100, 0x58a70dda36, 0x7ffa1d2db1) = 0x0 [0x7ffa1d3244, 0]
proot info: vpid 1: sysexit end: fstatat64(0x0, 0x7bcb61c380, 0x7ffa1d3278, 0x100, 0x58a70dda36, 0x7ffa1d2db1) = 0x0 [0x7ffa1d3270, 0]
proot info: vpid 1: sysenter start: unlinkat(0xffffff9c, 0x7bcb61c380, 0x200, 0x100, 0x58a70dda36, 0x7ffa1d2db1) = 0xffffff9c [0x7ffa1d3270, 0]
proot info: vpid 1: translate("/" + "/data/data/com.termux/files/home/tmp/system")
proot info: vpid 1:          -> "/data/data/com.termux/files/home/tmp/system"
proot info: vpid 1: sysenter end: unlinkat(0xffffff9c, 0x7ffa1d3244, 0x200, 0x100, 0x58a70dda36, 0x7ffa1d2db1) = 0xffffff9c [0x7ffa1d3270, 0]
proot info: vpid 1: sysenter start: fstatat64(0xffffff9c, 0x7bcb61c2e0, 0x7ffa1d3278, 0x100, 0x7bcb600260, 0x7bcb600280) = 0xffffff9c [0x7ffa1d3270, 0]
proot info: vpid 1: translate("/" + "/data/data/com.termux/files/home/tmp/data")
proot info: vpid 1:          -> "/data/data/com.termux/files/home/tmp/data"
proot info: vpid 1: sysenter end: fstatat64(0xffffff9c, 0x7ffa1d3246, 0x7ffa1d3278, 0x100, 0x7bcb600260, 0x7bcb600280) = 0xffffff9c [0x7ffa1d3246, 0]
proot info: vpid 1: sysexit start: fstatat64(0x0, 0x7ffa1d3246, 0x7ffa1d3278, 0x100, 0x7bcb600260, 0x7bcb600280) = 0x0 [0x7ffa1d3246, 0]
proot info: vpid 1: sysexit end: fstatat64(0x0, 0x7bcb61c2e0, 0x7ffa1d3278, 0x100, 0x7bcb600260, 0x7bcb600280) = 0x0 [0x7ffa1d3270, 0]
proot info: vpid 1: sysenter start: unlinkat(0xffffff9c, 0x7bcb61c2e0, 0x200, 0x100, 0x7bcb600260, 0x7bcb600280) = 0xffffff9c [0x7ffa1d3270, 0]
proot info: vpid 1: translate("/" + "/data/data/com.termux/files/home/tmp/data")
proot info: vpid 1:          -> "/data/data/com.termux/files/home/tmp/data"
proot info: vpid 1: sysenter end: unlinkat(0xffffff9c, 0x7ffa1d3246, 0x200, 0x100, 0x7bcb600260, 0x7bcb600280) = 0xffffff9c [0x7ffa1d3270, 0]
proot info: vpid 1: sysenter start: getcwd(0x7bcb63a000, 0x1000, 0x1000, 0x9, 0x7bcb600260, 0x7bcb600280) = 0x7bcb63a000 [0x7ffa1d32d0, 0]
proot info: vpid 1: sysenter end: void(0x7bcb63a000, 0x1000, 0x1000, 0x9, 0x7bcb600260, 0x7bcb600280) = 0x7bcb63a000 [0x7ffa1d32d0, 0]
proot info: vpid 1: sysexit start: void(0x7bcb63a000, 0x1000, 0x1000, 0x9, 0x7bcb600260, 0x7bcb600280) = 0x7bcb63a000 [0x7ffa1d32d0, 0]
proot info: vpid 1: translate("/" + ".")
proot info: vpid 1:          -> "/data/data/com.termux/files/home/tmp/."
proot info: vpid 1: sysexit end: getcwd(0x2, 0x1000, 0x1000, 0x9, 0x7bcb600260, 0x7bcb600280) = 0x2 [0x7ffa1d32d0, 0]
proot info: vpid 1: sysenter start: fchmodat(0xffffff9c, 0x7bcb61c240, 0x1c0, 0x0, 0x7bcb600260, 0x7bcb600280) = 0xffffff9c [0x7ffa1d3300, 0]
proot info: vpid 1: translate("/" + "/data/data/com.termux/files/usr/tmp/proot-5848-CAsihR")
proot info: vpid 1:          -> "/data/data/com.termux/files/usr/tmp/proot-5848-CAsihR"
proot info: vpid 1: sysenter end: fchmodat(0xffffff9c, 0x7ffa1d32ca, 0x1c0, 0x0, 0x7bcb600260, 0x7bcb600280) = 0xffffff9c [0x7ffa1d32ca, 0]
proot info: vpid 1: sysexit start: fchmodat(0x0, 0x7ffa1d32ca, 0x1c0, 0x0, 0x7bcb600260, 0x7bcb600280) = 0x0 [0x7ffa1d32ca, 0]
proot info: vpid 1: sysexit end: fchmodat(0x0, 0x7bcb61c240, 0x1c0, 0x0, 0x7bcb600260, 0x7bcb600280) = 0x0 [0x7ffa1d3300, 0]
proot info: vpid 1: sysenter start: chdir(0x7bcb61c240, 0x7bcb61c240, 0x1c0, 0x0, 0x7bcb600260, 0x7bcb600280) = 0x7bcb61c240 [0x7ffa1d3300, 0]
proot info: vpid 1: translate("/" + "/data/data/com.termux/files/usr/tmp/proot-5848-CAsihR/.")
proot info: vpid 1:          -> "/data/data/com.termux/files/usr/tmp/proot-5848-CAsihR/."
proot info: vpid 1: sysenter end: void(0x7bcb61c240, 0x7bcb61c240, 0x1c0, 0x0, 0x7bcb600260, 0x7bcb600280) = 0x7bcb61c240 [0x7ffa1d3300, 0]
proot info: vpid 1: sysexit start: void(0x7bcb61c240, 0x7bcb61c240, 0x1c0, 0x0, 0x7bcb600260, 0x7bcb600280) = 0x7bcb61c240 [0x7ffa1d3300, 0]
proot info: vpid 1: sysexit end: chdir(0x0, 0x7bcb61c240, 0x1c0, 0x0, 0x7bcb600260, 0x7bcb600280) = 0x0 [0x7ffa1d3300, 0]
proot info: vpid 1: sysenter start: readlinkat(0xffffff9c, 0x58a70e12c2, 0x7bcb61c2e0, 0x23, 0x18, 0x28) = 0xffffff9c [0x7ffa1d32a0, 0]
proot info: vpid 1: translate("/" + "/proc/self/cwd")
proot info: vpid 1:          -> "/proc/5852/cwd"
proot info: vpid 1: sysenter end: readlinkat(0xffffff9c, 0x7ffa1d3291, 0x7bcb61c2e0, 0x23, 0x18, 0x28) = 0xffffff9c [0x7ffa1d3291, 0]
proot info: vpid 1: sysexit start: readlinkat(0x23, 0x7ffa1d3291, 0x7bcb61c2e0, 0x23, 0x18, 0x28) = 0x23 [0x7ffa1d3291, 0]
proot info: vpid 1: sysexit end: readlinkat(0x23, 0x58a70e12c2, 0x7bcb61c2e0, 0x23, 0x18, 0x28) = 0x23 [0x7ffa1d32a0, 0]
proot info: vpid 1: sysenter start: openat(0xffffff9c, 0x58a70ddb48, 0x84000, 0x0, 0x0, 0xffffffffff000000) = 0xffffff9c [0x7ffa1d3280, 0]
proot info: vpid 1: translate("/data/data/com.termux/files/usr/tmp/proot-5848-CAsihR" + ".")
proot info: vpid 1:          -> "/data/data/com.termux/files/usr/tmp/proot-5848-CAsihR/."
proot info: vpid 1: sysenter end: openat(0xffffff9c, 0x7ffa1d3248, 0x84000, 0x0, 0x0, 0xffffffffff000000) = 0xffffff9c [0x7ffa1d3280, 0]
proot info: vpid 1: sysenter start: chdir(0x58a70e08d4, 0x3, 0x58a70e138d, 0x1d, 0x0, 0xffffffffff000000) = 0x58a70e08d4 [0x7ffa1d3300, 0]
proot info: vpid 1: translate("/data/data/com.termux/files/usr/tmp/proot-5848-CAsihR" + "../.")
proot info: vpid 1:          -> "/data/data/com.termux/files/usr/tmp/."
proot info: vpid 1: sysenter end: void(0x58a70e08d4, 0x3, 0x58a70e138d, 0x1d, 0x0, 0xffffffffff000000) = 0x58a70e08d4 [0x7ffa1d3300, 0]
proot info: vpid 1: sysexit start: void(0x58a70e08d4, 0x3, 0x58a70e138d, 0x1d, 0x0, 0xffffffffff000000) = 0x58a70e08d4 [0x7ffa1d3300, 0]
proot info: vpid 1: sysexit end: chdir(0x0, 0x3, 0x58a70e138d, 0x1d, 0x0, 0xffffffffff000000) = 0x0 [0x7ffa1d3300, 0]
proot info: vpid 1: sysenter start: unlinkat(0xffffff9c, 0x7bcb61c240, 0x200, 0x1d, 0x0, 0xffffffffff000000) = 0xffffff9c [0x7ffa1d3300, 0]
proot info: vpid 1: translate("/" + "/data/data/com.termux/files/usr/tmp/proot-5848-CAsihR")
proot info: vpid 1:          -> "/data/data/com.termux/files/usr/tmp/proot-5848-CAsihR"
proot info: vpid 1: sysenter end: unlinkat(0xffffff9c, 0x7ffa1d32ca, 0x200, 0x1d, 0x0, 0xffffffffff000000) = 0xffffff9c [0x7ffa1d3300, 0]
proot info: vpid 1: sysenter start: chdir(0x7bcb63a000, 0x7ffa1d32ca, 0x200, 0x1d, 0x0, 0xffffffffff000000) = 0x7bcb63a000 [0x7ffa1d3300, 0]
proot info: vpid 1: translate("/" + "/.")
proot info: vpid 1:          -> "/data/data/com.termux/files/home/tmp/."
proot info: vpid 1: sysenter end: void(0x7bcb63a000, 0x7ffa1d32ca, 0x200, 0x1d, 0x0, 0xffffffffff000000) = 0x7bcb63a000 [0x7ffa1d3300, 0]
proot info: vpid 1: sysexit start: void(0x7bcb63a000, 0x7ffa1d32ca, 0x200, 0x1d, 0x0, 0xffffffffff000000) = 0x7bcb63a000 [0x7ffa1d3300, 0]
proot info: vpid 1: sysexit end: chdir(0x0, 0x7ffa1d32ca, 0x200, 0x1d, 0x0, 0xffffffffff000000) = 0x0 [0x7ffa1d3300, 0]
proot info: vpid 1: exited with status 1
proot error: can't chmod '/data/data/com.termux/files/usr/tmp/proot-5848-CAsihR': No such file or directory
michalbednarski commented 4 years ago

Looks like on Android 10 it's also necessary to add -b /apex

ghost commented 4 years ago

hmm, yeah that seems to work

total 156K
drwx------.  22 root root 4.0K Jan 27 07:00 .
drwx------.  22 root root 4.0K Jan 27 07:00 ..
drwxr-xr-x.  14 root root  280 Jan 26 19:05 apex
lrwx------.   1 root root   18 Jan 17 21:49 bin -> usr/bin
drwx------.   2 root root 4.0K Oct 14 22:35 boot
drwxrwx--x.  69 1000 1000 4.0K Jan 26 19:05 data
drwxr-xr-x.  21 root root 6.9K Jan 26 19:05 dev
drwx------.  60 root root 4.0K Jan 27 07:00 etc
drwx------.   3 root root 4.0K Oct 14 22:35 home
drwxr-xr-x.  27 root root 4.0K Jan  1  2009 host-rootfs
lrwx------.   1 root root   18 Jan 17 21:49 lib -> usr/lib
lrwx------.   1 root root   18 Jan 17 21:49 lib32 -> usr/lib32
lrwx------.   1 root root   18 Jan 17 21:49 lib64 -> usr/lib64
lrwx------.   1 root root   18 Jan 17 21:49 libx32 -> usr/libx32
drwx------.   2 root root 4.0K Jan 17 21:49 media
drwx------.   2 root root 4.0K Jan 17 21:49 mnt
drwx------.   2 root root 4.0K Jan 17 21:49 opt
dr-xr-xr-x. 634 root root    0 Jan  1  1970 proc
drwx------.   3 root root 4.0K Jan 17 21:50 root
drwx------.   3 root root 4.0K Jan 27 06:58 run
lrwx------.   1 root root   18 Jan 17 21:49 sbin -> usr/sbin
drwx------.   2 root root 4.0K Jan 17 21:49 srv
dr-xr-xr-x.  17 root root    0 Jan 26 19:05 sys
drwxr-xr-x.  23 root root 4.0K Jan  1  2009 system
drwx------.   2 root root 4.0K Jan 27 06:58 tmp
drwx------.  14 root root 4.0K Jan 17 21:49 usr
drwx------.  11 root root 4.0K Jan 17 21:50 var
drwxr-xr-x.  15 root 2000 4.0K Jan  1  2009 vendor
ghost commented 4 years ago

another issue is ldconfig appears to make qemu segfault

qemu: uncaught target signal 11 (Segmentation fault) - core dumped
Segmentation fault

which ends up breaking installation of some packages, lol

Setting up libc-bin (2.30-0ubuntu2) ...
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
Segmentation fault
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
Segmentation fault
dpkg: error processing package libc-bin (--configure):
 installed libc-bin package post-installation script subprocess returned error exit status 139
Errors were encountered while processing:
 libc-bin
michalbednarski commented 4 years ago

Looks like ldconfig fails to allocate memory, this happens regardless of proot, there's recent commit in QEMU that appears to be aimed at fixing that, however I haven't tested it and commit didn't make into QEMU release yet.

ghost commented 4 years ago

how do you guys build qemu? i couldnt find the build scripts in any of the repos?? only qemu-headless-x86_64 exists?

ghost commented 4 years ago

@kalmari246 qemu-user-static is custom build. It does not have any build scripts as was compiled manually.

It is provided for specific cases where only static version of qemu is working. It is not needed for use with proot as dynamic one works well (for me at least).

ghost commented 4 years ago

im assuming the dynamic one is also manually built?

yeah it works most of the time, but it does enjoy segfaulting with a fair amount of programs

ghost commented 4 years ago

im assuming the dynamic one is also manually built?

It is subpackage of https://github.com/termux/termux-packages/tree/master/packages/qemu-system-x86_64-headless.

yeah it works most of the time, but it does enjoy segfaulting with a fair amount of programs

Yes, some programs do not work well with it for unknown reason. Also QEMU user mode on Android is a lot slower than system mode.

Maybe something to do with libc or kernel or something else system call related.

My Android version is 8.0.

ghost commented 4 years ago

Ahh, right.

Great.. Oh yeah that's something, unicorn, the emulator lib based on qemu, it segfaults as well.

Mine's 10.0

michalbednarski commented 4 years ago

Commit I've linked above fixes issue related to brk() syscall, as Unicorn has no own syscall handling crashes of Unicorn are probably unrelated to this issue. Crash here happened inside emulated program (which Qemu-user forwards as own SEGV, but Unicorn would just return error from uc_emu_start (e.g. UC_ERR_WRITE_UNMAPPED) and not crash emulator process)