# rm-rf.es | Administración de sistemas

Blog de un SysAdmin Unix, Gnu/Linux, Windows y lo que haga falta.

Personalizar PS1 prompt de forma sencilla

Tanto si sois lo suficientemente vagos como para personalizar el prompt PS1 (prompt string 1) de vuestra línea de comandos como si os resulta tedioso crearlo manualmente esta utilidad online os gustará.

La sintaxis del PS1 es un festival de contra-barras, barras, códigos de color y estilo y muchas otras ordenes más que pueden resultar complejas de generar manualmente. El PS1, para shells en bash se configura en el archivo ~/.bashrc, este sería un ejemplo:

export PS1="\[\e[00;37m\][\$?]\[\e[0m\]\[\e[01;32m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;37m\]\h\[\e[0m\]\[\e[00;37m\]:[\w] \\$\[\e[0m\]"

Semejante línea únicamente para especificar:

  • Exit status code del comando anterior
  • Usuario de la shell en negrita y color verde
  • Hostname en negrita y color blanco
  • PWD en el que nos encontramos
  • Tipo de shell (usuario/superusuario).
[0]alex@hostname:[/usr/local/src] $

En el sitio web bashrcgenerator.com tenéis una interfaz a través de la cual podéis craer un PS1 simplemente arrastrando los distintos elementos y personalizándolos. Podéis añadir y quitar funciones, cambiar colores y estilo, cambiar el orden de los elementos, etc.

bashrc ps1 prompt generator

Podéis usarlo para generar el prompt PS1 base y luego modificarlo manualmente para añadir funcionalidades más avanzadas que ahí no aparezcan. Podemos por ejemplo añadir condiciones, realizar acciones según el resultado del comando anterior, visualizar el número en el que el comando se almacenará en el history, mostrar si hay jobs en background, etc En la página man de bash tenéis el listado de funcionalidades disponibles:

When executing interactively, bash displays the primary prompt PS1 when it is ready to read  a  command,  and the secondary prompt PS2 when it needs more input
to complete a command.  Bash allows these prompt strings to be customized by
inserting a number of backslash-escaped special characters that are decoded as follows:
\a     an ASCII bell character (07)
\d     the date in "Weekday Month Date" format (e.g., "Tue May 26")
\D{format} the format is passed to strftime(3) and the result is inserted into the prompt string; an empty format results in a locale-specific time representation.  The braces are required
\e     an ASCII escape character (033)
\h     the hostname up to the first `.'
\H     the hostname
\j     the number of jobs currently managed by the shell
\l     the basename of the shell's terminal device name
\n     newline
\r     carriage return
\s     the name of the shell, the basename of $0 (the portion following the final slash)
\t     the current time in 24-hour HH:MM:SS format
\T     the current time in 12-hour HH:MM:SS format
\@     the current time in 12-hour am/pm format
\A     the current time in 24-hour HH:MM format
\u     the username of the current user
\v     the version of bash (e.g., 2.00)
\V     the release of bash, version + patch level (e.g., 2.00.0)
\w     the  current  working  directory,  with  $HOME  abbreviated with a tilde (uses the value of the PROMPT_DIRTRIM variable)
\W     the basename of the current working directory, with $HOME abbreviated with a tilde
\!     the history number of this command
\#     the command number of this command
\$     if the effective UID is 0, a #, otherwise a $
\nnn   the character corresponding to the octal number nnn
\\     a backslash
\[     begin a sequence of non-printing characters, which could be used to embed  a  terminal  control sequence into the prompt
\]     end a sequence of non-printing characters

Convertir vídeos con audio AC3 a MP3 con ffmpeg

FFmpeg es es la mejor opción para realizar tareas con vídeo y audio, ya sea grabar, convertir o hacer streaming de audio y vídeo. Ya vimos como instalarlo en GNU/Linux aunque también puede ser utilizado en otros sistemas operativos, también Windows.

En este caso vamos a ver como convertir el audio de un vídeo de AC3 a MP3:

~$ ffmpeg -i video_ac3.avi -vcodec copy -acodec libmp3lame -ab 128k -ac 2 -threads 0 video_mp3.avi

Simplemente aseguraos de poner el vídeo original con el parámetro (-i) y al final de la línea de comandos el vídeo de destino. Podéis investigar las distintas opciones en la ayuda del comando. Si queréis aprovechar también la capacidad de todos los núcleos del sistema podéis dejar a ffmpeg que los utilice a su elección con el parámetro -threads a 0 como hemos puestos. Lanzará un hilo de ffpmeg por cada núcleo, si pusieramos -threads pues lanzaría los threads que inidicaramos.

Si lo queremos hacer directamente con un fichero de audio:

~$ ffmpeg -i audio.ac3 -acodec libmp3lame audio.mp3

Cómo descargar vídeos a través de RTMP

Hay sitios web, sobre todo los de cadenas de televisión que ofrecen ‘televisión a la carta’ que ofrecen visualización de sus programas, series y demás pero no está (a simple vista) la posibilidad de descargar los vídeos. Muchos de estos sitios web ofrecen sus vídeos por RTMP.

Definición de RTMP por Wikipedia:

Real Time Messaging Protocol (RTMP) was initially a proprietary protocol developed by Macromedia for streaming audio, video and data over the Internet, between a Flash player and a server. Macromedia is now owned by Adobe, which has released an incomplete version of the specification of the protocol for public use.

The RTMP protocol has multiple variations:

The “plain” protocol which works on top of and uses TCP port number 1935 by default.
RTMPS which is RTMP over an TLS/SSL connection.
RTMPE which is RTMP encrypted using Adobe’s own security mechanism. While the details of the implementation are proprietary, the mechanism uses industry standard cryptography primitives.[1]
RTMPT which is encapsulated within HTTP requests to traverse firewalls. RTMPT is frequently found utilizing cleartext requests on TCP ports 80 and 443 to bypass most corporate traffic filtering. The encapsulated session may carry plain RTMP, RTMPS, or RTMPE packets within.

Para descargar estos vídeos desde GNU/Linux podemos utilizar rtmpdump, disponible en la mayoría de repositorios, en Debian y derivados lo instalamos desde apt:

# apt-get install rtmpdump

Para descargar el vídeo, primero debemos conocer la ruta completa al vídeo, para ello activamos el servidor rtmpdump:

$ rtmpsrv
RTMP Server v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu; license: GPL

Streaming on rtmp://0.0.0.0:1935

Como bien indican en este blog es necesario ahora redirigir todo el tráfico RTMP a nuestro equipo (al servidor que acabamos de levantar en el puerto TCP 1935, lo hacemos con IPTABLES:

# iptables -t nat -A OUTPUT -p tcp --dport 1935 -j REDIRECT

Ahora lo que debemos hacer es ir a nuestro navegador y reproducir el vídeo que queramos descargar, dejando el servidor rtmp escuchando en la terminal. Cuando empiece la reproducción el rtmpsrv capturará el tráfico y nos dirá directamente el comando que tenemos que ejecutar para la descarga del vídeo, ejemplo:

WARNING: gnome-keyring:: couldn't connect to: /tmp/keyring-45dvJQ/pkcs11: No such file or directory
WARNING: Trying different position for client digest!

rtmpdump -r "rtmp://aragontvvodfs.fplive.net/aragontvvod" -a "aragontvvod" \
-f "LNX 11,9,900,152" \
-W "http://alacarta.aragontelevision.es/js/flowplayer/flowplayer.commercial-3.2.7.swf" \
-p "http://alacarta.aragontelevision.es/programas/aragon-en-abierto/jueves-16-de-enero-16012014-1806" \
-y "mp4:/web/19241/19241.mp4" -o 19241.flv
Closing connection... done!

Ahora simplemente deshabilitamos la redirección de tráfico con IPTABLES y descargamos el vídeo:

# iptables -t nat -D OUTPUT -p tcp --dport 1935 -j REDIRECT

Descargamos:

$ rtmpdump -r "rtmp://aragontvvodfs.fplive.net/aragontvvod" \
-a "aragontvvod" -f "LNX 11,9,900,152" \
-W "http://alacarta.aragontelevision.es/js/flowplayer/flowplayer.commercial-3.2.7.swf" \
-p "http://alacarta.aragontelevision.es/programas/aragon-en-abierto/jueves-16-de-enero-16012014-1806" \
-y "mp4:/web/19241/19241.mp4" -o 19241.flv
RTMPDump v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
WARNING: gnome-keyring:: couldn't connect to: /tmp/keyring-45dvJQ/pkcs11: No such file or directory
Connecting ...
INFO: Connected...
Starting download at: 0.000 kB
INFO: Metadata:
INFO:   duration              5748.75
INFO:   moovPosition          40.00
INFO:   width                 640.00
INFO:   height                360.00
INFO:   videocodecid          avc1
INFO:   audiocodecid          mp4a
INFO:   avcprofile            100.00
INFO:   avclevel              30.00
INFO:   aacaot                2.00
INFO:   videoframerate        25.00
INFO:   audiosamplerate       48000.00
INFO:   audiochannels         2.00
INFO: tags:
INFO:   ©too                 Lavf54.63.104
INFO: trackinfo:
INFO:   length                73583616.00
INFO:   timescale             12800.00
INFO:   language              und
INFO: sampledescription:
INFO:   sampletype            avc1
INFO:   length                275940160.00
INFO:   timescale             48000.00
INFO:   language              und
INFO: sampledescription:
INFO:   sampletype            mp4a
656177.338 kB / 5748.74 sec (99.9%)
Download complete

Applet para controlar brillo de pantalla en XFCE

Por defecto el gestor de ventanas XFCE no ofrece un applet que permita regular el brillo del monitor, algo muy necesario en equipos portatiles para no quedarte ciego con el brillo por defecto que ofrecen las instalaciones.

Normalmente se usa xbacklight o modificando directamente el valor en ficheros de configuración, ejemplo:

echo 5 | sudo tee /sys/class/backlight/acpi_video0/brightness

Si queréis disponer de un applet en la barra de menús para poder cambiar este valor a golpe de click simplemente tenéis que instalar los plugins xfce4-power-manager-plugins a través de apt o el gestor de paquetes que utilicéis según distribución:

$ sudo apt-get install xfce4-power-manager-plugins

Una vez instalado pincháis con el botón derecho en el panel, “Add New Items” y seleccionáis “Brightness plugin”, lo colocáis donde queráis y bingo:

brightness

Dia: creación de diagramas en GNU/Linux

Para aquellos que necesiten crear diagramas en GNU/Linux y no dispongan de acceso a otros programas como Visio, Dia es una buena alternativa con licencia GPL que también está disponible en otras plataformas como MacOS X, Unix y Windows.

Dia ofrece soporte a muchos tipos de diagramas y contiene objetos especiales para cada uno de ellos: flujos de trabajo, UML, red, etc. Los diagramas se pueden guardar en formato XML y exportar a otros como EPS, SVG, XFIG, WMF y PNG.

Podéis descargarlo a través del sitio oficial o utilizar los repositorios de las distribuciones correspondientes.

dia diagrams

Cuidando la vista con f.lux

Creo que no soy el único que pasa cerca de 11 horas al día frente a la pantalla del ordenador. Nuestro trabajo nos lo exige y además somos “masocas” y al llegar a casa más de lo mismo. Como todos sabemos esto no es bueno para la vista y todo lo que pueda ayudarnos a cuidarla y tener mejores hábitos bienvenido sea.

Ahora mismo estoy probando el software f.lux que está disponible para GNU/Linux, Windows, Mac, iPad/iPhone. Básicamente lo que hace es regular el calor y tono de luz de la pantalla según la hora del día en la que nos encontremos (lo detecta por coordenadas) o según el tipo de iluminación que tengamos en la habitación.

El cambio es progresivo, si estamos muchas horas frente al ordenador no notaremos cambios bruscos de color y brillo sino algo gradual. Yo de momento lo estoy probando a ver si noto algo, según opiniones por Internet sí que se nota y no se fuerza tanto la vista, sobre todo cuando estamos por la noche en el PC.

Para instalarlo con APT:

$ sudo add-apt-repository ppa:kilian/f.lux
$ sudo apt-get update
$ sudo apt-get install fluxgui
f.lux

Vmail: interfaz en Vim para Gmail

Vmail Vim Gmail
Vmail Vim Gmail

Seguimos con otra entrada relacionada con Vim, eso sí, esta es realmente curiosa. Ayer, leyendo el twitter de nixCraft descubrí Vmail, una interfaz en Vim para Gmail.

Vmail ha sido desarrollado a partir de la versión 7.3 de Vim y usando Ruby 1.9.2. En el sitio web de Vmail tenéis todos los detalles y documentación de como usarlo. Para su instalación debemos disponer de las dependencias Ruby 1.9.0 o superior con soporte SSL, libsqlite3-dev, sqlite3 y lynx text-only-mode web browser si queremos ver las partes HTML de los correos, todo ello instalable a través de gestores de paquetes, yum en RHEL y derivados y apt en Debian, etc.

Instalación (con ruby gem):

# gem install vmail

Para ejecutarlo:

# vmail

Al igual que vim, cuenta con un fichero de configuración por usuario (.vmailrc), os recomiendo leer la documentación para sacar todo el partido a la aplicación ya que es muy completa. Por cierto, Vmail usa TLS (Transport Layer Security) para la autenticación IMAP y SMTP.

SLAMD Distributed Load Generation Engine

slamd logoPese a que Sun Microsystems ya no mantiene un desarrollo activo de la aplicación, SLAMD (SLAMD Distributed Load Generation Engine) sigue siendo una excelente opción para realizar todo tipo de pruebas de carga, rendimiento y stress a nuestras redes, servidores y aplicaciones.

SLAMD nos ofrece a apenas un click de distancia decenas de pruebas de stress, las cuales podemos personalizar según nuestros requerimientos, volumen de carga/stress a aplicar, etc. Por ejemplo tenemos distintos trabajos para hacer testing a LDAP (importar, exportar, búsquedas asíncronas, generadores de carga con búsquedas múltiples…), también HTTP (en este caso mucho más potente JMeter), pruebas SMTP, IMAP y POP3, scripting, SQL, Throughput de red, pruebas TCP, stress de CPU, etc. Una vez realizados los tests recibimos informes con una gran cantidad de información relevante que podemos exportar en HTML, PDF o texto plano, incluye cifras, máximos, mínimos y medias, gráficos…

informe  slamd

La forma más sencilla de hacerlo funcional no requiere instalación, podemos bajar todo el aplicativo, cliente, servidor y Tomcat en un único paquete, descomprimirlo y arrancar Tomcat:

$ wget http://files.unboundid.com/slamd/slamd-2.0.1.zip
$ unzip slamd-2.0.1.zip
$ cd slamd/bin/
$ ./catalina.sh  start

Accedemos a la aplicación a través de http://hostname:8080. La primera vez que accedemos tenemos que inicializar la base de datos interna, una vez realizado ya podemos comenzar las pruebas que queramos. Si necesitamos generar la carga distribuida desde varios servidores, únicamente tenemos que habilitar en ellos el cliente. Lo descomprimimos, modificamos el fichero de configuración indicando el servidor al que se conectará  y arrancamos:

$ ls -l slamd_client*
-rw-r--r-- 1 alex alex 5294716 2010-03-20 17:58 slamd_client-2.0.1.zip
$ unzip slamd_client-2.0.1.zip
$ ls -l slamd_client/slamd_client.conf
-rw-r--r-- 1 alex alex 1259 2010-03-20 17:58 slamd_client/slamd_client.conf
$ slamd_client/start_client.sh

Para poder ejecutar el cliente de forma independiente al servidor debemos tener instalado JAVA en el equipo. Os recomiendo de todas formas leer las guías de QuickStart (OpenDocument  |  PDF ) y la de Herramientas (OpenDocument  |  PDF ) para sacarle un mayor partido a la aplicación.

grafico slamd

Cómo ver el estado, modelo y número de serie de discos duros en hpacucli

En esta entrada vamos a ver como ver el estado, modelo (P/N), número de serie y características de cada uno de los discos físicos conectados a la controladora de un servidor HP Proliant. Lo vamos a hacer mediante la utilidad de HP hpacucli, de la cual ya hablé en otras ocasiones: hpacucli: gestión de RAID Array en servidores HP desde Linux.

En mi caso además de por la utilidad evidente de los datos que nos facilita es útil para los casos en el que hay que contactar con soporte de HP y necesitan el Part Number o número de serie del disco físico.

Lo primero que hacemos es acceder a hpacucli desde la shell ssh:

# hpacucli 
HP Array Configuration Utility CLI 8.40-4.0
Detecting Controllers...Done.
Type "help" for a list of supported commands.
Type "exit" to close the console.

=>

Tenemos que averiguar la controladora a la cual están conectados los discos, la mayoría de veces es el slot 0 pero conviene revisarlo:

=> controller all show    

Smart Array P410i in Slot 0 (Embedded)    (sn: XXXXXX)

Ahora ya podemos visualizar los datos de todos los discos o de cada uno en concreto. En este caso ha sido necesario para averiguar el nº de serie y P/N de un disco averiado:

=> controller slot=0 pd all show detail

Smart Array P410i in Slot 0 (Embedded)

   array A (Failed)

      physicaldrive 1I:1:1
         Port: 1I
         Box: 1
         Bay: 1
         Status: OK
         Drive Type: Data Drive
         Interface Type: SAS
         Size: 72 GB
         Rotational Speed: 15000
         Firmware Revision: HPDC
         Serial Number: XXXXXX
         Model: HP      XXXXXX
         PHY Count: 2
         PHY Transfer Rate: 6.0GBPS, Unknown
      physicaldrive 1I:1:2
         Port: 1I
         Box: 1
         Bay: 2
         Status: Failed
         Drive Type: Data Drive
         Interface Type: SAS
         Size: 72 GB
         Rotational Speed: 15000
         Firmware Revision: HPD3
         Serial Number: XXXXXX
         Model: HP      XXXXXX
         PHY Count: 2
         PHY Transfer Rate: 6.0GBPS, Unknown

Optimización de un sitio web con Firebug

firebug

Probablemente no sea el más indicado para hablar sobre esta extensión de Firefox ya que apenas llevo unos días utilizándola, pero me ha dejado tan impresionado que por lo menos intentaré dar unas pinceladas de todas las posibilidades que nos ofrece.

Firebug es una herramienta imprescindible para desarrolladores web, diseñadores y webmasters. En pocas palabras, permite depurar, optimizar y eliminar fallos de la programación y estructuración de una página web y todos los elementos que la componen (javascript, html, css, imágenes…). Todo ello gracias a detallados informes, sugerencias, visores de código, etc.

Las características más importantes que he encontrado en este poco tiempo han sido:

  • Edición a tiempo real del código de la página web:
    Podemos modificar directamente desde el navegador el código HTML del sitio web, el CSS o JavaScript sin tener que tocar el código original. Ideal para probar cambios sin alterar ni una línea de código de nuestra web.
  • Analizador de rendimiento (Page Speed):
    La sección a la que más partido he sacado, muestra un informe exhaustivo de la carga de una página web, entre otras cosas podemos ver (en otros post ya hablaré sobre como maximizar la optimización de cada punto):

    • Nivel de optimización de caché a nivel de navegador (Expiración de cabeceras, etc).
    • Peticiones DNS externa (llamadas a objetos externos a nuestro sitio web)
    • Eficiencia de CSS, JavaScript, HTML, etc (No solo te indica en que puntos mejorar, sino que te ofrece la descarga del código optimizado).
    • Niveles de compresión: Indica el % de compresión que podemos aumentar, así mismo ofrece la descarga de css, javascript y html con un nivel de compresión mejorado.
    • Optimización de imágenes: Indica el % de optimización de imagenes disponible, con la descarga a cada una de las imagenes ya optimizadas. Este punto es espectacular, reduce considerablemente el peso de las imagenes sin perder un ápice de calidad.
    • Optimización de estructura de HTML.Y muchas opciones más que todavía no he tenido la opción de descubrir…
  • Informes sobre los niveles de latencia en las peticiones web, peso de cada petición, tiempo de carga total y parcial del sitio web y sus objetos
    Informe firebug
  • Consola de errores y depuración

Esto es lo que he podido “trastear” durante este par de días con la herramienta, seguro que algunos de vosotros (programadores y desarrolladores) lleváis años trabajando con ella, así que si tenéis alguna mención especial a alguna utilidad de la misma será bienvenida.

Descarga Firebug: getfirebug.com

Firebug en acción: