4 votos

¿Dónde debo instalar Toybox?

Tengo un Samsung Galaxy S Relay 4G rooteado con Android 4.1.2.

Si tienes Android 6.0 "Marshmallow" o superior, entonces tienes Toybox . Se trata de un paquete de herramientas de línea de comandos, práctico para usuarios avanzados que a veces utilizan un emulador de terminal. Desafortunadamente, Android 4.1.2 no incluye Toybox. En su lugar, incluye algunas otras herramientas que no son tan agradables de usar.

A veces uso el emulador de terminal escrito por Jack Palevich; otras veces uso adb shell desde un portátil.

  1. ¿Tendría más sentido instalar Toybox en mi partición de sistema, o en mi partición de datos? Ambas particiones tienen espacio libre más que suficiente.

  2. Cuando un comando es proporcionado tanto por Android como por Toybox, quiero que gane la versión de Toybox. En Linux, podría instalar Toybox en /home/unforgettableid/bin o /usr/local o /opt . ¿Podría sugerirme un lugar adecuado para instalar Toybox (y su gran colección de enlaces simbólicos) en mi teléfono?

[ Editar : Me pregunto qué hacen los distintos instaladores de BusyBox. También me pregunto cómo establece Android la variable de entorno PATH. También me pregunto si hay o no una manera de cambiar esa variable y hacer que mi cambio persista a través de reinicios. Finalmente, me pregunto si poner las herramientas Toybox primero en mi PATH podría romper cosas de maneras no obvias].


Posiblemente relacionado: "Jerarquía de carpetas de Android" .

5voto

Firelord Puntos 161

¿Dónde debo instalar Toybox?

¿Tendría más sentido instalar Toybox en mi partición de sistema, o en mi partición de datos?

Depende. Si usted no planea restablecer el teléfono de fábrica nunca más, puede elegir la partición de datos, de lo contrario, elija la partición del sistema.

Cuando un comando es proporcionado tanto por Android como por Toybox, quiero que gane la versión de Toybox.

En SENDERO contiene la ubicación de los directorios que contienen los binarios ejecutables. Si decide mantener un directorio separado para sus enlaces simbólicos, configure $PATH para que busque primero un comando en su directorio. Si encuentra uno, lo ejecutará.

En Linux, podría instalar Toybox para /home/unforgettableid/bin o /usr/local o /opt . ¿Podría sugerirme un lugar adecuado para instalar Toybox (y su gran colección de enlaces simbólicos) en mi teléfono?

Todas esas ubicaciones no existen para Android. Dado que estás usando Android 4.1.2, supongo que tendrías la tarjeta SD externa formateada con un sistema de archivos FAT. Symlinks no funciona en sistemas de archivos FAT (no en FAT32 o vfat al menos) por lo que su mejor apuesta es instalar bajo /data o /system .

Alternativamente, puedes hacer una imagen bajo tu tarjeta SD externa, formatear esa imagen con un sistema de archivos soportado por el kernel de tu Android (a menudo EXT2 | EXT3 | EXT4), y luego montarla en el dispositivo en cualquier lugar en modo loopback. No he probado este método sin embargo.

Me pregunto qué hacen los distintos instaladores de BusyBox

Busybox ( por Stericson ) coloca el busybox binario en /system/xbin y crea enlace simbólico para sus applets a su binario en el mismo directorio.

Además, me pregunto cómo establece Android la variable de entorno PATH. Además, también me pregunto si hay o no una manera de cambiar esa variable y hacer que mi cambio persista a través de reinicios.

No sé cuándo configura Android $PATH. Sin embargo, lo más probable es que el shell que estás usando tenga un archivo de configuración.

  • mksh ( MirBSD Korn Shell ; el shell por defecto en Android) tiene un archivo de configuración mkshrc en /system/etc . Puede establecer $PATH allí y el cambio sería persistente a través de reinicios.
  • Para bash el archivo de configuración es bashrc situado bajo /system/etc/bash .

Parece que ambos archivos son pensado para sesiones interactivas por lo que si intenta utilizar adb para acceder a un Toybox o a su enlace simbólico que no esté ubicado en /sbin , /vendor/bin , /system/sbin , /system/bin o /system/xbin (las ubicaciones por defecto en $PATH), recibiría un error "COMMAND: not found". Esto se debe a que se utilizaría el $PATH por defecto en su lugar.

Aún no he encontrado una solución para este problema, pero consulta los comentarios que aparecen debajo de esta respuesta.

De todos modos, vamos a instalar Toybox por ahora.


¿Cómo instalo Toybox en un dispositivo Android?

Nota: la solución asume que tu Android está rooteado, que adb está configurado en PC, y que su dispositivo está conectado a un PC con Depuración USB activada .

Instalación en la partición del sistema

No es necesario cambiar $PATH si elige una ubicación estándar. Busybox prefiere /system/xbin .

  • Vuelva a montar la partición del sistema en rw modo. En caso necesario, véase No se puede volver a montar /system en rw

  • Copie el caja de juguetes binario a /system/xbin/ y darle permiso de ejecución. (Los permisos por defecto para otros binarios son rwxr-xr-x .)

    Puede hacerlo utilizando chmod

    adb shell su -c "chmod 755  /system/xbin/toybox"
  • Crear enlaces simbólicos para varias herramientas accesibles mediante caja de juguetes binario. Tú decides cómo crearlos.

    He utilizado un método muy sencillo, pero requiere un sistema *nix

    adb shell toybox | sed 's/\ /\n/g' | head -n -1 | tr -d '\r' | while read line; do adb shell su -c 'ln -sf /system/xbin/toybox "/system/xbin/$line"'; done

    Todo lo que estoy haciendo aquí es ejecutar el comando caja de juguetes binario, sustituyendo los espacios en blanco por una nueva línea para que cada herramienta aparezca en una nueva línea. Más tarde estoy eliminando la última línea (estaba en blanco en la salida), eliminando retorno de carro convenientemente puesto por adb, y luego para cada línea de salida estoy creando un enlace simbólico a caja de juguetes binario con el nombre de la herramienta, en el mismo directorio.

    Puede utiliza este método si no tienes un sistema operativo *nix en el PC:

    adb shell
    su
    toybox | toybox sed 's/\ /\n/g'| toybox sed '$d'| while read line; do  toybox ln -sf /system/xbin/toybox /system/xbin/$line; done

Hecho. Tu Toybox y sus applets están listos para ser ejecutados.

Instalación en la partición de datos

  1. Cree un directorio en /data ( /data/my_bin en adelante)

  2. Copie el caja de juguetes binario a /data/my_bin y darle permiso de ejecución. (Los permisos por defecto para otros binarios son rwxr-xr-x .)

    adb shell su -c "chmod 755  /system/xbin/toybox"
  3. Crear enlaces simbólicos para varias herramientas accesibles mediante caja de juguetes binario. Tú decides cómo crearlos.

    He utilizado un método muy sencillo, pero requiere un sistema *nix

    adb shell su -c "/data/my_bin/toybox" | sed 's/\ /\n/g' | head -n -1| tr -d '\r'| while read line; do adb shell su -c "ln -sf /data/my_bin/toybox '/data/my_bin/$line'"; done

    Sólo ha cambiado la ubicación, el resto del procedimiento es igual al que se sigue para la instalación en la partición del sistema

  4. Edita el archivo de configuración de tu shell por defecto y añade

    PATH=/data/my_bin:$PATH 

    Esto haría que el shell buscara en /data/my_bin primero y ejecutar el binario, si está disponible.

Hecho Disfruta de tu Toybox y sus applets.

0 votos

He publicado mi propia respuesta, que se basa en la suya. Si te gusta, dale un "upvote" :)

0 votos

Nop, no me gusta porque no soluciona mi problema y no me dice nada nuevo. Quiero toybox dentro de /data o /sdcard pero quiere que los shells no interactivos sepan de esas ubicaciones. Debería haber un hack en alguna parte. De todas formas, ¿podrías limpiar tus comentarios?

0 votos

1. He limpiado mis comentarios. La próxima vez, puede simplemente marcarlos como obsoletos en su lugar. 2. Si necesitas un hack, quizás podrías recompilar mksh y codificar más rutas en él. Pero de todos modos, ¿qué hay de malo en mantener Toybox en /system ?

0voto

unforgettableid Puntos 116

Si tu versión de Android viene con Toybox y algunos enlaces simbólicos de Toybox, puedes dejarlos en /system/bin . Pero, si está instalando Toybox usted mismo, lo más prudente sería poner el Toybox recién instalado, y todos sus enlaces simbólicos, en /system/xbin .

Le explicaré por qué.

Como señala Firelord en su respuesta: adb shell inicia un shell interactivo. Pero comandos como adb shell ls iniciar un shell no interactivo. Para razones de rendimiento Los shells no interactivos nunca leen archivos de configuración. Como no leen ningún archivo de configuración, sus ruta de búsqueda está codificado.

Es bueno tener Toybox disponible incluso para shells no interactivos; de hecho, si no está disponible para tales shells, puede ser confuso. Así que definitivamente quieres instalar Toybox en una ubicación que esté en la ruta de búsqueda.

Pero es posible que no desee poner los enlaces simbólicos Toybox antes de la ruta de búsqueda de Android cp , ls y otros servicios básicos. Nunca lo he comprobado, pero teorizo que tu versión de Android podría incluir aplicaciones que dependen de peculiaridades de las utilidades de línea de comandos de Android. Para obtener más información, consulte esta entrada en el que el encargado de mantener las herramientas de línea de comandos de Android explica por qué Android tuvo que seguir con su sistema no Toybox. ls durante algunos meses.

La mayoría de las utilidades de línea de comandos de Android están en /system/bin . El único directorio que se encuentra más adelante en la ruta de búsqueda del shell de Android es /system/xbin .

Por eso es posible que desee poner Toybox y todos sus enlaces simbólicos en /system/xbin .


Consejo: Si lo deseas, puedes crear un script de shell que simplemente pase todos sus parámetros a Toybox. Puedes darle a este script un nombre ultra corto como t . Esto hace que sea más fácil solicitar que tu dispositivo ejecute un juguete Toybox en lugar de un comando de Android. Por ejemplo, para ejecutar Toybox ls basta con introducir t ls .

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X