Compiler /e/OS depuis les sources

eOS logoIl y a un peu plus d’un an, je vous ai parlé de l’installation du système /e/OS sur un Samsung Galaxy SM-A520F. La version d’Android livrée avec l’appareil était obsolète depuis belle lurette, et l’installation d’/e/OS m’a permis de prolonger de manière significative la vie de mon bon vieux smartphone.

Malheureusement, l’équipe d’/e/OS a également relégué mon matériel aux oubliettes. Depuis quelque temps, mon téléphone ne recevait plus de mises à jour depuis la version 2.2. Résultat de l’affaire : les applications de banque et de messagerie ne fonctionnent plus, d’autres disparaissent des radars dans la App Lounge, etc.

La bonne nouvelle, c’est qu’on peut très bien prolonger davantage la durée de support d’/e/OS pour le vieux matériel à condition de mettre la main à la pâte. Concrètement, il est tout à fait possible de compiler une ROM non officielle depuis les sources. C’est ce que j’ai fait, et vu que ce n’est pas de la magie noire, j’en profite pour vous décrire l’opération ici.

Prérequis

Pour construire une ROM non officielle depuis les sources, il vous faut une machine passablement puissante :

  • 16 Go de RAM au moins
  • 400 Go d’espace disque
  • une installation fonctionnelle de Docker

AstuceUn de mes clients m’a récemment fait cadeau d’une machine de gamer haut de gamme, et dont je me sers depuis quelques semaines. Oui, y’a des gens sympa comme ça. J’en ai donc profité pour m’atteler à cette opération, et je dois dire que c’est plutôt satisfaisant de faire ce genre de travail sur un avion de chasse.

$ lsblk| head -n 3
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0          11:0    1 1024M  0 rom  
nvme0n1     259:0    0  1,8T  0 disk 
$ free -m
       total   used   free  shared  buff/cache  available
Mem:   40011   3388  28339      68        8867      36622
Swap:   1023      0   1023
$ cat /proc/cpuinfo | grep processor | wc -l
36

Préparer le smartphone

Avant toute chose, il faut que j’accède à certaines infos du téléphone qui nécessitent d’activer les Options pour les développeurs.

  • Paramètres > À propos du téléphone.
  • J’appuie sept fois sur Numéro de version.
  • Je reviens en arrière et je sélectionne Système > Paramètres avancés > Options pour les dévelppeurs.
  • Je coche Débogage USB.
  • Je relie le smartphone au PC avec un câble USB.
  • Autoriser le débogage USB > Toujours autoriser ce PC > OK.

Je vérifie que la commande adb devices affiche bien mon téléphone branché :

$ adb devices
List of devices attached
5200c271fe96351d device

Je récupère le code du modèle et j’en prends note, parce que j’en aurai besoin un peu plus loin :

$ adb shell getprop ro.product.device
a5y17lte

Construire la ROM personnalisée

Je me suis principalement servi de la documentation officielle du projet /e/OS avec l’avis éclairé des utilisateurs du forum. Un grand merci notamment à l’utilisateur rust qui m’a fourni des indications précieuses pour réussir le premier build.

Créer une série de répertoires :

$ sudo mkdir -pv /srv/e/{src,zip,logs,ccache}
mkdir: created directory '/srv/e'
mkdir: created directory '/srv/e/src'
mkdir: created directory '/srv/e/zip'
mkdir: created directory '/srv/e/logs'
mkdir: created directory '/srv/e/ccache'

Petite explication :

  • Les sources téléchargées seront rangées dans /srv/e/src.
  • Les logs de construction seront accessibles dans /srv/e/logs.
  • Si tout se passe bien, le répertoire /srv/e/zip contiendra le ROM final.
  • Le répertoire /srv/e/ccache contient un cache de construction qui sert avant tout à accélérer les builds subséquents.

AstuceNotez ici que certains smartphones nécessitent l’extraction d’un firmware propriétaire. Apparemment ce n’est pas le cas pour mon Samsung SM-A520F.

L’équipe d’/e/OS nous a considérablement facilité la tâche en mettant à disposition une image Docker. Démarrer le build :

$ docker run --rm 
  -v "/srv/e/src:/srv/src" 
  -v "/srv/e/zips:/srv/zips" 
  -v "/srv/e/logs:/srv/logs" 
  -v "/srv/e/ccache:/srv/ccache" 
  -e "BRANCH_NAME=v2.3-r" 
  -e "DEVICE_LIST=a5y17lte" 
  -e "REPO=https://gitlab.e.foundation/e/os/releases.git" 
  registry.gitlab.e.foundation:5000/e/os/docker-lineage-cicd:community

Quelques remarques :

  • L’argument à la variable DEVICE_LIST, c’est le code du modèle de mon smartphone.
  • Je compile ici la branche v2.3-r du système /e/OS.

Ce n’est pas une mauvaise idée de surveiller les logs pendant la compilation :

$ cd /srv/e/logs/a5y17lte/
$ tail -f eos-2.3-20250123-UNOFFICIAL-a5y17lte.log

Je croise les doigts, je bois quelques cafés, et si tout se passe bien, l’opération se termine comme ceci :

>> [Thu Jan 23 09:03:28 UTC 2025] Finishing build for a5y17lte
>> [Thu Jan 23 09:03:28 UTC 2025] Cleaning source dir for device a5y17lte
09:03:53 Entire build directory removed.

#### build completed successfully (25 seconds) ####

Et voici le résultat final :

$ ls -lGh /srv/e/zips/a5y17lte/
total 950M
-rw-r--r--. 1 root 950M 23 janv. 10:03 e-2.3-r-20250123-UNOFFICIAL-a5y17lte.zip
-rw-r--r--. 1 root   75 23 janv. 10:03 e-2.3-r-20250123-UNOFFICIAL-a5y17lte.zip.md5sum
-rw-r--r--. 1 root  107 23 janv. 10:03 e-2.3-r-20250123-UNOFFICIAL-a5y17lte.zip.sha256sum

Il ne reste plus qu’à installer cette ROM. Je redémarre le téléphone en mode Recovery :

$ adb reboot recovery

Une fois que TWRP s’affiche, je choisis successivement Advanced > ADB Sideload > Swipe to Start Sideload.

$ adb sideload e-2.3-r-20250122-UNOFFICIAL-a5y17lte.zip

J’appuie sur Reboot et je retrouve un système /e/OS à jour avec toutes mes applis qui fonctionnent parfaitement.


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 

Me contacter