Choisir le bon /usr/sbin/sendmail avec puppet

September 2, 2009 by nono
Catégories geekeries - Mots-clés postfix puppet ssmtp

Un peu de contexte

J'utilise linux-vserver sur une poignée de machines qui hébergent chacune quelques dizaines d'instances d'OS. Dans mon installation de base (CentOS), chaque isolateur fait tourner sendmail pour envoyer le mail local vers l'extérieur ; je parle essentiellement des rapports de logwatch et autres cronneries. Avec tous les problèmes habituels en cas de forte charge, ce qui arrive assez facilement dans ce genre de configuration.

Solution : installer un /usr/sbin/sendmail un peu plus léger, en l'occurrence ssmtp, sur toutes les machines sauf les vrais serveurs SMTP, qui eux font tourner Postfix.

La configuration puppet

Un petit extrait de ma config (nettement plus complète mais pas publiable en l'état) :

class mail{
}

class mail::smtp inherits mail {

package { "ssmtp": ensure => installed, }

file { "/etc/ssmtp/ssmtp.conf":
source => [
"puppet:///files/mail/ssmtp.conf.$hostname",
"puppet:///mail/ssmtp.conf",
],
owner => root,
group => root,
mode => 0644,
require => Package["ssmtp"],
}

exec { "setup_mta":
command => "/usr/sbin/update-alternatives --set mta /usr/sbin/sendmail.ssmtp",
subscribe => Package["ssmtp"],
refreshonly => true,
}

}

class mail::postfix inherits mail::smtp {

package { ["postfix", "postfix-pflogsumm"]: ensure => installed }

service { "postfix":
enable => true,
ensure => running,
hasstatus => true,
subscribe => Package["postfix"],
}

Exec["setup_mta"] {
command => "/usr/sbin/update-alternatives --set mta /usr/sbin/sendmail.postfix",
subscribe => Package["postfix"],
}

}

L'intérêt de la chose : toutes les machines sont dans la classe mail::smtp, et Postfix est installé uniquement là où il faut, et surtout une même machine peut cumuler les rôles « serveur SMTP » et « autre chose » et tout se passera comme il faut.

Pour le moment, ça installe ssmtp même sur les machines où il n'est pas nécessaire, on verra à corriger ça dans la prochaine version. :-)