mirror of
https://github.com/nix-community/nix-on-droid.git
synced 2025-11-08 19:46:07 +01:00
The error
/data/data/com.termux/files/nix/bin/sh: error while loading shared libraries: /nix/store/6afvzgx3himw7584k9zmfxmqd86b1z7j-glibc-2.34-210/lib/libc.so: invalid ELF header
it seems to happen because of
LD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec.so
which doesn't support the .so file being a linker script
.../files/nix $ cat ./nix/store/6afvzgx3himw7584k9zmfxmqd86b1z7j-glibc-2.34-210/lib/libc.so
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf64-littleaarch64)
GROUP ( /nix/store/6afvzgx3himw7584k9zmfxmqd86b1z7j-glibc-2.34-210/lib/libc.so.6 /nix/store/6afvzgx3himw7584k9zmfxmqd86b1z7j-glibc-2.34-210/lib/libc_nonshared.a AS_NEEDED ( /nix/store/6afvzgx3himw7584k9zmfxmqd86b1z7j-glibc-2.34-210/lib/ld-linux-aarch64.so.1 ) )
68 lines
2 KiB
Nix
68 lines
2 KiB
Nix
# Copyright (c) 2019-2022, see AUTHORS. Licensed under MIT License, see LICENSE.
|
|
|
|
{ config, writeScript, writeText }:
|
|
|
|
let
|
|
inherit (config.build) installationDir extraProotOptions;
|
|
fakeProcStat = writeText "fakeProcStat" ''
|
|
btime 0
|
|
'';
|
|
fakeProcUptime = writeText "fakeProcUptime" ''
|
|
0.00 0.00
|
|
'';
|
|
in
|
|
|
|
writeScript "login" ''
|
|
#!/system/bin/sh
|
|
# This file is generated by Nix-on-Droid. DO NOT EDIT.
|
|
set -eu -o pipefail
|
|
|
|
export USER="${config.user.userName}"
|
|
export HOME="${config.user.home}"
|
|
export PROOT_TMP_DIR=${installationDir}/tmp
|
|
export PROOT_L2S_DIR=${installationDir}/.l2s
|
|
|
|
if ! /system/bin/pgrep proot-static > /dev/null; then
|
|
if test -e ${installationDir}/bin/.proot-static.new; then
|
|
echo "Installing new proot-static..."
|
|
/system/bin/mv ${installationDir}/bin/.proot-static.new ${installationDir}/bin/proot-static
|
|
fi
|
|
|
|
if test -e ${installationDir}/usr/lib/.login-inner.new; then
|
|
echo "Installing new login-inner..."
|
|
/system/bin/mv ${installationDir}/usr/lib/.login-inner.new ${installationDir}/usr/lib/login-inner
|
|
fi
|
|
fi
|
|
|
|
if [ ! -r /proc/stat ] && [ -e ${installationDir}${fakeProcStat} ]; then
|
|
BIND_PROC_STAT="-b ${installationDir}${fakeProcStat}:/proc/stat"
|
|
else
|
|
BIND_PROC_STAT=""
|
|
fi
|
|
|
|
if [ ! -r /proc/uptime ] && [ -e ${installationDir}${fakeProcUptime} ]; then
|
|
BIND_PROC_UPTIME="-b ${installationDir}${fakeProcUptime}:/proc/uptime"
|
|
else
|
|
BIND_PROC_UPTIME=""
|
|
fi
|
|
|
|
# See https://github.com/CypherpunkArmory/UserLAnd/issues/1333
|
|
unset LD_LIBRARY_PATH
|
|
unset LD_PRELOAD
|
|
|
|
|
|
exec ${installationDir}/bin/proot-static \
|
|
-b ${installationDir}/nix:/nix \
|
|
-b ${installationDir}/bin:/bin! \
|
|
-b ${installationDir}/etc:/etc! \
|
|
-b ${installationDir}/tmp:/tmp \
|
|
-b ${installationDir}/usr:/usr \
|
|
-b ${installationDir}/dev/shm:/dev/shm \
|
|
$BIND_PROC_STAT \
|
|
$BIND_PROC_UPTIME \
|
|
-b /:/android \
|
|
--link2symlink \
|
|
--sysvipc \
|
|
${builtins.concatStringsSep " " extraProotOptions} \
|
|
${installationDir}/bin/sh ${installationDir}/usr/lib/login-inner "$@"
|
|
''
|