diff --git a/data_src/posts/kde_contribution.md b/data_src/posts/kde_contribution.md index f186297..46e4282 100644 --- a/data_src/posts/kde_contribution.md +++ b/data_src/posts/kde_contribution.md @@ -369,3 +369,7 @@ void FlashlightUtil::findTorchDevice() udev_unref(udev); } ``` + +### Info utile pour le débogage de KDE Plama Mobile depuis Postmarket OS + +Le fichier de log ce situe dans `~/.local/state/tinydm.log` diff --git a/data_src/posts/pmbootstrap_custom_build.md b/data_src/posts/pmbootstrap_custom_build.md new file mode 100644 index 0000000..4a86b1c --- /dev/null +++ b/data_src/posts/pmbootstrap_custom_build.md @@ -0,0 +1,158 @@ +--- +image_path: "https://postmarketos.org/logo.svg" +slug: pmbootstrap_own_package +title: Compiler sa propre version d'un package Postmarket OS +date: 2024-02-18T00:00:00Z +description: Installation de pmbootstrap et compilation de sa propre version d'un package Postmarket OS +project_link: none +draft: true +tags: + - pmOS + - linux +--- + +## À propos de Postmarket OS + +[Postmarket OS](https://postmarketos.org/) est une distribution basé sur [Alpine](https://www.alpinelinux.org/) conçu pour fonctionner sur les téléphones, tablette +ou sur Raspberry PI. +La communauté autour du projet propose un ensemble d'outils comme `pmbootstrap` qui permet de configurer et d'installer Postmarket OS sur son téléphone. +On peut aussi l'utiliser pour compiler son propre package et l'installer sur son téléphone facilement. + +## Configuration de notre environnement de travail + +Avant de pouvoir l'utiliser, il faut d'abord l'installer depuis ce [lien](https://wiki.postmarketos.org/wiki/Pmbootstrap). + +Une fois installé et configuré, il faut d'abord executer les commandes suivantes: + +_Met à jour le repository [pmaports.git](https://wiki.postmarketos.org/wiki/Pmaports.git) cloné en local._ +> Le repo pmaports.git stocke tous les packages Alpine avec le fichier fichier `APKBUILD` utilisé par le serveur de compilation. +> +> Le fonctionnement est similaire à `PKGBUILD` pour les utilisateurs de [Archlinux](https://archlinux.org/) +> +> Ce fichier contient toute la procédure pour prepare les sources, compiler le package depuis les sources, le numéro de version +> ainsi que la procédure pour vérifier si le package fonctionne correctement. +> Généralement on utilise les tests du projet comme les tests unitaires ou les tests fonctionnels. +```bash +pmbootstrap pull +``` + +_Met à jour le cache de la commande APK depuis l'environnement de travail_ +> L'environnement de travail ce situe par défaut dans le dossier `$HOME/.local/var/pmbootstrap/` +```bash +pmbootstrap update +``` + +_Supprime le dossier de la commande chroot_ +> La commande chroot permet de changer la racine Linux. +> Par exemple, on peut faire `chroot $HOME/mon_dossier` et à partir de ce moment là, `/` pointera vers `$HOME/mon_dossier` dans notre shell actuel. +> +> C'est très utilisé par pmbootstrap pour configurer le système Alpine. +> Ça évite de devoir faire une VM ou un container Linux juste pour changer quelque fichier. +> +> Dans notre cas, il correspont au système pour le téléphone utilisé pour le configuré avant de l'installer ou de le tester sur notre téléphone. +> +> Par défaut, il se situe dans le dossier `$HOME/.local/var/pmbootstrap/cache_git/pmaports/` +```bash +pmbootstrap zap +``` + +_[Optionnel] Changer la branche du repo [pmaports.git](https://wiki.postmarketos.org/wiki/Pmaports.git)_ +> `$workdir` par défaut se situe dans le dossier `$HOME/.local/var/pmbootstrap/cache_git/pmaports/` +> Example de branche utile : `kde-nightly` +```bash +git -C $workdir checkout [branch] +``` + +## Compilation de notre package Alpine + +Pour compiler le package, on utilise la commande `pmbootstrap build [package_name]`. + +_Example de commande_ +```bash +pmbootstrap \ + -mp https://nightly.postmarketos.org/plasma-mobile/packages/ \ + -mp http://mirror.postmarketos.org/postmarketos/ \ + --details-to-stdout \ + -j 32 \ + -t 3600 -v \ + build plasma-mobile \ + --src $home/plasma-mobile/ \ + --arch aarch64 \ + -i \ + -n +``` + +Dans cette example, j'ai utilisé les arguments suivants: + +* `-mp` : Permet de définir un repository Alpine pour installer les packages. +> Dans l'example, j'utilise deux repos +> +> `https://nightly.postmarketos.org/plasma-mobile/packages/` : Contient la version en cours de développement de KDE Plasma Mobile +> +> `http://mirror.postmarketos.org/postmarketos/` : Le mirroir officiel de Postmarket OS + +* `--details-to-stdout` : Affiche les logs stocké dans le fichier dans la console +* `-j N` : Défini le nombre core utilisé pour la compilation +> Dans mon cas, 32 core sur mon CPU. +* `-t [En seconde]` : Le nombre de secondes sans nouveau log dans le fichier avant d'abandonner la compilation +> Changé à 3600 secondes car plasma-mobile est assez long à compilé et il ne génère aucun log. +* `-v` : Mode verbeux pour les logs dans le fichier +* `--src` : Change les sources du package. Par défaut ce sont les sources défini dans le fichier `APKBUILD` +> Pour ma part, je souhaite utiliser mon propre code pour tester +* `--arch [arch]` : L'architecture CPU du téléphone +> Pour ma part, mon téléphone est en arm64v8 donc `aarch64` +* `-n` : Permet d'éviter de compiler les dépendances du package. +> En général, c'est pas recommandé par Alpine mais dans mon cas, je souhaite utilisé les dépendances depuis le repo +> mirroir officiel de Postmarket OS. +* `-i` : Permet de dire de compiler uniquement les dépendances du package défini dans le fichier `APKBUILD` +> Dans mon cas, il vient en complément de l'option `-n`, ça me permet de m'assurer de ne rien build. +> Sans cette option, il risque de compiler les sous-dépendances du package comme le noyau Linux. + +Pour plus d'informations, il suffit de taper la commande + +```bash +pmbootstrap build --help +``` + +Et pour avoir les arguments générals + +```bash +pmbootstrap --help +``` + +## Envoie du package sur le téléphone + +Une fois le package compilé, il suffit de demandé à `pmbootstrap` de l'envoyé sur notre téléphon via la connexion SSH. +Avec `pmbootstrap`, on utilise la commande `sideload` comme dans l'example ci-dessous. + +```bash +pmbootstrap sideload plasma-mobile \ + --host [SSH HOST] \ + --port [SSH PORT] \ + --user [SSH USER] \ + --arch [ARCH] \ + --install-key +``` + +On a les arguments suivants: + +* `--host [SSH HOST]` (Ex: 192.168.1.1) +* `--port [SSH PORT]` (Ex: 22) +* `--user [SSH USER]` (Ex: 192.168.1.1) +* `--arch [ARCH]` : Permet de modifier la valeur défini pour le téléphone (Ex: aarch64) +* `--install-key` : Permet d'installer la clef utilisé pour la vérification des packages de la machine actuelle. +> Tout gestionnaire de paquet comme APK, vérifie si le paquet est valide par rapport à la signature électronique du mainteneur du paquet. +> Dans notre cas, la signature ne sera pas valide car le paquet n'est pas compilé par le mainteneur original donc ont rajoute notre signature. + + +Pour revenir en arrière, il suffit de taper la commande ci-dessous depuis le téléphone ou depuis la connexion SSH +> APK va réinstaller les paquets depuis les repos officiels. +```bash +sudo apk upgrade -a +``` + +En cas de problème liée à des conflits de fichier, on peut utiliser cette commande +> Cette commande va forcer APK à écraser les fichiers en conflit. +```bash +sudo apk fix --force +``` \ No newline at end of file