nix-on-droid/modules/environment/login/login.nix
Zhong Jianxin 8bcadcef69 login: Do not dereference proot binds /bin and /etc
`/bin` and `/etc` are symlinks to `/system/bin` and `/system/etc`, by
default proot will dereference and override them with new contents.

After this change, `/system/bin` and `/system/etc` are kept untouched,
so commands like `/system/bin/ping` can be run directly.
2024-07-10 13:55:08 +02:00

63 lines
1.9 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
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 "$@"
''