Red Hat et dérivées version SERVEUR

Red Hat : Créer un dépôt local pour ses systèmes Red Hat

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

red-hat-logo



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