mirror of
https://github.com/nix-community/nix-on-droid.git
synced 2025-11-08 19:46:07 +01:00
Add a broken symlink resolver to login (as well)
This commit is contained in:
parent
7fddc1a320
commit
a157f0ef5c
1 changed files with 63 additions and 1 deletions
|
|
@ -7,11 +7,73 @@ writeScriptBin "login" ''
|
||||||
#!/system/bin/sh
|
#!/system/bin/sh
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
ORIGINAL_PATH="$PATH"
|
||||||
|
ANDROID_LIKELY_PATH="/sbin:/system/sbin:/system/bin:/system/xbin"
|
||||||
|
ANDROID_LIKELY_PATH="$ANDROID_LIKELY_PATH:/vendor/bin:/vendor/xbin"
|
||||||
|
PATH="$ANDROID_LIKELY_PATH:$OLD_PATH"
|
||||||
|
|
||||||
|
resolve_link() {
|
||||||
|
#echo "resolving $1" >&2
|
||||||
|
if [ -x "$1" ]; then
|
||||||
|
#echo "$1 exists, done" >&2
|
||||||
|
echo "$1"
|
||||||
|
elif [ -L "$1" ]; then
|
||||||
|
TGT=$(readlink "$1")
|
||||||
|
#echo "$1 is a link pointing to $TGT" >&2
|
||||||
|
case $TGT in
|
||||||
|
/data/data/com.termux.nix/files/*) # some parent is a broken link
|
||||||
|
#echo "$TGT link looks fine, resolving further" >&2
|
||||||
|
resolve_link "$TGT"
|
||||||
|
;;
|
||||||
|
/*) # broken link, just add the prefix
|
||||||
|
#echo "$TGT makes sense only inside nix-on-droid, fixing it" >&2
|
||||||
|
resolve_link "/data/data/com.termux.nix/files/usr$TGT"
|
||||||
|
;;
|
||||||
|
*) # relative link, replace parent
|
||||||
|
TGT="$(dirname "$1")/$TGT"
|
||||||
|
#echo "This link is a relative link, resolve it as $TGT" >&2
|
||||||
|
resolve_link "$TGT"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else # OK, now some parent is a broken link =/
|
||||||
|
#echo "=/" >&2
|
||||||
|
P=$1
|
||||||
|
TAIL="" # /something/broken_symlink/smth/else
|
||||||
|
while [ ! -e "$P" ]; do # /something/broken_symlink/smth (iter 2)
|
||||||
|
TAIL="$(basename "$P")/$TAIL" # something/else/ (iter 2)
|
||||||
|
P=$(dirname "$P") # /something/broken_symlink (iter 2)
|
||||||
|
#echo "inspecting $P" >&2
|
||||||
|
if [ -L "$P" ] && [ ! -x "$P" ]; then
|
||||||
|
TAIL=''${TAIL%%/} # strip slashes
|
||||||
|
#echo "$P is the broken symlink parent, fix that and add $TAIL" >&2
|
||||||
|
P="$(resolve_link "$P")"
|
||||||
|
#echo "resolved to $P, now adding $TAIL" >&2
|
||||||
|
resolve_link "$P/$TAIL"
|
||||||
|
break
|
||||||
|
#else
|
||||||
|
#echo "$P is not a symlink, we need to go deeper" >&2
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
instDir=/data/data/com.termux.nix/files/usr
|
||||||
|
|
||||||
export USER=nix-on-droid
|
export USER=nix-on-droid
|
||||||
export PROOT_TMP_DIR=${instDir}/tmp
|
export PROOT_TMP_DIR=${instDir}/tmp
|
||||||
export PROOT_L2S_DIR=${instDir}/.l2s
|
export PROOT_L2S_DIR=${instDir}/.l2s
|
||||||
|
|
||||||
exec ${instDir}/bin/proot \
|
PROOT=${instDir}/bin/proot-static
|
||||||
|
if [ ! -x "$PROOT" ]; then
|
||||||
|
PROOT=$(resolve_link "$PROOT")
|
||||||
|
fi
|
||||||
|
if [ ! -x "$PROOT" ]; then
|
||||||
|
echo "Could not find proot-static" >&2
|
||||||
|
exit 244
|
||||||
|
fi
|
||||||
|
|
||||||
|
PATH="$ORIGINAL_PATH"
|
||||||
|
exec "$PROOT" \
|
||||||
-b ${instDir}/nix:/nix \
|
-b ${instDir}/nix:/nix \
|
||||||
-b ${instDir}/bin:/bin \
|
-b ${instDir}/bin:/bin \
|
||||||
-b ${instDir}/etc:/etc \
|
-b ${instDir}/etc:/etc \
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue