Paquets RPMNotre précédent article était consacré à la construction de paquets RPM avec l’outil Mock. Si vous souhaitez installer ces paquets sur un parc de machines, rien ne vous empêche de les copier sur une clé USB pour procéder à une installation locale, à condition de disposer d’un accès physique bien sûr. La solution élégante consiste ici à mettre en place votre propre dépôt de paquets RPM, et c’est ce que nous allons voir en détail aujourd’hui.

Créer l’arborescence locale

Mon point de départ, c’est un répertoire local ~/RPMS dans lequel j’ai rangé en vrac les paquets binaires que j’ai construits avec les paquets source correspondants :

$ ls -1 ~/RPMS
asunder-2.9.7-1.el8.src.rpm
asunder-2.9.7-1.el8.x86_64.rpm
asunder-debuginfo-2.9.7-1.el8.x86_64.rpm
asunder-debugsource-2.9.7-1.el8.x86_64.rpm
owncloud-client-2.10.1-1.el8.src.rpm
owncloud-client-2.10.1-1.el8.x86_64.rpm
owncloud-client-caja-2.10.1-1.el8.x86_64.rpm
owncloud-client-debuginfo-2.10.1-1.el8.x86_64.rpm
owncloud-client-debugsource-2.10.1-1.el8.x86_64.rpm
owncloud-client-devel-2.10.1-1.el8.x86_64.rpm
owncloud-client-dolphin-2.10.1-1.el8.x86_64.rpm
owncloud-client-dolphin-debuginfo-2.10.1-1.el8.x86_64.rpm
owncloud-client-libs-2.10.1-1.el8.x86_64.rpm
owncloud-client-libs-debuginfo-2.10.1-1.el8.x86_64.rpm
owncloud-client-nautilus-2.10.1-1.el8.x86_64.rpm
owncloud-client-nemo-2.10.1-1.el8.x86_64.rpm

Ma station de travail dispose d’un répertoire ~/Public présent par défaut, que je vais utiliser pour mettre en place mon dépôt. Dans un premier temps, je vais créer une arborescence de répertoires pour ranger mes paquets source :

$ mkdir -p ~/Public/rockylinux/8/source/packages
$ mv ~/RPMS/*.src.rpm ~/Public/rockylinux/8/source/packages/

Je procède de même pour les paquets binaires :

$ mkdir -p ~/Public/rockylinux/8/x86_64/packages
$ mv ~/RPMS/*.rpm ~/Public/rockylinux/8/x86_64/packages/

Au total, mon arborescence doit ressembler à quelque chose comme ceci :

$ tree Public/
Public/
└── rockylinux
    └── 8
        ├── source
        │   └── packages
        │       ├── asunder-2.9.7-1.el8.src.rpm
        │       └── owncloud-client-2.10.1-1.el8.src.rpm
        └── x86_64
            └── packages
                ├── asunder-2.9.7-1.el8.x86_64.rpm
                ├── asunder-debuginfo-2.9.7-1.el8.x86_64.rpm
                ├── asunder-debugsource-2.9.7-1.el8.x86_64.rpm
                ├── owncloud-client-2.10.1-1.el8.x86_64.rpm
                ├── owncloud-client-caja-2.10.1-1.el8.x86_64.rpm
                ├── owncloud-client-debuginfo-2.10.1-1.el8.x86_64.rpm
                ├── owncloud-client-debugsource-2.10.1-1.el8.x86_64.rpm
                ├── owncloud-client-devel-2.10.1-1.el8.x86_64.rpm
                ├── owncloud-client-dolphin-2.10.1-1.el8.x86_64.rpm
                ├── owncloud-client-dolphin-debuginfo-2.10.1-1.el8.x86_64.rpm
                ├── owncloud-client-libs-2.10.1-1.el8.x86_64.rpm
                ├── owncloud-client-libs-debuginfo-2.10.1-1.el8.x86_64.rpm
                ├── owncloud-client-nautilus-2.10.1-1.el8.x86_64.rpm
                └── owncloud-client-nemo-2.10.1-1.el8.x86_64.rpm

6 directories, 16 files

Signer les paquets

Cette étape n’est pas vraiment nécessaire à proprement parler, mais elle fait partie des bonnes pratiques recommandées. En signant vos paquets RPM, vous garantissez leur intégrité. Pour ce faire, il faut disposer de votre propre paire de clés GPG :

$ gpg --list-secret-keys
/home/kikinovak/.gnupg/pubring.kbx
----------------------------------
sec   rsa4096 2018-04-09 [SCA]
      9C4708738E37651B867DA97451F1EF3EC56945AE
uid          [  ultime ] Nicolas Kovacs <info@microlinux.fr>
uid          [  ultime ] [jpeg image of size 15912]
ssb   rsa4096 2018-04-09 [E]

Installez l’outil pour signer les paquets RPM :

# dnf install -y rpm-sign

Créez un fichier ~/.rpmmacros et renseignez l’adresse e-mail qui correspond à votre clé GPG :

%_gpg_name "info@microlinux.fr"

Commencez par signer un premier paquet :

$ cd ~/Public/rockylinux/8/source/packages/
$ rpm --addsign asunder-2.9.7-1.el8.src.rpm

Une interface graphique en mode texte s’affiche et vous somme de renseigner votre mot de passe GPG. Partant de là, le mot de passe est gardé en mémoire pendant quelque temps, et vous pouvez allègrement signer tous vos paquets à la louche :

$ rpm --addsign owncloud-client-2.10.1-1.el8.src.rpm
$ cd ../../x86_64/packages/
$ rpm --addsign *.rpm

Puisque les paquets sont signés, le dépôt devra nécessairement fournir votre clé publique sous forme de fichier texte téléchargeable :

$ cd ~/Public/rockylinux
$ gpg --export --armour info@microlinux.fr > RPM-GPG-KEY

Générer les métadonnées

La prochaine étape consiste à générer les métadonnées du dépôt. L’outil createrepo fourni par le paquet createrepo_c nous facilite la tâche ici. Il détecte les paquets RPM présents dans l’arborescence et construit un répertoire repodata correspondant :

$ cd ~/Public/rockylinux/8/x86_64/
$ ls
packages
$ createrepo .
Directory walk started
Directory walk done - 14 packages
Temporary output repo path: ./.repodata/
Preparing sqlite DBs
Pool started (with 5 workers)
Pool finished
$ ls
packages  repodata
$ cd ../source/
$ ls
packages
$ createrepo .
Directory walk started
Directory walk done - 2 packages
Temporary output repo path: ./.repodata/
Preparing sqlite DBs
Pool started (with 5 workers)
Pool finished
$ ls
packages  repodata

Publier le dépôt

Le dépôt est prêt à être publié. Il ne reste plus qu’à l’envoyer vers une machine publique. Pour ce faire, j’ai édité un petit script shell ~/Public/reposync.sh qui me permet de synchroniser rapidement mon arborescence locale et distante en utilisant l’authentification par clé SSH :

#!/bin/bash
#
# reposync.sh
CWD=$(pwd)
USER="microlinux"
HOST="blackbird.microlinux.fr"
LOCALDIR="${CWD}/rockylinux"
REMOTEDIR="/var/www/microlinux-site/html/pub/"
rsync -av --delete ${LOCALDIR} ${USER}@${HOST}:${REMOTEDIR}

Utiliser le dépôt

Mon dépôt de paquets public est prêt. Il ne me reste plus qu’à configurer les hôtes pour qu’ils puissent l’utiliser. Pour ce faire, je crée un fichier /etc/yum.repos.d/microlinux.repo que je renseigne comme ceci :

# /etc/yum.repos.d/microlinux.repo

[microlinux]
name=Microlinux
baseurl=https://www.microlinux.fr/pub/rockylinux/$releasever/$basearch
enabled=1
priority=1
gpgcheck=1
gpgkey=https://www.microlinux.fr/pub/rockylinux/RPM-GPG-KEY

La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 


0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *