Ciclo Herramientas gnu/linux (VII): moc

No es ningún tema de fubol por supuesto :P
moc es un reproductor basado en ncurses (para variar), como cualquier otro reproductor X de los simples, con reproducción por listas, exploración de directorios y poquito más (pa qué).
Ocupa poco, funciona realmente bien y no hay mucho que configurar :)

En mi caso lo único a sido asignar las teclas multimedia del teclado, en $HOME/.fluxbox/keys por supuesto:

None XF86Tools :ExecCommand roxterm -e mocp
None XF86AudioPlay :ExecCommand mocp -G
None XF86AudioLowerVolume :ExecCommand amixer -q set PCM 5%- unmute
None XF86AudioMute :ExecCommand amixer -q set Master toggle
None XF86AudioRaiseVolume :ExecCommand amixer -q set PCM 5%+ unmute

También tenemos la aplicación moc-tray para los tray-lovers ;-) aunque entonces yo optaría por xnoise que tiene todo ya integrado.

Serverstats, el “cacti” ligero

En mi búsqueda habitual de aplicaciones lightweight y tras tirar “cacti” a la basura por motivos de rendimiento óbvios, he encontrado “serverstats” a través de un blog donde lo analizan bastante bien, asi que no voy a ponerme a analizarlo yo :P

La cuestión viene cuando he intentando personalizar la configuración inicial.
Lo primero que he visto que aunque en la documentación diga que modificando el fichero “config/sources.php” carga módulos… no lo hace :-P, únicamente hará caso del fichero “config/simple.php“.
Por ejemplo, para activar el módulo de monitorización de mysql he tenido que habilitarlo en el “simple.php“:

'mysql' => array(
'used' => true,
'host' => 'localhost',
'user' => 'serverstats',
'password' => 'serverstats',
'graphs' => array(
'questions' => array('used' => true, 'title' => 'MySQL: questions per second'),
'processes' => array('used' => true, 'title' => 'MySQL: query count ("SHOW PROCESSLIST")')
)
),

Continue reading “Serverstats, el “cacti” ligero”

Ciclo Herramientas gnu/linux (VI): busybox

Hoy un compañero ha tenido un “pequeño” percance con la actualización de unas vmware-tools… Le han petado /root.
Por algún motivo corrompieron todo el fs.
La cuestión es que necesitábamos tener los comandos básicos por que tras diversas acciones “/lib64” desapareció O:-) y no podíamos ejecutar ni un “mv“.
Es decir, teníamos shell y … poco más.
En estas le comento y por qué no metemos un busybox, no tiene dependencias (compilado estático) y tenemos todo!
Se quedó un poco parado por lo de busybox, no lo había oido nunca, asi que como muestra un botón, cogí mi android, puse el terminal emulator y ejecuté:
[cc lang=”bash”]dodger:~ $ busybox
BusyBox v1.10.3 (2010-10-13 23:52:46 CEST) multi-call binary
Copyright (C) 1998-2007 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.

Usage: busybox [function] [arguments]…
or: function [arguments]…

BusyBox is a multi-call binary that combines many common Unix
utilities into a single executable. Most people will create a
link to busybox for each function they wish to use and BusyBox
will act like whatever it was invoked as!

Currently defined functions:
[, [[, addgroup, adduser, ar, ash, awk, basename, bunzip2, bzcat, bzip2, cat, chgrp, chmod, chown, chroot, chvt, clear, cmp, cpio, crond, crontab, cut, date, dc, dd, deallocvt, delgroup, deluser, df, diff, dirname,
dmesg, dos2unix, dpkg, dpkg-deb, du, echo, env, expr, false, fdisk, find, fold, free, getopt, getty, gunzip, gzip, halt, head, hexdump, hostid, hostname, hwclock, id, ifconfig, ifdown, ifup, inetd, init, insmod,
install, ip, kill, killall, killall5, klogd, less, linuxrc, ln, logger, login, logname, losetup, ls, lsmod, md5sum, mdev, mkdir, mknod, mkswap, mktemp, modprobe, more, mount, mv, netstat, nice, nslookup, od, openvt,
passwd, patch, pidof, ping, pivot_root, pkill, poweroff, printf, ps, pwd, rdate, readlink, reboot, reset, rm, rmdir, rmmod, route, run-parts, sed, sh, sha1sum, sleep, sort, start-stop-daemon, strings, stty, su,
sulogin, swapoff, swapon, sync, syslogd, tail, tar, tee, telnet, telnetd, test, time, top, touch, tr, traceroute, true, tty, udhcpc, umount, uname, uncompress, uniq, unix2dos, unzip, uptime, usleep, uudecode, uuencode,
vi, vlock, wc, wget, which, whoami, xargs, yes, zcat, zcip
[/cc]
Para cualquier amante de trastear routers y cualquier cosa con un linux embebido es el pan de cada día, pero si no te has puesto puede sonar un poco a chino.

Asi que subimos con netcat (esto pa otro día) el busybox compilado para rhel4 de dag.wieers y listo! Comandos básicos ready-to-go.

Ciclo Herramientas gnu/linux (V): pbzip2 y pigz

Hoy comentando con un compañero un filesystem (una partición) que se estaba quedando sin espacio, le he indicado que usase el pbzip2, que lo había dejado yo instalado hace unos días por el mismo problema (y unos ficheros de log enormes).

La verdad es que la teoría es bastante simple, ya que lo único que añade es la opción de paralelismo (pbzip2) sobre bzip2, pero el resultado es bastante impresionante si no quieres esperar a que termine la compresión para irte a casa:

[cc lang=”bash”]
[SERVER02].root:/logs/common/core > time bzip2 -9fv core-2559-1321322015
core-2559-webseald-1321322015: 22.662:1, 0.353 bits/byte, 95.59% saved, 638181376 in, 28161115 out.

real 0m56.240s
user 0m55.379s
sys 0m0.850s
[/cc]
vs
[cc lang=”bash”]
[SERVER02].root:/logs/common/core > time pbzip2 -9fvp16 core-2559-1321322015
Parallel BZIP2 v1.0.5 – by: Jeff Gilchrist [http://compression.ca]
[Jan. 08, 2009] (uses libbzip2 by Julian Seward)

# CPUs: 16
BWT Block Size: 900k
File Block Size: 900k
——————————————-
File #: 1 of 1
Input Name: core-2559-webseald-1321322015
Output Name: core-2559-webseald-1321322015.bz2

Input Size: 638181376 bytes
Compressing data…
——————————————-

Wall Clock: 4.103929 seconds

real 0m4.106s
user 0m55.404s
sys 0m0.923s
[/cc]

En este caso lo que se comprime es un core dumped de un proceso interno y la diferencia está clara (aún usando solo 16 cores de los 64 de la máquina).
Eso sí, si hay un sistema de monitorización muy sensible por medio, puede que salte alguna alarma.

EDIT: Añado pigz que aunque soy fan de bzip2, gzip se usa de manera mucho más habitual…

Ciclo Herramientas gnu/linux (IV): roxterm y urxvt

Hoy comento una utilidad que no es de consola (MOG!), sino una “consola” en sí; vaya un emulador de terminal.
Por supuesto, en la búsqueda de “algo” ligero, configurable y con suficientes “features” nos hace pasar por la página de “lightweight applications” en la wiki de Arch.

Diría que he probado todos:

  • LilyTerm: Violación de segmento al arrancar la 2ª ventana, diría que tiene procesos separados para cada ventana.
  • Sakura: Procesos independientes, no excesivamente pesado.
  • Xterm: Procesos independientes, pesado.
  • Tilda: Procesos independientes, pesado.
  • Stjerm: no me gusta el dropdown, partiendo de eso, no lo he probado demasiado.
  • urxvt: Muy buen combo urxtvd+urxvtc, lo he estado usando hasta que se han solucionado los problemas del roxterm
  • ROXTerm: Un proceso por N ventanas, muy ligero

Lo que busco en un terminal (imagino que lo que todos ¬¬’):

  • Custom colors: básico para ver los colorines de nuestro tty!!! (htop rulez)
  • Custom Shortcuts: hay que poner las cosas como a uno le gusta, no como alguien te obligue ;-)
  • Lightweight: por descontado
  • Mult-tabs/Multi-windows

Para apreciar la diferencia con urxvtd, pongo una captura de la memoria, ambos con las mismas pestañas, ejecutando los mismos procesos en ellas:
[cc lang=”bash”]dodger 1240 0.0 2.9 447892 60588 ? S Sep09 8:47 urxvtd -q -o -f
dodger 24726 0.9 0.9 53812 19676 pts/15 Sl 17:57 0:03 roxterm
[/cc]
Como comentaba antes, Roxterm ha tenido problemas con la configuración de los shortcuts durante unas cuantas versiones, al menos en mi caso. Y he estado usando urxvtd+urxvtc, también de manera muy satisfactoria.
La verdad que el sistema de configuración mediante .Xdefaults es un poco… arcaico, pero al final te acostumbras.
Tiene cosas buenas, como por ejemplo el cambio de pestaña mediante “ALT + ->” y “ALT + <-" y una cosa que a todo geek le gustará que son las tabs en ASCII si se ejecuta el urxvt mediante: [cc lang="bash"]urxvtc -pe tabbed[/cc] De momento, me quedo con roxterm (aunque las pestañas en GTK no molen tanto), sí que ocupa mucho menos y los ficheros de configuración son "humanos", tal vez no admita las 10e10 opciones de urxvt, pero sí que admite las necesarias ;-) Ahora pongo la config que he estado usando para urxvt [cc lang="bash"] vi .Xdefaults[/cc] [cc lang="bash"] ! General urxvt*termName: rxvt urxvt*loginShell: true urxvt*scrollBar: true urxvt*scrollBar_right: true urxvt*secondaryScroll: true URxvt*scrollstyle: plain urxvt*saveLines: 65535 urxvt*cursorBlink: false urxvt*urgentOnBell: true !urxvt*override-redirect:false !urxvt*borderLess: false !urxvt*internalBorder: 0 !urxvt*externalBorder: 0 ! Extensions urxvt*perl-lib: /usr/lib/urxvt/perl/ urxvt*perl-ext-common: default,matcher,searchable-scrollback urxvt*urlLauncher: /usr/bin/firefox urxvt*matcher.button: 1 ! - catch ugly URLs ! Tabs ! Appearance ! - use a bitmap font !urxvt*font: -*-terminus-medium-*-*-*-12-*-*-*-*-*-*-* !urxvt*boldFont: -*-terminus-bold-*-*-*-12-*-*-*-*-*-*-* !URxvt*font: xft:DejaVu Sans Mono:pixelsize=12:antialias=true:hinting=true URxvt*font: xft:Monospace:pixelsize=12:antialias=true:hinting=true URxvt*boldFont: xft:Monospace:bold:pixelsize=12:antialias=true:hinting=true ! - use xft for drawing fonts !urxvt*font: xft:Terminus:5 !urxvt*font: 9x20 ! - cursor urxvt*cursorColor: #DCDCCC ! - pseudo transparency !urxvt*shading: 50 !urxvt*transparent:true ! ! - color scheme !urxvt.background: #000000 urxvt.background: #171717 urxvt.foreground: #EBEBFF ! black + red !urxvt*color0: #3f3f3f urxvt*color0: #000000 urxvt*color1: #e01010 ! green + yellow urxvt*color2: #00AA00 urxvt*color3: #FFFF00 ! blue + purple ! urxvt*color4: #112037 urxvt*color4: #4092cf urxvt*color5: #A020F0 ! cyan + white urxvt*color6: #5B5BC7 urxvt*color7: #fefefe ! bright-black + bright-red urxvt*color8: #6a6a6a urxvt*color9: #FF5555 ! bright-green + bright-yellow urxvt*color10: #90EE90 urxvt*color11: #ffff2f ! bright-blue + bright-purple urxvt*color12: #5B5BC7 urxvt*color13: #e628ba ! bright-cyan + bright-white urxvt*color14: #7D7DFB urxvt*color15: #ffffff [/cc] Mi configuración de colores de roxterm: [cc lang="bash"] vi .config/roxterm.sourceforge.net/Colours/dodger [/cc] [cc lang="bash"] [roxterm colour scheme] foreground=#eeeeeeeeecec background=#000000000000 0=#2e2e34343636 1=#cccc00000000 2=#4e4e9a9a0606 3=#c4c4a0a00000 4=#34346565a4a4 5=#757550507b7b 6=#060698989a9a 7=#d3d3d7d7cfcf 8=#555557575353 9=#efef29292929 10=#8a8ae2e23434 11=#fcfce9e94f4f 12=#72729f9fcfcf 13=#adad7f7fa8a8 14=#3434e2e2e2e2 15=#ffffffffffff 16=#4c4c4c4c4c4c 17=#a8a830303030 18=#202088882020 19=#a8a888880000 20=#555555559898 21=#888830308888 22=#303088888888 23=#d8d8d8d8d8d8 cursor=#eeeeeeeeecec palette_size=16 [/cc] Y los shortcuts: [cc lang="bash"] vi .config/roxterm.sourceforge.net/Shortcuts/dodger [cc] [cc lang="bash"] [roxterm shortcuts scheme] File/New Window=n
File/New Tab=t
File/Close Window=q
File/Close Tab=w
Tabs/Previous Tab=Left
Tabs/Next Tab=Right
Edit/Copy=c
Edit/Paste=v
View/Zoom In=plus
View/Zoom Out=minus
View/Normal Size=0
View/Scroll Up One Line=Up
View/Scroll Down One Line=Down
Help/Help=F1
Edit/Copy & Paste=y
File/New Window With Profile/Default=
File/New Tab With Profile/Default=
[/cc]

Para aplicar estos cambios:
[cc lang=”bash”]
cp .config/roxterm.sourceforge.net/Global .config/roxterm.sourceforge.net/Global.backup
sed -i ‘s,colour_scheme=.*,colour_scheme=dodger,g’ .config/roxterm.sourceforge.net/Global
sed -i ‘s,shortcut_scheme=.*,shortcut_scheme=dodger,g’ .config/roxterm.sourceforge.net/Global
[/cc]

El backup es por si acaso, nunca está de más ;-)

Ciclo Herramientas gnu/linux (III): screen (gnu/screen)

Y llegamos a una de mis herramientas favoritas y sin la que prácticamente no me planteo la administración de un servidor.
Sobre todo conociendo como van las conexiones españolas.

Haciendo copy/paste del manual:

Screen is a full-screen window manager that multiplexes a physical terminal between several processes (typically interactive shells).

Tradución/interpretación: Screen es un emulador de terminal des-atachado que permite multiplexación de terminales.
Es decir, permite lanzar un proceso que es no es dependiente de un terminal; ya que todos los procesos de usuario en linux cuelgan de un terminal, aunque los mandemos a background y a no ser que usemos dtach.
Esto soluciona el problema de la reconexión, es decir, lanzar un programa de larga duración sin logar la salida y luego hacer el típico:

Se me ha colgado la conexión y no sé como ha finalizado!!!

Que fijo que a cualquier sysadm le ha pasado, habitualmente por despiste (trollface again).

Aparte de esta propiedad, tiene la gran ventaja de que permite lanzar “pestañas” (por hacer un símil) dentro de la misma conexión, es decir, N shells dentro de una única.
Por supuesto también permite splitting de la ventana en regiones (horizontales y depende de si screen está parcheado, verticales), aunque en mi caso soy contrario a usarlas por que es un poco “paja mental”, pero he de reconocer que en ocasiones viene muy bien.

La configuración la realizamos mediante el típico: [cc lang=”bash”]${HOME}/.screenrc[/cc]
Pongo el mío como ejemplo:
[cc lang=”bash”]deflogin on
vbell on
vbell_msg ” Wuff —- Wuff!! ”
defscrollback 1024
bind ^k
bind ^\
bind \\ quit
bind K kill
bind I login on
bind O login off
bind } history
termcapinfo vt100 dl=5\E[M
hardstatus off
termcapinfo xterm*|rxvt*|kterm*|Eterm* hs:ts=\E]0;:fs=\007:ds=\E]0;\007
hardstatus string “%h%? users: %u%?”
termcapinfo xterm*|linux*|rxvt*|Eterm* OP
termcapinfo xterm ‘is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l’
defnonblock 5
caption always “%{+b rk}%H%{gk} |%c %{yk}%d.%m.%Y | %72=Load: %l %{wk}”
hardstatus alwayslastline “%?%{yk}%-Lw%?%{wb}%n*%f %t%?(%u)%?%?%{yk}%+Lw%?”
[/cc]

Que nos genera algo como esto (eliminando la parte de htop):
Ejemplo de configuración de screen

Lo importante son las 2 últimas lineas visibles:
[cc lang=”bash”]
ciberterminal |12:12 14.09.2011 | Load: 0,25 0,24 0,18
0*$ bash 1-$ bash 2$ bash 3$ bash 4$ bash
[/cc]
Donde apreciamos:

  1. hostname, fecha, load avg.
  2. “Pestañas” disponibles

De esta forma de manera muy rápida y visual, apreciamos cuantas pestañas tenemos y el estado del servidor.

Otra propiedad adicional e intersante, es el clipboard propio, el scrolling y la posibilidad de salvar lo que aparecen el terminal (todo resumido con el nombre de “copy mode”.

Añado un “resumen” de mis shortcuts más usados, que en este caso son muchos:

##CONNECTION## From outside screen
screen
launch a new screen
screen -S NAME
launch a new screen with name “NAME”
screen -m PROGRAM
launch a screen and inside it the “PROGRAM”
screen -d -m PROGRAM
launch a DE-ATTACHED screen and run “PROGRAM” inside
screen -ls
launch a new screen
screen -x
bruteforce attach
screen -r SCREENAME
attach to screen “SCREENAME”
##INSIDE SCREEN##
CTRL-a c
New screen “tab”/session
CTRL-a n
Next “tab”
CTRL-a p
Prev “tab”
CTRL-a N
Go to tab N
CTRL-a "
Tab list
exit
exit current tab
CRTL-d
exit current tab
CTRL-a A
Change Current tab name
CRTL-a d
de-attach screen
CRTL-a C
clear current tab screen
CRTL-a l
reset current tab screen
CTRL-a K
Destroy (literally) current tab
##SPLITTING##
CTRL-a S
Split current tab horizontally
CTRL-a |
Split current tab vertically
CTRL-a <tab>
Switch to next region
CTRL-a X
Close current region
##COPY/PASTE##
CTRL-a <esc>
Enter copy mode
<Space>
Begin selection (use arrows to move)
<Enter>
Finish selection and copy
CTRL-a ]
Paste
CTRL-a >
Write clipboard to file /tmp/screen-exchange
CTRL-a <
Read /tmp/screen-exchange to clipboard
CTRL-a =
Remove /tmp/screen-exchange but no clipboard content
##SCROLL##
CTRL-a <esc>
Enter copy mode
AvPag
Advance 1 page
RePag
Previous page
Inicio
Go to the 1st line of scroll
Fin
Go to the last line of scroll (actual one)
CRTL+r <SEARCH STRING>
Enter Search mode (begin writing), then

CRTL+r

to go to the previous ressult

/<SEARCH STRING>
Enter VIM-like search