Viendo el progreso en el uso del comando dd


Por una falla de disco causada por un altibajo de voltaje en un disco de 500 GB , se ha corrompido una instalación y me he obligado a rellenar con ceros el disco para ponerlo vacío usando un live cd , he usado dd de la siguiente forma:


# dd if=/dev/zero of=/dev/sda


Sin embargo el uso de 'dd' no es atractiva para un disco de dicha capacidad dado que no indica el progreso. Usando la señal especial USR1 , podemos ver el progreso.

Como requiero el PID del proceso, lo obtendría usando

ps -ef | grep dd


Supongamos que el PID obtenido sea 1337, el progreso lo veríamos así

kill -USR1 1337


Sin embargo, tendría que estar ejecutando en vez en cuando la linea para ver el progreso. Así que haciendo un script sería de la siguiente forma


#!/bin/bash

for ((;;)); do
sleep 15s
kill -USR1 1337
done

#Fin de script


Cada 15 segundos (pudiéndose colocar otros valores) mostraría algo así



(click en la imagen para verla más grande)

Escuchando emisoras de radio con mplayer en consola a través de un proxy


Confieso que a veces trabajar sin música es raro. Y normalmente uso cvlc para escuchar emisoras de radio por internet , pero al estar tras un proxy , resumo el momento con un alias en ~/.bashrc de esta forma alias escuchar='cvlc --http-proxy=$http_proxy' , y solo doy escuchar stream_URL .

Pero en raras ocaciones, pierdo mucho la conexión en algunas emisoras y por ende el streaming con cvlc . Antiguamente usaba mplayer pero para otros tipos de streams. Así que se me ocurrió un script para usarlo y añado el soporte de ctrl+c , puesto que al presionarlo , siempre me quedaba mplayer ejecutándose.

¿Donde esta gfxboot.cfg?

Si andas buscando el archivo de configuración de gfxboot.cfg, te darás cuenta que no esta en una ubicación directa, sino que forma parte de una archivo cpio, un archivo binario que aloja en si mismo una serie de archivos a modo de directorio comprimido.

Este archivo cpio varia en su nombre en algunas distribuciones (En Suse Enterprise esta en /boot/messages y en Mandriva en /boot/gfxmenu por mencionar ejemplos), así que una forma sencilla de ubicar es revisando en el archivo de configuración del Grub la linea gfxmenu. Una linea en comando sería algo así

$ grep gfxmenu /boot/grub/menu.lst
u
$ grep gfxmenu /boot/grub/grub.cfg  


Según que se que use Grub u Grub2 respectivamente.

Supongamos que la ubicación obtenida haya sido /boot/gfxmenu , el paso para extraer el archivo es crear un directorio y extraerlo allí

$ mkdir test ; cd test/ ; cpio -idv < /boot/gfxmenu

Al hacer esto, no sólo obtenemos el archivo en cuestión sino el contenido del archivo cpio.

Si se desea hacer cambios permanentes al archivo gfxboot.cfg debemos hacer lo siguiente dentro del directorio creado

# ls | cpio -o > /boot/gfxmenu

El pesebre geek del blog


Tengo costumbre de bromear un poco con los pesebres cada año y para no perder la costumbre, el de este año no podia ser más geek. El del año pasado esta por este enlace

Forzando a cerrar procesos cuyas conexiones estan en estado CLOSE

En ciertas ocasiones, he tenido que cancelar las conexiones del servicio apt-cacher Debian que se me vuelve cuello de botella al saturar la limitante de uso de las interfaces de red.

Aunque en otra oportunidades lo he usado para cancelar las conexiones en un conocido simulador de router Cisco.

El comando sería algo así

#!/bin/bash
netstat -plant | grep CLOSE | awk {'print $7'} | sed "s/[^0-9]//g" | xargs kill -9

Yaourt y de como me toca actualizar

Desde que me mude a ArchLinux, no he tenido en problemas de aprender cosas nuevas. A raíz de la necesidad de usar paquetes en AUR, he tenido siempre la dificultad de verificar/obtener versiones nuevas tras un proxy. Normalmente, la instalación si me funciona, pero no al momento del chequeo de updates. La cosa a la que me refiero es que no me funciona muchas veces este comando yaourt -Su --aur Según Internet, la variable de entorno es fundamental, pero igual. No me ha funcionado,

Así que me resolví hacer dos scripts para al menos , de forma visual dar con los paquetes desactualizados.

El primero en bash sería algo así


#! /bin/bash

yaourt -Q | grep local | awk 'BEGIN { FS="/"} {print $2 }' | awk '{print $1}' > AUR

Las dos primeras partes busca los paquetes que están instalados y filtra los que fueron de forma local, obteniendo resultados de esta forma


...
local/codecs-all 20071007-4
local/ddcxinfo-arch 0.8-2
local/etherwake 1.09-3
local/go-openoffice.org-es 3.2.1.3-2
...


Pero como lo que requiero es el nombre del paquete, hago un filtro usando como separador el carácter "/" obteniendo algo asi


...
codecs-all 20071007-4
ddcxinfo-arch 0.8-2
etherwake 1.09-3
go-openoffice.org-es 3.2.1.3-2
...


Luego como esta separado el nombre de la versión con un espacio, el nombre seria una columna , awk '{print $1}' me daría sólo esa columna



...
codecs-all
ddcxinfo-arch
etherwake
go-openoffice.org-es
...


AL final decidí guardar el resultado en un archivo, de nombre AUR.


El segundo script en Perl sería para que por cada linea en el archivo AUR me busque en yaourt. Sería algo así

#!/usr/bin/perl
open (ARCH, "AUR");

foreach $linea (&lt;ARCH&gt;) {
chomp($linea);
system("yaourt -Ss ".$linea );
}

close(ARCH);

Al hacer esto , el resultado que se muestra es que el paquete desactualizado aparece marcado en rojo.

He acá mi drama.

Añadiendo un TimeStamp a 'history'

Ordinariamente el comando 'history ' indica, el número de comando y el comando ejecutado. Sin embargo , no es suficiente en muchos casos,(en el desarrollo de software por un equipo ). Es útil ver cuando adicionalmente vemos las fechas de ejecución del comando.

Si usamos

export HISTTIMEFORMAT="%d/%m/%y %T "


Obtendríamos un resultado similar a este :
.
.
.
421 20/04/10 21:10:27 cp -vRf * ../ubuntu
422 20/04/10 21:10:27 cd ..
423 20/04/10 21:10:27 mount
424 20/04/10 21:10:27 umount /var/www/tmp
425 20/04/10 21:10:27 ll
426 20/04/10 21:10:27 cd ubuntu/
427 20/04/10 21:10:27 l
428 20/04/10 21:10:27 cd install/
429 20/04/10 21:10:27 ll
430 20/04/10 21:10:27 cd netboot/
431 20/04/10 21:10:27 ll
432 20/04/10 21:10:27 ll /var/lib/tftpboot/
433 20/04/10 21:10:27 cp -Rf * /var/lib/tftpboot/
434 20/04/10 21:10:27 ll /var/lib/tftpboot/
435 20/04/10 21:10:27 cp -Rf * /var/lib/tftpboot/ubuntu-installer/
436 20/04/10 21:10:27 ll
437 20/04/10 21:10:27 ll ubuntu-installer/
438 20/04/10 21:10:27 cd /var/lib/tftpboot/
.
.
.
.

Para hacer los cambios permanentes puede añadirse el comando anterior en tu .bashrc

echo 'export HISTTIMEFORMAT="%d/%m/%y %T "' | tee -a ~/.bashrc

Usando inotifywatch


A veces me hacen preguntas extrañas. Créeme, no me esperaba algo así.

"¿Existe algo para ver los cambios en un filesystem?"

Ese día, respondí que no. Pero me sonaba. Pensé: "Cambios en filesystem, es como cambios en inodos." Bueno, ni modo, busqué en la red y me encontré con esta herramienta muy genial.

Se llama inotifywatch, forma parte del paquete inotify-tools y usa el mecanismo de seguimientos de de eventos relacionados a un archivo u a algún directorio (ver man 7 inotify) del kernel. Lo he vistos en varias distros.

Un ejemplo de su uso


[user@pc ~]$ inotifywatch -v -e access -e modify -t 15 -r ~
Establishing watches...
Setting up watch(es) on /home/user
OK, /home/user is now being watched.
Total of 2024 watches.
Finished establishing watches, now collecting statistics.
Will listen for events for 15 seconds.
total access modify filename
219 219 0 /home/user/Desktop/
8 0 8 /home/user/.gconfd/

En el ejemplo anterior, indica los eventos de acceso y modificación en un tiempo de 15 de forma recursiva en el directorio personal del usuario 'user'

Esta herramienta puede detectar casi cualquier operación sobre algún archivo u directorio, por lo que se puede usar en diversos escenarios, desde por ejemplo, ver que cantidad de archivos temporales crea un proceso u ver que archivo es muy descargado en su servidor web sin esperar a un crotab actualize sus estadísticas, por mencionar alguno.

Enlazando Twitter con Rhythmbox en ArchLinux/Debian/Ubuntu


Advertencia: Estas instrucciones sólo sirve para menor de Gnome 3.0

Desde hace meses he estado usando Arch Linux y en la medida de lo posible he estado adaptando lo que tenía antes instalado en Ubuntu. No hace días, vi que hay cambios para instalar el plugin para mostrar en Twitter lo que escuchas en Rhythmbox , por lo que origina este nuevo post, que, enfocado a Arch Linux, mencionare como seria hacerlo en Debian y derivados.

Lo primero es instalar el wrapper para entender la Api de Twitter , cuyo paquete es llamado python-twitter . En caso de Ubuntu Jaunty u Debian Lenny, la versión requerida es 0.6.1 que no esta en repositorio, por lo que ademas de instalar python-simplejson, lo bajarías de la página del proyecto en Google Code

Hay dos formas de obtener el plugin . La obtención del código del plugin fue movido de un repositorio SVN a un repositorio GIT por lo que podemos usarlo vía git

git clone git://github.com/dragon3/rhythmbox-twitter-plugin.git

En caso de no tener instalado el paquete git, se puede disponer del comprimido en el URL http://github.com/dragon3/rhythmbox-twitter-plugin/tarball/master

Luego de obtenido el código se accede al directorio y ejecutamos en consola como root

make install


Si hemos hecho todo bien, debería de aparecer entre los complementos en Rhythmbox "Twitter notifier"



Así debería de verse después de instalado el plugin

En Twitter se algo verá así

Recomendaciones
  • Si posees muchas canciones, trata que sean del mismo álbum y artista, algunos followers que tengas puede ver como spam tus updates que no sigan estas condiciones.
  • Si posees canciones sin artista y sin saber de que álbum pertenecen , mejor no actives el plugin pues se pueden verse así.

Poniendo el pesebre al Blog





Para los que me preguntaron, si!!!!!!!!. El Blog tendrá su pesebre. Por estas fechas es inevitable montar uno en casa, pero como no poseo el espacio para armar uno, me conformo al menos poniendo uno acá :P .

Esta ambientado a lo Final Fantasy ^_ ^ . El del año pasado estuvo genial.

Felices Pascuas y Renovado Año Nuevo 2010 A mis lectores.

Imagen Encontrada en Comics Alliance