X-Git-Url: https://git.distorted.org.uk/~mdw/termux-packages/blobdiff_plain/01176e2d8f3b7e998c7ccea6bb73895150fc3d37..83bb5061aeb205421de52d80ab16f2d852249001:/packages/proot/termux-chroot diff --git a/packages/proot/termux-chroot b/packages/proot/termux-chroot index 5dde068e..9fde1a81 100755 --- a/packages/proot/termux-chroot +++ b/packages/proot/termux-chroot @@ -1,19 +1,43 @@ #!/bin/sh -if [ $# != 0 ]; then +SCRIPTNAME=termux-chroot +show_usage () { + echo "Usage: $SCRIPTNAME [command]" echo "termux-chroot: Setup a chroot to mimic a normal Linux file system" echo "" - echo "Execute without arguments to run a chroot with traditional file system" - echo "hierarchy (having e.g. the folders /bin, /etc and /usr) within Termux." - exit -fi + echo "Execute a command in a chroot with traditional file system hierarchy" + echo "(having e.g. the folders /bin, /etc and /usr) within Termux." + echo "If run without argument, the default shell will be executed" + exit 0 +} + +while getopts :h option +do + case "$option" in + h) show_usage;; + ?) echo "$SCRIPTNAME: illegal option -$OPTARG"; exit 1; + esac +done +shift $(($OPTIND-1)) # For the /system/bin/linker(64) to be found: ARGS="-b /system:/system" -# Bind $PREFIX so Termux programs expecting -# to find e.g. configurations files there work. -ARGS="$ARGS -b $PREFIX/..:$PREFIX/.." +# On some devices /vendor is required for termux packages to work correctly +# See https://github.com/termux/proot/issues/2#issuecomment-303995382 +ARGS="$ARGS -b /vendor:/vendor" + +# Bind /data to include system folders such as /data/misc. Also $PREFIX +# and $HOME so that Termux programs with hard-coded paths continue to work: +ARGS="$ARGS -b /data:/data" + +# Used by getprop (see https://github.com/termux/termux-packages/issues/1076): +ARGS="$ARGS -b /property_contexts:/property_contexts" + +# Expose external and internal storage: +if [ -d /storage ]; then + ARGS="$ARGS -b /storage:/storage" +fi # Mimic traditional Linux file system hierarchy - /usr: ARGS="$ARGS -b $PREFIX:/usr" @@ -34,12 +58,23 @@ ARGS="$ARGS --cwd=/home" # Root of the file system: ARGS="$ARGS -r $PREFIX/.." -# Program to execute: +export HOME=/home + +# Shell to execute: PROGRAM=/bin/bash if [ -x $HOME/.termux/shell ]; then PROGRAM=`readlink -f $HOME/.termux/shell` fi -ARGS="$ARGS $PROGRAM -l" - -export HOME=/home -$PREFIX/bin/proot $ARGS +# Execute shell if no command has been supplied +if [ -z "$1" ];then + ARGS="$ARGS $PROGRAM -l" + exec $PREFIX/bin/proot $ARGS +else + # When a command is executed directly instead of opening a shell run + # the command in the current working directory instead of in /home + ARGS="$ARGS --cwd=." + # Start supplied command with "sh -c" so things like these work: + # termux-chroot "make;make install" + # termux-chroot "SOME_CONFIG=value ./configure" + exec $PREFIX/bin/proot $ARGS sh -c "$*" +fi