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
Ciclo Herramientas gnu/linux (II): finch

Nivel freak rallando el tope…
Un cliente de mensajería instantánea basado en ncurses. Más bien pidgin en ncurses.
Dejando a parte a centerim, el aspecto de finch es igual al de pidgin… solo que en consola.
Es decir, tiene “ventanas”, pestañas (si quieres) y la ventana de amigos. Pero también tiene workspaces dentro del propio programa (algo así como “pestañas” de screen) donde poder clasificar las ventanas: por ejemplo las ventanas de chat en un workspace y la lista de amigos en otro.

Un ejemplo de funcionamiento habitual:
finch en funcionamiento
Link al autor de la imagen

Por supuesto cuenta con cliente de los protocolos habituales: jabber, msn, irc, icq…

Como se puede ver en la página del manual, parte de la configuración se realiza en el finchero:
[cc lang=”bash”]${HOME}/.gntrc[/cc]
En mi caso por ejemplo:
[cc lang=”bash”][Finch]
mouse = 1
color-available = green; black
color-away = blue; black
color-idle = gray; black
color-offline = red; black
color-message-sent = cyan; default
color-message-received = red; default
color-message-highlight = black; green
color-message-action = yellow; default
color-timestamp = blue; default
#See below for details on color

[general]
shadow = 0
# There is experimental mouse support
mouse = 1
# To use some custom window-manager
wm = /usr/local/lib/gnt/s.so
# There’s also a custom window manager called irssi.so
# Remember window-positions based on the titles (on by default)
remember_position = 1
# Use borderless one-line high buttons
small-button = true

# Workspaces are created simply by adding Workspace-X groups as follows:
[Workspace-1]
name = blist
# window-names specifies that windows with these semi-colon separated names are placed into this workspace
window-names = buddylist;debug-window

[Workspace-2]
name = IM
window-names = conversation-window
# window-titles specifies that windows with these semi-colon separated titles are placed into this workspace. These are matched as substrings. Window titles take precedence over names.
window-titles = Preferences;Pounce
[/cc]

Casi todo está por defecto, exceptuando el tema de los workspaces, que en mi caso separo las “conversation-window” en el Workspace-2 del resto en el Workspace-1.

Y por qué usar este programa en vez de los super-bonitos clientes actuales, en mi caso como no me canso de repetir… ram:
[cc lang=”bash”]dodger 1266 0.0 1.0 65268 20684 pts/0 Ss+ Sep09 3:26 finch[/cc]
Por los +100MB de pidgin por ejemplo.
Otra cosa es que al final te acostumbras a los shortcuts de finch y como todo trabajador de la consola, no puedes estar sin ellos.
Como ejemplo, pongo algunos (los más usados):

####shortcut####
ALT+a
List of avalaible actions
ALT+n
Next window
ALT+p
Prev window
ALT+w
window list
ALT+c
Close window
ALT+q
Quit
ALT+m
Move window
ALT+r
Resize window
ALT+s
window list
ALT+.
Move the position of the current window in the window list one place to the right.
ALT+,
Move the position of the current window in the window list one place to the left.
ALT+l
Refresh the windows. Useful after resizing the terminal window.
ALT+1..0
Jump to the 1st, 2nd … 10th window.
CRTL+o
Bring up the menu (if there is one) for a window.
ALT+>
Switch to the next workspace
ALT+<
Switch to the previous workspace
AvPag RePag
Scroll text page up/page down
In the buddy list->F11
Add buddy

Completito, vaya… Más en el manual o en la docu oficial.

Ciclo Herramientas gnu/linux (I): htop

Comienzo un ciclo a petición de un compañero, herramientas habituales.
En este caso, un must-have de todo linuxero y más si eres sysadm.
El htop es el top clásico llevado al nivel “no podrás vivir sin el”, es el típico “estaba ciego y acabo de despertar”.
Colourfull, easy, full-customizable…
Ya he puesto alguna captura en ocasiones:
Consumo de memoria

Echemos un vistazo al help (F1/h):
[cc lang=”bash”]htop 0.8.3 – (C) 2004-2008 Hisham Muhammad.
Released under the GNU GPL. See ‘man’ page for more info.

CPU usage bar: [low-priority/normal/kernel used%]
Memory bar: [used/buffers/cache used/total]
Swap bar: [used used/total]
Type and layout of header meters are configurable in the setup screen.

Status: R: running; S: sleeping; T: traced/stopped; Z: zombie; D: disk sleep
Arrows: scroll process list F5 t: tree view
Digits: incremental PID search u: show processes of a single user
F3 /: incremental name search H: hide/show user threads
K: hide/show kernel threads
Space: tag processes F: cursor follows process
U: untag all processes
F9 k: kill process/tagged processes P: sort by CPU%
+ [ F7: higher priority (root only) M: sort by MEM%
– ] F8: lower priority (+ nice) T: sort by TIME
F4 I: invert sort order
F2 S: setup F6 >: select sort column
F1 h: show this help screen l: list open files with lsof
F10 q: quit s: trace syscalls with strace
L: trace library calls with ltrace

Press any key to return. [/cc]
A simple vista… un top… normal.
Ahora bien… si rascamos un poco:

  • Scrolling: Efectivamente, htop permite scrolling por la lista de procesos, select&go: renice, kill…
  • Búsqueda por procesos (F3 & /)
  • Tree view
  • Setup: permite una personalización completa del entorno htop.
  • strace: lanza un strace atachado al proceso seleccionado
  • lsof: lista ficheros abiertos por el proceso seleccionado

Merecería la pena solo por ver top en colores, pero cosas como strace, lsof y ver “gráficamente” las cosas, no tiene precio :P

We are using MySQL, help save it [UPDATED]

Well… CE has decided and as everyone suppose they had considered that this is not a monopolistic movement (i doubt that), the terms of Oracle involving MySQL are ridiculous. Time will give us the answer, i hope all keep running fine for MySQL and opensource community.
—-
We’re using MySQL for free, don’t let ORACLE to buy sun and give them the opportunity of “steal” our money with privative licenses:
http://monty-says.blogspot.com/2009/12/help-saving-mysql.html
Support Michael “Monty” Widenius to save it.

Oracle está a punto de comprar Sun, pero antes tiene que pasar por la comisión Europea antimonopolio. Oracle está haciendo toda la presión posible para que la EC (comisión europea) acepte esto, cosa que a cualquier usuario de software libre debería parecerle una aberración, más teniendo en cuenta lo que NO ha prometido Oracle:

  1. Mantener Mysql como proyecto opensource
  2. Participar en la comunidad
  3. Aplicar los parches subministardos por la comunidad de manera activa.
  4. Discriminar los parches que puedan hacer a MySQL mucho más competitiva frente a Oracle
  5. Seguir trabajando en MySQL para ofrecer una alternativa a Oracle.

Como digo esto es lo que Oracle NO ha prometido y que seguramente ignorará ante la “pequeña” amenaza que se supone es MySQL.
En la página de Monty tenéis unas plantillas para enviar a la CE, que deberíais enviar, a ver si evitamos este movimiento monopolista.

Actualizado: Blacklist de ips mediante apache

Hola,
He estado modificando el filtro de ip’s y os pongo el código de un pequeño script para generar un fichero legible por apache que simplemente basta con hacer un include del mismo:

#!/bin/bash
REMOTE_BLACKLIST="http://www.ciberterminal.net/blog/blacklist.list"
BLACKLIST_BANNER="http://www.yourdomain.com/banned_ip.html"
build_apache_list()
{
   local APACHE_BLACKLIST="/etc/httpd/conf.d/blacklist.conf"
   local TMPFILE="/tmp/blacklist.tmp"
   wget "$REMOTE_BLACKLIST" --output-document=$TMPFILE
   echo 'Rewritecond %{REQUEST_URI}     !^/blog/banned_ip.html$' > $APACHE_BLACKLIST
   for i in $(cat $TMPFILE)
   do
      echo "RewriteCond %{REMOTE_ADDR}     $i [OR]" >> $APACHE_BLACKLIST
   done
   echo "RewriteCond %{REMOTE_ADDR}     1.1.1.1" >> $APACHE_BLACKLIST
   echo 'RewriteRule ^(.*)$     $BLACKLIST_BANNER [R,L]' >> $APACHE_BLACKLIST
}
build_apache_list


Esto genera un fichero que se ha de incluir en la configuración de vuestros vhosts mediante:

Include /etc/httpd/conf.d/blacklist.conf

Logicamente, hay que generar un bonito html que la gente vea y en el dudoso caso que sus intenciones no fuesen hostiles… podríais desbanear.