Notre 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