4 votes

Où dois-je installer Toybox ?

Je possède un Samsung Galaxy S Relay 4G fonctionnant sous Android 4.1.2.

Si vous avez Android 6.0 "Marshmallow" ou mieux, alors vous avez Boîte à jouets . Il s'agit d'un paquet d'outils de ligne de commande, pratique pour les utilisateurs avancés qui utilisent parfois un émulateur de terminal. Malheureusement, Android 4.1.2 n'inclut pas Toybox. À la place, il inclut d'autres outils qui ne sont pas aussi agréables à utiliser.

Parfois, j'utilise l'émulateur de terminal écrit par Jack Palevich ; d'autres fois, je me sers de adb shell à partir d'un ordinateur portable.

  1. Serait-il plus logique d'installer Toybox sur ma partition système, ou sur ma partition de données ? Les deux partitions ont beaucoup plus qu'assez d'espace libre.

  2. Quand une commande est fournie à la fois par Android et par Toybox, je veux que la version Toybox gagne. Sous Linux, je pourrais installer Toybox pour /home/unforgettableid/bin o /usr/local o /opt . Pourriez-vous me suggérer un endroit raisonnable pour installer Toybox (et sa grande collection de liens symboliques) sur mon téléphone ?

[ Modifier : Je me demande ce que font les différents installateurs de BusyBox. De même, je me demande comment Android définit la variable d'environnement PATH. Je me demande également s'il existe un moyen pour moi de modifier cette variable et de faire en sorte que mes modifications persistent après les redémarrages. Enfin, je me demande si le fait de mettre les outils Toybox en premier dans mon PATH ne risque pas de casser des choses de manière non évidente].


Possiblement lié : "Hiérarchie des dossiers Android" .

5voto

Firelord Points 23064

Où dois-je installer Toybox ?

Serait-il plus logique d'installer Toybox sur ma partition système, ou sur ma partition de données ?

Ça dépend. Si vous ne prévoyez pas de réinitialiser le téléphone, vous pouvez choisir la partition de données, sinon, choisissez la partition système.

Quand une commande est fournie à la fois par Android et par Toybox, je veux que la version Toybox gagne.

En PATH contient l'emplacement des répertoires contenant les binaires exécutables. Si vous décidez de conserver un répertoire séparé pour vos liens symboliques, configurez $PATH pour qu'il recherche d'abord une commande dans votre répertoire. S'il en trouve une, il l'exécutera.

Sous Linux, je pourrais installer Toybox pour /home/unforgettableid/bin o /usr/local o /opt . Pourriez-vous me suggérer un endroit raisonnable pour installer Toybox (et sa grande collection de liens symboliques) sur mon téléphone ?

Tous ces emplacements n'existent pas pour Android. Puisque vous utilisez Android 4.1.2, je suppose que votre carte SD externe est formatée avec un système de fichiers FAT. Les liens Symlinks ne fonctionnent pas sur les systèmes de fichiers FAT (pas sur FAT32 ou vfat en tout cas), donc votre meilleure chance est d'installer sous /data o /system .

Alternativement, vous pouvez faire une image sous votre carte SD externe, formater cette image avec un système de fichiers supporté par le noyau de votre Android (souvent EXT2 | EXT3 | EXT4), puis la monter dans l'appareil n'importe où en mode loopback. Je n'ai pas essayé cette méthode cependant.

Je me demande ce que font les différents installateurs de BusyBox.

Busybox ( par Stericson ) place le busybox binaire en /system/xbin et crée lien symbolique pour ses applets à son binaire sous le même répertoire.

De plus, je me demande comment Android définit la variable d'environnement PATH. Je me demande également s'il existe ou non un moyen de modifier cette variable et de faire en sorte que cette modification persiste lors des redémarrages.

Je ne sais pas quand Android configure $PATH. Cependant, le shell que vous utilisez a probablement un fichier de configuration.

  • mksh ( MirBSD Korn Shell ; le shell par défaut sur Android) possède un fichier de configuration mkshrc において /system/etc . Vous pouvez définir $PATH à cet endroit et le changement sera persistant lors des redémarrages.
  • Pour bash le fichier de configuration est bashrc situé sous /system/etc/bash .

Il apparaît que les deux fichiers sont destiné aux sessions interactives seulement, donc si vous essayez d'utiliser adb pour accéder à une Toybox ou à son lien symbolique qui n'est pas placé sous le nom de /sbin , /vendor/bin , /system/sbin , /system/bin o /system/xbin (les emplacements par défaut dans $PATH), vous recevriez une erreur "COMMAND : not found". Cela est dû au fait que le $PATH par défaut serait utilisé à la place.

Je n'ai pas encore trouvé de solution à ce problème, mais voyez les commentaires sous cette réponse.

Quoi qu'il en soit, installons Toybox pour le moment.


Comment installer Toybox sur un appareil Android ?

Note : la solution suppose que votre Android est enraciné, que adb est configuré dans PC, et que votre appareil est connecté à un PC avec Débogage USB activé .

Installation dans la partition du système

Aucune modification de $PATH n'est nécessaire si vous choisissez un emplacement standard. Busybox préfère /system/xbin .

  • Remonter la partition système dans rw mode. Si nécessaire, voir Impossible de remonter /system en rw

  • Copiez le coffre à jouets binaire à /system/xbin/ et lui donner la permission d'être exécuté. (Les permissions par défaut pour les autres binaires sont les suivantes rwxr-xr-x .)

    Vous pouvez le faire en utilisant chmod

    adb shell su -c "chmod 755  /system/xbin/toybox"
  • Créer des liens symboliques pour divers outils accessibles par coffre à jouets binaire. C'est à vous de décider comment vous les créez.

    J'ai utilisé une méthode très simple, mais elle nécessite un système *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

    Tout ce que je fais ici, c'est d'exécuter l'opération coffre à jouets binaire, en remplaçant les espaces blancs par une nouvelle ligne pour que chaque outil apparaisse sur une nouvelle ligne. Plus tard, j'enlève la dernière ligne (elle était vide en sortie), j'enlève retour chariot pratique mis par adb, et ensuite pour chaque ligne de sortie je crée un lien symbolique vers coffre à jouets binaire portant le nom de l'outil, dans le même répertoire.

    Vous pouvez Utilisez cette méthode si vous n'avez pas de système d'exploitation *nix sur votre 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

C'est fait ! Votre Toybox et ses applets sont prêts à être exécutés.

Installation dans la partition de données

  1. Créez un répertoire sous /data ( /data/my_bin dorénavant)

  2. Copiez le coffre à jouets binaire à /data/my_bin et lui donner la permission d'être exécuté. (Les permissions par défaut pour les autres binaires sont les suivantes rwxr-xr-x .)

    adb shell su -c "chmod 755  /system/xbin/toybox"
  3. Créer des liens symboliques pour divers outils accessibles par coffre à jouets binaire. C'est à vous de décider comment vous les créez.

    J'ai utilisé une méthode très simple, mais elle nécessite un système *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

    Seul l'emplacement a changé, le reste de la procédure est similaire à celle suivie pour l'installation dans la partition système.

  4. Modifiez le fichier de configuration de votre shell par défaut et ajoutez

    PATH=/data/my_bin:$PATH 

    Ceci amènerait le shell à regarder dans /data/my_bin d'abord et exécuter le binaire, s'il est disponible.

C'est fait ! Profitez de votre Toybox et de ses applets.

0voto

Si votre version d'Android est livrée avec Toybox et certains liens symboliques de Toybox, vous pouvez les laisser dans le répertoire suivant /system/bin . Mais, si vous installez Toybox vous-même, il peut être plus sage de mettre la Toybox fraîchement installée, et tous ses liens symboliques, dans /system/xbin .

Laissez-moi vous expliquer pourquoi.

Comme Firelord le souligne dans sa réponse : adb shell lance un shell interactif. Mais des commandes telles que adb shell ls démarrer un shell non interactif. Pour raisons de performance les shells non interactifs ne lisent jamais de fichiers de configuration. Parce qu'ils ne lisent aucun fichier de configuration, leur chemin de recherche est codée en dur.

C'est bien d'avoir Toybox disponible même pour les shells non-interactifs ; en fait, s'il n'est pas disponible pour ces shells, cela peut être déroutant. Vous voulez donc absolument installer Toybox à un endroit qui se trouve sur le chemin de recherche.

Mais il se peut que vous ne souhaitiez pas placer les liens symboliques de Toybox plus tôt dans le chemin de recherche que celui d'Android cp , ls et d'autres services de base. Je n'ai jamais vérifié, mais je pense que votre version d'Android peut inclure des applications qui dépendent de bizarreries des utilitaires de la ligne de commande d'Android. Pour en savoir plus, consultez ce poste dans lequel le responsable des outils de ligne de commande d'Android explique pourquoi Android a dû s'en tenir à sa version non-toybox. ls pendant quelques mois.

La plupart des utilitaires de la ligne de commande d'Android se trouvent dans la section /system/bin . Le seul répertoire qui se trouve plus loin dans le chemin de recherche du shell Android standard est le suivant /system/xbin .

C'est pourquoi vous pouvez vouloir mettre Toybox et tous ses liens symétriques dans /system/xbin .


Conseil : Si vous voulez, vous pouvez créer un script shell qui passe simplement tous ses paramètres à Toybox. Vous pouvez donner à ce script shell un nom ultra-court tel que t . Il est ainsi plus facile de demander à votre appareil d'exécuter un jouet Toybox au lieu d'une commande Android standard. Par exemple, pour exécuter Toybox ls il suffit d'entrer t ls .

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X