Red Hat : Créer un dépôt local pour ses systèmes Red Hat
Table des matières
Dans le cadre professionnel, il peut être intéressant de mettre en place un repo local pour ses systèmes Red Hat.
Voici un article qui décrit la méthode pour récupérer les dépôts.
Je vais choisir de mettre le miroir local en HTTP.
Dans les prérequis, il est nécessaire d'avoir une connexion à Internet sur la machine qui va servir de repo local, que cette machine soit enregistrée sur le portail Red Hat et dispose d'un serveur Web.
Activer son système RHEL : https://www.linuxtricks.fr/wiki/rhel-activation-du-systeme-et-portail-red-hat
Si vous souhaitez adapter cette méthode à une dérivée de RHEL tel que Alma Linux, vous devrez peut être installer python3-dnf-plugin-modulesync.
Installons rapidement un serveur web :
Je positionnerai dans /var/www/html la copie du repo. Je vous conseille de mettre /var/www/html sur un volume logique à part.
Si on a un parefeu d'actif on ouvre le port 80 :
Ce tuto a été réalisé sur RHEL 8.6. Les noms des dépôts ne sont pas les mêmes suivant les versions de RHEL.
Dans un premier temps, récupérer les noms des dépôts chez Red Hat :
ou pour les dépôts de Red Hat + les tiers :
Ou pour n'afficher que ceux actif sur votre système :
ou pour les dépôts de Red Hat + les tiers :
Ceux qui m'intéressent dans cet exemple sont :
Il est important de repérer l'ID du référentiel, exemple : rhel-8-for-x86_64-baseos-rpms , rhel-8-for-x86_64-appstream-rpms
Pour afficher ce qui va être téléchargé, vous pouvez utiliser (exemple avec rhel-8-for-x86_64-baseos-rpms ) :
Pour télécharger tout cela (dans /var/www/html ) on utilisera :
A répéter sur les dépôts que vous souhaitez gérer en local.
A titre indicatif, en mai 2022 sur mon installation :
Vous noterez que la taille est assez importante car Red hat conserve plusieurs versions de certains de ces paquets (exemple ici avec le kernel), vous permettant à tout moment de "downgrade" :
Pour Appstream, si vous voulez exclure des paquets, voici un exemple :
Si vous avez plein d'exclusions à mettre, mettez 1 paquet par ligne dans un fichier (par exemple /root/exclude.txt ) et utilisez :
Je vous laisse un petit script qui vous permettra de chercher des RPM du dossier ayant des dépendances à GTK3 par exemple. Utile pour compléter le fichier d'exclusions si vous n'utilisez pas d'interface graphique sur vos Red Hat :
Adaptez évidemment le script à vos chemins et vos besoins (gtk3 Qt5 gnome x11 X11 xorg pulseaudio)
Ici, je vais reprendre la configuration avec des dépôts de Red Hat (Base et Appstream).
Créez un fichier .repo dans /etc/yum.repo.d :
Placez-y le contenu avec les infos de votre serveur qui héberge les repos :
Réutilisez bien les clés GPG de Red Hat. Nous avons fait une copie des miroirs donc les clés sont valides.
N'oubliez pas de désactiver les dépôts officiels pour ne conserver que vos dépôts locaux :
Contrôlez avec :
Si on réalise une mise à jour, on constarera que les paquets viennent bien de notre dépôt local :
Il est possible de se créer un script pour automatiser la synchronisation des repos de Red Hat. A exécuter comme bon vous semble (manuellement, cron...)
Je vous propose le mien :
Introduction
Dans le cadre professionnel, il peut être intéressant de mettre en place un repo local pour ses systèmes Red Hat.
Voici un article qui décrit la méthode pour récupérer les dépôts.
Je vais choisir de mettre le miroir local en HTTP.
Prérequis
Dans les prérequis, il est nécessaire d'avoir une connexion à Internet sur la machine qui va servir de repo local, que cette machine soit enregistrée sur le portail Red Hat et dispose d'un serveur Web.
Activer son système RHEL : https://www.linuxtricks.fr/wiki/rhel-activation-du-systeme-et-portail-red-hat
Si vous souhaitez adapter cette méthode à une dérivée de RHEL tel que Alma Linux, vous devrez peut être installer python3-dnf-plugin-modulesync.
Installons rapidement un serveur web :
Code BASH :
dnf install httpd
Code BASH :
systemctl enable --now httpd
Je positionnerai dans /var/www/html la copie du repo. Je vous conseille de mettre /var/www/html sur un volume logique à part.
Si on a un parefeu d'actif on ouvre le port 80 :
Code BASH :
firewall-cmd --add-service=http --permanent
Code BASH :
firewall-cmd --reload
Copie du repo de Redhat
Ce tuto a été réalisé sur RHEL 8.6. Les noms des dépôts ne sont pas les mêmes suivant les versions de RHEL.
Identification des dépôts à cloner
Dans un premier temps, récupérer les noms des dépôts chez Red Hat :
Code BASH :
subscription-manager repos
ou pour les dépôts de Red Hat + les tiers :
Code BASH :
dnf repolist --all
Ou pour n'afficher que ceux actif sur votre système :
Code BASH :
subscription-manager repos --list-enabled
ou pour les dépôts de Red Hat + les tiers :
Code BASH :
dnf repolist
Ceux qui m'intéressent dans cet exemple sont :
Code TEXT :
ID du référentiel : rhel-8-for-x86_64-baseos-rpms Nom du référentiel : Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs) URL du référentiel : https://cdn.redhat.com/content/dist/rhel8/$releasever/x86_64/baseos/os Activé : 1 ID du référentiel : rhel-8-for-x86_64-appstream-rpms Nom du référentiel : Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs) URL du référentiel : https://cdn.redhat.com/content/dist/rhel8/$releasever/x86_64/appstream/os Activé : 1
Il est important de repérer l'ID du référentiel, exemple : rhel-8-for-x86_64-baseos-rpms , rhel-8-for-x86_64-appstream-rpms
Clonage des dépôts
Pour afficher ce qui va être téléchargé, vous pouvez utiliser (exemple avec rhel-8-for-x86_64-baseos-rpms ) :
Code BASH :
dnf reposync --repo=rhel-8-for-x86_64-baseos-rpms -u
Pour télécharger tout cela (dans /var/www/html ) on utilisera :
Code BASH :
dnf reposync --delete -p /var/www/html/ --download-metadata --repo=rhel-8-for-x86_64-baseos-rpms
Code BASH :
dnf reposync --delete -p /var/www/html/ --download-metadata --repo=rhel-8-for-x86_64-appstream-rpms
A répéter sur les dépôts que vous souhaitez gérer en local.
A titre indicatif, en mai 2022 sur mon installation :
Code TEXT :
69G rhel-8-for-x86_64-appstream-rpms 20G rhel-8-for-x86_64-baseos-rpms
Vous noterez que la taille est assez importante car Red hat conserve plusieurs versions de certains de ces paquets (exemple ici avec le kernel), vous permettant à tout moment de "downgrade" :
Code TEXT :
rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-80.el8.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-80.1.2.el8_0.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-80.4.2.el8_0.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-80.11.2.el8_0.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-80.7.1.el8_0.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-80.7.2.el8_0.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-80.11.1.el8_0.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-147.0.2.el8_1.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-147.5.1.el8_1.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-147.8.1.el8_1.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-147.3.1.el8_1.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-147.el8.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-147.0.3.el8_1.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-193.el8.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-193.13.2.el8_2.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-193.14.3.el8_2.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-193.1.2.el8_2.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-193.6.3.el8_2.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-193.19.1.el8_2.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-193.28.1.el8_2.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-240.el8.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-240.15.1.el8_3.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-240.22.1.el8_3.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-240.10.1.el8_3.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-240.1.1.el8_3.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-240.8.1.el8_3.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-305.12.1.el8_4.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-305.el8.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-305.7.1.el8_4.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-305.10.2.el8_4.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-305.3.1.el8_4.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-348.el8.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-305.19.1.el8_4.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-305.17.1.el8_4.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-305.25.1.el8_4.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-348.12.2.el8_5.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-348.2.1.el8_5.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-348.23.1.el8_5.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-348.20.1.el8_5.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-348.7.1.el8_5.x86_64.rpm rhel-8-for-x86_64-baseos-rpms/Packages/k/kernel-4.18.0-372.9.1.el8.x86_64.rpm
Exclusion de paquets
Pour Appstream, si vous voulez exclure des paquets, voici un exemple :
Code BASH :
dnf reposync --delete -p /var/www/html/ --download-metadata --repo=rhel-8-for-x86_64-appstream-rpms --exclude "firefox* thunderbird*"
Si vous avez plein d'exclusions à mettre, mettez 1 paquet par ligne dans un fichier (par exemple /root/exclude.txt ) et utilisez :
Code BASH :
dnf reposync --delete -p /var/www/html/ --download-metadata --repo=rhel-8-for-x86_64-appstream-rpms --exclude "$(cat /root/exclude.txt)"
Je vous laisse un petit script qui vous permettra de chercher des RPM du dossier ayant des dépendances à GTK3 par exemple. Utile pour compléter le fichier d'exclusions si vous n'utilisez pas d'interface graphique sur vos Red Hat :
Code BASH :
for r in $(find /var/www/html/ -name "*rpm") do nb=$(rpm -qR $r | grep -c gtk3) if [[ $nb -gt 0 ]] then echo $r | cut -d"/" -f8 fi done
Adaptez évidemment le script à vos chemins et vos besoins (gtk3 Qt5 gnome x11 X11 xorg pulseaudio)
Configurer les reops sur les clients
Ici, je vais reprendre la configuration avec des dépôts de Red Hat (Base et Appstream).
Créez un fichier .repo dans /etc/yum.repo.d :
Code BASH :
vi /etc/yum.repos.d/linuxtricks-local.repo
Placez-y le contenu avec les infos de votre serveur qui héberge les repos :
Code TEXT :
[LINUXTRICKS_Base] name=LINUXTRICKS_rhel-8-for-x86_64-baseos-rpms metadata_expire=86400 enabled=1 gpgcheck=1 baseurl=http://192.168.21.60/rhel-8-for-x86_64-baseos-rpms gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [LINUXTRICKS_Appstream] name=LINUXTRICKS_rhel-8-for-x86_64-appstream-rpms metadata_expire=86400 enabled=1 gpgcheck=1 baseurl=http://192.168.21.60/rhel-8-for-x86_64-appstream-rpms gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
Réutilisez bien les clés GPG de Red Hat. Nous avons fait une copie des miroirs donc les clés sont valides.
N'oubliez pas de désactiver les dépôts officiels pour ne conserver que vos dépôts locaux :
Code BASH :
subscription-manager repos --disable rhel-8-for-x86_64-baseos-rpms --disable rhel-8-for-x86_64-appstream-rpms
Contrôlez avec :
Code BASH :
dnf repolist
Si on réalise une mise à jour, on constarera que les paquets viennent bien de notre dépôt local :
Code TEXT :
Mise à jour des référentiels de gestion des abonnements. LINUXTRICKS_rhel-8-for-x86_64-baseos-rpms 18 MB/s | 47 MB 00:02 LINUXTRICKS_rhel-8-for-x86_64-appstream-rpms 26 MB/s | 44 MB 00:01 Dernière vérification de l’expiration des métadonnées effectuée il y a 0:00:01 le jeu. 26 mai 2022 21:46:51 CEST. Dépendances résolues. ========================================================================================== Paquet Architecture Version Dépôt Taille ========================================================================================== Mise à jour: gzip x86_64 1.9-13.el8_5 LINUXTRICKS_Base 167 k libipa_hbac x86_64 2.6.2-4.el8_6 LINUXTRICKS_Base 119 k libsss_autofs x86_64 2.6.2-4.el8_6 LINUXTRICKS_Base 121 k libsss_certmap x86_64 2.6.2-4.el8_6 LINUXTRICKS_Base 164 k libsss_idmap x86_64 2.6.2-4.el8_6 LINUXTRICKS_Base 123 k libsss_nss_idmap x86_64 2.6.2-4.el8_6 LINUXTRICKS_Base 130 k libsss_sudo x86_64 2.6.2-4.el8_6 LINUXTRICKS_Base 119 k python3-sssdconfig noarch 2.6.2-4.el8_6 LINUXTRICKS_Base 144 k rsync x86_64 3.1.3-14.el8_6.2 LINUXTRICKS_Base 405 k sos noarch 4.2-19.el8_6 LINUXTRICKS_Base 776 k sssd x86_64 2.6.2-4.el8_6 LINUXTRICKS_Base 110 k sssd-ad x86_64 2.6.2-4.el8_6 LINUXTRICKS_Base 295 k sssd-client x86_64 2.6.2-4.el8_6 LINUXTRICKS_Base 227 k sssd-common x86_64 2.6.2-4.el8_6 LINUXTRICKS_Base 1.6 M sssd-common-pac x86_64 2.6.2-4.el8_6 LINUXTRICKS_Base 182 k sssd-ipa x86_64 2.6.2-4.el8_6 LINUXTRICKS_Base 361 k sssd-kcm x86_64 2.6.2-4.el8_6 LINUXTRICKS_Base 252 k sssd-krb5 x86_64 2.6.2-4.el8_6 LINUXTRICKS_Base 162 k sssd-krb5-common x86_64 2.6.2-4.el8_6 LINUXTRICKS_Base 189 k sssd-ldap x86_64 2.6.2-4.el8_6 LINUXTRICKS_Base 238 k sssd-nfs-idmap x86_64 2.6.2-4.el8_6 LINUXTRICKS_Base 120 k sssd-proxy x86_64 2.6.2-4.el8_6 LINUXTRICKS_Base 151 k Résumé de la transaction =========================================================================================== Mettre à niveau 22 Paquets Taille totale des téléchargements : 6.1 M Voulez-vous continuer ? [o/N] :
Script
Il est possible de se créer un script pour automatiser la synchronisation des repos de Red Hat. A exécuter comme bon vous semble (manuellement, cron...)
Je vous propose le mien :
Code BASH :
#!/usr/bin/bash dnf check-update REPOS=(rhel-8-for-x86_64-baseos-rpms rhel-8-for-x86_64-appstream-rpms) for REPO in ${REPOS[@]} do dnf reposync -p /var/www/html/ --download-metadata --repoid=${REPO} done