bonjour, ce petit message pour sensibiliser les utilisateurs non informaticiens de Jeedom sur le fait que le système Debian est comme tous les autres systèmes, il expose des failles de sécurité et ses librairies sont souvent mises à jour pour corriger des bugs.
De mon côté, pour éviter la paranoïa d’aller tout le temps vérifier s’il y a des mises à jour, j’utiliser une petite mécanique très simple que je vous partage ici.
voilà donc une solution parmi tant d’autres sous la forme d’un scénario programmé :
La programmation se fait à votre convenance, j’ai réglé midi 5, ça peut se faire même plusieurs fois par jour pour les parano de la sécu
$output = shell_exec('LC_ALL=C apt-get upgrade -s | grep -P "\d+ upgraded" -m 1 | cut -d " " -f 1');
if ($output > 0) {
message::add("Debian", ($output > 1?'Des':'Une').' mise'($output >1?'s':'').' à jour du système '.($output>1?'sont':'est').' disponibles');
}
une fois ces choses faites, le centre de message de Jeedom sera alimenté d’une rubrique Debian avec les messages sur le nombre de mises à jours disponibles. Après libre à vous de les lancer ou pas
cette dernière étape doit se faire à la main à mon avis pour des raisons de validation et de sécurité.
J’ai ce retour dans le log du scénaro, j’imagine que c’est du fait qu’il n’y a pas de mise à jour :
[2022-08-07 10:03:33][SCENARIO] Start : Scenario lance manuellement.
[2022-08-07 10:03:33][SCENARIO] Exécution du sous-élément de type [action] : code
[2022-08-07 10:03:33][SCENARIO] Exécution d'un bloc code
[2022-08-07 10:03:36][SCENARIO] Call to undefined function mise()
[2022-08-07 10:03:36][SCENARIO] Fin correcte du scénario
if ($output > 0) {
message::add("Debian", ($output > 1?'Des':'Une').' mise'($output >1?'s':'').' à jour du système '.($output>1?'sont':'est').' disponibles');
}
par :
if ($output == 1)
message::add("Debian", 'Une mise à jour du système est disponible');
elseif ($output > 1)
message::add("Debian", 'Des mises à jour du système sont disponibles');
C’est quand même plus lisible, non ?
Et, si je ne m’abuse, il manque un sudo apt update && avant LC_ALL=C apt-get upgrade pour réellement aller chercher les mises à jour et pas juste regarder celle qui n’ont pas encore été appliquées.
Je viens de tester, et en effet quelque chose ne passe pas bien avec la commande en une ligne.
La totalité du code que je propose en remplacement :
message::removeAll("Debian");
shell_exec('sudo apt update');
$output = shell_exec('LC_ALL=C apt-get upgrade -s | grep -P "\d+ upgraded" -m 1 | cut -d " " -f 1');
if ($output == 1)
message::add("Debian", '1 mise à jour du système est disponible');
elseif ($output > 1)
message::add("Debian", $output.' mises à jour du système sont disponibles');
Je viens de tester à l’instant,
Ton bloc code fonctionne parfaitement, pour info je suis avec un Debian 11,
Retour dans le centre de message → 11 mises à jour disponible
Je suis sous debian 10 et cela a fonctionné, 182 mises à jours de dispo !
Je suis sur une Smart, dois je faire ces mises à jour et si oui peux tu m’indiquer comment ?
@Toms, il y a encore un petit effet indésirable : si le nombre de maj n’a pas changé, ça envoie quand même un email (dans le cas de notif par email lors d’un message).
Ce code (plus complexe) devrait faire l'affaire
shell_exec('sudo apt update');
$output = shell_exec('LC_ALL=C apt-get upgrade -s | grep -P "\d+ upgraded" -m 1 | cut -d " " -f 1');
$msg = ($output == 1) ? ('1 mise à jour du système est disponible') : (trim($output).' mises à jour du système sont disponibles');
$notif = message::byPluginLogicalId('Debian', 'updates');
if ($output == 0 && $notif)
$notif[0]->remove();
elseif ($output != 0 && $notif) {
if ($notif[0]->getMessage() != $msg)
$notif[0]->remove();
message::add('Debian', $msg, '', 'updates');
} elseif ($output != 0 && !$notif)
message::add('Debian', $msg, '', 'updates');
(Merci @Mips pour la précision, j’allais le signaler )
Hello,
Bonne idée @neurall pour ce qui sont comme moi ,qui pense une fois la semaine des 8 jours pour regarder si il y a des mises à jour. @Bad toujours à fond
Un grand merci à toi. Ces petits utilitaires génériques partagés sont toujours un super cadeau fait à la communauté.
Et merci également @Bad pour son apport.
Bonjour,
Avec 182 mises à jour disponibles, j’ai plutôt l’impression qu’il y a un souci dans les mises à jour que Jeedom devrait faire.
Sur une oldstable, il n’y a plus que des majs de sécurité…
Je n’y suis pour rien, pas la peine de me répondre ou me demander quoi que ce soit à ce sujet, je ne fait que répéter le message officiel (venant de l’équipe dont je ne fait pas partie) que l’on a déjà vu sur community
S’il y a un doute il faut voir cela avec le support.
Merci pour vos retours et améliorations. J’ai validé sur Debian 10 et 11 avant de poster. le LC_ALL pour info permet d’avoir les messages en anglais sur le système et ainsi s’épargner les tests de syntaxes en français avec les regexs.
j’avais fait une tentative de gestion du pluriel qui peut être traité de manière différente, mais bon, l’esprit est là. Par contre ça ne remontera pas les infos sans avoir fait un apt-get update first. donc on peut améliorer le call en faisant un :
LC_ALL=C apt-get update && ... la suite ou en 2 calls.
Donc voici le script php traitant les remarques précédentes où à priori un copier/coller mal venu m’a fait coller un code intermédiaire et pas le définitif :
$output = shell_exec('LC_ALL=C apt-get upgrade -s | grep -P "\d+ upgraded" -m 1 | cut -d " " -f 1');
if ($output != "") {
message::add("Debian", ($output > 1?$output:'Une').' mise'.($output >1?'s':'').' à jour du système '.($output>1?'sont':'est').' disponible'.($output>1?'s':''));
}
Le script m’a donné 3 mises à jour, que faut-il faire ensuite svp ? je suis sur miniPC…
Peut-on le faire par script, faire un redémarrage automatique ?