Crear enlace simbólico/montaje/enlace en la raíz [cerrado]

Quiero compilar (a través de make) en mi teléfono Android. Tengo acceso de root.

Tengo casi todas las cosas configuradas. Pero hay este problema. Todos los archivos de configuración tienen un shebang de #!/bin/sh . Puedo ejecutarlos con $SHELL configure También configuré $CONFIG_SHELL Pero algunos archivos de configuración ejecutan otros scripts de shell y dan /bin/sh: no existe tal archivo o directorio .

Estoy pensando en crear un enlace simbólico /bin/sh -> /system/bin/sh. He leído en alguna parte que el sistema de archivos raíz es el ramdisk y cualquier cambio en él deberá realizarse en el archivo init.rc. Entonces, si quiero lograr esto, primero necesito crear un directorio 'bin' y luego hacer un enlace simbólico 'sh' en él. Dudo que ln funcione en init.rc.

Tengo esta otra idea. Haga un directorio 'bin' en algún lugar preferiblemente en el directorio de datos de Terminal IDE (estoy usando eso). Luego crea un enlace simbólico allí sh -> /system/bin/sh. Luego cree 'bin' en / a través y use montar el primer contenedor en / bin a través de init.rc

En tercer lugar, solo puedo mkdir bin y cp /system/bin/sh /bin/sh

Además, todos estos métodos fallarán y darán como resultado una falla de arranque si no se puede encontrar alguno de los directorios de origen.

Quiero saber qué método será más seguro y si existe una alternativa más segura.

Haz una copia de seguridad de Nandroid antes de hacer tus cosas. ¡Ese es el enfoque más seguro!
@Firelord Eso es un hecho para mí. He bloqueado mi teléfono demasiadas veces como para no hacer una copia de seguridad de nandroid.

Respuestas (1)

@vishalbiswas Para que eso funcione, es posible que también deba exportar PATH y LD_LIBRARY_PATH

en realidad, puede ejecutar la configuración requerida y enviar ese script a xbin para que se ejecute como ejecutable. por lo que estaría buscando algo como esto para configurar el nombre del script para lo que funciona para usted

#!/system/bin/sh
mount -o rw,remount /
mkdir /bin && mkdir /lib
chmod 755 /bin /lib
mount -o bind /system/bin /bin
mount -o bind /system/lib /lib
export PATH=/bin && export LD_LIBRARY_PATH=/lib

lo anterior está suelto, juegue un poco con él, ahora para cerrarlo en su mayoría en orden inverso

#!/system/bin/sh
umount /bin && umount /lib
mount -o ro,remount /

los directorios /bin y /lib deberían desaparecer al reiniciar ya que están viviendo en RAM y no debería necesitar desactivar PATH y LD_LIBRARY_PATH ya que cuando cierra su instancia de terminal, esas variables deberían morir con él.

El otro enfoque es configurar un linux de brazo chroot sin lujos en la segunda partición de su tarjeta SD externa. Uso Debian y personalicé mi init.environ.rc de la siguiente manera

# set up the global environment
on init
    export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/gcc/bin:/system/xbin:/bin:/usr/bin:/usr/sbin
    export LD_LIBRARY_PATH /system/lib:/system/gcc/lib:/system/vendor/lib
    export ANDROID_BOOTLOGO 1
    export ANDROID_ROOT /system
    export ANDROID_ASSETS /system/app
    export ANDROID_DATA /data
    export ANDROID_STORAGE /storage
    export ASEC_MOUNTPOINT /mnt/asec
    export LOOP_MOUNTPOINT /mnt/obb
    export BOOTCLASSPATH [blah blah jars blah xD ]

# Debian CHROOT
    export DEBIAN_ROOT /debian
    export TMPDIR /tmp
    mount -t proc none /debian/proc
    mount -t sysfs none /debian/sys
    mount -o bind /dev /debian/dev
    mount -o bind /proc/net /debian/proc/net
    mount -t devpts none /debian/dev/pts

en este enfoque, su administrador de archivos debería leer sus directorios de archivos de partición chroot y todo sin problemas. Yo uso comandante total.

EDITAR: olvidé la entrada necesaria en fstab, dice lo siguiente, nuevamente ajústese al esquema de su dispositivo

/dev/block/platform/msm_sdcc.2/by-num/p2              /debian      ext4    rw,errors=panic                               wait

Aquí está el tutorial que aprendí a hacer lo anterior de http://whiteboard.ping.se/Android/Debian

Sin embargo, busque una imagen de distribución bastante actual. Siempre que no intente eliminar un directorio montado en enlace sin DESMONTARLO primero [por cierto, nunca lo he hecho], no eliminará accidentalmente su sistema.

Actualmente lo estoy haciendo manualmente creando esas carpetas. Si bien su enfoque se ve bien, no estoy buscando un entorno chroot completo. Sin embargo, dividiré mi sd con ext4. Estoy en el proceso de automatizarlo con un script como usted sugirió.
@vishalbiswas hola de nuevo, esto no será un chroot "completo". trabajo terminal solamente! =) Personalmente, creo que querer la configuración completa de X VNC o de otra manera, no tiene sentido en estos dispositivos. Una vez que te instales, serás feliz. Si está utilizando LP, es posible que deba tener en cuenta que cualquier archivo binario que compile debe ser PIE (ejecutable independiente de la posición) pasar -fPIE en la línea de comando gcc. -fPIC también debería funcionar.
Quise decir sobre el chroot de Debian
@vishalbiswas Estoy hablando de chroot, es solo terminal, no xserver no vnc no es necesario. Cuando necesite cambiar, abra su terminal, exporte su ruta, exporte PATH=/bin:/sbin:/usr/bin:/usr/sbin:$PATH chroot /debian /bin/bash y estará en la terminal en debian