Je l'ai déjà écrit : nous utilisons Puppet pour configurer des stations de travail. Sur ces machines-là, le CRON qui lance Puppet (pourquoi ?) au démarrage (mot-clé @reboot dans CRON) effectue aussi un dpkg --configure -a afin de réparer les installations cassées (utilisateur qui éteint brutalement la machine en pleine installation / mise à jour…). On a donc dpkg --configure -a && puppet agent --enable && puppet agent -t ; apt -y update && apt -y upgrade. À plusieurs reprises, je constate que puppet n'est pas exécuté et que les mises à jour ne sont pas effectuées.
Pour debug, j'ai fait dans l'habituel : un echo, une commande, un echo, une commande, etc. On ne va pas plus loin que dpkg --configure -a. Rediriger la sortie standard et la sortie d'erreur dans un fichier (1>/tmp/testcron 2>&1) n'apporte pas d'information (si ça avait été le cas, j'aurai reçu un email, car CRON envoie la sortie standard et les erreurs par email). echo $? >/tmp/testcron est plus intéressant : dpkg termine avec le code d'erreur 2. D'après son manuel, il s'agit d'une erreur fatale ou irrécupérable. Rien que ça.
Pour la suite, ça a été un coup de chance. Dans CRON, le PATH n'est pas celui de root, mais « /usr/bin:/bin ». Or, dpkg a besoin de « /usr/sbin:/sbin ». Je ne vois pas trop quels binaires il exécute dedans, mais soit. Ajouter export PATH=$PATH:/sbin:/usr/sbin dans mon script résout mon problème.
Pour les plus attentifs : pourquoi je ne chaîne pas « apt -y upgrade » à « puppet agent -t » avec && ? Lorsqu'il effectue des actions, puppet agent ne termine pas avec le code d'erreur 0 mais 2 (cf son manuel), donc le chaînage en cas de succès (&&) est caduque.
ArubaOS (utilisé dans le produit Aruba Mobility Master v8.6) refuse de démarrer / booter dans une machine virtuelle KVM sur un hyperviseur Proxmox 6 car il manque les instructions CPU SSSE3.
On se dit qu'on va faire un qm set, mais, d'après la doc', les drapeaux activables sont limités, et il n'y a pas SSSE3.
Il y a qu'à choisir un modèle de CPU virtuel qui prend en charge SSSE3. Par défaut, le type de CPU émulé par Proxmox+KVM est kvm64, qui est un Pentium 4 avec des jeux d'instructions retirés.
Dans les propriétés de la VM, onglet « Hardware », « Processors », on peut choisir le modèle de CPU dans la liste déroulante « Type ». SSSE3 étant ancien (2004), n'importe quel modèle de CPU devrait faire l'affaire. Nous avons choisi IvyBridge, fin du problème.
Faut dire qu'il y a quand même
(J't'aime, t'aime, t'aime)
Des mecs qu'ont du soleil
(J't'aime, t'aime, t'aime)
Dans la tête
(J't'aime, t'aime, t'aime)
Sur ma planète
(J't'aime, t'aime, t'aime)
Des mecs qui pensent pas
(J't'aime, t'aime, t'aime)
Que c'est chacun pour soi
(J't'aime, t'aime, t'aime)
Qui se tendent les bras
(J't'aime, t'aime, t'aime)
Sur ma terre à moi
(J't'aime, t'aime, t'aime)
T'as beau pas être beau
(oh oh oh oh)
Monde cinglé
(hé hé hé hé)
J't'ai dans la peau
(oh oh oh oh)
J't'aime, t'aime, t'aime
(source)
Cette chanson m'est revenue en tête ces derniers jours.
On la chantait en colo il y a plus de 15 ans. :)
On a souvent besoin d'autrui pour mener à bien / faire avancer un projet / combat. Parfois, les personnes que l'on sollicite car elles nous semblent être les plus à même d'aider (compétences, détention d'informations, situation / position, affinité, etc.) refusent d'apporter leur concours. Pire, certaines personnes se désistent et retroussent chemin après avoir engagé leur premier coup de papatte. Souvent pour des motifs vaseux comme une peur irrationnelle.
Dans ces moments-là, je me sens déçu par la personne voire trahi, et donc triste. Je fonctionne à l'affinité / l'affect (je choisis une personne pour un projet pour ses compétences, mais aussi parce que je sens bien cette personne-là, à ce moment-là, sur ce projet-là), donc, forcément, ça me fait mal. Surtout quand une personne affirme adhérer à fond à ma démarche et qu'elle m'a bien chauffé au préalable en mode "t'as trop raison, faut faire ça, vas-y mon poulain !".
On peut y voir de la lâcheté, voire de l'hypocrisie (afficher son soutien sans rien produire de concret). Oui, c'est vrai, mais…
Il y a plus de 5 ans maintenant, une amie m'a dit quelque chose. Je constate que le souvenir de ces paroles m'a apaisé à plusieurs reprises ces derniers mois dans des contextes comme celui exposé ci-dessus.
Il y a plein de façon de contribuer à un projet / combat, plein de manière de changer le monde. On n'est pas obligé de poser des bombes ni de saboter les moyens de production. On peut gérer la logistique (autour de la pose de la bombe ou du sabotage). On peut héberger les militants radicaux (comme les Résistants qui faisaient sauter les voies ferrées). On peut diffuser la propagande (afin d'expliquer l'utilisation de bombes / sabots). On peut fournir des informations (car, comme la personne est restée irréprochable, le système lui en filera). On peut mettre en relation des personnes. On peut soutenir moralement l'acteur principal. On peut lui remonter le moral. On peut dévier le coup de grâce que tentera s'asséner le système à l'actrice principale (en restant irréprochable aux yeux du système, une personne sera à même de peser de tout son poids dans la décision). On peut contribuer aux caisses de grève plutôt que d'aller se faire gazer par les flics ou perdre quelques précieux euros sur un salaire précaire. Etc. Bref, il faut accepter que tout le monde n'ait pas le même niveau d'engagement dans un projet / combat… Et ne pas insulter le futur.
Comme dit dans le film Fight Club, c'est à chaque personne de définir son niveau d'engagement. Comme d'hab', forcer les gens amène rien de positif (travail bâclé, dernier coup de main, mauvaise ambiance, etc.). Ma fierté de ces dernières années est de parvenir à commencer à faire la différence entre un refus de ma personne et un refus de l'une de mes idées, et d'accepter un refus de coup de main. Je progresse à petits pas.
Je regardais une émission d'Usul sur les élections européennes 2019. On y trouve des extraits d'un """"débat"""" télévisé et donc des propos tenus par l'extrême-droite. Wauquiez : « […] celui qui vient chez nous n'a plus à cœur d'adopter notre identité, mais de contester notre mode de vie […] » (5 minutes 56). Le Pen : […] ils arrivent aujourd'hui, en France, en réalité pour la changer. Ils veulent y imposer leurs codes, leurs mœurs, leurs traditions, leurs modes de vie […] » (6 minutes 18).
En écoutant ça, je pensais à moi. À moi dans le milieu professionnel.
En tant qu'étranger à un employeur, j'arrive chez un employeur avec mes valeurs et mes envies (curiosité, collaboratif, horizontalité, logiciel libre, transparence des décisions, etc.). J'arrive avec mes pratiques (voir Du « bonjour » en entreprise, Apporter des journaux au boulot ? Yep !, mes pratiques professionnelles, ma façon de m'exprimer, etc.). J'identifie des procédés foireux, j'en corrige, je pousse au changement, à l'adoption de nouvelles pratiques techniques et organisationnelles, etc. Bref, j'arrive avec tout ce qui fait que je suis moi, pour le meilleur et pour le pire.
Évidemment, mes valeurs, mes pratiques, mes initiatives, etc. entrent en conflit avec celles de la structure pour laquelle je travaille et avec celles des collègues (non, ce n'est pas forcément les mêmes, lire l'exemple du couple ci-dessous). Faut-il pour autant me rejeter ? Ne faut-il prendre en compte le positif que j'apporte et rejeter le négatif ? Ne faut-il pas construire le cadre qui permettra d'exprimer ce positif ? Ce cadre est-il une exception au cadre général et jusqu'à où ? Un cadre général n'est-il pas la somme des exceptions aux valeurs et pratiques de chacun acceptée par le groupe ? Ne faut-il me faire adopter une partie de la culture, de l'état d'esprit de l'organisation, du service, tout en me laissant la possibilité d'en dénoncer les carences, les contradictions, etc. ? Bref, faut-il m'intégrer ? Mes trois précédents employeurs n'ont pas fait cet effort. T'es pas exactement comme on veut ? Tu dégages. J'ai donc rien apporté à l'organisation. Peut-être que c'est mieux, peut-être que c'est tant pis.
Évidemment, je n'accepte pas une proposition d'embauche avec l'intention de changer l'organisation que je vais rejoindre. Penser cela est ridicule. Je viens travailler pour bouffer, et comme chaque chose de la vie, autant le faire bien et agréablement, ce qui nécessite quelques adaptations du cadre, car nous sommes tous différents, nous avons tous des pratiques, des aspirations et des besoins différents.
On dit des couples amoureux qu'ils doivent faire 1 + 1 = 3. Chaque personne doit conserver son identité propre et une nouvelle identité apparaît : le couple. Il est la somme de ce que chaque membre y met ou y retire en permanence, volontairement ou sous la contrainte de l'autre, et des contradictions / paradoxe de chaque personne (j'ai tel trait de caractère, mais, pour le couple, je l'estompe ou je le mets en avant, par exemple).
C'est pareil pour une famille, un travail, un pays, etc. : ces identités naissent du consensus mouvant permanent et s'ajoutent aux identités propres des personnes qui les constituent. Évidemment, plus il y a de personnes, plus le consensus sera mou, car il est plus difficile de créer du commun à plusieurs.
Rejeter l'étranger, c'est rejeter la nouveauté (l'apport de l'autre et le fait que cela changera le consensus) au motif que c'était mieux avant (vraiment ?). Préférer la simplicité (pas besoin de se demander si les nouvelles pratiques sont mieux + il y a moins de tensions entre gens homogènes, pas besoin de se mettre d'accord dans la friction). C'est s'inventer un ennemi extérieur qui déforme et menace le monde merveilleux intérieur (comme si ça existait, bonjour les péteux !). C'est la rhétorique classique de la droite, pourtant.
Il est très rare qu'une caisse automatique d'un supermarché me refuse un article. Mais c'est arrivé. « Erreur somme de contrôle, êtes-vous sûr d'avoir déposé le bon article ? ».
La caissière m'explique que mon pack de binouzes est un assemblage de 4 bouteilles qui sont aussi vendues séparément. Donc il contient en réalité 5 codes-barres (un sur chaque bouteille + sur le carton). Il faut scanner le bon (celui sur le carton).
Depuis, je fais attention à masquer le code-barre des bouteilles aux yeux du scanner et tout se passe bien.
Si jamais ce tuyau peut te servir autant qu'à moi… :)
Le Sirocco est un vent originaire du Sahara qui traverse la Méditerranée et l'Est de France. Il dépose du sable et donne une couleur orangée au ciel et à l'atmosphère.
J'ai appris son existence avant-hier et je l'ai vu en pratique hier (06/02/2021). Il était impressionnant cette fois-ci puisqu'il est remonté jusqu'à Strasbourg avec une intensité peu commune ainsi que dans l'Indre. Quelques photos chez Mydjey.
Ce vent m'inspire deux blagues pas drôles :
Vitrine d'un café fin 2020.
Des ours en peluche remplacent les humains par temps de covid.
Bien sentie, cette photo. :)
Une explication détaillée de chaque message d'une poignée de main TLS version 1.3 (protocole de sécurité de l'Internet).
Pour TLS 1.2, c'est par là : https://tls.ulfheim.net/ .
Ça date de fin 2019.
Mignon, les mots de passe des pionniers de BSD / UNIX :
Le mot de passe de Bill Joy (le ouf qui a codé la première implémentation de TCP/IP, sur BSD) n'a pas encore été retrouvé.
Vieux de 2016. Défilé de mode de Chanel avec comme toile de fond les centre de données de l'Internet (enfin l'image qu'ils s'en font parce que le fond de la photo fait quand même très faux).
Sur FRnOG (liste de discussion par emails destinée aux opérateurs téléphoniques et Internet ainsi qu'aux curieux), on peut lire plusieurs témoignages du type "je téléphonais, et, soudainement, mon interlocuteur m'a redit les mêmes choses, au mot près, dans le même ordre". Une variante est d'entendre ce qu'on a soi-même dit quelques minutes auparavant. Certains nomment ça « effet matrix ». Il ne s'agit pas d'espionnage mais d'une fraude nommée Call Stretching. Je résume l'animation LinkedIn :
A priori, ça fait partie d'un groupe de fraudes plus vastes nommées False Answer Supervision (qui consistent à facturer avant l'établissement complet de l'appel ou après la fin de l'appel).
Je suis impressionné par ce que l'humain est capable de mettre en place pour faire chier son prochain tout en encaissant de l'argent de poche… Si ça ce n'est pas un abus du capitalisme (tirer profit d'une action inutile qui ne rend pas service)… À côté de ça, t'as évidemment des vendeurs de solutions à ce problème… Fabuleux…
Quelques notes sur la fermeture administrative de Mix’Art Myrys et l'arrêt de sa subvention annuelle.
J'ai un ordinateur portable Dell Latitude 5580. Depuis quelques jours, appuyer sur F2 ne me permet plus de renommer un fichier dans Caja (l'explorateur de fichiers de Mate) : cela baisse le volume sonore. C'est bien le rôle de F2 quand j'appuie sur la touche « Fn ». Mais là, je n'appuie pas, donc ça devrait générer un « F2 ».
Redémarrer le système est vain (mais dans le doute…). Soulever la touche « Fn » avec un objet fin (au cas où de la crasse bloque la touche) est vain.
Au final, il faut appuyer deux fois sur Fn+Échap (pourquoi deux fois ? Aucune idée). Le pictogramme montre un cadenas nommé « Fn », il s'agit donc du mode verrouillage des touches de fonction. Première fois que je vois ça, mais soit.
Pourquoi ce problème est apparu subitement ? Parce qu'il y a quelques jours, j'ai fait une présentation, donc j'ai appuyé sur Fn+F8 afin de partager mon écran. Cela a bien activé le mode bureau étendu, mais pas le mode clone (même image sur les deux écrans), donc j'ai appuyé partout, et probablement sur Fn+Échap.
Les cours, c'est comme le sexe… c'est mieux en présentiel.
:D
Résumé : si t'utilises un Cisco ASA pour fournir un service de VPN TLS et que des utilisateurs GNU/Linux qui utilisent openconnect rencontrent l'erreur « Server certificate verify failed: signer not found », vérifie que ton ASA envoie bien le certificat x509 intermédiaire en sus de son certificat client / feuille au client lors de l'échange TLS.
Nous utilisons notre Cisco ASA pour fournir un VPN TLS. Il se présente auprès des clients VPN avec un certificat x509. Le nôtre expire dans 24 jours. Donc on le renouvelle. Sauf que ça ne fonctionne pas : impossible de charger ce certificat dans ASDM. Aucun message d'erreur explicite.
Nous achetons nos certificats x509 en passant par un groupement d'organisations. Ce dernier a fait le choix de changer d'autorité de certification. Le certificat x509 de la nouvelle autorité encapsule une clé RSA de 3072 bits (contre 2048 bits pour l'ancienne) et il est signé en utilisant la fonction de condensation SHA-384 (contre SHA-256 pour l'ancien). J'imagine que l'une de ces propriétés ne convient pas à notre Cisco ASA dont le logiciel n'est plus à jour (son remplacement est en cours, mais ça traîne au-delà de nos prévisions pessimistes qui nous ont conduit à ne plus renouveler le support de l'ASA).
Pour dépanner, nous décidons d'utiliser un certificat Let's Encrypt. Car, au niveau technique c'est ce qu'on a toujours eu : RSA 2048 bits + SHA-256. De plus, c'est la manière la plus simple et rapide (pas de procédure d'achat à déclencher, on tire un certificat, on teste et on voit direct le résultat). Notre ASA accepte le certificat. \o/ Victoire ?
Sur un système GNU/Linux, nous conseillons le client VPN openconnect, une implémentation libre pour plusieurs VPN TLS (Cisco, Juniper, etc.) qui s'intègre à GNOME network-manager. Depuis le changement de certificat x509, nos utilisateurs reçoivent une erreur :
$ sudo openconnect vpn.monorganisation.example
POST https://vpn.monorganisation.example/
Connected to 192.0.2.1:443
Négociation SSL avec vpn.monorganisation.example
Server certificate verify failed: signer not found
Certificate from VPN server "vpn.monorganisation.example" failed verification.
Reason: signer not found
To trust this server in future, perhaps add this to your command line:
--servercert pin-sha256:xAj8efLob9rYcspJ8p+2J+K9qTJlgsW1m300Ls+VyCs=
Enter 'oui' to accept, 'non' to abort; anything else to view: oui
Même erreur avec openconnect sur Android. Aucune erreur avec winwin + AnyConnect. Aucune erreur sur Apple (Mac OS, IOS), mais c'est normal : nous préconisons l'utilisation d'IPSec.
Qu'est-ce qui ne va pas ?
$ openssl s_client vpn.monorganisation.example:443
CONNECTED(00000003)
depth=0 CN = vpn.monorganisation.example
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = vpn.monorganisation.example
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:CN = vpn.monorganisation.example
i:C = US, O = Let's Encrypt, CN = R3
---
Hum. Le VPN envoie uniquement son certificat (dit aussi certificat client ou certificat feuille). Celui-ci est signé par un certificat intermédiaire (dans le cas de Let's Encrypt, et jusqu'en 2025, il se nomme « R3 ») qui n'est pas communiqué par le serveur. Or, un certificat intermédiaire est jamais livré dans un catalogue / magasin des autorités de certification, car ce n'est pas son rôle. Donc, la bibliothèque TLS (OpenSSL pour openssl s_client et GnuTLS pour openconnect) échoue sur la vérification du certificat feuille.
Pour que le VPN ASA envoie aussi le certificat intermédiaire, il suffit d'ajouter ce dernier dans ASDM => « Configuration » => « Device Management » => « Certificate Management => CA Certificates ».
Plus d'erreur. \o/
$ openssl s_client vpn.monorganisation.example:443
CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = vpn.monorganisation.example
verify return:1
---
Certificate chain
0 s:CN = vpn.monorganisation.example
i:C = US, O = Let's Encrypt, CN = R3
1 s:C = US, O = Let's Encrypt, CN = R3
i:O = Digital Signature Trust Co., CN = DST Root CA X3
Pourquoi ça fonctionnait avec AnyConnect ? Peut-être que celui-ci désactive la vérification du pair lors de l'échange TLS ou qu'il est moins stricte, ce qui est une très mauvaise idée dans tous les cas.
Résumé : Let's Encrypt a remplacé son vieux certificat intermédiaire nommé « Let's Encrypt Authority X3 » par un nouveau nommé « R3 ». Si tu utilises une implémentation minimaliste d'ACME (genre acme-tiny) qui récupère uniquement le certificat de ton site web auprès de Let's Encrypt, il faudra changer toi-même le certificat intermédiaire dans tes serveurs TLS, sans quoi une partie des clients web ne pourra plus accéder à ton service.
Depuis plusieurs semaines, plusieurs flux RSS sont en erreur « 60 SSL certificate problem: unable to get local issuer certificate » dans mon agrégateur RSS.
Pourtant, j'accède sans problèmes à ces sites web avec Firefox.
J'essaye d'accéder aux sites web depuis le serveur qui héberge mon lecteur de flux RSS :
$ wget https://exegetes.eu.org
--2021-01-18 22:30:45-- https://exegetes.eu.org/
Résolution de exegetes.eu.org (exegetes.eu.org)… 2001:910:800::82, 80.67.169.82
Connexion à exegetes.eu.org (exegetes.eu.org)|2001:910:800::82|:443… connecté.
Erreur : le certificat de « exegetes.eu.org » n’est pas de confiance.
Erreur: The certificate of « exegetes.eu.org » doesn't have a known issuer.
Même problème avec cURL :
$ curl https://exegetes.eu.org
curl: (60) SSL certificate problem: unable to get local issuer certificate
Au moins, le problème ne dépend pas d'une bibliothèque TLS en particulier car wget utilise GnuTLS alors que curl utilise OpenSSL.
Ce n'est plus une erreur relative à PHP comme à l'époque où mon chroot Apache httpd empêchait PHP d'utiliser le magasin des autorités de certification du système. Chroot que j'ai viré depuis afin d'activer HTTP/2.
Sur mon ordinateur de bureau, wget génère la même erreur.
Tous les sites web concernés utilisent Let's Encrypt malgré le danger que constitue sa force de frappe.
Creusons un peu :
$ openssl s_client -connect exegetes.eu.org:443
CONNECTED(00000003)
depth=0 CN = exegetes.eu.org
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = exegetes.eu.org
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:CN = exegetes.eu.org
i:C = US, O = Let's Encrypt, CN = R3
1 s:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
i:O = Digital Signature Trust Co., CN = DST Root CA X3
$ openssl s_client -connect jonathan.michalon.eu:443
CONNECTED(00000003)
depth=0 CN = jonathan.michalon.eu
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = jonathan.michalon.eu
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:CN = jonathan.michalon.eu
i:C = US, O = Let's Encrypt, CN = R3
1 s:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
i:O = Digital Signature Trust Co., CN = DST Root CA X3
$ openssl s_client -connect www.codelyoko.fr:443
CONNECTED(00000003)
depth=0 CN = www.codelyoko.fr
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = www.codelyoko.fr
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:CN = www.codelyoko.fr
i:C = US, O = Let's Encrypt, CN = R3
Le testeur TLS de SSLLabs affiche « This server's certificate chain is incomplete […] Chain issues Incomplete, Extra certs ».
Les deux premiers cas sont identiques : le serveur présente le certificat x509 du site web (dit certificat feuille), signé par le certificat intermédiaire R3 de Let's Encrypt ainsi que le certificat X3 de Let's Encrypt signé par IdenTrust (DST). La chaîne de certification est cassée : site web - R3 !- X3 - DST. Comme le certificat intermédiaire R3 n'est pas disponible dans le magasin de certificats de Debian (et c'est normal, aucun certificat intermédiaire l'est), c'est game over.
Le dernier cas est encore plus simple : le certificat intermédiaire n'est pas communiqué par le serveur, seul le certificat feuille l'est. Comme R3 n'est pas présent dans le magasin des certificats des autorités de certification de Debian, c'est l'échec.
Que s'est-il passé ? Depuis le 20 décembre 2020, Let's Encrypt signe les nouveaux certificats de ses """"clients"""" avec son nouveau certificat intermédiaire nommé R3. Ce dernier remplace Let's Encrypt Authority X3 qui expire en 2021 (il a une durée de vie de 5 ans).
Tu vas me dire "ben oui mais l'API de Let's Encrypt retourne, en plus du certificat client, le nouveau certificat intermédiaire (R3), donc tout devrait fonctionner". Oui, sauf si un site web utilise un outil minimaliste de renouvellement automatique des certificats. Exemple : jonathan.michalon.eu utilise acme-tiny qui récupère uniquement le certificat client, charge à l'utilisateur de configurer un certificat intermédiaire indépendemment.
Pourquoi cela fonctionne avec Firefox et Chromium, alors ? Quand tu accèdes à un site web avec une chaîne valide, Firefox enregistre le certificat R3 et, du coup, est capable de le resortir pour compléter le maillon manquant quand un site web a une chaîne incomplète. Cela se fait sans que le certificat R3 apparaisse forcément dans le catalogue des certificats… Pour valider cette hypothèse, il suffit d'utiliser un vieux profil qui a jamais connu R3 et d'aller directement sur un site web défectueux : une erreur s'affiche. En allant sur un site web qui utilise R3 dans une chaîne complète puis en retournant sur le site web défectueux, plus aucune erreur s'affiche.
Sur l'iDRAC d'un serveur Dell, je veux récupérer l'état d'un composant en utilisant le protocole SNMP. Dell complète les bases de données standardisées interrogeables en SNMP avec la sienne (ce qu'on nomme un module MIB, l'ensemble des bases de données agrégées sous forme arborescente est nommée MIB).
Première question : comment connaître l'OID (l'identifiant unique) d'un objet défini dans un module MIB afin de le consulter en SNMP ?
Généralement, chercher le nom de l'objet sur un moteur de recherche web suffit. Dans mon cas, chercher « systemStateIDSDMCardDeviceStatusList » conduit à des résultats fort bien présentés : oidref et observium.org. L'OID est 1.3.6.1.4.1.674.10892.5.4.200.10.1.61
Mais si l'on veut trouver par nous-même, au cas où une MIB ne soit pas aussi bien indexée ?
Le début d'un OID est normalisé : .1.3.6.1. .1.3.6.1.2.1 pour la très populaire MIB-II. .1.3.6.1.4.1 pour les sociétés commerciales privées. Mais la suite dépend de Dell (dans mon cas).
On peut télécharger la MIB et l'étudier avec un éditeur de texte. On cherche notre objet par son nom (« systemStateIDSDMCardDeviceStatusList » dans mon cas). On lit « ::= { systemStateTableEntry 61 } ». Cet objet a donc l'ID 61 relativement à l'objet « systemStateTableEntry ». On remonte l'arborescence : l'objet « systemStateTableEntry » a l'ID 1 relativement à l'objet « systemStateTable » qui, lui-même, a l'ID 10 relativement à l'objet « systemStateGroup » qui a l'ID 1.3.6.1.4.1.674.10892.5.4.200. L'OID absolu que nous cherchons est donc 1.3.6.1.4.1.674.10892.5.4.200 + .10.1.61 + .1 soit 1.3.6.1.4.1.674.10892.5.4.200.10.1.61.1. Pourquoi j'ai ajouté un « 1 » à la fin ? Car c'est comme ça que l'on consulte la case d'un tableau en SNMP.
Et si l'on n'a pas envie de s'embêter avec ce que je viens de raconter ? On utilise le logiciel snmptranslate de la trousse à outils net-snmp (nom du paquet Debian : snmp). Tout est dans la documentation, mais je vais répéter :
snmptranslate -Dinit_mib .1.3 2>&1 | grep MIBDIR. Sous Debian, il y a des chemins dans /usr/share (si l'on dépose une MIB dedans, le dossier ne sera pas supprimé quand on supprimera le paquet snmp…) et ~/.snmp/mibs ;mkdir -p ~/.snmp/mibs ;snmp-mibs-downloader car tous les modules MIB ne sont pas libres. Les MIBs seront téléchargées durant l'installation du paquet ;snmptranslate -IR -On IDRAC-MIB-SMIv2:systemStateIDSDMCardDeviceStatusList.
Deuxième question : comment charger / ajouter une MIB à snmpget / snmpwalk afin d'utiliser le nom d'un objet pour y accéder ?
Nous venons de faire cela pour répondre à la question précédente.
Nous pouvons récupérer la valeur d'un objet à partir de son nom : snmpget -v2c -c <COMMUNAUTÉ> <nom_DNS_iDRAC> IDRAC-MIB-SMIv2:systemStateIDSDMCardDeviceStatusList.1 (là non plus, on n'oublie pas le « .1 » final afin d'entrer dans la case du tableau).
On peut toujours récupérer la valeur de l'objet à partir de l'OID qu'on a trouvé ci-dessus : snmpget -v2c -c <COMMUNAUTÉ> <nom_DNS_iDRAC> 1.3.6.1.4.1.674.10892.5.4.200.10.1.61.1.
Et si l'on veut que snmpget / snmpwalk résolvent le nom d'un OID pour nous ? snmpwalk -m +IDRAC-MIB-SMIv2 -v2c -c <COMMUNAUTÉ> <nom_DNS_iDRAC> 1.3.6.1.4.1.674.10892.5.4.200.10.1. Et si préciser « -m +IDRAC-MIB-SMIv2 » est trop pénible, tu remplaces la ligne « mibs : » par « mibs +IDRAC-MIB-SMIv2 » dans /etc/snmp/snmp.conf.
Je suis passé de la version 10.4 à la 10.7 de Debian GNU/Linux. Depuis, Chromium ne fonctionne plus : l'affichage se fige totalement quelques secondes après son démarrage.
Solution ? Désactiver l'accélération graphique.
Comment faire ?
chromium --disable-gpu ;Résumé : présentation rapide de Dell IDSDM (système d'exploitation d'un serveur sur deux cartes SD redondées), du processus de résolution d'une banale panne de carte SD, des manières de superviser l'état des cartes SD et du module IDSDM en ligne de commande et à distance, et des limites de la techno (faux positif, remplacer une carte SD nécessite d'éteindre le serveur et de redémarrer iDRAC, logistique pour remplacer régulièrement les cartes SD, peu de documentation). Une petite anecdote mettant en exergue la démesure de la logistique de Dell sera narrée.
Notre supervision râle : l'un de nos hyperviseurs ne remonte plus d'info. Ping OK. Impossible d'établir une connexion SSH. Les machines virtuelles hébergées dessus fonctionnent toujours sans problème. Impossible de piloter les machines virtuelles (allumer/éteindre, console, migrer sur un autre nœud du cluster) depuis les autres hyperviseurs du même cluster.
Dans la salle serveurs (mais la console iDRAC aurait affiché la même chose), l'écran affiche une palanquée d'erreurs d'écriture puis de lecture sur dm-0 (probablement le device virtuel associé au conteneur LVM (LV) qui contient la racine du système).
iDRAC confirme : les deux cartes SD sont mortes. La première est morte le 13/12/2020, l'autre le 08/01/2021.
Ha, oui, on utilise la techno Dell Internal Dual SD Module (IDSDM). Un module (une carte électronique fille branchée sur la carte mère du serveur, voir la page 2 du whitepaper de Dell), deux cartes SD, les écritures se font sur les deux cartes SD et les lectures sur celle du premier slot tant qu'elle est opérationnelle (comme du RAID 1), et l'on installe un système d'exploitation dessus. Le système voit les cartes SD comme un disque dur SATA (/dev/sdX).
L'intérêt ? Séparer le système d'exploitation des VMs sans pour autant immobiliser 2 slots pour disques dur (afin de faire un RAID 1 pour le système), ce qui réduit l'espace de stockage disponible pour les machines virtuelles. Il y a 10 slots sur un serveur 1U donc 10 disques durs maximum dont 1 est perdu si l'on fait du RAID 5 (c'est comme ça que ça fonctionne) et encore 1 si l'on veut du hot spare (disque de secours qui remplacera, sans intervention humaine, un disque défectueux), alors si l'on retire encore deux disques pour le système… Cependant, deux PV LVM sur une même grappe RAID produiraient environ le même résultat de séparation sans immobiliser deux slots.
Évidemment, et c'est un tort, nous avons mis en place aucune optimisation afin de limiter les écritures sur les cartes SD : ni log2ram (qui stocke les journaux en RAM et les écrit, par paquet, à intervalle régulier sur le support de stockage), ni option de montage « noatime », rien.
On vérifie la santé des deux autres hyperviseurs du même cluster. Ho, une carte SD sur les deux est morte dans un autre hyperviseur depuis le 28/12/2020. Le troisième hyperviseur est sain.
Appel téléphonique au support Dell. On nous dit que beaucoup de clients installent un système sur IDSDM (en même temps, quel vendeur dira que son produit est inutilisé ?!). Il y a rien d'anormal, qu'on nous dit, la durée de vie des cartes SD est de 2 ans et demi / 3 ans (pour info, nos serveurs sont en prod' depuis un peu moins de 2 ans). Lourde insistance du support pour remplacer les modules en sus des cartes SD… Soit.
Nous sommes vendredi midi. Nous sommes fermés le samedi. Nous avons contracté un support ProSupport H+4. Que va faire Dell ? Attendre que le manager revienne de la cafèt’ (sisi :D), trouver 2 modules et 3 cartes SD dans l'entrepôt situé dans la grande ville la plus proche de chez nous et une 4e carte SD dans l'entrepôt d'une autre grande ville. Deux camions de livraison sont partis de deux villes différentes pour nous livrer 4 cartes SD et deux bouts d'électronique en moins d'une après-midi ! Livraison à 18 h et 20 h. :O
Deux sentiments m'ont accompagné tout cet après-midi-là.
Bon ben on part sur la réinstallation de Proxmox sur notre premier hyperviseur.
Avant ça, on sort les cartes SD et on les tripote entre nos doigts comme la puce d'une carte bancaire muette. Dans le doute…
On tente de démarrer sur l'une des cartes SD : échec. Avec un autre ordinateur, on parvient à ouvrir le VG LVM mais impossible de monter le système de fichiers ext4 : impossible de lire le superblock, input/output error.
En revanche, la deuxième carte SD fonctionne : le serveur démarre ! Tout fonctionne comme avant. Pas d'erreur apparente.
On installe une carte SD neuve dans le deuxième slot. Durant la phase POST du BIOS (tu sais, quand il vérifie la RAM, quand il initialise le contrôleur RAID, etc.), il nous est demandé « SD Card x has been replaced and needs to be rebuilt. […] Press
Sur notre deuxième hyperviseur, il nous suffit de remplacer la SD défectueuse par une neuve et de valider la reconstruction lors du démarrage. Reconstruction qui, elle aussi, s'effectuera en tâche de fond.
On notera que nous avons fait le choix de ne pas remplacer les modules, car nous ne les pensons pas défectueux.
Nous avons également fait le choix de ne pas remplacer les cartes SD qui semblent être fonctionnelles afin que toutes les cartes SD ne tombent pas en panne en même temps.
Sur le premier hyperviseur, j'espère que nous n'avons pas recopié les erreurs d'une des vieilles cartes SD sur les neuves. Pour l'instant : RÀS.
Comment savoir quand la reconstruction d'une carte SD est terminée et que nous sommes revenus à l'état nominal ? D'après les documentations que l'on trouve sur le web, cela se passe dans le BIOS ou dans l'iDRAC, mais, pour que ce dernier mette à jour l'état des cartes SD, il faut le redémarrer… … …
Après 30 minutes, nous redémarrons iDRAC, et, en effet, tous les indicateurs présentés sont repassés au vert. Je parle du tableau de bord et de la section « Média amovible » dans le menu « Système » puis « Présentation générale » dans laquelle les items « SD » (ou « VFLASH SD »), « IDSDM SD1 » et « IDSDM SD2 » doivent être en « Status » OK et l'« État de la redondance » doit avoir la valeur « Total ». Note : sur l'item « SD » (ou « VFLASH SD »), la « Condition de la connexion » est toujours définie à « Absent », même sur un serveur tout neuf.
Les cartes SD sont des consommables qu'il faut changer régulièrement. Cela implique de les superviser. Dans notre supervision actuelle (on ne va pas aller manuellement consulter des interfaces web supplémentaires), ce qui implique des outils CLI (exit, donc, le lourdingue Dell OpenManage). Cette supervision s'effectue depuis iDRAC. C'est un peu chiant à trouver :
megacli, que l'on utilise déjà pour superviser notre RAID, est inutile ;En plus d'être toujours aussi pénible à installer, RACADM propose rien de spécifique. On peut toutefois remonter l'info si l'on cherche en analysant les journaux ;
Si l'on active IPMI dans iDRAC (avec la version 9, cela se passe dans le menu « Paramètres de l'iDRAC » => « Connectivité » => « Paramètres IPMI » => « Activer IPMI sur le LAN ») :
ipmitool -I lanplus -H <nom_DNS_iDRAC> -U <identifiant> sensor get SD retourne rien d'exploitable (idem pour les capteurs « SD1 » et « SD2 ») ;ipmitool -v -I lanplus -H <nom_DNS_iDRAC> -U <identifiant> sdr list | grep -A 5 ': SD' retourne un énigmatique « sensor reading : 0h » dont on ne trouve pas d'explication dans un quelconque document Dell, et comme il s'agit, a priori, d'une valeur spécifique à un constructeur, une extrapolation depuis d'autres documentations est risquée ;ipmitool -I lanplus -H <nom_DNS_iDRAC> -U <identifiant> sensor | grep '^SD' affiche les valeurs « 0x0180 » (pour « SD1 » et « SD2 ») et « 0x0080 » (pour « SD ») dont quelques sites web obscurs nous assurent que ça veut dire que tout est OK… Cela se confirme vaguement en regardant l'état d'autres capteurs, mais rien est plus trompeur que l'auto-persuasion ;snmpget -v2c -c public <nom_DNS_iDRAC> .1.3.6.1.4.1.674.10892.5.4.200.10.1.61.1 retourne une valeur qui est documentée dans la MIB iDRAC-SMIv2 téléchargeable sur le site web de Dell (03 03 = les deux cartes SD sont OK, le premier octet étant la première carte SD, l'autre la deuxième). L'état du module IDSDM lui-même est disponible à l'OID .1.3.6.1.4.1.674.10892.5.4.200.10.1.59.1 (même codes retour). SNMP me semble être la moins mauvaise solution pour superviser IDSDM.