Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.
Commentaire: Migrated to Confluence 5.3

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 :

Bloc de code
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

Avertissement

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.

Bloc de code
languageruby
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

 

Bloc de code
languageruby
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})":}
  }
}
Remarque
titleRemarques
  • 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.