Journal LineageOS 17.1 (Android 10), F-Droid et géolocalisation Wifi et GSM avec microG

Posté par  . Licence CC By‑SA.
27
20
juin
2020

Sommaire

J'ai un téléphone sous LineageOS et la version 17.1 (Android 10) est maintenant disponible pour mon téléphone. J'utilise F-Droid et microG.

Contexte

F-Droid est un magasin d'applications libres. J'utilise ça et pas autre chose. De plus, n'installant pas les fameuses GApps (services Google), je n'ai pas le Play Store, le service de communication utilisé par plein d'applications qui utilise le cloud Google (GCM - Google Cloud Messaging / Firebase), et le service de géolocalisation Google utilisant les antennes Wifi et téléphoniques aux alentours.

Pour les gens qui, comme moi, on besoin de certaines de ces fonctionnalités, il y a microG: un ensemble d'applications libres réimplémentant ces services Google, notamment :

  • un Play Store fake (ne me demandez pas, je ne sais pas vraiment ce que ça fait)
  • une bibliothèque qui permet aux applications compilés avec les blobs propriétaires de Google de continuer à communiquer en utilisant le cloud Google, alors que les GApps ne sont pas installés sur le téléphone
  • un système de géolocalisation Wifi / GSM s'appuyant sur divers fournisseurs qu'on peut choisir / cumuler parmi :
    • des données locales, récupérées avec le téléphone lui-même ou téléchargés en avance pour utilisation hors ligne
    • celui d'Apple (probablement utilisé dans les iPhones / iPad)
    • le service de localisation Mozilla (qui peut être complété à l'aide de l'application Mozilla Stumbler ou de Firefox Mobile sur Android. Ça fait ce que font les appareils Android ou Apple à l'insu des utilisateurs, mais en toute connaissance de cause : de temps en temps, le GPS est utilisé, les réseaux aux alentours sont scannés et la combinaison est envoyée à Mozilla (la base de donnée n'est pas libre)
    • celui de Nominatim
    • celui de MapQuest

Ces trois derniers nécessitent une connexion mobile, mais globalement ça ne consomme vraiment pas beaucoup de données. Avec mon forfait 50 M / mois, ça passe large.

  • un truc qui fait l'inverse : il prend une position GPS et renvoie des adresse. On peut utiliser Nominatim pour ça. Je ne sais pas très bien ça s'utilise mais c'est possible apparemment.

Ce qui m'intéresse, ce sont les deux derniers points, et en tout cas le point 3. J'ai un GPS un peu faiblard, et puis ça ne marche pas toujours bien dans les transports ou dans un bâtiment / une maison. Les deux premiers points, je m'en fiche, je n'utilise pas d'application qui a besoin d'un Play Store fake ou du cloud Google. Ce sont des applications qui sont compilées avec le blob proprio Google et qui ne trouvent donc pas leur chemin jusqu'à mon téléphone. Jusqu'à maintenant, j'utilisais le système LineageOS for microG, une recompilation de LineageOS avec :

  • les applications microG, qui peuvent être installées avec F-Droid
  • un mécanisme qui permet aux services microG de se faire passer pour les services Google. Ceux-ci sont signés avec une clé privée de Google, et les applications utilisant ces services à travers le blob propriétaire Google vérifient que la signature du service qui leur répond correspond bien à cette signature. Bien sûr, microG ne peut pas utiliser cette signature, donc ça rate, donc il faut la coopération du système d'exploitation pour que ça marche quand même. LineageOS refuse d'implémenter le patch qui introduit cette "fonctionnalité" (signature spoofing).

Avant LineageOS 17.1

Au lieu d'installer LineageOS, je pouvais installer LineageOS for microG. Cette distribution intègre le fameux patch nécessaire (tout comme de nombreuses autres distributions alternatives (AICP, AOSPExtended, etc), et aussi l'extension F-Droid il me semble (mais qu'on peut de toute façon la flasher sur n'importe quelle distribution Android).

Avec LineageOS 17.1

  • pas de version microG de lineage 17.1 (pour le moment)
  • la version actuelle de l'extension F-Droid qui permet à F-Droid d'installer et mettre à jour des applications sans afficher 30000 boites de dialogues ne fonctionne pas sur Android 10, des chemins systèmes ont changé.

Je pourrais rester sur Android 9, ça marche très bien, mais tant qu'à faire j'ai migré avant de connaître ces problèmes et de toute façon, cette version ne reçoit plus de mise à jour sur mon modèle. Pas de support officiel d'AICP et d'AOSPExtended pour mon modèle non plus. Donc, installation de la dernière version officielle de LineageOS, et pas de microG.

Trous de lapins et galères (croyais-je ?)

Il fallait donc installer microG un peu manuellement, puis appliquer ce fameux patch manuellement (pensais-je). Pour ça deux familles de solution :

  • une recompilation de LineageOS avec un patch : bye bye les mises à jour automatiques, c'est un peu lourd en gestion même si j'ai le coup de main pour compiler Android maintenant.
  • des scripts qui viennent décompiler et patcher un fichier JAR dans le système. C'est un peu bricolage, ce qui existe n'a pas l'air d'être très adapté pour Android 10 pour le moment, ça saute lors de la prochaine mise à jour si toutefois celle-ci veut bien s'appliquer après la modif, et je soupçonne la solution de causer potentiellement des problèmes de stabilités.

Pas ouf, donc. Sauf qu'en fait,

Retournement de situation (« plot twist », si vous préférez)

Pas besoin du patch pour juste la géolocalisation. Après vérification désespérée. En fait, Android fournit de base un mécanisme pour enregistrer des fournisseurs de géolocalisation proprement sans devoir usurper des signatures ou quoi que ce soit (je me disais aussi… pourquoi tant de haine ?).

Bon du coup problème réglé, je n'ai pas besoin d'une distribution spéciale de LineageOS. Parfait. Reste l'installation de microG. (Oui, les lecteurs et lectrices les plus aguerries auront remarqué que j'ai eu besoin d'installer microG avant de m'apercevoir que ça marchait sans le patch, mais bon, je raconte dans l'ordre que je veux !)

C'est Magisk

Il se trouve que j'utilise Magisk pour rooter mon téléphone (plus de support officiel pour rooter LineageOS depuis la version 17.1 apparemment pour je ne sais quelle raison. On ne peut plus télécharger les addonsu, et puis de toute façon Magisk fournit un contrôle plus grand - on peut savoir quelles applications essayent d'être root, autoriser / bloquer par application, etc) et que Magisk permet d'installer des modules sympa qui modifient le système de manière à ce que les mises à jours soient toujours possibles, et les modules restent installés après grâce à l'utilisation du mécanisme de survie des modules (addon.d) présent dans la plupart des systèmes alternatifs Android.

Or, il y a deux modules Magisk très intéressants :

  • F-Droid Privileged Extension
  • microG Installer Revived

En résumé

  • installation de LineageOS 17.1
  • on flashe Magisk : c'est un peu intrusif, ça touche la partition de démarrage du téléphone, pensez de toute façon à tout sauvegarder avant de faire quoi que ce soit, mais je n'ai jamais eu de problème et ça marche plutôt bien
  • une fois démarré, on peut installer deux modules Magisk
  • c'était pénible, ils ont tout cassé avec Android 10, mais finalement c'est plus simple comme ça maintenant

On configure microG, et pif, c'est plié, c'est propre, ça marche et ça survit les mises à jour.

Bonus

Tout n'est pas bon à prendre dans les modules Magisk. Magisk lui-même est complètement libre, et les auteurs font bien attention à ne pas embarquer de code propriétaire. Par exemple, certaines applications (des applications bancaires, des trucs utilisant les DRM (Netflix, autres j'imagine)) vérifient qu'elles sont bien lancées sur un téléphone et un système vérifiés par Google, et la vérification ne passe pas sur un système bidouillé. Magisk embarque un mécanisme pour tester l'état de Safety Net et pour ce faire, il s'appuie sur le blob propriétaire Google bien sûr. Le mécanisme n'est pas là de base et Magisk demande bien l'autorisation à l'utilisateur pour télécharger ce module en l'avertissant que du code propriétaire est nécessaire.

Cette attention n'est pas garantie dans les modules qu'on peut installer via Magisk, et on trouve vraiment de tout : des trucs libres, des trucs proprios, des machins pas à jour, etc. À charge de l'utilisateur de faire ses recherches.

Il y en a quand même des sympas, et notamment :

  • Fullscreen Gestures : ça permet, quand on utilise le nouveau mode "gestes" d'Android 10 pour naviguer (changer d'application, revenir en arrière, etc), de cacher complètement la barre de navigation devenue inutile. Pour une raison qui m'échappe, la possibilité de masquer la barre de navigation n'est pas dans Android 10 de base. Les gestes eux-même m'intéressent passablement, mais je navigue en utilisant le lecteur d'empruntes: un "touch" court pour faire précédent et touch long pour avoir la liste des applications ouvertes. La barre de navigation ne me sert pas, prend de la place pour rien, et ne peut pas être recouverte par les filtres d'écran tels que Red Moon. Avant, j'utilisais un petit script pour ajouter une propriété au fichier /system/build.prop (qemu.hw.mainkeys=1) pour faire ça, et il fallait que je le fasse après chaque mise à jour. Maintenant ça se fera tout seul, c'est bien. Par contre les gestes ont l'air de se mettre un peu en travers de mon utilisation du téléphone, j'ai réduit la sensibilité et la zone active au maximum, et si ça ne va pas je reviendrai à la solution précédente.
  • Cross compiled Binaries : quelques binaires venus du monde de GNU/Linux
  • SSH for Magisk : ssh et rsync sur Android, pour les transferts, c'est plutôt pratique

Et quelques un que je n'ai pas encore eu l'occasion de tester :

  • ZSH for Arm : j'utilise Zsh sur mon ordi classique, l'avoir quand on est en root sur Android sera peut-être pratique un jour, mais bon je ne vis pas dans le shell root d'Android non plus et le système est par défaut lancé en lecture seul donc pas d'historique. Donc l'intérêt n'est pas encore très clair. J'utilise plus les outils de Termux quand je dois utiliser la ligne de commande sur Android.
  • rclone-mount : ça permet de monter des systèmes de fichiers distant (différents clouds, sftp, http, webdav) en utilisant FUSE. Je ne savais pas que c'était possible sur Android, j'avais essayé d'utiliser sshfs sur Termux, sans succès.

Conclusion

C'était un journal plus long que prévu. Mais j'espère que ça vous aura diverti, ou, encore mieux, vous aura été utile ! :-)

Bon weekend

  • # Petit problème de formatage

    Posté par  . Évalué à 1.

    Le paragraphe

    Ces trois derniers nécessitent une connexion mobile, mais globalement ça ne consomme vraiment pas beaucoup de données. Avec mon forfait 50 M / mois, ça passe large.

    S'applique à la sous liste du point 3. J'ai merdouillé le formatage. Est-ce que ça serait possible de corriger ça s'il vous plait ?

    • [^] # Re: Petit problème de formatage

      Posté par  (Mastodon) . Évalué à 2. Dernière modification le 20 juin 2020 à 18:45.

      J'ai pas pu conserver la numérotation, en rajoutant ce paragraphe ça repartait à 1, j'ai donc mis des listes à puce au premier niveau.

      Dis-moi si ça te va.

      En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

  • # Sans Lineage

    Posté par  . Évalué à 1.

    Journal intéressant.
    J'ai un smartphone de grande marque auquel j'ai essayé de supprimer un max d'applis. Je dois hélas en garder quelques unes du constructeur, notamment parce que j'ai une montre connectée de la même marque. J'ai tout désinstallé de Google sauf l'appli nommée "Service Google Play" (j'utilise aussi Aurora Store). A quoi cela correspond-il ?
    Je précise que je ne souhaite pas changer de rom dessus. Est-il possible de faire ce qui est dit ici sans changer de rom ?

    • [^] # Re: Sans Lineage

      Posté par  (Mastodon) . Évalué à 2. Dernière modification le 21 juin 2020 à 20:52.

      Bonjour,

      Je précise que je ne souhaite pas changer de rom dessus. Est-il possible de faire ce qui est dit ici sans changer de rom ?

      Une partie (incomplète) de réponse :

      • microg :
        • pas de besoin sur un téléphone qui conserve les couches Google
      • service de localisation :
        • pas de besoin direct mais permet d'avoir le choix dans le service utilisé
      • F-Droid Privileged Extension
        • pas besoin ni de Lineage ni même de Magisk : un téléphone rooté et un bootloader qui laisse charger un recovery tiers (twrp installé ou en mode live), et c'est OK : on peut installer le service "Privileged Extension"
      • Autres (ssh, shell zsh, ..) : modules magisk
        • Magisk est installable si téléphone rooté (il a aussi l'avantage de masquer que le téléphone a été rooté aux applications le vérifiant)

      j'utilise le mode "profil professionnel" d'Android afin d'isoler les applications tierces et pas libres (ainsi mes apps bancaires et assurances sont isolées dans le système et n'ont pas accès à mes datas) Pas complètement hors sujet car le "profil professionnel" d'Android est également dispo sur de nombreux téléphones par défaut et peut être utilisé à ce type de fin

      Réponse à compléter !

      • [^] # Re: Sans Lineage

        Posté par  . Évalué à 4.

        Petite précision :

        Magisk est installable si téléphone rooté

        Si téléphone déverrouillé (Magisk permettant de rooter le téléphone).

        Sais-tu comment le profil professionnel isole les applications ? (plus que le modèle d'exécution sur Android, avec un utilisateur UNIX par application, etc).

        • [^] # Re: Sans Lineage

          Posté par  (Mastodon) . Évalué à 3.

          Merci pour la correction !

          Pour le fonctionnement exact : non je ne sais pas comment il fonctionne exactement, ne m'étant jamais penché dessus, pour l'utilisateur que je suis les apps isolées dans le "profil pro" voit une racine de data différente, et ne voit pas tes dossiers. Elles n'ont pas non plus un accès aux historiques téléphones, sms, contacts, ..
          Plus d'infos : https://support.google.com/work/android/answer/6191949?hl=fr

          • [^] # Re: Sans Lineage

            Posté par  . Évalué à 4.

            Oui mais les applis du profil "pro" se voient les-unes les-autres, et à force, ça fait déjà peaucoup de données qui peuvent être inférées.

            À quand de vrai silos?

    • [^] # Re: Sans Lineage

      Posté par  . Évalué à 6. Dernière modification le 21 juin 2020 à 20:57.

      L'appli nommée Service Google Play, je pense que c'est justement le composant qui gère les services Google tels que GCM / Firebase et certainement pas mal d'autre choses. Ce n'est pas le Play Store lui-même en tout cas. Tu ne pourras probablement pas la désactiver, et le faire pourrait entraîner des instabilités si c'était possible.

      Sur une ROM d'origine, tu peux normalement installer Magisk pour la rooter, et l'extension privilégiée F-Droid pour avoir une intégration d'F-Droid aux petits ognons (je l'ai déjà fait), à condition de déverrouiller le démarrage de ton téléphone (bootloader), ce qui n'est pas toujours possible ou facile. Déverrouiller le téléphone entraîne la remise en sortie d'usine du téléphone (suppression de toutes les données), c'est une mesure de sécurité en cas de vol du téléphone (pour rendre impossible la récupération des données d'un téléphone protégé par mot de passe).

      Magisk et l'extension F-Droid peuvent être installés à l'aide d'un « recovery » tel que TWRP, qui peut être flashé sur la partition recovery du téléphone, ou démarré directement depuis l'ordinateur, à l'aide de « fastboot ». On peut installer l'extension F-Droid sans rooter le téléphone (avec Magisk ou autre), mais le déverrouillage reste nécessaire.

      Concernant microG :

      • il est probablement impossible de remplacer les services Google par ceux de microG sans passer par une ROM alternative
      • tu peux peut-être utiliser les services de géolocalisation de microG plutôt que ceux de Google, ou en plus de ceux de Google, mais ça a l'air de demander quelques acrobaties (genre utiliser un module Xposed) que je n'ai jamais faites. Point d'entrée possible pour les recherches : https://f-droid.org/en/packages/org.microg.nlp/

      Tout ce bazar me donne quand même de plus en plus envie de me débarrasser complètement d'Android. J'en ai marre de tous ces bidouillages pour ne même pas obtenir un contrôle complètement satisfaisant sur son matériel. Je suis avec intérêt l'évolution du Pinephone et des systèmes tels que postmarket, UBPorts, Plasma Mobile et consors…

  • # A quand les install party lineage OS ?

    Posté par  . Évalué à 3.

    Lineage OS semble très intéressant mais pas forcément facile d'accès pour tous.

    A quand les install party ?
    Le flashage d'un téléphone étant parfois technique ça refroidit beaucoup d'utilisateur hélas.

    Moi le premier :D

  • # Merci

    Posté par  . Évalué à 1.

    Cela fait quelques jours que j'essaye de dégoogleliser mon smartphone.
    J'ai commencé par y mettre lineageOS 17.1, avec NanoDroid, mais impossible de faire marcher microG.
    Comme je pensais que le problème venait de l'absence de "signature spoofing", je suis passé à crDroid, toujours avec NanoDroid, mais rien à faire microG ne marchait pas non plus.
    Et là je tombe sur ton post, qui dit que lineageOS marche sans "signature spoofing".
    J'essaye (sans nanoDroid cette fois) et la c'est le miracle : microG marche (même si il dit que non).
    Un grand merci !

    • [^] # Re: Merci

      Posté par  . Évalué à 1.

      J'ai rien compris

      • [^] # Re: Merci

        Posté par  . Évalué à 3.

        En résumé, grâce à ce journal de raphj, j'ai réussi à faire marcher microG sur mon téléphone (sur lequel j'avais flashé lineageOS 17.1).

  • # Comment ajouter un fournisseur de géolocalisation ?

    Posté par  (site web personnel, Mastodon) . Évalué à 3.

    Hello,

    Pas besoin du patch pour juste la géolocalisation. Après vérification désespérée. En fait, Android fournit de base un mécanisme pour enregistrer des fournisseurs de géolocalisation proprement sans devoir usurper des signatures ou quoi que ce soit (je me disais aussi… pourquoi tant de haine ?).

    Ce passage est une très bonne nouvelle pour moi, je ne le savais pas non plus :)

    Tu aurais une doc / un lien qui explique cette fonctionnalité ?

    C'est nouveau à Android 10 ? Comment on fait pour ajouter un nouveau service ? Il suffit d'installer par exemple MozillaNlpBackend ? Est-ce qu'il y a un moyen de vérifier quels fournisseurs sont disponibles ou actifs ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.