Tag Archives: unix

Une console cluster avec tmux

Tous ceux qui ont déjà travaillé avec un cluster le savent bien. Il faut avec deux machines “strictement” identiques.

La meilleure solution est d’avoir une “console cluster”. Je n’ai jamais trouvé de solution réellement efficace et pratique à utiliser (la plus pratique celle de SUN).

Bref. En parallèle, je voulais regarder ce que Tmux avait dans le ventre pour remplacer Screen qui a fait son temps.

Et en pleine lecture de tmux: Productive Mouse-Free Development, je me rends compte qu’il est surement possible d’en faire une super console pour cluster.

Fichier “.tmux-clust.conf”

new-session -d -s clust -n clust1 'ssh clust-root1'
split-window -v -t clust 'ssh clust-root2'
set -g status-right ""
source-file ~/.tmux-clust-bc.conf

Fichier “.tmux-clust-bc.conf”

set-window-option synchronize-panes on
bind r source-file ~/.tmux-clust-nobc.conf \; display "Stop broadcast"
set -g status-bg green
set -g pane-active-border-fg green
unbind u
unbind i
unbind o
unbind p

bind u set-window-option synchronize-panes off \; send-keys -t clust:0.0 '1' \; send-keys -t clust:0.1 '2' \; set-window-option synchronize-panes on
bind i set-window-option synchronize-panes off \; send-keys -t clust:0.0 '2' \; send-keys -t clust:0.1 '1' \; set-window-option synchronize-panes on
bind o set-window-option synchronize-panes off \; send-keys -t clust:0.0 '192.168.21.' \; send-keys -t clust:0.1 '192.168.22.' \; set-window-option synchronize-panes on
bind p set-window-option synchronize-panes off \; send-keys -t clust:0.0 '192.168.22.' \; send-keys -t clust:0.1 '192.168.21.' \; set-window-option synchronize-panes on

Fichier “.tmux-clust-nobc.conf”

set-window-option synchronize-panes off
bind r source-file ~/.tmux-clust-bc.conf \; display "Now with broadcast"
set -g status-bg blue
set -g pane-active-border-fg blue

unbind u
unbind i
unbind o
unbind p
bind u send-keys -t clust:0.0 '1' \; send-keys -t clust:0.1 '2'
bind i send-keys -t clust:0.0 '2' \; send-keys -t clust:0.1 '1'
bind o send-keys -t clust:0.0 '192.168.21.' \; send-keys -t clust:0.1 '192.168.22.'
bind p send-keys -t clust:0.0 '192.168.22.' \; send-keys -t clust:0.1 '192.168.21.'

Et pour finir le fichier “tmux-clust”

#!/bin/bash
tmux -f ~/.tmux-clust.conf attach

Du coup, quand je me connecte avec le script “tmux-clust”, il lance une connexion vers clust-root1 et clust-root2 chacun dans un panneau. Et par défaut, on est dans le mode “bc” pour broadcast.

Les touches :

  • C-b u -> 1 -> node
  • C-b i -> 2 -> other_node
  • C-b o -> 192.168.21 -> node_addr_base
  • C-b p -> 192.168.22 -> other_addr_base
  • C-b r -> Change broadcast mode

“C-b r” permet de passer d’un “mode” à un autre :
- Vert “broadcast” on envoie la purée sur les deux machines en même temps
- Bleu mode normal C-b fléche pour passer de l’un à l’autre

Et voila, une console cluster en mieux :p

Travailler avec une mib snmp

Par exemple pour travailler avec une mib netapp :

snmptranslate -m NETWORK-APPLIANCE-MIB -Tl|less

Pour avoir la liste de tous les paramètres avec leurs “valeurs” :

.iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).interfaces(2).ifTable(2).ifEntry(1).ifOutErrors(20)
.iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).interfaces(2).ifTable(2).ifEntry(1).ifOutQLen(21)
.iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).interfaces(2).ifTable(2).ifEntry(1).ifSpecific(22)

Pour traduire ça avec une petite ligne :

echo '.iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).interfaces(2).ifTable(2).ifEntry(1).ifSpecific(22)' | perl -pe 's/\.[a-zA-Z-0-9]+\(/./g;s/\)//g'
.1.3.6.1.2.1.2.2.1.22

Et l’inverse :

snmptranslate -m NETWORK-APPLIANCE-MIB -Tl .1.3.6.1.4.1.789.1.7.3.1.1.5.0
NETWORK-APPLIANCE-MIB::cifsReads.0

Tout pour gérer les timestamp – All for timestamp

Afficher le timestamp courant / print current timestamp:

perl -e 'print time;'
date +%s

Le timespamp de la veille / Yesterday timestamp:

perl -e 'print time-1*86400;'
date -d '1 day ago' +%s # Work only with up-to-date date such as Linux

su -

Comment faire lancer par un utilisateur une suite de commandes dans un script exécuté en temps que root ?
Howto launch commands by user in script executed by root.

Par exemple, je veux que l’utilisateur “oracle” exécute ces commandes :
For exemple I would like to execute there as “oracle”:

for i in azer qsdf fghj zaer fg ery qsjjy  azern ; do
        touch /tmp/tib/titi.$$.$i
done

Il suffit de l’encapsuler dans :
I just need to put commands between:

cat << "EOF" | su - user
EOF

Par exemple :
For example:

cat << "EOF" | su - oracle
for i in azer qsdf fghj zaer fg ery qsjjy  azern ; do
        touch /tmp/tib/titi.$$.$i
done
EOF

Et voilà ! / And voilà !