Bonjour

J'ai développé un script perl qui permet de garder les sources de son système FreeBSD à jour en informant par courrier électronique son état d'avancement.

Il fonctionnait, il y a deux semaines et hier, j'ai réinstallé mon portable sous FreeBSD et cela ne passe plus. J'ai installé les paquetages Perl, p5-MIME-Type et nbsmtp.

Voici le script en question :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/usr/bin/perl -w
 
## DEBUT
 
# Clin d'oeil : 
 
# Prérequis : FreeBSD 6.2, perl-5.8.8, p5-MIME-Lite-3.01 et fastest_cvsup-0.2.9_5
 
# Fonction : Ce script permet de garder les sources de votre système FreeBSD à jour 
# en vous informant par courrier électronique de son état d'avancement. 
 
# Complément : Il vous faut installer un MTA pour envoyer les rapports par courrier
# électronique. Vous pouvez bien entendu utiliser Sendmail ou Postfix. Afin d'éviter
# d'installer ces deux poids lourds, utilisez plutôt ssmtp ou bien nbsmtp. Ce sont 
# de petits utilitaires supportant tous les deux SSL et permettent l'envoi du courrier. 
# Ils sont disponibles dans le catalogue de logiciels portés de FreeBSD. 
#
# Voici la procédure d'installation via les ports :
#
# ssmtp :
# prompt# make -C /usr/ports/mail/ssmtp/ install clean
#
# nbsmtp :
# prompt# make -C /usr/ports/mail/nbsmtp/ install clean
#
 
# Variables à modifier :
#
# $email="vous\@domaine\.tld";
# $top="Bonjour votre prénom";
#
 
use strict;
use warnings;
use MIME::Lite; 
use POSIX qw(strftime);
 
# Variables
 
# Générale
my $datetime=strftime "(%d/%m/%y-%H:%M:%S)", localtime;
 
# Fichiers de configuration
my $standard_supfile="/etc/standard-supfile";
my $standard_supfile_example="/usr/share/examples/cvsup/standard-supfile";
 
# Programme fastest_cvsup
my $fastest_cvsup_exec="/usr/local/bin/fastest_cvsup";
my $countrie="us";
my $server="";
 
# Rapport
my $email="mon adresse";
my $top="Bonjour Olivier,\n\n";
my $subject="";
my $data="";
my $foot="\n\nMerci.";
 
# Fonctions
sub send_report
{
	# Vérifie le sujet du message avant l'envoi
	unless ($_[0])
	{
		$subject="[FreeBSD][Source]-ErrorUpdate-$datetime";
	} else {
		$subject="[FreeBSD][Source]-SuccessUpdate-$datetime";
	}
	# Envoi du rapport par email
	print "===> Sending report by email\n";
	my $report = new MIME::Lite
	From       =>"$email",
	To         =>"$email",
        Subject    =>"$subject",
	Type       =>"TEXT",
	Data       =>"$top$data$foot";
	$report -> send;
}
 
sub select_new_server
{
	# Remplace le serveur par défaut par le nouveau
	system('/usr/bin/sed \'s/*default host=.*/*default host='.$server.'/\' '.$standard_supfile.' > '.$standard_supfile.'.copy');
	system("mv $standard_supfile.copy $standard_supfile");
}
 
sub test_fast_server
{
	# Teste les serveurs les plus rapides
	print "===> Teste tous les serveurs $countrie\n";
	$server=`$fastest_cvsup_exec -c $countrie | grep 1st | awk {'print \$3'}`;
	if ($?)
	{
		$data="Les tests de performance sur les serveurs $countrie ont échoué.\nVérifier votre connection réseau ou Internet.";
		send_report(0);
		exit;
	}
	chomp $server;
 
        # Utilisation du nouveau serveur
	print "Utilisation du serveur : $server\n";
 
	# Remplace le serveur par défaut par le nouveau
	select_new_server();
}
 
# Départ
print "---------------------------------------\n";
print "Mise à jour des sources de FreeBSD\n";
print "---------------------------------------\n";
 
# Vérifie les fichiers de configuration
print "===> Vérifie les fichiers de configuration\n";
unless (-e $standard_supfile)
{
	print "Création des fichiers de configuration\n";
	if (system("/bin/cp $standard_supfile_example /etc/"))
	{
		$data="Le fichier squelette $standard_supfile_example est introuvable.";
		send_report(0);
		exit;
	}
} else {
	print "Fichiers de configuration ...OK\n";
}
 
# Teste les serveurs les plus rapides
test_fast_server();
 
# Téléchargement des sources
print "===> Téléchargement des sources\n";
if (system("/usr/bin/csup $standard_supfile"))
{
	$data="Le téléchargement des sources a échoué.\nVérifier votre connection réseau ou Internet.";
	send_report(0);
	exit;
} else {
	# Les sources sont à jour.
	$data="Les sources sont à jour.\nVous pouvez recompiler votre système.";
	send_report(1);
}
 
## FIN
A l'exécution du script, du moins à l'instant ou le rapport doit être envoyé, cela affiche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
===> Sending report by email
Pas de messages d'erreur, rien tout s'arrête

Si quelqu'un a une petite idée, je suis preneur.

Merci