Title: MNT Reform, mon nouvel ordinateur au quotidien
Category: linux
Tags: open-hardware, Debian, pl-fr
Date: 2021-08-11 23:00
Cover: assets/backgrounds/reform_exploded.jpg

Le MNT Reform est un **ordinateur portable open-hardware** créé par la société
allemande [MNT Research GmbH][l_mntmn]. Parti de l'idée que les ordinateurs
personnels le sont de moins en moins, son principal créateur **Lukas F.
Hartmann** a conçu une machine appartenant vraiment à son utilisateur. Il est
fait pour durer, et permettre à son propriétaire de **l'étudier, le réparer et
l'améliorer**.

J'ai participé à la campagne de financement dans le courant de l'été dernier sur
[Crowd Supply][l_crowd_supply]. Le but était de faire de cet ordinateur ma
machine principale. Le temps d'apprivoiser la bête et de l'installer, il l'est
devenu. Je peux maintenant vous le présenter et vous montrer les différentes
étapes de sa configuration.

***Retour vers le passé au côtés d'une machine qui s'inspire largement de
l'esprit de la micro-informatique personnelle des années 1980.***

## L'ordinateur

Le boitier imaginé par **[Ana Dantas][l_ana_dantas]** rappelle les ordinateurs
portables du début des années 90 : il est imposant pour un ordinateur portable
de 12 pouces mais respire la solidité. Son chassis tout en aluminium peint en
noir est du plus bel effet.

![Photographie du MNT Reform ouvert]({attach}./images/reform_trackball.jpg)

Il est motorisé par un SoM ARM *NXP/Freerscale i.MX8MQ* comprenant un processeur
ARM A53 4 cœur à 1,5Ghz, 4Go de RAM (DDR4) et un GPU *Vivante GC7000Lite*. Le
tout branché à une carte mère concue par Lukas (ports PCIe, reseau, USB3 et
gestion de la batterie). Il est aussi doté d'une trackball et d'un clavier
mécanique.

![Vu du dessous du MNT Reform, le dos en pexiglas permet de voir les composants]({attach}./images/reform_flipped.jpg)

Bien entendu on est très loin de la puissance disponible sur des ordinateurs à
base de processeur x86 et plein de gigas de RAM. À titre de comparaison, un
*Rasperry pi 3* est motorisé par la même famille de processeur. Cependant il est
déjà question de dévelloper des modules processeurs compatibles, notamment un
basé sur l'architecture ARM A72 avec 8 voire 16 Go de RAM.

## Le système d'exploitation de base

Le système livré par défaut est Debian, cependant Lukas fournit un noyau Linux
avec quelques correctifs qui ne sont pas encore intégrés. Il y a aussi une
version compilée de la pile graphique Mesa intégrant quelques correctifs pour le
GPU.

Tous les scripts utilisés par Lukas pour la création de l'image disque de base
sont disponibles sur le serveur [Gitlab de MNT][l_git_reform_img]. Ils peuvent
être lancés directement sur un Reform.

## Créer mon propre système à base de Debian

Afin de comprendre les différentes étapes de la création du système pour
**mon** ordinateur, et aussi pour coller au plus près de mes besoins, j'ai
décidé de me lancer dans l'écriture de scripts pour:

 * compiler Uboot, le chargeur de démarrage
 * compiler le noyau Linux et les fichiers de description du matériel
 * créer le système de fichiers utilisateur
 * créer l'image disque

Le tout pouvant être lancé depuis des conteneurs Docker sur une machine plus
puissante que le Reform.

Ces scripts sont disponibles sur [mon instance Gitea][l_git_perso_reform].

### Compiler Uboot

[Uboot][l_uboot] (pour *Universal Boot*) est un chargeur de démarrage open-souce
dévellopé par Denx Software engineering. MNT fourni un [dépôt git][l_mnt_uboot]
avec une version de *UBoot* adaptée au Reform.

J'ai de mon côté écrit un script et un *Dockerfile* pour le compiler disponible
[dans ce dépôt][l_script_uboot]

### Compiler le noyau Linux

Mon [script][L_script_kernel] se charge de cloner les sources du noyau le dépôt
git officiel, vérifie les signatures GPG, applique les patches, intègre les
définitions du matériel et compile le noyau.

### Créer le système de fichiers utilisateurs

Mon [script][l_script_userland] se charge de créer l'espace utilisateur à l'aide
de [`mmdebstrap`][l_mmdebstrap]. La création se fait en fonction de recette,
ainsi celle par `default` reprend ce qui est fait par Lukas pour l'image qu'il
fournit.

Comme je n'ai besoin que des version de base fournies par Debian Unstable, je me
suis créé une recette `minimal` avec le strict nécessaire.

### Créer l'image disque

Mon [script][l_script_image] reprend les éléments des précédents scripts et
crée une image disque qu'il sera possible d'écrire sur une carte SD avec un
simple `dd`.

## Personnaliser mon système

Après avoir passé du temps à créer mon système puis l'intaller, il faut
maintenant le personnaliser.

Au niveau de logiciels je garde la majeure partie de ce que j'utilisais
auparavant : Sway pour le gestionnaire de fenêtres, [Zathura][l_zatura] comme
lecteur de document *PDF*, [IMV][l_imv] comme visionneur d'images,
[Ranger][l_ranger] comme gestionnaire de fichiers et [neomutt][l_neomutt] pour
le courriel.

### Le terminal

Élément central de mon installation, j'ai décidé de passer de [kitty][l_kitty] à
[foot][l_foot]. Ce dernier est bien plus léger, natif Wayland et se concentre
sur l'essentiel. Je préfère utiliser Sway pour gérer les onglets et/ou la
mozaïque de terminaux comme sur la capture d'écran ci-dessous.

![Capture d'écran montrant les fenêtres de foot organisées avec sway]({attach}./images/capture_terminaux.png)

### Le navigateur web

Je suis un fan de *Mozilla Firefox* depuis longtemps, mais il faut dire qu'il ne
tourne pas bien sur un matériel aussi limité que le MNT Reform. Je suis donc
passé à [Qutebrowser][l_qutebrowser].

Pour l'utiliser sur le Reform, il faut cependant penser à rajouter comme
variable d'environnement `ETNA_MESA_DEBUG=nir` et d'installer le paquet
`qtwayland5`.

#### les mots de passes

Pour la saisie automatique des mots de passe depuis `password store` il existe
un script disponible [dans le dépôt git][l_qute_pass] qui utilise `dmenu` ou
`rofi`. Comme j'utilise ni l'un ni l'autre, je me suis inspiré de
[term-dmenu][l_term-dmenu] pour d'écrire un script remplaçant `dmenu`. En effet
*Term-Dmenu* utilise [abduco][l_abduco] qui n'est pas disponible dans les
paquets Debian, j'ai préféré utiliser à la place de simple fichiers temporaires.

Mon script est disponible [à cette adresse][l_script_dmenu]

## En conclusion

Au quotidien, le Reform st une machine agréable à utiliser[^n_clavier]. J'ai
décidé de passer sur Debian, d'une part parce que c'est le système conseillé par
MNT, mais aussi parce que la version ARM64 est intégrée au tronc commun de la
distribution[^n_arch_arm].

Je prend non seulement du plaisir à l'utiliser, mais aussi à l'adapter à mes
besoins. J'ai d'ailleurs appris beaucoup : le fonctionnement de l'init,
utilisation Docker, la cross-compilation, `mmdebstrap`..

[^n_clavier]:si on exclu les plaintes de ma femme pour le clavier mécanique un
  tantinet bruillant lorsque je l'utilise lorsqu'elle lit.

[^n_arch_arm]:Archlinux version ARM est par exemple gérée séparément et par une
  tout autre équipe.

## Crédits

 * Image de l'entête: Paul Klingberg CC-BY-SA 4.0
 * Photographies du MNT Reform: MNT Research GmbH CC-BY-SA 4.0

Ces images sont dispnibles sur [ke kit presse][l_presskit] de MNT Research GmbH.

[l_mntmn]:https://www.mntmn.com/
[l_ana_dantas]:https://www.ana-dantas.com/
[l_crowd_supply]:https://www.crowdsupply.com/mnt/reform
[l_git_reform_img]:https://source.mnt.re/reform/reform-system-image/
[l_git_perso_reform]:https://git.epha.se/ephase?tab=&sort=recentupdate&q=Reform2
[l_mnt_uboot]:https://source.mnt.re/reform/reform-boundary-uboot
[l_script_uboot]:https://git.epha.se/ephase/reform2_mkuboot
[l_script_kernel]:https://git.epha.se/ephase/reform2_mkkernel
[l_script_userland]:https://git.epha.se/ephase/reform2_mkuserland
[l_mmdebstrap]:https://gitlab.mister-muffin.de/josch/mmdebstrap/
[l_script_image]:https://git.epha.se/ephase/reform2_mkimage
[l_uboot]:https://source.denx.de/u-boot/u-boot
[l_zatura]:https://pwmt.org/projects/zathura/
[l_imv]:https://github.com/eXeC64/imv
[l_ranger]:https://ranger.github.io/
[l_neomutt]:https://neomutt.org/
[l_kitty]:https://sw.kovidgoyal.net/kitty/
[l_foot]:https://codeberg.org/dnkl/foot
[l_qutebrowser]:https://www.qutebrowser.org/
[l_qute_pass]:https://github.com/qutebrowser/qutebrowser/blob/master/misc/userscripts/qute-pass
[l_term-dmenu]:https://git.sr.ht/~seirdy/term-dmenu
[l_abduco]:https://github.com/martanne/abduco
[l_term-dmenu]:https://git.sr.ht/~seirdy/term-dmenu
[l_script_dmenu]:https://git.epha.se/ephase/sway_config/src/branch/master/bin/dmenu
[l_presskit]:https://source.mnt.re/reform/mnt-reform-press-materials/
