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 :
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
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
Pas de messages d'erreur, rien tout s'arrête
Code : Sélectionner tout - Visualiser dans une fenêtre à part ===> Sending report by email![]()
Si quelqu'un a une petite idée, je suis preneur.
Merci![]()
Partager