Chez ARN, FAI associatif en Alsace, nos machines physiques ont une BMC c'est-à-dire un contrôleur permettant le management à distance (accès console, reboot, monitoring bas niveau,...) de la bécane (voir
https://en.wikipedia.org/wiki/Intelligent_Platform_Management_Interface#Baseboard_management_controller). Super utile en cas de panne, fausse manip' qui évite de bouger au datacenter où elles sont hébergées.
La BMC de notre HP ProLiant, un truc ILO 2 est perfectible : elle peut continuer à ping mais ne plus présenter son interface web... et devenir ainsi inutile. Le seul moyen est de rebooter totalement (éteindre + couper les arrivées électriques) la machine. Pas cool de découvrir ça quand on a besoin de la BMC car on a foiré une manip'...
On a mis en place un check de monitoring (voir
http://shaarli.guiguishow.info/?wehQjg ) supplémentaire qui vérifie, en plus d'un ping que l'interface web répond toujours. La question est : on ne va quand même pas rebooter intégralement la machine à chaque fois que le check remonte une erreur car, même si l'infra est redondée, ça fait une intervention humaine et on sait tous et toutes que le temps bénévole est rare. Pourtant, ne pas le faire, c'est s'exposer à un adminsys qui oublie que la BMC est HS avant de faire une manip' risquée ainsi qu'à une panne que la BMC permettrait de corriger.
Quelles sont nos options ?
* « impitool mc reset warn » n'est pas reconnue par la BMC, « reset cold » ne fonctionne pas ;
* On peut utiliser la console accessible via SSH pour reboot uniquement la BMC (voir
http://www.thevirtualway.it/2014/05/hp-ilo-how-to-reset-from-command-line/ ) mais vu qu'aucune communication réseau n'est possible au-delà de la couche 4, ça ne marchera pas ;
* HP propose un outil « Standalone Remote Console » (voir
http://h20564.www2.hpe.com/hpsc/swd/public/readIndex?sp4ts.oid=5228286&swLangOid=8&swEnvOid=4053 )... C'est du soft proprio disponible uniquement sous winwin et Red Hat ou en appli mobile (oui, LOL, je fais de la maintenance sérieuse avec mon ordiphone cracra mais bien sûr :- ) donc c'est mort de base. Ensuite, vu qu'aucune communication réseau avec la BMC n'est possible, c'est réglé.
* Johndescs, qui a ses marques sur Dell/iDRAC, me dit qu'il y a un logiciel que tu mets sur le serveur lui-même et qui cause en local à la BMC du nom de racadm et qu'il doit bien y avoir un équivalent HP. Oui, ça existe, ça se nomme hponcfg (voir
http://blog.adminrezo.fr/2015/09/hp-ilo-sous-linux/ ) et on peut rebooter seulement la BMC avec (voir
http://community.hpe.com/t5/ProLiant-Servers-Netservers/Reboot-ILO-with-hponcfg/m-p/6413048#M20349 ).
Le problème, c'est d'installer c'te truc. HP fournit un dépôt apt (ou yum ;) ) :
http://downloads.linux.hpe.com/SDR/repo/mcp/debian/pool/non-free/ mais hponcfg impose l'installation de hp-health qui fout des initscripts et plein de merdes. NO. FUCKING. WAY.
On va extraire les binaires et les libs du package hponcfg :
* wget
http://downloads.linux.hpe.com/SDR/repo/mcp/debian/pool/non-free/hponcfg_4.4.0.8-2._amd64.deb
* dpkg -x hponcfg_4.4.0.8-2._amd64.deb hponcfg
* sudo mv hponcfg/usr/sbin/hponcfg /usr/sbin/
* sudo mv hponcfg/usr/lib/libhponcfg64.so /usr/lib/
* En effectuant un strace, on remarque que le binaire tente de charger une lib libcpqci64.so et qu'il n'échoue pas s'il ne la trouve pas. En fait, elle est un doublon de libhponcfg64.so comme l'indique le message d'erreur de hponcfg quand on n'a aucun des deux libs : « Error Loading the library libcpqci.so or libhponcfg.so ». Si jamais ça peut servir : la libcpqci64.so est fournie avec hp-health.
* On charge le module hpilo (fournit par Debian) dont le rôle est de faire la liaison avec la BMC en créant des fichiers /dev/hpilo/* dans lesquels il suffit de read() et write() pour communiquer avec la BMC : « sudo modprobe hpilo » .
On exécute hponcfg : « sudo hponcfg » ... et là, c'est le drame :
« ERROR: CpqCiCreateFunc() 0 time failed.
Driver Error Code:(1,1h).
Driver Error Message: CPQCIDRV driver is not loaded.
ERROR: A general system error occurred while detecting Management Processor.
ACTION REQUIRED: Check if iLO and iLO driver are up and running. »
Vérifiez bien que vous avez chargé le module hpilo car les messages d'erreur entre "BMC viandée" et "absence du module hpilo" sont quasi identique, seul le message à la fin (« ERROR: [...] » change !
Si vous regardez /var/log/kern.log, vous aurez quelques messages identiques à chaque essai de hponcfg : « [3890626.816095] hpilo 0000:01:04.2: Open could not dequeue a packet ».
Si l'on regarde le code du module hpilo, on se rend compte que ça ne présage rien de bon : « * make sure iLO is really handling requests */ »
On joue quand même le jeu : puisque hpilo crée des fichiers dans lesquels on peut lire et écrire pour causer à la BMC, faisons le :
$ echo "areUinlife?" | sudo tee /dev/hpilo/d0ccb15
Device or resource busy
lol
Et on retrouve le même message dans kern.log...
On pourrait vouloir utiliser d'autres outils userspace pour écrire dans les /dev/hpilo/* mais on se souvient alors que la communication avec la BMC est dans un langage propriétaire et que personne ne semble avoir souhaité passer son temps à reverse ça (et ce n'est pas un reproche). Même python-hpilo utilise une communication réseau ou parse hponcfg.
Après un reboot électrique du HP, il est parfaitement possible d'écrire dans les /dev/hpilo/* et d'utiliser hponcfg :
« sudo hponcfg -get_hostinfo
HP Lights-Out Online Configuration utility
Version 4.4.0 Date 06/13/2014 (c) Hewlett-Packard Company, 2014
Firmware Revision = <censure> Device type = iLO 2 Driver name = hpilo
Host Information:
Server Name: <censure>
Server Number: 000000000 »
Qu'est-ce que tout cela signifie ? Que quand une BMC HP ILO est viandée, il n'y a pas d'autres moyens de la reboot que d'effectuer un reboot électrique complet de toute la machine ! C'est franchement super pratique... :'(
ÉDIT DU 05/06/2017 À 16H10 : en mettant à jour le firmware de la BMC à la dernière version disponible à ce jour (la 2,29 du 7 octobre 2015), l'interface web de la BMC ne se viande plus. Tuto pour la màj :
http://shaarli.guiguishow.info/?bfiXRg . FIN DE L'ÉDIT.