Bonjour,
en ce moment, j'ai besoin de mettre à jour les paramètres BIOS de beaucoup de machines. Heureusement, je peux interagir avec elles à distance grâce à ipmitool.
Dans le journal précédent, j'ai écrit un outil pour facilement configurer des machines à distance pour qu'elles redémarrent dans les paramètres BIOS.
Maintenant, il reste qu'il faut que j'édite les paramètres de toutes ces machines. Toutes ces machines sont identiques mais je ne peux pas changer les paramètres de BIOS à distance par ipmi. Je peux disposer, avec ipmitool, d'une console déportée, mais il me faudrait quand même répéter toujours la même manipulation. Ce n'est pas très satisfaisant.
Le script tmux en un clin d'oeil
En cherchant un peu, j'ai vu qu'on pouvait, avec tmux, scripter la création de plusieurs panneaux (pane) et surtout les synchroniser de telle sorte que les saisies clavier soient soumises en parallèle à tout les fenêtres.
Pour le coup, quelques lignes de script bash. Je suis parti de ce gist comme point de départ puis d'un peu plusieurs liens/forums.
#!/bin/bash
SESSIONNAME="bios"
BASE=$1
NB=$2
# Check if the session has already been created
tmux has-session -t $SESSIONNAME
if [ $? != 0 ]
then
# Create the session
tmux new-session -s $SESSIONNAME -n "BIOS edition" -d
# Access the ipmi console for the first pane
tmux send-keys -t $SESSIONNAME "ipmitool -I lanplus -H ikyle$BASE -U root -P XXXXXX sol activate" C-m
for (( i=1; i<=$(expr $NB - 1); i++ )); do
# Compute the node name
nodenum=$(expr $i + $BASE)
# We split the first pane
tmux split-window -t $SESSIONNAME
# Start the ipmi console
tmux send-keys -t $SESSIONNAME "ipmitool -I lanplus -H ikyle$nodenum -U root -P XXXXXX sol activate" C-m
# Reset the layout to tiled
tmux select-layout -t $SESSIONNAME tiled
done
# Synchronize all the panes so that the keystrokes are sent
# simultaneously to all the panes
tmux setw -t $SESSIONNAME synchronize-panes on
fi
tmux attach -t $SESSIONNAME
qu'on appelle ensuite par
~:$ ./tmux.sh 30 10
qui me lance la console sur 10 machines de Kyle30 à Kyle39. Et je peux alors éditer en parallèle tout les bios.
En détail
La première partie permet de se vérifier si la session existe déjà. Si oui, on s'y reconnecte, sinon on la crée.
SESSIONNAME="bios"
# Check if the session has already been created
tmux has-session -t $SESSIONNAME
if [ $? != 0 ]
then
...
fi
tmux attach -t $SESSIONNAME
Si on crée la session, on la crée en mode détaché, avec un petit titre et son nom $SESSIONNAME
:
# Create the session
tmux new-session -s $SESSIONNAME -n "BIOS edition" -d
Ensuite, je vais créer une succession de division et chaque fois, envoyer ma commande de connexion à la console dans le dernier panneau créé. Comme je vais perdre la référence au premier panneau, j'injecte ma commande de connexion à la console avant de me lancer dans les divisions.
# Access the ipmi console for the first pane
tmux send-keys -t $SESSIONNAME "ipmitool -I lanplus -H ikyle$BASE -U root -P XXXXXX sol activate" C-m
Ici on soumet la commande shell ipmitool qu'on valide avec le retour charriot C-m
(qu'on aurait pu remplacer par Enter
.
Vient ensuite la boucle pour créer tout les panneaux et me connecter aux consoles avec deux nouvelles commandes tmux split-window -t $SESSIONNAME
pour diviser le panneau $SESSIONNAME
et tmux select-layout -t $SESSIONNAME tiled
qui permet de conserver une division régulière horizontale et verticale. Tmux limite le nombre de division verticale ou horizontale. Je peux disposer de plus de consoles avec cette disposition.
# Jalousie
Posté par Sacha Trémoureux (site web personnel) . Évalué à 3.
Je bricole un cluster de mini-PC sans IPMI, après des tonnes de Ctrl-Alt-Suppr et de rebranchements de claviers/souris, je tiens à dire que je crève de jalousie.
[^] # Re: Jalousie
Posté par toremilaC . Évalué à 2.
En fait, on a aussi une collection de machines qui, malheureusement, n'ont pas l'ipmi .
Pour ces machines, on a un boitier KVM (Clavier, Souris, Ecran) et un collègue me disait qu'il existe des KVMs avec accès à distance. Mais je ne sais pas à quel point on peut y accéder en ligne de commande, je n'ai pas encore testé.
Combiné peut être avec des "pdsh reboot" … peut être que ça peut être mieux que rien .
Github: https://github.com/jeremyfix
[^] # Re: Jalousie
Posté par Pinaraf . Évalué à 3.
Sinon sur les machines en UEFI y'a pas mal de choses exposées dans les variables, voire selon l'humeur du fabricant de manière directement exploitable comme dans le menu du firmware.
Exemple sur un thinkpad P14s, où j'ai voulu changer l'attribution de VRAM:
# Hou, sympa !
Posté par Loïs Taulelle ࿋ (site web personnel) . Évalué à 3.
Je fais ça avec cssh (ClusterSSH), et c'est pas toujours pratique (le tunnel X est pas toujours dispo).
Merci.
Proverbe Alien : Sauvez la terre ? Mangez des humains !
[^] # Re: Hou, sympa !
Posté par toremilaC . Évalué à 1.
Ah oui ! Je ne connaissais pas; Merci !
Github: https://github.com/jeremyfix
[^] # Re: Hou, sympa !
Posté par toremilaC . Évalué à 1. Dernière modification le 03 août 2023 à 19:39.
Ah oui, d'ailleurs, en y repensant, ce que je fais n'est pas un ssh distribué sur plusieurs machines puisque je l'utilise ici pour lancer des commandes ipmi sur plusieurs hôtes qui sont dans le BIOS, donc sans serveur ssh.
Github: https://github.com/jeremyfix
[^] # Re: Hou, sympa !
Posté par Loïs Taulelle ࿋ (site web personnel) . Évalué à 2.
Tootafé, quand je passe par cssh, c'est pour un ipmitool local.
Dans le même genre "d'outils de contrôle de masse", il y a ClusterShell (et nodeset).
Proverbe Alien : Sauvez la terre ? Mangez des humains !
[^] # Re: Hou, sympa !
Posté par Sytoka Modon (site web personnel) . Évalué à 3. Dernière modification le 04 août 2023 à 11:41.
J'utilise tssh qui reprend le fichier de config de clusterssh, mais utilise tmux.
Le source https://gricad-gitlab.univ-grenoble-alpes.fr/legi/soft/trokata/tssh
Le manuel https://legi.gricad-pages.univ-grenoble-alpes.fr/soft/trokata/tssh/
# alternative
Posté par Krunch (site web personnel) . Évalué à 4.
J'ai écrit ça il y a quelques temps qui fait un truc similaire pour les gens qui ont pas tmux (comme c'était le cas de tout le monde en 2006) : http://cretonnerre.krunch.be/~krunch/src/tcpmux.c
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
# pour des trucs plus sporadiques...
Posté par Psychofox (Mastodon) . Évalué à 3.
…c'est bien de mapper un raccourci clavier pour synchroniser les panes dans son tmuxrc.
[^] # Re: pour des trucs plus sporadiques...
Posté par Psychofox (Mastodon) . Évalué à 3.
correction, tmux.conf :)
# tmuxinator / synchronize-panes
Posté par Andre Rodier (site web personnel) . Évalué à 2. Dernière modification le 06 août 2023 à 12:32.
Pas mal, même si je préfère utiliser Ansible pour ce genre de choses.
Deux questions, toutefois.
Il y a tmuxinator, qui permet de créer des profils tmux sympas. As-tu pensé à l'utiliser ?
Il y a la fonction synchronize-panes de tmux, du coup, même question ?
[^] # Re: tmuxinator / synchronize-panes
Posté par Psychofox (Mastodon) . Évalué à 3.
Si tu avais lu son script tu te serais rendu compte qu'il s'appuie sur la cette fonction. Son script ajout juste toute la mécanique de création des panes et connection automatiques aux différents noeuds via ipmitool.
[^] # Re: tmuxinator / synchronize-panes
Posté par toremilaC . Évalué à 1.
Par contre, je ne suis pas sûr de voir comment tu le ferai avec ansible ?
Je ne connaissais pas tmuxinator. Sauf erreur de ma part, ça m'obligerait à créer un fichier de config pour chaque session multi-noeuds. Même créé à la volée, ça me paraît inutilement lourd.
synchronize-panes est en effet la fonction que j'utilise pour que les panneaux soient synchronisés;
D'ailleurs, à l'usage, je préfère l'exécuter manuellement après coup. Il arrive en effet parfois que la session IPMI ne s'établisse pas correctement et j'ai besoin de la relancer pour certains nœuds.
Github: https://github.com/jeremyfix
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.