Skip to content

Tags: proot-me/proot

Tags

v5.4.1

Toggle v5.4.1's commit message
fix(release): force-disable the python extension via HAS_SWIG/HAS_PYT…

…HON_CONFIG

Removing swig from the dependency list didn't work either: swig, like
python3-config, is preinstalled on GitHub's ubuntu-latest runners
independent of anything this workflow installs -- confirmed via the
actual failed run's log (SWIG proot_wrap.c, CC extension/python/*.o
both still ran).

Stop trying to make the tools unavailable and just override the
Makefile's own detection variables on the command line instead, which
take precedence over the makefile's :=. Needs applying to both make
invocations: the first one generates build.h, which bakes in
HAVE_PYTHON_EXTENSION from HAS_SWIG/HAS_PYTHON_CONFIG at that point,
independent of what the second invocation's OBJECTS list ends up
containing -- verified this exact mismatch locally (cli/proot.o
referencing python_callback with no object defining it) before fixing
it, then reverified clean with swig and python3-config both actually
present, matching the real runner.

v5.4.0

Toggle v5.4.0's commit message
Prepare for PRoot release v5.4.0

Prepare for CARE release v2.3.0

v5.3.1

Toggle v5.3.1's commit message
Prepare for v5.3.1 release

v5.3.0

Toggle v5.3.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
Prepare for v5.3.0 release (#316)

* Update DOI badge

* Update CHANGELOG.rst

* Delete changelog.rst for proot and care

* Update manual.rst

* Update proot.h

v5.2.0

Toggle v5.2.0's commit message
Prepare for release

Add care binary to CI/CD pipeline

v5.2.0-alpha

Toggle v5.2.0-alpha's commit message
Prepare documentation for release

v5.1.0

Toggle v5.1.0's commit message
Release v5.1.0

==============

New features
------------

+ Processes under PRoot now appear with their real names, that is,
  they are not renamed "ld-linux.so" or "prooted-..." anymore:

  before:

      $ proot-v4.0.3 ps
        PID TTY          TIME CMD
       7885 pts/11   00:00:00 bash
       8131 pts/11   00:00:00 proot-v4.0.3
       8132 pts/11   00:00:00 ld-2.17.so

      $ proot-v5.0.0 ps
        PID TTY          TIME CMD
       7885 pts/11   00:00:00 bash
       7916 pts/11   00:00:00 proot-v5.0.0
       7917 pts/11   00:00:00 prooted-7916-Jb

  now:

      $ proot-v5.1.0 ps
        PID TTY          TIME CMD
       7885 pts/11   00:00:00 bash
       8585 pts/11   00:00:00 proot-v5.1.0
       8586 pts/11   00:00:00 ps

Fixes
-----

+ It is now possible to use GDB against multi-threaded programs under
  PRoot x86_64 and x86.

+ It is possible to execute x86_64 programs from x86 programs again.

+ It is possible to use x86 ptrace-based programs (strace, gdb, ...)
  under PRoot x86_64 again.

+ The loader is now built with the "build-id" linker option explicitly
  disabled.  This special section might interfere with loaded
  programs.

+ The loader can now load relocatable objects that have a predefined
  base address.

Acknowledgements
----------------

Thanks to Erwan Gouriou, Sébastien Gandon, Christian milkylainen,
Henrik Wallin, and Frank Teo for their bug reports and tests.

Thanks to Jérôme Audu, Yann Droneaud, and Christophe Monat for their
precious help.

Validation
----------

====================  =================  ==============  =================  =========
testsuite                   host distro    guest distro     configurations   comments
====================  =================  ==============  =================  =========
proot-v5.1            Slack-14.1/x86_64            none                N/A          a
proot-v5.1/memcheck   Slack-14.1/x86_64            none                N/A          a
proot-v5.1/asan       Slack-14.1/x86_64            none                N/A          a
proot-v5.1/talleak    Slack-14.1/x86_64            none                N/A          a

proot-v5.1                 OBS */x86_64            none                N/A          b
proot-v5.1                    OBS */x86            none                N/A          c
proot-v5.1              STLinux-2.4/arm            none                N/A          d

libuv-0.10.27         Slack-14.1/x86_64    same as host               none          a
libuv-0.10.27         Slack-14.1/x86_64    same as host   kompat, fake_id0          l
libuv-0.10.27         Slack-14.1/x86_64  Slack-14.1/x86               none          a
libuv-0.10.27         Slack-14.1/x86_64  Slack-14.1/x86   kompat, fake_id0          l

ltp-syscall-20130904  Slack-14.1/x86_64    same as host               none          f
ltp-syscall-20130904  Slack-14.1/x86_64    same as host   kompat, fake_id0          n
ltp-syscall-20130904  Slack-14.1/x86_64  Slack-14.1/x86               none          j
ltp-syscall-20130904  Slack-14.1/x86_64  Slack-14.1/x86   kompat, fake_id0          t

ltp-opt-20130904      Slack-14.1/x86_64    same as host               none          g
ltp-opt-20130904      Slack-14.1/x86_64    same as host   kompat, fake_id0          m
ltp-opt-20130904      Slack-14.1/x86_64  Slack-14.1/x86               none          i
ltp-opt-20130904      Slack-14.1/x86_64  Slack-14.1/x86   kompat, fake_id0          u

perl-5.18.1           Slack-14.1/x86_64    same as host               none          a
perl-5.18.1           Slack-14.1/x86_64    same as host   kompat, fake_id0          k
perl-5.18.1           Slack-14.1/x86_64  Slack-14.1/x86               none          a
perl-5.18.1           Slack-14.1/x86_64  Slack-14.1/x86   kompat, fake_id0          k

gdb-7.6.1             Slack-14.1/x86_64    same as host               none       r, o
gdb-7.6.1             Slack-14.1/x86_64    same as host   kompat, fake_id0        N/A
gdb-7.6.1             Slack-14.1/x86_64  Slack-14.1/x86               none       r, p
gdb-7.6.1             Slack-14.1/x86_64  Slack-14.1/x86   kompat, fake_id0        N/A

coreutils-8.21        Slack-14.1/x86_64    same as host               none          e
coreutils-8.21        Slack-14.1/x86_64    same as host   kompat, fake_id0          q
coreutils-8.21        Slack-14.1/x86_64  Slack-14.1/x86               none          h
coreutils-8.21        Slack-14.1/x86_64  Slack-14.1/x86   kompat, fake_id0          s

proot-v3.2.2          Slack-14.1/x86_64    same as host               none          a
proot-v3.2.2          Slack-14.1/x86_64    same as host           fake_id0         N/A
proot-v3.2.2          Slack-14.1/x86_64  Slack-14.1/x86               none       r, a
proot-v3.2.2          Slack-14.1/x86_64  Slack-14.1/x86           fake_id0         N/A

perl-5.18.1           Slack-14.1/x86_64  Slack-14.1/ARM         qemu-2.2.0          w
coreutils-8.21        Slack-14.1/x86_64  Slack-14.1/ARM         qemu-2.2.0          v

performance           Slack-14.1/x86_64            none               none          XXX
Coverity Scan         Travis-CI                     N/A                N/A          a
Clang 3.3             Slack-14.1/x86_64             N/A                N/A          a
====================  =================  ==============  =================  =========

a: is OK or nothing special to report.

b: test-ptrace01 fails sometimes on x86_64.

c: fails on some AMD CPUs.  No explanations yet.

d: ptrace emulation doesn't work.

e: failures = rm/deep-2, misc/cut-huge-to-eol-range, misc/csplit-heap,
              du/long-from-unreadable, install/basic-1, mkdir/p-3

f: failures = brk01, creat07, execve04, mremap03, msync03, pwrite03,
              pwrite03_64, rmdir02

g: failures = sigaction_4-40, getoverrun_2-3

h: failures = rm/deep-2, du/long-from-unreadable, install/basic-1,
              mkdir/p-3

i: failures = mmap_31-1, timer_getoverrun_2-3

j: failures = bdflush01, creat07, execve04, ftruncate04,
              ftruncate04_64, modify_ldt01, mremap03, msync03,
              pwrite03, pwrite03_64, rmdir02, socketcall01

k: failures = File-Path/Path, HTTP-Tiny/002_croakage,
              HTTP-Tiny/003_agent, Net-Ping/110_icmp_inst,
              Net-Ping/500_ping_icmp, Net-Ping/520_icmp_ttl.t

l: failures = signal_multiple_loops, fs_chown

m: failures = fork_1-1, sem_unlink_3-1, timer_getoverrun_2-3

n: failures = 153/1024

o: failures = break-interp, break, checkpoint.exp, foll-exec,
              foll-vfork.exp

p: failures = break-interp, call-sc, callfuncs, checkpoint,
              find-unmapped, finish, float, foll-exec, foll-vfork,
              hbreak2, interrupt

q: failures = chgrp/basic, chgrp/deref, chgrp/recurse,
              misc/cut-huge-to-eol-range, misc/csplit-heap,
              misc/id-setgid, misc/xattr, du/long-from-unreadable,
              ls/file-type, ls/no-cap, ls/stat-free-color,
              ls/stat-free-symlinks, mv/atomic, mv/atomic2,
              chown/basic, cp/special-bits, cp/preserve-gid,
              install/install-C-root, ls/capability, ls/nameless-uid,
              misc/chroot-credentials, mv/sticky-to-xpart,
              rm/fail-2eperm, rm/no-give-up

r: have to be run in -j1

s: failures = chgrp/basic, chgrp/deref, chgrp/recurse, misc/id-setgid,
              misc/xattr, du/long-from-unreadable, ls/file-type,
              ls/no-cap, ls/stat-free-color, ls/stat-free-symlinks,
              mv/atomic, mv/atomic2, chown/basic, cp/preserve-gid,
              cp/special-bits, install/install-C-root, ls/capability,
              ls/nameless-uid, misc/chroot-credentials,
              mv/sticky-to-xpart, rm/fail-2eperm, rm/no-give-up,

t: failures = 172/1024

u: failures = fork_1-1, mmap_31-1, sem_unlink_3-1, timer_getoverrun_2-3

v: failures = rm/deep-2, misc/env, misc/printenv, split/fail,
              dd/skip-seek, dd/skip-seek-past-file,
              du/long-from-unreadable, install/basic, mkdir/p-3

w: failures = HTTP-Tiny/002_croakage, HTTP-Tiny/003_agent, op/magic

v5.0.0

Toggle v5.0.0's commit message
Release v5.0.0

==============

Highlight
---------

PRoot used to rely on the ELF loader embedded in the ELF interpreter
from the GNU libc.  Sadly this latter suffers from many issues:

* programs that use constructors or destructors might crash: a typical
  example is C++ programs.

* programs that rely on the "rpath" mechanism and that are invoked
  through a symlink might not start: a typical example is the JVM on
  Debian.

* programs that read processes command-line migth be confused because
  initial argv[0] is replaced: typical examples are ps and top.

Moreover not all ELF interpreters provide this feature.  For instance,
ELF interpreters shipped with Bionic (Android) and some versions of
the uClibC can't be used as ELF loaders.  As a consequence it was not
possible to proot into a rootfs that uses such C library.

Now PRoot has its own loader, that means all the limitations above
doesn't exist anymore.

Fixes
-----

* Most bugs related to shebang support -- ie. "#!" at the beginning of
  a program -- were fixed.

Command-line interface changes
------------------------------

* PRoot now starts a login shell when no command is specified; this
  makes the shell read profile files from the guest rootfs, as
  expected by some guest programs.  To get the old behavior, launch
  "/bin/sh" explicitly:

      proot -r whatever /bin/sh

* The -R option now binds "/run" and "/var/run/dbus/system_bus_socket"
  too.  This is useful for guest programs that need to communicate
  with host services.

Validation
----------

====================  =================  ==============  =================  =========
testsuite                   host distro    guest distro     configurations   comments
====================  =================  ==============  =================  =========
proot-v4.0                 OBS */x86_64            none                N/A          a
proot-v4.0                    OBS */x86            none                N/A          b
proot-v4.0              STLinux-2.4/arm            none                N/A          c

proot-v4.0            Slack-14.1/x86_64            none                N/A          a
proot-v4.0/memcheck   Slack-14.1/x86_64            none                N/A          a
proot-v4.0/asan       Slack-14.1/x86_64            none                N/A          a
proot-v4.0/talleak    Slack-14.1/x86_64            none                N/A          a

libuv-0.10.27         Slack-14.1/x86_64    same as host               none          a
libuv-0.10.27         Slack-14.1/x86_64    same as host   kompat, fake_id0          h
libuv-0.10.27         Slack-14.1/x86_64  Slack-14.0/x86               none          a
libuv-0.10.27         Slack-14.1/x86_64  Slack-14.0/x86   kompat, fake_id0          h

ltp-syscall-20130904  Slack-14.1/x86_64    same as host               none          d
ltp-syscall-20130904  Slack-14.1/x86_64    same as host   kompat, fake_id0          i
ltp-syscall-20130904  Slack-14.1/x86_64  Slack-14.0/x86               none          q
ltp-syscall-20130904  Slack-14.1/x86_64  Slack-14.0/x86   kompat, fake_id0          i

ltp-opt-20130904      Slack-14.1/x86_64    same as host               none          g
ltp-opt-20130904      Slack-14.1/x86_64    same as host   kompat, fake_id0       k, g
ltp-opt-20130904      Slack-14.1/x86_64  Slack-14.0/x86               none          r
ltp-opt-20130904      Slack-14.1/x86_64  Slack-14.0/x86   kompat, fake_id0    u, r, g

perl-5.18.1           Slack-14.1/x86_64    same as host               none          a
perl-5.18.1           Slack-14.1/x86_64    same as host   kompat, fake_id0          j
perl-5.18.1           Slack-14.1/x86_64  Slack-14.0/x86               none          a
perl-5.18.1           Slack-14.1/x86_64  Slack-14.0/x86   kompat, fake_id0          j

gdb-7.6.1             Slack-14.1/x86_64    same as host               none          f
gdb-7.6.1             Slack-14.1/x86_64    same as host   kompat, fake_id0          l
gdb-7.6.1             Slack-14.1/x86_64  Slack-14.0/x86               none          c
gdb-7.6.1             Slack-14.1/x86_64  Slack-14.0/x86   kompat, fake_id0          c

coreutils-8.21*       Slack-14.1/x86_64    same as host               none          e
coreutils-8.21*       Slack-14.1/x86_64    same as host   kompat, fake_id0       m, s
coreutils-8.21*       Slack-14.1/x86_64  Slack-14.0/x86               none          p
coreutils-8.21*       Slack-14.1/x86_64  Slack-14.0/x86   kompat, fake_id0          s

proot-v3.2.2          Slack-14.1/x86_64    same as host               none          a
proot-v3.2.2          Slack-14.1/x86_64    same as host           fake_id0          a
proot-v3.2.2          Slack-14.1/x86_64  Slack-14.0/x86               none          c
proot-v3.2.2          Slack-14.1/x86_64  Slack-14.0/x86           fake_id0          c

perl-5.16.1           Slack-14.1/x86_64  Slack-14.1/ARM         qemu-2.1.2          o
coreutils-8.19        Slack-14.1/x86_64  Slack-14.1/ARM         qemu-2.1.2          n

performance           Slack-14.1/x86_64            none               none          t
Coverity Scan         Travis-CI                     N/A                N/A          a
Clang 3.3             Slack-14.1/x86_64             N/A                N/A          a
====================  =================  ==============  =================  =========

a: is OK or nothing special to report.

b: fails on some AMD CPUs.  No explanations yet.

c: ptrace emulation doesn't work.

d: failures = brk01, creat07, execve04, mremap03, msync03, pwrite03,
              pwrite03_64, rmdir02

e: failures = rm/deep-2 misc/cut-huge-to-eol-range misc/csplit-heap
              du/long-from-unreadable install/basic-1 mkdir/p-3

f: failures = break-interp, foll-exec, info-os, pie-execl*, restore*,
              store*, valgrind-db-attach*

g: failures = timer_getoverrun_2-3

h: failures = signal_multiple_loops, fs_chown

i: too many failures to be listed here.  These failures are mostly
   related to the fake_id0 extensions but are not unexpected.

j: failures = Path.t, 110_icmp_inst.t, 500_ping_icmp.t, 520_icmp_ttl.t

k: failures = fork_1-1, sem_unlink_3-1, timer_getoverrun_2-2

l: failures = attach-pie-noexec, break-interp, fileio, foll-exec,
              info-os, longjmp, morestack

m: failures = misc/cut-huge-to-eol-range, misc/csplit-heap,
              ls/no-cap, ls/stat-free-color,
              ls/stat-free-symlinks, mv/atomic2,

              misc/id-setgid, misc/xattr, du/long-from-unreadable,
              ls/file-type, chown/basic, cp/preserve-gid,
              cp/special-bits, install/install-C-root, ls/capability,
              ls/nameless-uid, misc/chroot-credentials,
              mv/sticky-to-xpart, rm/fail-2eperm, rm/no-give-up

n: failures = rm/deep-2, misc/env, misc/printenv, split/fail,
              misc/stty*, dd/skip-seek, dd/skip-seek-past-file,
              du/long-from-unreadable, install/basic-1, mkdir/p-3

o: failures = op/magic.t

p: failures = rm/deep-2, du/long-from-unreadable, install/basic-1,
              mkdir/p-3

q: failures = bdflush01, creat07, execve04, modify_ldt01, mremap03,
              msync03, pwrite03, pwrite03_64, rmdir02, socketcall01

r: failures = mmap_31-1

s: failures = misc/id-setgid, misc/xattr, du/long-from-unreadable,
              ls/file-type, chown/basic, cp/preserve-gid,
              cp/special-bits, install/install-C-root, ls/capability,
              ls/nameless-uid, misc/chroot-credentials,
              mv/sticky-to-xpart, rm/fail-2eperm, rm/no-give-up

t: the loader has introduced a small overhead < 2%

u: failures = fork_1-1 sem_unlink_3-1 timer_getoverrun_2-3

* new

care-v2.2.1

Toggle care-v2.2.1's commit message
Prepare release of CARE v2.2.1.

v4.0.3

Toggle v4.0.3's commit message
Release v4.0.3

==============

+ Heap emulation is disabled when a "suspicious" call to brk(2) is
  actually legit, as it might be the case when launching the very
  first program.

+ The "-0" and "-S" options ("root" identity emulation) now fake
  success of mknodat(2), as it was the case for mknod(2) previously.
  This missing feature was revealed by the AArch64 port.

+ The "-k" option (kernel compatibility emulation) now works on
  Linux/AArch64.

Thanks to Rémi Duraffort for the bug reports and for his LAVA testing
platform!