Autoriser le dépôt EPEL (pour permettre les mises à jour automatiques) en limitant aux seuls paquets installés (par puppet).
Objectif
Nous voulons faire en sorte que le dépôt EPEL soit activé (enabled) pour permettre les mises à jour système avec la base. Mais, on veut limiter les choses aux seuls paquets installés pour ne pas risquer que les mises à jours incluent des paquets autres.
L'idée est donc d'activer le dépôt et d'ajouter une directive includepkgs
listant l'ensemble des paquets EPEL déjà installés.
Exploration
Une commande qui semble faire ce qu'il faut :
Code Block |
---|
yum --color=never list installed | \grep '@epel' | grep -vP '^\s+' | awk '{print $1}' | sed -re 's/\.[^.]+$//' |
Cette commane liste l'ensemble des paquets installés puis les filtre par rapport au dépôt EPEL, on enlève ensuite les lignes sans nom de paquet et on ne garde que ce nom dont on enlève le .x86_64
ou .noarch
et autre .686
.
Faire de la liste de paquets EPEL un fait facter
Warning |
---|
Le code suivant va produire un plugin qui va être distribué sur toutes les machines clientes puppet. C'est pour cette raison qu'il est nécessaire de limiter l'exécution de la commande aux seules machines de la famille RedHat. |
Code Block |
---|
language | ruby |
---|
title | /etc/modules/yum/lib/facter/paquets_epel.rb |
---|
|
# in file: /etc/puppet/modules/yum/lib/facter/paquets_epel.rb
#
# Fait seulement valable sur les machines de la famille RedHat
Facter.add(:epel_packages) do
setcode do
result =
case Facter.value('osfamily')
when 'RedHat'
%x{yum --color=never list installed | \grep '@epel' | grep -vP '^\s+' | awk '{print $1}' | sed -re 's/\.[^.]+$//' | tr '\n' ' '}.chomp
else
nil
end
end
end |
Exemple de mise en place par puppet
Code Block |
---|
language | ruby |
---|
title | /etc/puppet/modules/yum/manifests/paquets_epel.pp |
---|
|
# paquets_epel.pp - yum
# L'objectif de cette classe est de faire en sorte de trouver
# l'ensemble des paquets EPEL installés sur la machine et les
# positionner dans /etc/yum.repos.d/epel.repo
# Pour cela, il faut aussi un fait associé téléchargé avec
# cette classe.
class yum::paquets_epel {
if (($::operatingsystem =~ /(CentOS|RedHat)/) and ($::operatingsystemrelease =~ /(^5|^6)/)) {
notify {"[debug] paquets EPEL dans facter":}
yumrepo { 'epel':
name => 'epel',
enabled => '1',
includepkgs => $::epel_packages,
descr => 'Extra Packages for Enterprise Linux 6 - $basearch',
mirrorlist => 'https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch',
failovermethod => 'priority',
gpgcheck => '1',
gpgkey => 'file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6',
}
} else {
notify {"[Erreur] OS non supporté (${::operatingsystem} - ${::operatingsystemrelease})":}
}
} |
Note |
---|
|
- Cette méthode est essentiellement un test de fonctionnement. Ce n'est pas très pratique, notamment pour administrer la machine puisqu'il faudra intervenir dans le fichier décrivant le dépôt epel (
/etc/yum.repos.d/epel.repo ) à chaque fois qu'une nouvelle installation doit être faite. - Pas très pratique non plus d'ajouter de nouveaux paquets par l'intermédiaire de puppet puisqu'il faudrait systématiquement ajouter les paquets voulus en plus pour pouvoir utiliser la ressource package.
- Le plugin est mis partout, sur toutes les machines clientes.
|