Mettre à jour son ZTE Open vers FirefoxOS 1.3

Possesseur depuis quelques temps d'un ZTE Open sous FirefoxOS, je me heurte à l'impossibilité de mettre à jour le système vers une version plus stable que la version installée, la 1.0. Celle-ci n'a pas Fastboot activé et n'est pas utilisable quotidiennement sans un lot de bugs et crashs réguliers. Il manque d'ailleurs plusieurs fonctionnalités assez utiles comme l'importation de contacts à partir de la carte SD ou le support des certificats SSL non présents dans le navigateur…

Voyons ensemble comment mettre à jour manuellement FirefoxOS vers la version 1.3, celle actuellement en cours de développement.

Les manipulations qui suivent ne sont pas sans risque pour l'appareil : celui-ci peut se bloquer et devenir inutilisable... Et à ce moment là, l'éventuelle garantie ne fonctionnera pas !

Vérifier l'activation du Fastboot

La version installée sur le ZTE Open en ma possession était la FFOS_V1.0.0B01. Or les manipulation qui suivent nécessitent d'avoir au minimum la FFOS_V1.0.0B02. Pour l'installer:

  1. Se rendre sur la page dédiée au ZTE Open du site du constructeur;
  2. Télécharger l'archive .zip correspondante à la version de FirefoxOS actuellement installée;
  3. Éteindre le téléphone et brancher la carte SD dans l'ordinateur;
  4. Dézipper l'archive, et copier le fichier EU_DEV_FFOS_V1.1.0B06_UNFUS_SD_For_V1.0.zip à la racine de la carte SD;
  5. Remettre la carte SD dans le téléphone. Redémarrer le téléphone et maintenir le bouton Power et Volume haut;
  6. Le téléphone redémarre alors sur Firefox OS system recovery <3e>;
  7. En utilisant la touche Volume Bas, se déplacer jusqu'à surligner apply update from external storage:
  8. Appuyer sur le bouton Power pour valider. De la même façon, sélectionner le fichier .zip précédemment copié sur la carte SD.

L'installation prend alors quelques minutes. Une fois achevée, sélectionner Reboot System Now pour redémarrer le téléphone.

Compiler les sources de FirefoxOS

Le téléchargement des sources se fait via le dépôt Git de B2G. Par conséquent, il suffit de cloner le dépôt git :

:::bash
git clone git://github.com/mozilla-b2g/B2G.git

Ensuite, se rendre dans le dossier B2G et configurer les sources en précisant inari, le nom de code du ZTE Open :

:::bash
cd B2G && ./config.sh inari

La configuration commence alors. Elle peut prendre plusieurs heures… Un peu de patience ! :-)

Afin de compiler FirefoxOS, certaines dépendances sont requises.

Celles ci-dessous sont pour les distributions basées sur Ubuntu 12.10. La documentation officielle liste les dépendances en fonction de la version du système utilisé.

:::bash
sudo aptitude install autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib gcc-4.6 g++-4.6 g++-4.6-multilib \
ia32-libs lib32ncurses5-dev lib32z1-dev libgl1-mesa-dev libx11-dev make zip android-tools-adb

Il convient ensuite d'adapter le compilateur à utiliser dans le fichier .userconfig du dossier, et de mettre un cache de 3GB :

:::bash
echo 'export CC=gcc-4.6' >> .userconfig
echo 'export CXX=g++-4.6' >> .userconfig
ccache --max-size 3GB

Il est également possible de préciser d'autres options dans ce fichier. Voir la documentation.

Il convient ensuite d'ajouter les règles udev adéquates pour l'appareil. Pour cela, copier les deux lignes suivantes dans le fichier /etc/udev/rules.d/zte_open.rules

:::bash
SUBSYSTEM=="usb", ATTR{idVendor}=="19d2", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"

On rend ensuite le fichier lisible et on redémarre le démon :

:::bash
chmod a+r /etc/udev/rules.d/zte_open.rules
service udev restart

Après avoir activé le Remote debugging sur l'appareil : Settings > Device information > More Information > Developper et branché le téléphone, la commande suivante devrait afficher :

:::bash
$ adb devices
List of devices attached
roamer2 device

Ensuite, une sauvegarde de certaines partitions s'avère nécessaire au cas où un souci a lieu durant la mise à jour :

:::bash
adb pull /system <dossier cible>/system
adb pull /data <dossier cible>/data
adb pull /vendor <dossier cible>/vendor

Il enfin possible de compiler les sources :

:::bash
./build.sh

Cette étape peut prendre un long moment et demander beaucoup de ressources (pour ma part, environ 45 minutes avec un load average de 10).. Malgré tout, il convient de vérifier la présence ou non d'éventuelles erreurs de compilation qui peuvent s'afficher sur le terminal.

Installer ClockWorkMod Recovery

Il est nécessaire d'installer un autre Recovery permettant si besoin de faire une restauration plus sûre et de rooter simplement l'appareil. Pour cela, il convient de récupérer l'image du recovery (ici j'ai choisi ClockWorkMod dont le fichier .img est disponible ici), puis de le flasher :

:::bash
fastboot flash recovery recovery.img

Le téléphone va alors redémarrer. Le redémarrer une nouvelle fois manuellement en appuyant pendant environ 5 secondes sur les boutons Power et Volume haut. Une fois sur le Recovery, se déplacer avec les touches Volume sur Wipe Cache partition. Valider alors par le bouton Power. Sélectionner alors l'option Yes - Root. Le téléphone va redémarrer et rooter l'appareil.

Flasher le téléphone

J'ai ensuite utilisé le fichier boot.img compilé par Eduardo Gonzales. Ce fichier est à renommer en boot.img puis à copier dans le dossier /out/target/product/inari. Ce fichier n'est pas généré lors de la compilation, il est également possible de le compiler soi-même, j'y reviendrai peut-être plus tard..

Enfin, une fois tous les fichiers nécessaires en place, la dernière étape est de flasher le téléphone :

:::bash
./flash.sh

Une nouvelle fois peu de patience..

Le téléphone redémarre alors. avec FirefoxOS 1.3 installé. Cette version est plus agréable à utiliser malgré le fait qu'elle soit toujours en développement, et donc non exempte de bugs.