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
|
||||
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 PROOT_TMP_DIR=${instDir}/tmp
|
||||
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}/bin:/bin \
|
||||
-b ${instDir}/etc:/etc \
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue