portfolio_leptos/data_src/posts/pmbootstrap_custom_build.md

160 lines
6.5 KiB
Markdown
Raw Permalink Normal View History

2024-02-18 17:39:17 +01:00
---
image_path: "https://postmarketos.org/logo.svg"
2024-02-18 17:54:46 +01:00
slug: pmbootstrap_own_paquet
title: Compiler un paquet Postmarket OS
2024-02-18 17:39:17 +01:00
date: 2024-02-18T00:00:00Z
2024-02-18 17:54:46 +01:00
description: Installation de pmbootstrap et compilation d'un paquet Postmarket OS
2024-02-18 17:39:17 +01:00
project_link: none
draft: true
tags:
- pmOS
- linux
---
## À propos de Postmarket OS
2024-02-18 18:02:23 +01:00
[Postmarket OS](https://postmarketos.org/) est une distribution basée sur [Alpine](https://www.alpinelinux.org/) conçut pour fonctionner sur téléphone, tablette
2024-02-18 17:39:17 +01:00
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.
2024-02-18 17:54:46 +01:00
On peut aussi l'utiliser pour compiler son propre paquet et l'installer sur son téléphone facilement.
2024-02-18 17:39:17 +01:00
## 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).
2024-02-18 18:02:52 +01:00
Une fois installé et configuré, il faut d'abord préparer son environnement de travail.
2024-02-18 17:39:17 +01:00
_Met à jour le repository [pmaports.git](https://wiki.postmarketos.org/wiki/Pmaports.git) cloné en local._
2024-02-18 18:02:23 +01:00
```bash
pmbootstrap pull
```
> Le repo pmaports.git stocke tous les paquets Alpine avec le fichier `APKBUILD` utilisé par le serveur de compilation.
>
2024-02-18 17:39:17 +01:00
> Le fonctionnement est similaire à `PKGBUILD` pour les utilisateurs de [Archlinux](https://archlinux.org/)
2024-02-18 18:02:23 +01:00
>
2024-02-18 17:54:46 +01:00
> Ce fichier contient toute la procédure pour préparer les sources, compiler le paquet depuis les sources, le numéro de version
> ainsi que la procédure pour vérifier si le paquet fonctionne correctement.
2024-02-18 17:39:17 +01:00
> 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_
```bash
pmbootstrap update
```
2024-02-18 18:02:23 +01:00
> L'environnement de travail se situe par défaut dans le dossier `$HOME/.local/var/pmbootstrap/`
2024-02-18 17:39:17 +01:00
_Supprime le dossier de la commande chroot_
2024-02-18 18:02:23 +01:00
```bash
pmbootstrap zap
```
2024-02-18 17:39:17 +01:00
> La commande chroot permet de changer la racine Linux.
2024-02-18 17:54:46 +01:00
> Par exemple, on peut faire `chroot $HOME/mon_dossier` et à partir de ce moment-là, `/` pointera vers `$HOME/mon_dossier` dans notre shell actuel.
2024-02-18 18:02:23 +01:00
>
2024-02-18 17:39:17 +01:00
> 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.
2024-02-18 18:02:23 +01:00
>
> 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.
>
2024-02-18 17:39:17 +01:00
> 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)_
```bash
git -C $workdir checkout [branch]
```
2024-02-18 18:02:23 +01:00
> `$workdir` par défaut se situe dans le dossier `$HOME/.local/var/pmbootstrap/cache_git/pmaports/`
>
> Exemple de branche utile : `kde-nightly`
2024-02-18 17:39:17 +01:00
2024-02-18 17:54:46 +01:00
## Compilation de notre paquet Alpine
2024-02-18 17:39:17 +01:00
2024-02-18 17:54:46 +01:00
Pour compiler le paquet, on utilise la commande `pmbootstrap build [paquet_name]`.
2024-02-18 17:39:17 +01:00
2024-02-18 17:54:46 +01:00
_Exemple de commande_
2024-02-18 17:39:17 +01:00
```bash
pmbootstrap \
2024-02-18 17:54:46 +01:00
-mp https://nightly.postmarketos.org/plasma-mobile/paquets/ \
2024-02-18 17:39:17 +01:00
-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
```
2024-02-18 17:54:46 +01:00
Dans cet exemple, j'ai utilisé les arguments suivants:
2024-02-18 17:39:17 +01:00
2024-02-18 17:54:46 +01:00
* `-mp` : Permet de définir un repository Alpine pour installer les paquets.
> Dans l'exemple, j'utilise deux repos
2024-02-18 17:39:17 +01:00
>
2024-02-18 17:54:46 +01:00
> `https://nightly.postmarketos.org/plasma-mobile/paquets/` : Contient la version en cours de développement de KDE Plasma Mobile
2024-02-18 17:39:17 +01:00
>
2024-02-18 17:54:46 +01:00
> `http://mirror.postmarketos.org/postmarketos/` : Le miroir officiel de Postmarket OS
2024-02-18 17:39:17 +01:00
* `--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
2024-02-18 17:54:46 +01:00
> Changé par 3600 secondes, car plasma-mobile est assez long à compilé et il ne génère aucun log.
2024-02-18 17:39:17 +01:00
* `-v` : Mode verbeux pour les logs dans le fichier
2024-02-18 17:54:46 +01:00
* `--src` : Change les sources du paquet. Par défaut ce sont les sources définies dans le fichier `APKBUILD`
2024-02-18 17:39:17 +01:00
> 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`
2024-02-18 17:54:46 +01:00
* `-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`
2024-02-18 17:39:17 +01:00
> Dans mon cas, il vient en complément de l'option `-n`, ça me permet de m'assurer de ne rien build.
2024-02-18 17:54:46 +01:00
> Sans cette option, il risque de compiler les sous-dépendances du paquet comme le noyau Linux.
2024-02-18 17:39:17 +01:00
Pour plus d'informations, il suffit de taper la commande
```bash
pmbootstrap build --help
```
2024-02-18 17:54:46 +01:00
Et pour avoir les arguments généraux
2024-02-18 17:39:17 +01:00
```bash
pmbootstrap --help
```
2024-02-18 17:54:46 +01:00
## Envoie du paquet sur le téléphone
2024-02-18 17:39:17 +01:00
2024-02-18 17:54:46 +01:00
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.
2024-02-18 17:39:17 +01:00
```bash
pmbootstrap sideload plasma-mobile \
--host [SSH HOST] \
--port [SSH PORT] \
--user [SSH USER] \
--arch [ARCH] \
--install-key
```
2024-02-18 17:54:46 +01:00
On a les arguments suivants :
2024-02-18 17:39:17 +01:00
* `--host [SSH HOST]` (Ex: 192.168.1.1)
* `--port [SSH PORT]` (Ex: 22)
* `--user [SSH USER]` (Ex: 192.168.1.1)
2024-02-18 17:54:46 +01:00
* `--arch [ARCH]` : Permet de modifier la valeur définie pour le téléphone (Ex : aarch64)
* `--install-key` : Permet d'installer la clef utilisée pour la vérification des paquets de la machine actuelle.
2024-02-18 17:39:17 +01:00
> Tout gestionnaire de paquet comme APK, vérifie si le paquet est valide par rapport à la signature électronique du mainteneur du paquet.
2024-02-18 17:54:46 +01:00
> Dans notre cas, la signature ne sera pas valide, car le paquet n'est pas compilé par le mainteneur original donc il suffit de rajouter notre signature.
2024-02-18 17:39:17 +01:00
Pour revenir en arrière, il suffit de taper la commande ci-dessous depuis le téléphone ou depuis la connexion SSH
```bash
sudo apk upgrade -a
```
2024-02-18 18:02:23 +01:00
> APK va réinstaller les paquets depuis les repos officiels.
2024-02-18 17:39:17 +01:00
En cas de problème liée à des conflits de fichier, on peut utiliser cette commande
```bash
sudo apk fix --force
2024-02-18 18:02:23 +01:00
```
> Cette commande va forcer APK à écraser les fichiers en conflit.