Construire et installer des builds communautaires FOTA

Cet article peut vous aider à installer des builds communautaires de Firefox OS sur votre téléphone. Les mises à jour "firmware over the air" (FOTA) de l'OS seront activées sur ces versions.

Prérequis

Afin de compiler et installer cette build, vous devez avoir une machine sur laquelle compiler et une machine hôte. Il peut s'agir d'une seule et même machine.

Sur la machine de compilation, il est nécessaire d'avoir tous les logiciels requis pour construire une version destinée au téléphone cible (Prérequis pour construire Firefox OS apporte davantage d'informations).

Tout d'abord, vous devez vérifier l'appareil :

  • Il doit s'agir d'un appareil rooté.
  • Clés de recovery : nous devons vérifier les clés utilisées au cours du recovery ; celles-ci correspondent aux clés AOSP. Elles sont situées dans : /res/keys/. Ce devrait être les mêmes.
  • Téléphone déjà doté d'un recovery (librecovery)

Il est possible de construire les versions nocturne, aurora et bêta ; dans ce but, créez simplement 3 dossiers différents : nightly aurora beta (si vous ne souhaitez construire qu'une branche, vous pouvez vous contenter d'un seul répertoire). Nightly est mise à jour chaque nuit, aurora correspond à la dernière version stable et beta à la version qui précède aurora.

En fonction de vos besoins, vous pouvez décider de construire toutes les branches ou seulement une ou deux. Pour chaque branche dont vous avez besoin, suivez les étapes décrites sur cette page. Lorsque vous aurez atteint le paragraphe "Compilation", les instructions seront de nouveau spécifiques selon les branches.

Préparez votre première compilation B2G avec la BRANCHE correcte, comme si vous étiez en train de créer une version pour le téléphone cible. Suivez les instructions de cette page (Se préparer pour la première construction de B2G) jusqu'à la fin de la section "Configurer B2G pour votre appareil".

Note : si vous avez un manifeste (xml) spécifique pour config.sh, ouvrez ce fichier et remplacez "master" par le nom de la branche que vous voulez dans les "choses spécifiques de B2G".

À présent, votre répertoire de travail devrait être [BRANCH]/B2G/

NE PAS COMPILER POUR L'INSTANT ! 

Il y a encore beaucoup de modifications à faire.

Signatures (seulement pour les appareils Firefox OS par défaut) :

Toutes les ROMs des appareils Firefox OS doivent être signées ; par contre, pour les appareils Android, ce n'est pas obligatoire.

Nous ne pouvons fournir que gecko et gaia ; la mise à jour sera signée pour éviter son installation sur un mauvais téléphone.

Pour cela, vous aurez besoin de la signature de la build racine ; il y a juste à récupérer build.prop depuis le téléphone :

adb pull /system/build.prop

Maintenant, cherchez dans ce fichier la valeur de ro.build.fingerprint ; il s'agit de l'empreinte.

Localisation :

Il est possible de construire une version contenant toutes les locales en ajoutant ce script (langs.sh) dans gaia/locales ou de choisir de ne cloner que certaines langues. Dans ce dernier cas, modifiez gaia/locales/languages_all.json pour que seules les langues clonées ne soient employées #TOVERIF => Compilation multilocale

Si vous compilez pour les branches aurora ou beta, remplacez git checkoutmozillaorg/master par git checkout v2.1 pour aurora et par git checkout v2.0 pour beta dans langs.sh

N'oubliez pas de mettre à jour vos dépôts avant de lancer une nouvelle compilation.

langs.sh :

 #!/bin/sh

 set -e
 GIT_ROOT="https://git.mozilla.org/releases/l10n/"
 GIT_PROJ="/gaia.git"
 LANGS=$(json_pp < languages_all.json | grep ':' | cut -d':' -f1 | cut -d'"' -f2)
 for lang in ${LANGS}; do
     echo "Syncing $lang"
     if [ ! -d ${lang}/.git/ ]; then
         echo "No repo for ${lang}, cloning new one"
         git clone ${GIT_ROOT}${lang}${GIT_PROJ} $lang || true
     else
         echo "Updating close for ${lang}"
     cd ${lang} && (git fetch origin && git checkout origin/master) || true && cd ..
     fi;
 done;

Configuration de la compilation

Il est aussi nécessaire d'avoir un fichier .userconfig pour votre construction :

Créez à la racine de [BRANCH]/B2G/ un fichier nommé .userconfig et collez-y ces lignes :

 export SYSTEM_PARTITION=/dev/block/platform/msm_sdcc.1/by-name/system # to specify the system partition, find info with adb shell cat /proc/mounts
 export DATA_PARTITION=/dev/block/platform/msm_sdcc.1/by-name/userdata # to specify the data partition, find info with adb shell cat /proc/mounts
 export VARIANT=userdebug #to include gaia
 export PRODUCTION=1 #to have a user build
 export B2G_UPDATER=1
 export B2G_UPDATE_CHANNEL=aurora  #to modify [BRANCH]
 export ENABLE_DEFAULT_BOOTANIMATION=true #to have B2G boot animation
 export GAIA_DEV_PIXELS_PER_PX=1.5
 export LOCALE_BASEDIR=locales/ #Languages folder 
 export LOCALES_FILE=locales/languages_all.json #all languages for the build 
 export GAIA_KEYBOARD_LAYOUTS="$((find gaia/apps/keyboard/js/layouts/*.js | sed -e 's|gaia/apps/keyboard/js/layouts/||g' -e 's/\.js$//g') | tr -s '\r\n' ',' | sed -e 's/,$//g')" #All keyboard, you can change this with keyboard you want 
 export GAIA_DEFAULT_LOCALE=fr #languages by default, fr (french) for example
 export B2G_FOTA_DIRS="system/fonts system/b2g" #fira font bug
 export FOTA_FINGERPRINTS="[your fingerprint]"

Les variables suivantes devront être éditées :

  • SYSTEM_PARTITION (utilisez adb shell cat /proc/mounts pour connaître la partition)
  • DATA_PARTITION (ici aussi, il est possible d'utiliser adb shell cat /proc/mounts )
  • B2G_UPDATE_CHANNEL dépend de votre canal (aurora, beta, nightly)
  • GAIA_DEFAULT_LOCALE en fonction de la locale souhaitée
  • (facultatif mais peut-être utile : GAIA_KEYBOARD_LAYOUTS (voir le commentaire))
  • FOTA_FINGERPRINTS: ajoutez la valeur de ro.build.fingerprint
  • GAIA_DEV_PIXELS_PER_PX: pour connaître les réglages corrects de votre appareil, veuillez vous rendre sur ce site web avec cet appareil.

Le texte qui suit le symbole dièse (#) peut être supprimé (y compris le symbole lui-même). Ce sont des commentaires et leur seule raison d'être est d'expliquer à quoi sert la ligne.

Après cela, il faut définir les informations à propos de l'url de mise à jour :

 cd gecko/
 git checkout -b [VERSION NUMBER ou master pour nightly]-local --track mozillaorg/[VERSION NUMBER ou master pour nightly]
 éditez app.update.url dans b2g/app/b2g.js vous pouvez conserver %target% etc.. ou sinon vous pouvez juste avoir quelque chose du genre
 pref("app.update.url", "http://[DOMAIN]/[PHONE NAME]/[BRANCH]/update.xml");
 

Ensuite, pour appliquer vos modifications, effectuez un commit :

 git commit -a
 Répétez toutes ces étapes avec les différentes branches pour avoir une version beta/aurora/nightly.

La configuration de la compilation est à présent terminée. Toutes les étapes qui suivent devront être répétées à chaque compilation dans chacun des dossiers de branche.

Compilation

La mise en place de la construction d'une (nouvelle) mise à jour est : 

 cd [BRANCH]/B2G/ #pour se placer dans le bon dossier
 git pull # pour actualiser le code du dépôt
 ./repo sync #pour actualiser le code du dépôt pour android et B2G ne pas utiliser l'option -d, le faire supprimerait vos modifications
 cd gaia/locales/ && ./langs.sh && cd ../../ #pour actualiser les langues
  
 ./build.sh # pour construire b2g
 ./build.sh gecko-update-fota # pour construire b2g et gaia dans des fichiers .zip et .mar
  
 BUILDID=$(grep 'BuildID=' objdir-gecko/dist/bin/application.ini | cut -d'=' -f2) # définit la variable buildid
 VERSION=$(grep '\nVersion=' objdir-gecko/dist/bin/application.ini | cut -d'=' -f2) # définit la variable de la version de gecko
 python tools/update-tools/build-update-xml.py -c out/target/product/[PHONE NAME]/fota-[PHONE NAME]-update.mar -O -u http://[DOMAIN]/[PHONE NAME]/[BRANCH]/fota-[PHONE NAME]-update.mar -i $BUILDID -v $VERSION -V $VERSION | tee /var/www/[BRANCH]/update.xml # Modifiez cette commande avec vos informations : chemin correct vers .mar, chemin correct vers .mar dans l'url de update.xml, la commande produira en sortie un fichier update.xml; ce dernier ira sur votre machine hôte, il correspond au fichier appelé par le système pour chercher de nouvelles mises à jour.
 cp out/target/product/[PHONE NAME]/fota-[PHONE NAME]-update.mar /var/www/[BRANCH]/fota-[PHONE NAME]-update.mar #pour déplacer le .mar sur le serveur 
 cp out/target/product/[PHONE NAME]/fota/partial/update.zip /var/www/[BRANCH]/update.zip #pour déplacer le .zip sur le serveur
 pushd /var/www/[BRANCH]/ # pour aller dans les fichiers du serveur 
 sha1sum $(ls) | tee sha1.checksum #pour avoir un fichier de signature
 popd

Si vous souhaitez un bot IRC, vous pouvez utiliser ii ou buildbot. J'ai réalisé un script pour ça ICI (pour plus d'informations sur ce qu'est buildbot, voir http://buildbot.net/ )

Flashez le téléphone et essayez votre build :

Pour installer la version sur un téléphone, suivez simplement ces étapes :

 adb reboot recovery

Dans le recovery, descendez avec le bouton de volume bas pour sélectionner la ligne "apply update from adb", puis appuyez sur le bouton power :

 adb sideload out/target/product/[PHONE NAME]/fota/partial/update.zip

Builds existantes par communauté

Étiquettes et contributeurs liés au document

Étiquettes : 
 Contributeurs à cette page : jwhitlock, xdelatour
 Dernière mise à jour par : jwhitlock,