Tmux ha guanyat!

Parlem de terminals de consola! Parlem de TMUX!!!
Fa ja uns mesos que estem treballant en el departament amb aquest multiplexor de terminals i estem tant contents amb ell que s’ha guanyat un post!

Encara recordo amb nostàlgia quant vem descobrir l’screen, eina que vem explotar en els servidors per

  • llençar processos que sabem que tenen una llarga durada, aqui tenim d’aliats el “&>>” i el time ( /usr/bin/time –format=”%E %S %U %P” –output=”logfile”)
  • llençar processos crítics on volem minimitzar els riscos de deixar-ho a mitges per algun tall de llum en el nostre laptop
  • llençar processos de forma desatesa que volem que es comportin com un dimoni, util quan et demanen llençar script com si fos un dimoni a mode urgent.
  • llençar processos on puguin fer seguiment als companys, útil per el processos que duran varis torns d’operadors
  • però com va dir un colega, l’screen està “depre” ( de deprecated! està passat de moda! ), amb tota la raó del món! ja veureu…

    D’una altra banda, Terminator(Linux) i iTerm(Mac) han estat les consoles utilitzades per realitzar varies tasques a la vegades en diferents servidors, per fer desplegaments de codi, canvis de configuracions, apagar focs, etc… Mitjançant les pestanyes pots tindre varies consoles connectades a diferents entorns o grups de servidors diferents, a més, cadascuna de les pestanyes les pots dividir en panells i executar les mateixes commandes o scripts alhora, MOLT útil!!!

    Doncs si aquestes funcionalitats del iTerm/Terminator ens han estat MOLT útils, imagineu-vos combinat amb el screen, i n’obtenim el TMUX!!. Ja fa uns quants caps de setmana que vaig passar una tarda per apendre les opcions i preparant-me la configuració a mida, i va ser MOLT productiu, ho recomano a qualsevol sysadmin. Haig de reconèixer que al principi vaig tenir una mica de reticiència però ara ho agraeixo.

    Descric el que més valoro:

  • tenim pestanyes per agrupar per roles/entorns els servidor on estic connectat
  • cadascuna de les pestanyes les podem dividir en panells
  • podem enviar comandes a tots els panells alhora d’una mateixa pestanya
  • podem redimensionar els panells fàcilment
  • podem desplaçar-nos pels diferents panells i/o pestanyes amb comoditat
  • NO necessitem de les X11, impresionant!
  • pots definir el buffer de cadascun del panell, recomano perdre uns moments per definir un gran buffer, sempre ho acabem utilitzant en algun moment
  • podem fer ús de plantilles, definint les pestanyes i les mides que obrirem i inclus automatitzar-ho
  • podem personalitzar quins són la combinació de tecles utilitzades per a fer ús del tmux
  • Adjunto el meu perfil del tmux en aquest post, on recalcaré les que trobo més interessants.
    Fitxer per descarregar: tmux.conf
    Path: $HOME/.tmux.conf

    # Avisa on fa perpellugues el nom de la pestanya on algun dels seus panells ha tingut activitat
    set -g visual-activity on
    # Per a cada panell guardem 10000 linies de buffer
    set -g buffer-limit 10000
    # C^B+r per recarregar en el tmux canvis en aquestes configuracion (aixo per nota!)
    unbind r
    bind r source-file ~/.tmux.conf  \; display "Reloaded!"
    #C^B+a :(All) per escriure en tots els panells de la pestanya
    unbind a
    bind a setw synchronize-panes on
    # C^B+o :(One) per escriure nomes en panell seleccionat
    unbind o
    bind o setw synchronize-panes off
    # Els indexos de panells i pestanyes comencen per 1, en comptes de 0 que és el per defecte
    set -g base-index 1
    setw -g pane-base-index 1
    # Personalitzant la barra d'estat
    # Powerline symbols: ⮂ ⮃ ⮀ ⮁ ⭤
    set -g status-utf8 on
    set -g status-left-length 32
    set -g status-right-length 150
    set -g status-interval 2
    
    set -g status-left '#[fg=colour15,bg=colour238,bold] #S #[fg=colour238,bg=colour234,nobold]⮀'
    set -g status-right '#[fg=colour245]⮃ %R ⮃ %d %b #[fg=colour254,bg=colour234,nobold]⮂#[fg=colour16,bg=colour254,bold] #h '
    set -g window-status-format "#[fg=white,bg=colour234] #I #W "
    set -g window-status-current-format "#[fg=colour234,bg=colour39]⮀#[fg=colour16,bg=colour39,noreverse,bold] #I ⮁ #W #F #[fg=colour39,bg=colour234,nobold]⮀"
    

    Aqui defineixo una plantilla del tmux per facilitar l’ús, molt útil a l’hora d’apagar focs.
    tmux_magento.sh
    El seguent gif mostra la execució de la plantilla que us he penjat, on hem connecto a tots els frontals d’un mateix role(magento), 8 frontals. La plantilla no deixa de ser un shell script on cada linia mofica el tmux on estem. De fet, per fer-lo funcionar, ÉS NECESSARI estar dins una pestanya del tmux i tenir els indexos dels panells configurats a 1, en comptes de 0 com té per defecte el tmux.

    tmux_magento

    Com podeu veure en el gif anterior, jo estic acostumat a connectar-me des d’un tmux a moltes consoles tty de varis servidors per SSH2. Un altre forme de treballar seria connectar-me a instancies de tmux en cadascun dels servidors a través d’un fitxer socket, en comptes de connectar-me a la consola, ideal per a compartir sessions remotes alhora entre varis operadors.

    Per finalitzar, les fonts consultades:
    Zooming Tmux Panes
    Simple Remote Pairing with Wemux
    Splitting terminal with tmux
    Manual del Tmux

    Projects Links:
    Tmux Project
    Wemux Project