[UPDATER-SCRIPT] Comment compresser des fichiers

  • Auteur de la discussion hypo59
  • Date de début
hypo59

hypo59

Membre
Inscrit
21 Septembre 2013
Messages
2 671
Points
38
  • #1
Hello à toutes et à tous :hello: !

Je cherche à compresser des fichiers via un updater-script que je flash sous TWRP 2.8.7.0.

J'ai trouvé l'utilitaire p7za, qui fonctionne sans problème en étant sous Lolipop, mais que je ne parviens pas à utiliser sous le mode recovery, l'erreur suivante est renvoyée: "sh: /tmp/hypo59/p7za not found" (le chemin /tmp/hypo59 est celui que j'ai créé). J'ai bien donné les permissions d'éxécution.

Une idée ?

A vous lire
 
Speedo4android

Speedo4android

Super VIP
Inscrit
3 Novembre 2014
Messages
2 568
Points
36
  • #2
Tu pourrais poster ton script ?
 
hypo59

hypo59

Membre
Inscrit
21 Septembre 2013
Messages
2 671
Points
38
  • #3
Le voici, il s'agit du fichier updater-script. La partie qui bloque est la derniere.


Code:
S'il vous plaît, Connexion ou S'inscrire to view codes content!
 
Speedo4android

Speedo4android

Super VIP
Inscrit
3 Novembre 2014
Messages
2 568
Points
36
  • #4
Hello, il créé bien tous les .img ? OK, les paramètres du run program p7za : je penserai plutôt à ../*.img (source) .. /nvdata.zip (destination)
que fait script.sh ? , si tu le l'exécute via root browser , te donne t'il une erreur ou c'est OK?
 
hypo59

hypo59

Membre
Inscrit
21 Septembre 2013
Messages
2 671
Points
38
  • #5
Les img sont bien créés, les paramètres de p7za sont bons car la même ligne de commande fonctionne parfaitement sous android (avec un emulateur de terminal ou via "SH Script Runner").

Le fichier script.sh ne fait rien pour le moment, c'était pour tester p7za avec une autre ligne de commande pour voir si ça fonctionnait mais non...


EDIT 1

A force de test j'ai fini par comprendre.

En plaçant le fichier p7za dans /system/bin, il devient accessible au travers de la variable $PATH, et donc le système TWRP (le recovery que j'ai) me permet de l'utiliser. Et c'est pareil pour busybox: en l'extrayant du zip vers le dossier /tmp je pensais que c'était celui-ci qui s'exécutait mais non, c'est celui déjà existant dans le dossier /sbin. Étrange mais c'est ainsi. Je ne sais pas si c'est pareil pour d'autres recovery custom.


EDIT 2

Lorsque TWRP démarre, le dossier /sbin est créé: il correspond au dossier /system/xbin, avec le binary "busybox" et toutes ses commandes linkées. Le $PATH contient ce dosser /sbin, ce qui permet alors d'utiliser par exemple la commande "dd" sans passer le chemin complet ("dd" est un lien vers "busybox dd", commande elle-même reliée à $PATH pour que le chemin soit finalement "/sbin/busybox dd").

Partant de là, j'ai extrait "p7za" vers /sbin, en espérant que cela fonctionne comme pour "busybox", mais cela n'a pas fonctionné (toujours l'erreur "not found"), même en stipulant le chemin complet "/sbin/p7za".

Conclusion: je ne peux exécuter "p7za" que s'il est présent dans le dossier "/system/bin". Bizarre... D'autant que je trouve gênant de devoir extraire des fichiers ailleurs que dans /tmp.
 
Speedo4android

Speedo4android

Super VIP
Inscrit
3 Novembre 2014
Messages
2 568
Points
36
  • #6
Hello , j'ai fait une version pour le G4G , mais basée sur la commande tar de busybox pour compresser en .gz
- le fichier est lisible par 7zip :mrgreen:
- Test du fichier "comp_test.sh" via emulateur :
OK , creation du "comp_test.gz" sur 'tmp' :D et sur la 'sdcard1' :D
- Test en executant le tout via TWRP :
OK création du "comp_test.gz" sur 'tmp' :D , Fail pour écrire sur la 'sdcard1' :pleur4:
- Mon G4G efface systématiquement 'tmp' au reboot donc je récupère via l'explorer de TWRP :mrgreen:

- l'updater script :
ui_print(" ");

ui_print("--- Modem Backup pour G4G ---");
ui_print(" ");

#BUSYBOX
package_extract_dir("busybox", "/tmp/busybox");
run_program("/sbin/busybox", "unzip", "/tmp/busybox/UPDATE-Busybox.Installer.v1.24.1-ALL-signed.zip", "META-INF/com/google/android/*", "-d", "/tmp/busybox");
run_program("/sbin/busybox", "sh", "/tmp/busybox/META-INF/com/google/android/update-binary", "dummy", "1", "/tmp/busybox/UPDATE-Busybox.Installer.v1.24.1-ALL-signed.zip");

ui_print(" ==> Install Save dir on system...");
mount("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/system", "/system");
package_extract_dir("system", "/system");
ui_print(" ==> Install Test dir on tmp...");
package_extract_dir("Test", "/tmp/Test");
set_perm_recursive(0, 2000, 0755, 0755, "/tmp");
set_perm_recursive(0, 2000, 0755, 0755, "/tmp/Test");
set_perm_recursive(0, 2000, 0755, 0755, "/system/Save");
ui_print(" > sauvegarde des partitions:");
ui_print(" > MODEMST1...");
run_program("/sbin/busybox", "dd", "if=/dev/block/mmcblk0p17", "of=/tmp/Test/MODEMST1.img");
ui_print(" > MODEMST2...");
run_program("/sbin/busybox", "dd", "if=/dev/block/mmcblk0p18", "of=/tmp/Test/MODEMST2.img");

ui_print(" > compression...");
ui_print(" ==> Install compress tools...");
package_extract_file("comp_test.sh", "/tmp/comp_test.sh");
set_perm(0, 0, 0777, "/tmp/comp_test.sh");
ui_print(" ==> run compress tools...");
run_program("/tmp/comp_test.sh");

unmount("/system");
ui_print("Use TWRP file manager to go to tmp");
ui_print("You will, see 'comp_test.gz' ");
ui_print(" ");

- le compresseur :

#!/system/bin/sh
# compress to /system/Save/Test

tar -czvf /system/Save/comp_test.gz /tmp/Test

# compress to /tmp/

tar -czvf /tmp/comp_test.gz /tmp/Test

# compress to /sdcard1

tar -czvf /storage/sdcard1/comp_test.gz /tmp/Test

# End !

les parties "system/Save" peuvent être supprimées , ca me servait a verifier le tout, avant de penser a l'explorer TWRP... :mdr3:

Download :
 
hypo59

hypo59

Membre
Inscrit
21 Septembre 2013
Messages
2 671
Points
38
  • #7
Merci de ton retour speedo ! C'est super !

Cependant, ton code confirme bien ce que je disais:

Hello , j'ai fait une version pour le G4G , mais basée sur la commande tar de busybox pour compresser en .gz
C'est bien là toute la question, car busybox ne possède pas de commande pour compresser en ZIP, et c'est une nécessité pour moi (le ZIP créé est ensuite directement flashable via un recovery custom); j'ai donc bien besoin d'un binaire extérieur comme p7za, mais qui ne peut s'exécuter que si placé dans /system/bin

Egalement, dans ton updater-script, tu extrait busybox vers /tmp, mais tu ne l'utilises pas, tu utilises celui placé dans /sbin (dont je parlais dans mon post); du coup, à quoi cela sert-il d'extraire busybox vers /tmp (c'est une question que je me suis posé en tout cas) ?

Pour mon info, à quoi sert la ligne: run_program("/sbin/busybox", "sh", "/tmp/busybox/META-INF/com/google/android/update-binary", "dummy", "1", "/tmp/busybox/UPDATE-Busybox.Installer.v1.24.1-ALL-signed.zip") ?

J'ai eu quelques échanges de mails ce week-end avec Paul HARRIS (hawkerpaul) du forum XDA. Je vais lui poser mes questions et voir ce qu'il me répond. Je les posterai en retour.

EDIT: message posté à Paul HARRIS
 
Speedo4android

Speedo4android

Super VIP
Inscrit
3 Novembre 2014
Messages
2 568
Points
36
  • #8
Hello, le busybox vers tmp sert à l'installation dans le système, avec toutes les symlinks, c'est un dummy, l'installation est faîte par le update_binary. Tu peux me passer ton p7za ? , je l'ai pas trouvé ...
 
hypo59

hypo59

Membre
Inscrit
21 Septembre 2013
Messages
2 671
Points
38
  • #9
Hello, le busybox vers tmp sert à l'installation dans le système, avec toutes les symlinks, c'est un dummy, l'installation est faîte par le update_binary

Pourrais-tu être un peu plus explicite ?

Pour p7za, voici un lien temporaire de téléchargement (valable 48h à partir de 20:57):
S'il vous plaît, Connexion ou S'inscrire pour voir le contenu ou les urls !
. Je l'avais trouvé sur xda.
 
Speedo4android

Speedo4android

Super VIP
Inscrit
3 Novembre 2014
Messages
2 568
Points
36
  • #10
Hello, merci pour le lien, je regarde ça demain... Pour le busybox, télécharge mon fichier, et regarde dans "busybox", il y a un .zip d'installation de busybox, qui installe la dernière version dans le système , (du coup c'est un .zip flashable contenu et installé par un autre) , la particularité étant que le script n'est pas dans updater_script, mais dans le binary , comme l'installation de superSU , en plus simple.
 
hypo59

hypo59

Membre
Inscrit
21 Septembre 2013
Messages
2 671
Points
38
  • #11
Ok je vois ça et t'en tiens informé.
 
Speedo4android

Speedo4android

Super VIP
Inscrit
3 Novembre 2014
Messages
2 568
Points
36
  • #12
Hello ; je viens de faire le test avec p7za :mrgreen:
:?:
:!:
:roll:
:evil:
:cool:
:?
:shock:
:eek:
:wink:
:smile:
:D
:mdr3:
:super: :merci:
:frime1:
:mdr1:
Succesfull :mrgreen: :super:
Un beau fichier "comp_test.zip" ; avec les 2 images que je voulais sauvegarder :mrgreen:
 
hypo59

hypo59

Membre
Inscrit
21 Septembre 2013
Messages
2 671
Points
38
  • #13
Peux tu m'envoyer ton code ?
 
Speedo4android

Speedo4android

Super VIP
Inscrit
3 Novembre 2014
Messages
2 568
Points
36
  • #14
Hello , oui je peux :mdr3:
Edit , j'ai fais un peu de ménage dans les lignes et vérifié le fonctionnement aprés modif :mrgreen:

Code:
S'il vous plaît, Connexion ou S'inscrire to view codes content!

Voila , tu n'as plus qu'a adapter:
- ton montage du system (si tu le monte pas ca marche pas)
- tes block mmcblk et tes noms d'images
- je cherche aussi a envoyer le 'comp_test.zip' dans la sdext ... mais ca bloque encore ...

Tiens moi au jus :mrgreen:

Download : :mrgreen:
 
hypo59

hypo59

Membre
Inscrit
21 Septembre 2013
Messages
2 671
Points
38
  • #15
Yo Speedo ! Merci !

J'ai lu ton code, et je me suis aperçu que les permissions que tu donnes à p7za sont différentes des miennes, ainsi que la méthode utilisée: tu te sers de la fonction set_perm_recursive, alors que moi je me sers de set_perm; et tu accorde les droits 0775 et moi 0777. Cela peut-il expliquer mon problème ?
 
Speedo4android

Speedo4android

Super VIP
Inscrit
3 Novembre 2014
Messages
2 568
Points
36
  • #16
Hello, yesssss, 0777 est souvent abusée, mais je pense que ton msg p7za not found' viens de la manière de l'extraire ' à l'avance et de considérer qu'il est bien la pour l'exécuter, ma chose l'extrait au juste moment et le fait bosser ... En tout cas celui-ci marche tip-top.
Édit : le truc le plus important est le "Speedo is the best" final, avec ça a la fin le script avance à coup sur ;) MDR 2 MDR
 
hypo59

hypo59

Membre
Inscrit
21 Septembre 2013
Messages
2 671
Points
38
  • #17
Ca m'a bien fait marrer justement ta petite annotation en bas du script !!! Va falloir que je la teste !!!

Bon, blague à part, je ne pige pas en quoi le délai entre l'extraction et l'utilisation changerait quoi que ce soit, c'est vraiment étrange... Je fais des tests dès que possible et je donnerai des nouvelles. A savoir: je suis en échange régulier de mails avec Paul HARRIS dont j'ai parlé plus haut. Si ses réponses m'aident en sus des tiennes, je posterai également.

A+

EDIT: quelle différence entre set_perm et set_perm_recursive dans le cas présent ?

EDIT 2: est-ce que tu peux tester de ton côté les permissions en 0777, voir si tu as le même problème que moi ?

EDIT 3: dans le post #14, tu indiques "ton montage du system (si tu le monte pas ca marche pas)". Pourquoi monter /system si on ne s'en sert pas ? Car moi effectivement je ne le monte pas, ce qui pourrait aussi expliquer mes soucis...

Bon j'ai du test à faire mi !!!
 
Speedo4android

Speedo4android

Super VIP
Inscrit
3 Novembre 2014
Messages
2 568
Points
36
  • #18
hypo59 a dit:
Ca m'a bien fait marrer justement ta petite annotation en bas du script !!! Va falloir que je la teste !!!

A rajouter quand ça marche ... :mdr3:

délai entre l'extraction et l'utilisation changerait quoi que ce soit, c'est vraiment étrange...
- Je fait comme ça par sécurité , une opération après l'autre, j'aime bien décomposer le tout , c'est plus clair dans ma tête ..
EDIT: quelle différence entre set_perm et set_perm_recursive dans le cas présent ?
- le set_perm 0777 qui marchait trés bien dans ma version TAR gz , me faisait une erreur de permission avec p7za 8| ...
- j'ai donc fait comme ca , peut être que le set_perm en 0775 marcherait aussi ... :mrgreen:

EDIT 2: est-ce que tu peux tester de ton côté les permissions en 0777, voir si tu as le même problème que moi ?
- comme dit plus haut , sur le mien ça fait une erreur .. différente ...

EDIT 3: dans le post #14, tu indiques "ton montage du system (si tu le monte pas ca marche pas)". Pourquoi monter /system si on ne s'en sert pas ? Car moi effectivement je ne le monte pas, ce qui pourrait aussi expliquer mes soucis...
- au départ je le montait pour avoir la sauvegarde dans /system/Save et verifier en rebootant mon tel.
- quand j'ai nettoyé pour ne garder que /tmp/Test ,j'ai supprimé le montage => Tester le script => plus de "comp_test.zip" :?: :pleur4:
- j'ai remis juste le montage => Tester le script=> OK avec un jolie "comp_test.zip" :super:

Bon j'ai du test à faire mi !!!

Amuse toi bien :mrgreen:
 
hypo59

hypo59

Membre
Inscrit
21 Septembre 2013
Messages
2 671
Points
38
  • #19
Merci [emoji12] !!!

Edit

J'ai testé en utilisant set_perm 0775 sur p7za, que j'ai extrait dans /tmp, et en montant /system... ET ÇA MARCHE !!!!

Je vais tester en ne modifiant que la permission ou le montage de /system...
 
Speedo4android

Speedo4android

Super VIP
Inscrit
3 Novembre 2014
Messages
2 568
Points
36
  • #20
Cool , tu as repris avec mon installation de Busybox ( un peut lourde je sait ) mais top efficace.
ou avec celle que tu utilisait avant ?
 
hypo59

hypo59

Membre
Inscrit
21 Septembre 2013
Messages
2 671
Points
38
  • #21
J'ai conservé mon installation car je voulais savoir où était mon erreur plutôt que de jouer la facilité de prendre ton installation. D'autant plus que j'avais déjà la dernière version de busybox et que donc pour moi le problème ne venait pas de là.

Je viens de terminer les tests: la permission en 0777 ou 0775 ne change rien, par contre il faut effectivement monter /system sinon... caouet !!! J'ai pu le vérifier en montant ensuite /system via le menu "mount" de TWRP puis en relançant le ZIP (celui qui ne monte pas /system), et là ça fonctionne.

Conclusion : il faut monter /system. Mais pourquoi ? Mystère...

En tout cas, merci à toi pour les échanges c'était passionnant et instructif ! Je te kiff mec ! Va falloir que je te cite dès que mon tuto est prêt ! Et une 'tite annotation "Speedo is the best" aussi, pas le choix [emoji6]

EDIT: pour la copie vers la SD externe, je ne rencontre pas de difficulté: j'utilise la commande "cp SOURCE DESTINATION", et ça fonctionne, tant vers la carte SD externe ("/external_sd", dans TWRP) que vers une clé USB en OTG ("/usb-otg" dans TWRP)
 
Speedo4android

Speedo4android

Super VIP
Inscrit
3 Novembre 2014
Messages
2 568
Points
36
  • #22
Hello, cool, moi j'avais essayé /storage/sdcard1 , et toutes le variantes possibles, directement dans #compression ... Tu peux me poster ton code ?
 
hypo59

hypo59

Membre
Inscrit
21 Septembre 2013
Messages
2 671
Points
38
  • #23
Yep ! Le voici, c'est un script.sh lancé par l'updater-script:

Code:
S'il vous plaît, Connexion ou S'inscrire to view codes content!
 
Speedo4android

Speedo4android

Super VIP
Inscrit
3 Novembre 2014
Messages
2 568
Points
36
  • #24
Sympa ce .sh, d'apres ce que je comprends, c'est pour créer directement un .zip de restauration sur sdext, perso j'aurais fait autrement, en incluant directement le répertoire "meta-inf" dans la 1ere sauvegarde, je regarde demain si ça marche aussi sur le G4G
 
Haut Bas