diff --git a/content/post/pmbootstrap_custom_build/index.md b/content/post/pmbootstrap_custom_build/index.md index 6dbd9d7..5d45dac 100644 --- a/content/post/pmbootstrap_custom_build/index.md +++ b/content/post/pmbootstrap_custom_build/index.md @@ -1,6 +1,6 @@ --- 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 date: 2024-02-18 00:00:00+0000 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). 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 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 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. > 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 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/` - -_Supprime le dossier de la commande chroot_ +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 : ```bash pmbootstrap zap ``` +_Supprime le dossier de la commande chroot pour repartir de 0_ > 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 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 git -C $workdir checkout [branch] ``` @@ -66,57 +64,72 @@ git -C $workdir checkout [branch] ## Compilation de notre paquet Alpine -Pour compiler le paquet, on utilise la commande `pmbootstrap build [paquet_name]`. -> Avant de compiler depuis le repository Nightly, il faut d'abord rajouter la clef de signature -> -> `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 +Maintenant, on va pouvoir compiler n'importe quel paquet avec la commande. +```bash +pmbootstrap build [nom_du_paquet] +``` + +Par exemple, on peut compiler plasma-mobile (Attention le paquet est long à compiler) +```bash +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 pmbootstrap \ -mp https://nightly.postmarketos.org/plasma-mobile/packages/ \ -mp http://mirror.postmarketos.org/postmarketos/ \ --details-to-stdout \ - -j 32 \ - -t 3600 -v \ + -j 32 \ # Pour utiliser toute la puissance de mon CPU + -t 3600 -v \ # La compilation est ultra longue donc pmbootstrap abandonne la build avant la fin de la compilation build plasma-mobile \ --src $home/plasma-mobile/ \ - --arch aarch64 \ + --arch aarch64 \ # Mon téléphone utilise l'architecture aarch64 (ARM64) -i \ -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. -> 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 +Si vous souhaitez avoir plus d'informations, il suffit de taper la commande ```bash pmbootstrap build --help @@ -128,7 +141,7 @@ Et pour avoir les arguments généraux 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. Avec `pmbootstrap`, on utilise la commande `sideload` comme dans l'exemple ci-dessous.