Improve pmbootstrap post
All checks were successful
deploy / docker (push) Successful in 1m22s

This commit is contained in:
Florian RICHER 2024-10-06 00:03:38 +02:00
parent 5b4f569312
commit 5aa73f345a

View file

@ -1,6 +1,6 @@
--- ---
title: Compiler un paquet Postmarket OS title: Compiler un paquet Postmarket OS
description: Installation de pmbootstrap et compilation d'un paquet Postmarket OS description: Installation de pmbootstrap pour la compilation d'un paquet Postmarket OS. OS basé sur Alpine pour téléphone mobile.
slug: pmbootstrap-own-paquet slug: pmbootstrap-own-paquet
date: 2024-02-18 00:00:00+0000 date: 2024-02-18 00:00:00+0000
categories: categories:
@ -22,11 +22,13 @@ On peut aussi l'utiliser pour compiler son propre paquet et l'installer sur son
Avant de pouvoir l'utiliser, il faut d'abord l'installer depuis ce [lien](https://wiki.postmarketos.org/wiki/Pmbootstrap). 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 préparer son environnement de travail. Une fois installé et configuré, il faut d'abord préparer son environnement de travail.
Il est parfois nécessaire de mettre à jour le repository pmaports en local.
On peut le faire assez facilement avec la commande :
_Met à jour le repository [pmaports.git](https://wiki.postmarketos.org/wiki/Pmaports.git) cloné en local._
```bash ```bash
pmbootstrap pull pmbootstrap pull
``` ```
_Met à jour le repository [pmaports.git](https://wiki.postmarketos.org/wiki/Pmaports.git) cloné en local._
> Le repo pmaports.git stocke tous les paquets Alpine avec le fichier `APKBUILD` utilisé par le serveur de compilation. > Le repo pmaports.git stocke tous les paquets Alpine avec le fichier `APKBUILD` utilisé par le serveur de compilation.
> >
> Le fonctionnement est similaire à `PKGBUILD` pour les utilisateurs de [Archlinux](https://archlinux.org/) > Le fonctionnement est similaire à `PKGBUILD` pour les utilisateurs de [Archlinux](https://archlinux.org/)
@ -35,28 +37,24 @@ pmbootstrap pull
> ainsi que la procédure pour vérifier si le paquet fonctionne correctement. > ainsi que la procédure pour vérifier si le paquet fonctionne correctement.
> Généralement on utilise les tests du projet comme les tests unitaires ou les tests fonctionnels. > Généralement on utilise les tests du projet comme les tests unitaires ou les tests fonctionnels.
_Met à jour le cache de la commande APK depuis l'environnement de travail_ On peut également mettre à jour le cache de la commande `apk` même si c'est pas forcément obligatoire.
```bash ```bash
pmbootstrap update pmbootstrap update
``` ```
_Met à jour le cache de la commande APK depuis l'environnement de travail_
> L'environnement de travail se situe par défaut dans le dossier `$HOME/.local/var/pmbootstrap/` > L'environnement de travail se situe par défaut dans le dossier `$HOME/.local/var/pmbootstrap/`
Si on a déjà un environnement de travail en cours et qu'il contient du cache ou un travail en cours, on peut le réinitialiser assez facilement avec la commande :
_Supprime le dossier de la commande chroot_
```bash ```bash
pmbootstrap zap pmbootstrap zap
``` ```
_Supprime le dossier de la commande chroot pour repartir de 0_
> La commande chroot permet de changer la racine Linux. > 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. > 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. > 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 correspond au système de notre téléphone pour le configuré avant de l'installer ou de le tester sur notre appareil.
>
> Par défaut, il se situe dans le dossier `$HOME/.local/var/pmbootstrap/cache_git/pmaports/`
_[Optionnel] Changer la branche du repo [pmaports.git](https://wiki.postmarketos.org/wiki/Pmaports.git)_ Pour ceux qui veulent utiliser une autre branche, on peut également changer la branche disponible sur le repository.
```bash ```bash
git -C $workdir checkout [branch] git -C $workdir checkout [branch]
``` ```
@ -66,57 +64,72 @@ git -C $workdir checkout [branch]
## Compilation de notre paquet Alpine ## Compilation de notre paquet Alpine
Pour compiler le paquet, on utilise la commande `pmbootstrap build [paquet_name]`. Maintenant, on va pouvoir compiler n'importe quel paquet avec la commande.
> Avant de compiler depuis le repository Nightly, il faut d'abord rajouter la clef de signature ```bash
> pmbootstrap build [nom_du_paquet]
> `wget https://nightly.postmarketos.org/plasma-mobile/pmos@local-662fcd2f.rsa.pub` ```
>
> `mv pmos@local-662fcd2f.rsa.pub $(pmbootstrap config work)/config_apk_keys/` Par exemple, on peut compiler plasma-mobile (Attention le paquet est long à compiler)
> ```bash
> Source : https://wiki.postmarketos.org/wiki/Nightly pmbootstrap build plasma-mobile
```
Par défaut, pmbootstrap va recompiler l'intégralité des dépendances du projet pour s'assurer que notre test sera reproductible.
Cependant, lorsque l'on souhaite juste tester un truc, ça peut-être ultra long.
On peut donc utiliser deux options pour nous aider:
* `-i` Permet de dire de compiler uniquement les dépendances du paquet défini dans le fichier `APKBUILD`
* `-n` Permet d'éviter de compiler les dépendances du paquet défini dans le fichier `APKBUILD`
Avec le combot des deux options, ça nous évite de tout recompiler.
On a aussi l'option `-mp` qui peut-être pratique pour changer de mirroir si le téléchargement est lent ou si l'on souhaite télécharger des paquets nightly.
> Un mirroir est un serveur utilisé pour télécharger les dépendances
On utilise cette option de cette manière:
```bash
pmbootstrap \
-mp https://nightly.postmarketos.org/plasma-mobile/packages/ \
-mp http://mirror.postmarketos.org/postmarketos/
```
On a aussi d'autres options comme:
* `--details-to-stdout` : Affiche le fichier de log dans la console
* `-j N` : Défini le nombre de core CPU utilisé pour la compilation
* `-t [En seconde]` : Le nombre de secondes sans nouveau log dans le fichier avant d'abandonner la compilation
* `--src` : Change les sources du paquet. Par défaut ce sont les sources définies dans le fichier `APKBUILD`
* `--arch [arch]` : L'architecture CPU du téléphone
Un exemple concret d'une commande que j'ai utilisé pour recompiler ma version de plasma-mobile avec mes changements.
_Exemple de commande_
```bash ```bash
pmbootstrap \ pmbootstrap \
-mp https://nightly.postmarketos.org/plasma-mobile/packages/ \ -mp https://nightly.postmarketos.org/plasma-mobile/packages/ \
-mp http://mirror.postmarketos.org/postmarketos/ \ -mp http://mirror.postmarketos.org/postmarketos/ \
--details-to-stdout \ --details-to-stdout \
-j 32 \ -j 32 \ # Pour utiliser toute la puissance de mon CPU
-t 3600 -v \ -t 3600 -v \ # La compilation est ultra longue donc pmbootstrap abandonne la build avant la fin de la compilation
build plasma-mobile \ build plasma-mobile \
--src $home/plasma-mobile/ \ --src $home/plasma-mobile/ \
--arch aarch64 \ --arch aarch64 \ # Mon téléphone utilise l'architecture aarch64 (ARM64)
-i \ -i \
-n -n
``` ```
Dans cet exemple, j'ai utilisé les arguments suivants: > **Attention**
>
> Avant de compiler depuis le repository Nightly, il faut d'abord rajouter la clef de signature
>
> ```bash
> wget https://nightly.postmarketos.org/plasma-mobile/pmos@local-662fcd2f.rsa.pub
> mv pmos@local-662fcd2f.rsa.pub $(pmbootstrap config work)/config_apk_keys/
> ```
>
> Source : https://wiki.postmarketos.org/wiki/Nightly
* `-mp` : Permet de définir un repository Alpine pour installer les paquets. Si vous souhaitez avoir plus d'informations, il suffit de taper la commande
> Dans l'exemple, 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 miroir 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é par 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 paquet. Par défaut ce sont les sources définies 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 paquet.
> En général, ce n'est pas recommandé par Alpine, mais dans mon cas, je souhaite utiliser les dépendances depuis le repo
> miroir officiel de Postmarket OS.
* `-i` : Permet de dire de compiler uniquement les dépendances du paquet 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 paquet comme le noyau Linux.
Pour plus d'informations, il suffit de taper la commande
```bash ```bash
pmbootstrap build --help pmbootstrap build --help
@ -128,7 +141,7 @@ Et pour avoir les arguments généraux
pmbootstrap --help pmbootstrap --help
``` ```
## Envoie du paquet sur le téléphone ## Envoie du paquet compilé sur le téléphone
Une fois le paquet compilé, il suffit de demander à `pmbootstrap` de l'envoyer sur notre téléphone via la connexion SSH. Une fois le paquet compilé, il suffit de demander à `pmbootstrap` de l'envoyer sur notre téléphone via la connexion SSH.
Avec `pmbootstrap`, on utilise la commande `sideload` comme dans l'exemple ci-dessous. Avec `pmbootstrap`, on utilise la commande `sideload` comme dans l'exemple ci-dessous.