AccueilFAQStatistiquesDiversContact

Linux : mise à jour de son serveur

Les mises à jour, notamment celles qui concernent la sécurité, doivent être installées le plus vite possible. Une simple tâche cron lançant tous les matins le script ci-dessous peut se charger de vous informer par email d'éventuelles mises à jour disponibles pour votre serveur.

Script :


#!/usr/bin/perl

# adresse où envoyer les alertes :
$admin = 'nom@domaine.tld';

# répertoire temporaire :
$tempdir = '/tmp';
# sendmail :
$mailprog = '/usr/sbin/sendmail';

# débogage :
# - 0 = envoyer les mises à jour par email (défaut)
# - 1 = les enregistrer dans un fichier $tempdir/update.txt
$debug=0;

use MIME::QuotedPrint;

print "Recuperation des mises a jour\n" if $debug;
`apt-get update > /dev/null`;
print "Simulation de l'installation\n" if $debug;
`apt-get -s upgrade > $tempdir/update.lst`;

# Vérifie que le fichier n'est pas vide :
$size = (stat("$tempdir/update.lst"))[7];
if (!$size){
	$MSG="Problème lors de la récuperation des mises à jour!\n";
	print $MSG if $debug;
	goto SENDMAIL;
}

# Récupère les noms des paquets à installer :
open IN,"<$tempdir/update.lst";
while (<IN>) { if (/^Inst\s+([^\s]+)/){ push @UPDATES,$1 } }
close IN;

if (!@UPDATES){
	print "Aucune mise a jour!\n" if $debug;
	exit;
}
$nb=@UPDATES;
print "$nb mises a jour trouvees (cf $tempdir/update.txt)\n" if $debug;

SENDMAIL:
$hostname=`hostname`;
chomp $hostname;

if ($debug){
	open MAIL,">$tempdir/update.txt";
}else{
	open MAIL,"|$mailprog -t -froot\@$hostname";
}
print MAIL "From: root\@$hostname\n";
print MAIL "To: $admin\n";
print MAIL "Subject: Mises a jour pour [$hostname]\n";
print MAIL "MIME-Version: 1.0\n";
print MAIL "Content-Type: text/plain; charset=\"UTF-8\"\n";
print MAIL "Content-Transfer-Encoding: quoted-printable\n\n";
# Erreur?
if ($MSG){goto ENCODE}
$MSG.= "Il y a $nb mise(s) à jour à effectuer sur le serveur [$hostname]:\n\n";
foreach $tmp(@UPDATES){$MSG.="\t-$tmp\n";}
ENCODE:
$MSG.="\n";
$MSG.="Le ".`date "+%d-%m-%Y à %X"`;
print MAIL MIME::QuotedPrint::encode($MSG);
print MAIL "\n";
close(MAIL);

exit;