viernes, 28 de diciembre de 2007

Compilando el kernel... ¡qué no hacer!

Después de insistir unas cuantas veces en los comentarios del blog de Vicente Navarro (aka Supercoco) por fin me puse a compilar el kernel de mi Ubuntu Gutsy Gibon. La verdad es que todo fue bien excepto por la instalación de los drivers de nvidia y el sonido.
La instalación de los drivers de nvidia fue rápida y sencilla (aunque previamente tuve que desinstalar los anteriores que traía ubuntu porque había algún conflicto.
Respecto al sonido, me faltaba un módulo que encontré en Device Drivers -> Sound -> Advanced Linux Sound Architecture -> PCI devices -> Intel HD Audio y todo funcionó sin problemas. Desde ese momento ya estoy trabajando con el kernel 2.6.23.11:
ivan@doraemon:~$ uname -a
Linux doraemon.casa 2.6.23.11-ILM #1 SMP Sat Dec 15 10:04:16 CET 2007 i686 GNU/Linux

   Después de esto me decidí a actualizar el kernel del servidor de backup que funciona con Debian Etch. Como (creo) que ya he comentado alguna vez, este ordenador sólo tiene el cable de alimentación y el cable de red. No tiene teclado, ratón, disquetera, lector de dvds,... nada que no utilice porque está pensado sólo para hacer backups e interactuar con él por ssh.

   Pues nada, compilo el nuevo kernel, le conecto mi teclado y monitor para ver que todo es correcto en el arranque y me aparece un bonito kernel panic. Esto no habría sido más que una simple anécdota si no fuera porque tenía configurado el grub para que arrancase el kernel por defecto con un delay de 0 segundos, así que entraba una y otra vez en el mismo kernel y no había manera de arrancar la máquina!. Al final tuve que subir al trastero y buscar un lector de cds para arrancar con un live-cd y poder editar el menu.lst para arreglar el estropicio. Después de dejarlo todo funcionando ya he aprendido la lección y ahora espera 5 segundos antes de arrancar, así cuando vuelva a compilar el kernel y no funcione bien a la primera no tenga que perder media mañana en arreglar el problema.
Moraleja: Por ahorrarme 5 segundos en el arranque al final gasté unas cuantas horas...

P.D: No arrancaba porque se me había olvidado crear el initrd...

miércoles, 12 de diciembre de 2007

Análisis y trucos de VMware Server ESX

   Lo prometido es deuda y aquí continúo con la última parte del análisis de VMware ESX Server.

   Una de las primeras dificultades que encontré fue aumentar el número de CPUs en las máquinas virtuales. Cuando creamos una máquina virtual con el asistente podemos elegir el número de CPUs virtuales (vcpus) entre 1 y 2 en función del sistema operativo. Así, con Windows 2003 Server el máximo es 2 y con Windows XP es 1. En seguida encontré cómo aumentar esto ya que como habéis visto en las capturas del artículo anterior, el servidor Windows 2003 tiene asignadas 4 CPUs. Para ello, en la consola de administracción, seleccionamos la máquina virtual que nos interese para ver todas sus opciones. Nos vamos al menú Options y en Verbose Options, añadimos la propiedad numvcpus con el valor que deseemos. En las máquinas virtuales con Windows XP he dejado sólo una y en Windows 2003 Server cuatro. El resultado es:


   Veamos un poco más de cerca el linux instalado que se encarga de gestionar todo:
[root@esxconsole root]# uname -a
Linux esxconsole 2.4.9-vmnix2 #1 Thu Sep 8 14:46:53 PDT 2005 i686 unknown

[root@esxconsole root]# vdf -h
Filesystem Size Used Avail Use% Mounted on
/dev/cciss/c0d0p2 2.4G 866M 1.4G 38% /
/dev/cciss/c0d0p1 50M 12M 36M 25% /boot
none 188M 0 187M 0% /dev/shm
vmhba2:0:0:6 200G 62G 138G 30% /vmfs/vmhba2:0:0:6

   Como ya nos comentó Supercoco en los comentarios del anterior artículo se trata de un kernel linux (en este caso 2.4). Justo "encima" de este kernel linux se ejecuta un vmkernel que se encarga de proporcionar todas las funciones de virtualización como por ejemplo el comando vdf anterior para mostrar los filesystems virtuales.

   El sistema de ficheros VMFS es el que está montado en /vmfs/vmhba2:0:0:6 y es donde se almacenan las máquinas virtuales. A diferencia de otras versión de VMware como la Server o la Workstation, en la versión ESX se reserva en el disco toda la capacidad que queramos dar a los discos duros de las máquinas virtuales. Así, aunque después de instalar el sistema operativo en la máquina virtual sólo tengamos ocupados un par de Gbytes, habremos "perdido" el espacio total del disco.
[root@esxconsole root]# ls -lh /vmfs/vmhba2\:0\:0\:6/
-rw------- 1 root root 20G Nov 13 10:28 W2K3_DiskC.vmdk
-rw------- 1 root root 5.0G Nov 13 10:28 W2K3_DiskE.vmdk
-rw------- 1 root root 7.9G Nov 7 09:48 SwapFile.vswp
-rw------- 1 root root 15G Nov 13 10:25 WXP_Client1_DiskC.vmdk

   Esta máquina está en una plataforma de pruebas junto con otras 20 que utilizamos en conjunto para probar todas las opciones de la aplicación. Después de instalar unas cuantas versiones, poner parches y demás, las instalaciones de las máquinas se quedan un poco "tocadas". Para evitar estar reinstalando tenemos hechas unas imagenes con Acronis True Image y de vez en cuando restauramos las máquinas al estado inicial. Hacer esto con VMware es tan fácil como apagar la máquina virtual y ejecutar:
[root@esxconsole vmhba2:0:0:6]# gzip -c W2K3_DiskC.vmdk > W2K3_DiskC_CLON.vmdk.gz

[root@esxconsole vmhba2:0:0:6]# ls -lh
-rw------- 1 root root 20G Nov 13 10:28 W2K3_DiskC.vmdk
-rw------- 1 root root 1.7G Nov 8 16:44 W2K3_DiskC_CLON.vmdk.gz

   Y después, cuando queramos recuperar la máquina, simplemente descomprimimos el archivo .gz y tenemos la máquina restaurada en muy poco tiempo.

   Otro de los aspectos a tener en cuenta es la instalación de Windows XP. Según se nos indica cuando seleccionamos la creación de una máquina virtual con dicho sistema operativo, necesitamos descargar los drivers SCSI de la web de WMware para que la instalación de Windows XP reconozca nuestro disco duro virtual. Es una imagen de disquete y para utilizarla tenemos que montar una disquetera virtual en la instalación y decirle que utilice dicha imagen.

   Todo el sistema se controla desde una interfaz gráfica que está muy cuidada y que muestra gran cantidad de información de las máquinas virtuales. Así, podemos tener una visión general de las máquina virtuales que están en ejecución, su consumo de memoria, cpu, el tiempo que llevan en funcionamiento,...

   Luego, si seleccionamos una máquina virtual concreta podemos tener estadísticas más detalladas de la utilización de las CPUs, acceso al disco o la red, podemos controlar en qué CPUs físicas queremos ejecutar la máquina virtual,... y así un gran número de opciones.


   Otra de las opciones que posee VMware ESX es una web de estadísticas en la que podemos ver el estado de las máquinas virtuales, el consumo de CPU, disco duro, ancho de banda,... a lo largo del tiempo. Para activarlas simplemente ejecutamos:
[root@esxconsole root]# vmkusagectl install
Info: Adding cron job

   Con lo que cada minuto se ejecutará por crontab el script que recolecta las estadísticas y a través del navegador web podemos analizarlas. Podemos tener una visión general del estado del sistema o centrarnos en una máquina virtual concreta, ver el estado por día, semana,...


Además de todo lo anterior, también podemos exportar e importar las máquinas virtuales al formato de las versiones Server/Workstation:
[root@esxconsole vmhba2:0:0:6]# vmkfstools -e ExportVM.vmdk vmhba2:0:0:6:WXP_Client1_DiskC.vmdk
Exporting disk vmhba2:0:0:6:WXP_Client1_DiskC.vmdk:
Export: 100% done.

[root@esxconsole vmhba2:0:0:6]# ls -lh ExportVM*
-rw------- 1 root root 1.6G Nov 22 09:17 ExportVM-s001.vmdk
-rw------- 1 root root 1.0G Nov 22 09:17 ExportVM-s002.vmdk
-rw------- 1 root root 1.1G Nov 22 09:17 ExportVM-s003.vmdk
-rw------- 1 root root 2.0G Nov 22 09:17 ExportVM-s004.vmdk
-rw------- 1 root root 912M Nov 22 09:17 ExportVM-s005.vmdk
-rw------- 1 root root 2.0G Nov 22 09:17 ExportVM-s006.vmdk
-rw------- 1 root root 1.5G Nov 22 09:17 ExportVM-s007.vmdk
-rw------- 1 root root 1.2M Nov 22 09:17 ExportVM-s008.vmdk
-rw------- 1 root root 614 Nov 22 09:17 ExportVM.vmdk


   Finalmente para terminar decir que de momento todo funciona muy bien y estoy muy contento con la oportunidad de haber podido cacharrear con este producto. Soy un fanático de la virtualización y desde las primeras versiones de VMware Workstation tanto para windows como para linux estoy utilizando el producto y me encanta. El futuro es la virtualización porque cada vez tenemos máquinas más potentes a precios más bajos. Evidentemente, en este caso particular de virtualizar máquinas windows, siempre necesitamos otro equipo para conectarnos a través de la consola e interactuar con la máquina virtual. Esto no ocurriría si instalasemos máquinas virtuales linux ya que sólo necesitaríamos acceso por ssh. Aún así, se de primera mano que en grandes empresas se utiliza para virtualizar servidores windows en máquinas Blade.

lunes, 10 de diciembre de 2007

Aprovechando servidor HP Proliant con VMware ESX Server

   En el anterior post comentaba que teníamos en el trabajo unos servidores nuevos pero que estaban siendo totalmente desaprovechados. Comenzamos justo donde lo dejé diciendo que había encontrado la forma de poder aprovecharlos. Se trata de utilizar VMware Server ESX 2.5 (como ya acertó Supercoco en los comentarios) para virtualizar el Windows 2003 Server. VMware ESX está basado en linux como sistema operativo base lo que le proporciona gran estabilidad, más concretamente en RedHat 7.1. Además incluye un conjunto de utilidades que actúan como capa de acceso a todo el hardware que proporcionan la virtualización. Utiliza un sistema de ficheros propio, VMFS en el que se almacenan los discos virtuales de cada máquina virtual y que se puede compartir entre varios servidores ESX. Los requisitos para la instalación de VMware ESX son bastante elevados puesto que están pensados para servidores. Así, debemos tener una máquina multiprocesador, gran cantidad de RAM, al menos dos tarjetas de red y controladora SCSI, RAID ó FC principalmente.

   La instalación de VMware ESX es muy sencilla, sólo hay que configurar la zona horaria, el password de root, la distribución del teclado y las particiones. La controladora raid fue reconocida sin ningún problema y en poco más de 20 minutos tenía el sistema instalado. Una vez reiniciada la máquina para arrancar ya con ESX me conecté a la web de administración para terminar de configurar el sistema. Aquí lo único necesario es configurar un archivo swap de intercambio y crear un switch virtual para las máquinas virtuales. Tambien es necesario indicar cuanta memoria queremos reservar para el sitema base que se encargará de gestionar las máquinas virtuales. En función del número de máquinas virtuales que deseemos tener, éste variará entre 198 y 800 MB para un total de entre 8 y unas 60-70 máquinas virtuales.

   Hecho esto y después del pertinente reinicio para que se reserve la memoria seleccionada para la consola ya podemos crear nuestra primera máquina virtual. El asistente de creación es similar al existente tanto en VMware Workstation como VMware Server y no presenta ninguna dificultad. Una vez hecho esto nos descargamos desde el propio servidor la consola para poder conectarnos a las máquinas virtuales y podemos comenzar con la instalación del sistema operativo.

   Después de un rato instalando y configurando todo tenía el Windows 2003 Server listo y con una configuración más equilibrada que la anterior. En este caso le asigné 4 CPUs y 4 GB de RAM (realmente fueron 3600MB por imposición de VMware).

   El resto lo dejé libre para crear máquinas virtuales que actuarán como clientes y que necesitan menos recursos. Seguramente serán 4 máquinas virtuales con Windows XP con una CPU y 1 GB de RAM.

   Me guardo para el próximo artículo contar desde un punto de vista algo más técnico algunas curiosidades de WMware ESX Server y algunos pequeños trucos y ayudas.

sábado, 8 de diciembre de 2007

Regalo friki de cumpleaños

   Hoy cumplo 28 años y este que veis a continuación es el regalo friki (a parte de otros) que me ha hecho mi mujer (gracias cariño!). Llevaba tiempo mirando y buscando por la red para conseguir algo así y por fin hoy ya lo tengo.

   A parte de la camiseta, el paquete también es muy friki: la cinta de embalar, el remitente,... Me ha hecho especial gracia el mensaje que pone en la caja: De friki a friki.

   Y bueno, si alguien quiere hacerme algún regalo, estoy abierto a cualquier cacharro tecnológico que sea chulo y frikadas varias. Si quereis la información para enviarme un regalo escribidme un email ;-).

lunes, 3 de diciembre de 2007

Instalando un servidor HP Proliant DL360

   El cliente del proyecto en el que estoy trabajando nos ha enviado un par de servidores HP Proliant DL360. Estos servidores vienen equipados con 2 procesadores Intel Xeon E5345 Quad Core, 8 GB de RAM, 4 discos duros de 10.000 rpm (pero de sólo 2,5 pulgadas) de 72 GB en RAID 5 (por hardware), 2 tarjetas de red y además con el teclado y monitor integrados en el extraño rack que podéis ver en las fotos (tomadas con un par de móviles).

   En estas máquinas instalamos una versión de nuestra aplicación que actua como servidor. El sistema operativo que llevan instalado es Windows 2003 Server y trabajamos con Oracle 10g y Exchange.

   Como es de sobra conocido, un sistema operativo de 32 bits como el que tenemos instalado no permite direccionar más de 4 GB de RAM (a lo que hay que restarle la reservada para direccionar la memoria de la tarjeta gráfica). Así, después de tener instalado uno de los servidores, abrimos el administrador de tareas y vemos esto:

   A mi se me cayó literalmente el alma a los pies al ver cómo de desaprovechada estaba la máquina. Más de 4 GB de RAM ni siquiera existían para el sistema operativo y las 8 CPUs (4 cores en cada micro) son excesivas para nuestra aplicación, por lo que también están infrautilizadas.

   Entonces nos planteamos instalar la versión de 64 bits de Windows 2003 Server, pero finalmente no pudo ser porque teníamos problemas con el Exchange y también con nuestra aplicación. Así, parecía que íbamos a tener ahí esas impresionantes máquinas totalmente desaprovechadas.

   Como no me quedé contento con eso pensé una solución para sacarle el mayor partido al hardware que tenemos y al final la encontré, pero eso lo contaré en el siguiente artículo.

lunes, 26 de noviembre de 2007

Los viejos tiempos...

   Aunque en mi nuevo trabajo estoy muy contento no sólo porque estoy más cerca de casa y por el horario, sino porque me gusta lo que hago, a veces echo de menos tener minimizadas 12 sesiones de putty en distintas máquinas y cacharrear con algunas cosas que ahora ya no utilizo. He puesto en negrita máquinas porque tenía a mi "disposición" máquinas como esta:
$ /usr/platform/sun4us/sbin/prtdiag -v
System Configuration: Sun Microsystems sun4us Fujitsu Siemens PRIMEPOWER650 1- slot 8x SPARC64 V
System clock frequency: 270 MHz
Memory size: 12288 Megabytes

========================= CPUs =========================

Run Ecache CPU CPU
Brd CPU Module MHz MB Impl. Mask
--- --- ------ ----- ---- ----- ----
0 0 0 1349 2.0 5 0.8
0 1 1 1349 2.0 5 0.8
0 2 2 1349 2.0 5 0.8
0 3 3 1349 2.0 5 0.8
0 4 4 1349 2.0 5 0.8
0 5 5 1349 2.0 5 0.7
0 6 6 1349 2.0 5 0.8
0 7 7 1349 2.0 5 0.8


   Sí, es una máquina Fujitsu PrimePower 650 con 8 CPUs de 64 bits a casi 1,4 Ghz cada una de ellas y 12 GBytes de RAM (hay que tener en cuenta que esta máquina se compró a principios de 2005 cuando no era tan común tener tanta RAM). Esta máquina corre Solaris 9 y creo que es una de las más potentes de toda Validación Técnica. En esta máquina corrían tres instancias de base de datos Oracle 9i, alguna de ellas de 200 GBytes de datos, unos 12 Apache-Tomcat, 10 WebMethods Integration Server y alguna que otra cosa más y para remetar, le sumamos que está conectada por una tarjeta de fibra óptica a un armario de discos de Clariion con más de 13 TBytes, podéis imaginar cómo lo echo de menos. Antes de que preguntéis en los comentarios debo aclarar que esos 13 TBytes de espacio eran compartidos para todas las máquinas que no eran de producción, es decir, desarrollo y VT, por lo que no vale decir: la cantidad de MP3s y pelis que entrarían ahí ;-).

   En una de las intervenciones para el cambio de la systemboard que hubo en esta máquina después de algunos problemas, bajé al CPD aprovechando que tenía enchufe ;-) y le estuve haciendo algunas fotos (eso sí, con el móvil, por lo que la calidad no es muy buena) porque siempre tenía ganas de ver cómo era una máquina de estas por dentro.
Detalle Frontal
Frontal

System Board
Memoria

   En fin, que tengo un poco de nostalgia en ese sentido del trabajo que hacía antes pero también estoy muy contento con el cambio que hice hace casi un año.

miércoles, 21 de noviembre de 2007

Un año con ADSL y con Emule

   Hace aproximadamente un año que tengo adsl en casa y desde entonces he descargado mucho con el emule. Aquí podéis ver unas estádisticas de lo que llevo acumulado tanto de bajada como de subida.

   He de decir que aunque al principio empecé descargando muchas cosas y teniendo el servidor emule encendido prácticamente semanas, ultimamente sólo lo enciendo cada 5 ó 6 días para bajar los últimos capítulos de las series que vemos, que no son pocas pero que se bajan enseguida y otra vez lo apago de nuevo. En total y según las estadísticas ha estado encendido casi un 50% del tiempo y he descargado 365GB!!.

   El balance de este año con ADSL ha sido muy bueno puesto que el tiempo que estuvimos de alquiler antes de que nos dieran el piso se me hizo muy duro sin tener conexión. Además, con la conexión de 1 MB que tengo contratada actualmente me sobra para todo y no he tenido cortes en todo este tiempo salvo un día en el que estuve sin DNS un par de horas.

   Esperemos que dentro de un año siga tan contento porque después de la compra de Ya.com por Orange... me echo a temblar.

viernes, 16 de noviembre de 2007

¡Más de 100 suscritos al feed!

   Como podéis ver en la gráfica ya sois más de 100, concretamente 104, los que estáis suscritos al feed según Feedburner.

   Además, se puede ver que desde principios de agosto en que decidí utilizar feedburner el número de suscriptores ha ido creciendo y se ha duplicado!. Estas estadísticas me dan ánimo para seguir escribiendo porque sé que lo que hago os gusta y mucha gente me lo agradece en los comentarios. Así que ya sabéis, tenéis blog para rato... :-D.

   ¡Muchas gracias a todos!.

martes, 13 de noviembre de 2007

Cambiar un disco por uno de mayor capacidad con LVM en caliente

En mi anterior artículo sobre simular un raid lineal con LVM, RuBICK nos comentaba:
Luego hay otro "truquillo" para sustituir un disco de ej: 80 GB por uno de 300Gb en caliente y sin que nadie lo note, pero eso seguro que nos lo tiene guardado Iván para otro dia.

   Tal y como le contesté en los comentarios, ya conté en el artículo inicial del LVM cómo hacerlo, aunque revisando el artículo me he dado cuenta de que me quedó un poco largo y justo eso quedó al final. Así, lo he rescatado para que se vean aún más las posibilidades de LVM.

   Partimos de un disco/partición con datos /dev/sda1 y lo que vamos a hacer es reemplazarlo por uno nuevo /dev/sdb1 previamente formateado con LVM.
  • Creamos un PV en la nueva partición:
    shian:~# pvcreate /dev/sdb1
    Physical volume "/dev/sdb1" successfully created
  • Lo añadimos al VG vg01 ya existente:
    shian:~# vgextend vg01 /dev/sdb1
    Volume group "vg01" successfully extended
  • Mostramos la información y comprobamos que tenemos dos PVs en el mismo VG. Nos fijamos en las extensiones disponibles en cada uno:
    shian:~# vgdisplay -v vg01
    Using volume group(s) on command line
    Finding volume group "vg01"
    --- Volume group ---
    VG Name vg01
    System ID
    Format lvm2
    Metadata Areas 2
    Metadata Sequence No 5
    VG Access read/write
    VG Status resizable
    MAX LV 0
    Cur LV 1
    Open LV 1
    Max PV 0
    Cur PV 2
    Act PV 2
    VG Size 5.99 GB
    PE Size 4.00 MB
    Total PE 1534
    Alloc PE / Size 256 / 1.00 GB
    Free PE / Size 1278 / 4.99 GB
    VG UUID BpNJTl-9tlr-DjzM-C8Mb-LfnL-NWDa-uyWDpf

    --- Logical volume ---
    LV Name /dev/vg01/lvdatos
    VG Name vg01
    LV UUID 7CYTLY-YgI2-c64S-F50h-vPXH-TEk9-o4hFOE
    LV Write Access read/write
    LV Status available
    # open 1
    LV Size 1.00 GB
    Current LE 256
    Segments 1
    Allocation inherit
    Read ahead sectors 0
    Block device 254:0

    --- Physical volumes ---
    PV Name /dev/sda1
    PV UUID 1wounc-DIHj-Tf54-4h2c-4rcB-w137-gLH4I6
    PV Status allocatable
    Total PE / Free PE 511 / 255

    PV Name /dev/sdb1
    PV UUID N0nwct-jNnY-eU0D-6Evh-tkIN-9vKs-9KsV3v
    PV Status allocatable
    Total PE / Free PE 1023 / 1023
  • Movemos la información de la partición que queremos liberar. Previamente nos aparece un error indicando que necesitamos tener activado en el kernel el mirror, así que cargamos el módulo:
    shian:~# pvmove /dev/sda1
    mirror: Required device-mapper target(s) not detected in your kernel

    shian:~# modprobe dm_mirror
  • De nuevo, intentamos mover los datos, aunque ahora sí lo conseguimos. Este paso variará en función de la cantidad de datos que se deban mover:
    shian:~# pvmove -v /dev/sda1
    /dev/sda1: Moved: 100.0%
  • Comprobamos el estado del VG y vemos que el PV /dev/sda1 tiene todas las extensiones disponibles:
    shian:~# vgdisplay -v vg01
    ...
    ...
    --- Physical volumes ---
    PV Name /dev/sda1
    PV UUID 1wounc-DIHj-Tf54-4h2c-4rcB-w137-gLH4I6
    PV Status allocatable
    Total PE / Free PE 511 / 511

    PV Name /dev/sdb1
    PV UUID N0nwct-jNnY-eU0D-6Evh-tkIN-9vKs-9KsV3v
    PV Status allocatable
    Total PE / Free PE 1023 / 767
  • Y finalmente eliminamos el PV /dev/sda1 del VG vg01 y comprobamos el resultado:
    shian:~# vgreduce -v vg01 /dev/sda1
    Removed "/dev/sda1" from volume group "vg01"

    shian:~# vgdisplay -v vg01
    Using volume group(s) on command line
    Finding volume group "vg01"
    --- Volume group ---
    VG Name vg01
    System ID
    Format lvm2
    Metadata Areas 1
    Metadata Sequence No 11
    VG Access read/write
    VG Status resizable
    MAX LV 0
    Cur LV 1
    Open LV 1
    Max PV 0
    Cur PV 1
    Act PV 1
    VG Size 4.00 GB
    PE Size 4.00 MB
    Total PE 1023
    Alloc PE / Size 256 / 1.00 GB
    Free PE / Size 767 / 3.00 GB
    VG UUID BpNJTl-9tlr-DjzM-C8Mb-LfnL-NWDa-uyWDpf

    --- Logical volume ---
    LV Name /dev/vg01/lvdatos
    VG Name vg01
    LV UUID 7CYTLY-YgI2-c64S-F50h-vPXH-TEk9-o4hFOE
    LV Write Access read/write
    LV Status available
    # open 1
    LV Size 1.00 GB
    Current LE 256
    Segments 1
    Allocation inherit
    Read ahead sectors 0
    Block device 254:0

    --- Physical volumes ---
    PV Name /dev/sdb1
    PV UUID N0nwct-jNnY-eU0D-6Evh-tkIN-9vKs-9KsV3v
    PV Status allocatable
    Total PE / Free PE 1023 / 767

  •    Así, hemos conseguido cambiar un disco que se nos estaba quedando pequeño por otro de mayor capacidad, en caliente y sin que nadie note nada. Obviamente si es un servidor con discos internos, necesariamente hay que apagar la máquina para añadir/quitar el disco, pero con máquinas conectadas a almacenamiento externo no habría ningún problema.

    viernes, 2 de noviembre de 2007

    Actualizando versión de Linux: ¡Aprende Windows!

       Hace un par de semanas he actualizado mi Ubuntu Feisty a Gutsy y la verdad es que ha sido mucho mejor de lo que yo me esperaba y para nada traumático.

       Al principio me planteé formatear e instalar de cero y posteriormente recuperar todos mis datos del backup. Esta es la mentalidad windows: hay que instalar el sistema operativo de cero y nada de actualizar porque sino se quedan versiones antiguas y hay problemas e incompatibilidades. Pero esto no es windows, sino Linux, así que preferí actualizar mi sistema a ver qué ocurría. Ejecuté el update-manager y comencé la actualización a Gutsy Gibbon. En total se descargaron algo más de 1 Gbyte de paquetes, luego reinicié, instalé los drivers de nvidia y listo. En poco más de 2 horas tenía mi linux actualizado a la última versión de Ubuntu y con todas mis opciones de configuración almacenadas y funcionando sin ningún problema. Luego sólo tuve que configurar Compiz Fusion (hasta ahora tenía Beryl) y listo, el escritorio como lo tenía antes e incluso con efectos más chulos.

       En definitiva, que de nuevo me reafirmo en la elección que hice a principios de mayo de este año eligiendo linux como mi nuevo sistema operativo para (casi, sniff) todo.

    jueves, 25 de octubre de 2007

    Simular un raid lineal con LVM partiendo de un disco con información

       Como continuación de la entrada anterior en la que contaba cómo crear un raid 1 a partir de un disco con datos y teniendo uno nuevo, ahora voy a responder a la pregunta que dejaba abierta al final. No obstante tengo que decir que tanto Super coco como Rubick se adelantaron a la solución en los comentarios del post.

       Si recordamos, el truco de crear el raid 1 con un único disco no funcionaba para un raid lineal, así que, ¿qué podemos hacer?. La solución que se me ha ocurrido es usar LVM. Aunque no es exactamente un raid lineal el resultado final es el mismo puesto que tenemos un único punto de montaje y la capacidad de los dos discos.

       Al igual que en el artículo anterior, no me voy a extender demasiado en los detalles puesto que mi anterior artículo sobre LVM en linux es más completo.
  • Partimos de la misma situación que en la entrada anterior. Ya existe la partición /dev/sda1 y se encuentra montada en /mnt/datos.
  • Particionamos el nuevo disco como LVM (tipo 8e).
    shian:~# fdisk /dev/sdb
    ...
    Disk /dev/sdb: 1073 MB, 1073741824 bytes
    255 heads, 63 sectors/track, 130 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot Start End Blocks Id System
    /dev/sdb1 1 130 1044193+ 8e Linux LVM
    ...
  • Creamos un PV y un VG en él.
    shian:~# pvcreate /dev/sdb1
    Physical volume "/dev/sdb1" successfully created

    shian:~# vgcreate vg01 /dev/sdb1
    Volume group "vg01" successfully created
  • Ahora creamos un lvol con toda la capacidad del disco:
    shian:~# lvcreate -L 1G -n lvdatos vg01
    Logical volume "lvdatos" created
  • Lo formateamos, lo montamos y copiamos los datos que ya tenemos.
    shian:~# mkfs.ext3 /dev/vg01/lvdatos

    shian:~# mkdir /mnt/datos_lvm
    shian:~# mount /dev/vg01/lvdatos /mnt/datos_lvm/

    shian:~# cp -a /mnt/datos/* /mnt/datos_lvm/
  • No perdamos de vista el espacio que tenemos disponible:
    shian:~# df -h
    /dev/sda1 1004M 43M 911M 5% /mnt/datos
    /dev/mapper/vg01-lvdatos
    1001M 18M 932M 2% /mnt/datos_lvm
  • Ahora desmontamos la partición con los datos originales, la eliminamos y creamos una nueva de tipo LVM.
    shian:~# umount /dev/sda1
    shian:~# fdisk /dev/sda
    ...
    Disk /dev/sda: 1073 MB, 1073741824 bytes
    255 heads, 63 sectors/track, 130 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot Start End Blocks Id System
    /dev/sda1 1 130 1044193+ 8e Linux LVM
  • Creamos un PV en el antiguo disco que acabamos de particionar.
    shian:~# pvcreate /dev/sda1
    Physical volume "/dev/sda1" successfully created
  • Y lo añadimos al VG que creamos al principio para ampliarlo.
    shian:~# vgextend vg01 /dev/sda1
    Volume group "vg01" successfully extended
  • Si mostramos la información del VG, podemos ver que ahora los dos discos forman parte de él y que tenemos 1016MB nuevos disponibles para utilizar, por lo que podemos ampliar el lvol.
    shian:~# vgdisplay -v vg01
    Using volume group(s) on command line
    Finding volume group "vg01"
    --- Volume group ---
    VG Name vg01
    System ID
    Format lvm2
    Metadata Areas 2
    Metadata Sequence No 3
    VG Access read/write
    VG Status resizable
    MAX LV 0
    Cur LV 1
    Open LV 1
    Max PV 0
    Cur PV 2
    Act PV 2
    VG Size 1.98 GB
    PE Size 4.00 MB
    Total PE 508
    Alloc PE / Size 254 / 1016.00 MB
    Free PE / Size 254 / 1016.00 MB
    VG UUID fYT1oQ-w6zH-z6b6-58eo-qZ39-u1Ua-vROsN4

    --- Logical volume ---
    LV Name /dev/vg01/lvdatos
    VG Name vg01
    LV UUID NBOF9q-jmfW-RCik-MH2P-0Od4-DgMR-5YRJf7
    LV Write Access read/write
    LV Status available
    # open 1
    LV Size 1016.00 MB
    Current LE 254
    Segments 1
    Allocation inherit
    Read ahead sectors 0
    Block device 253:0

    --- Physical volumes ---
    PV Name /dev/sdb1
    PV UUID yH8UHo-Vgy2-Pk9t-AozF-s1Ik-JPmL-og1kM4
    PV Status allocatable
    Total PE / Free PE 254 / 0

    PV Name /dev/sda1
    PV UUID 4cGeH2-nl7W-eH4a-mBHo-BCBI-b0np-f6gw1v
    PV Status allocatable
    Total PE / Free PE 254 / 254
  • Y finalmente lo ampliamos. Recordemos que primero ampliamos el lvol y luego el filesystem.
    shian:~# lvextend -L+1016M /dev/vg01/lvdatos
    Extending logical volume lvdatos to 1.98 GB
    Logical volume lvdatos successfully resized

    shian:~# umount /mnt/datos_lvm/

    shian:~# e2fsck -f /dev/vg01/lvdatos

    shian:~# resize2fs /dev/vg01/lvdatos
    The filesystem on /dev/vg01/lvdatos is now 520192 blocks long.
  • Y ya estaría ampliado sin necesidad de formateos.
    shian:~# df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/vg01-lvdatos
    2.0G 43M 1.9G 3% /mnt/datos_lvm

  •    Y con esto respodo a la duda inicial que me planteó Renato. Espero que te sea útil.

    viernes, 19 de octubre de 2007

    Crear un raid 1 a partir de un disco con datos sin formatear

       Hace unos días recibí un email de un lector de este blog, Renato, diciéndome que tiene un NSLU2 con Debian, qué envidía :-P, y con un disco duro muy lleno. Me preguntaba si podía añadir un nuevo disco y crear un raid sin tener que reformatear.

       Me picó la curiosidad y el resultado es este tutorial. No voy a extenderme demasiado en las explicaciones puesto que en el tutorial del raid 1 que hice hace tiempo se puede encontrar la información más detallada. Manos a la obra!.
  • Como preparación he creado una partición /dev/sda1, la he montado en /mnt/datos y he copiado algo de información en ella. Esta sería la partición que ya tenemos casi llena y no queremos tener que formatearla.
  • Vamos a crear un raid 1 con el otro disco (el disco nuevo que todavía no tiene información). Particionamos como tipo fd:
    shian:~# fdisk /dev/sdb
    ...
    Disk /dev/sdb: 1073 MB, 1073741824 bytes
    255 heads, 63 sectors/track, 130 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot Start End Blocks Id System
    /dev/sdb1 1 130 1044193+ fd Linux raid autodetect
    ...
  • Y ahora viene el paso más importante en la creación del raid. Creamos el raid 1 pero con un único disco/partición. La clave es utilizar sólo la partición del nuevo disco /dev/sdb1 y en el otro poner missing, de tal forma que el raid 1 se crea degradado porque sólo existe un disco.
    shian:~# mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 /dev/sdb1 missing
    mdadm: size set to 1044096K
    mdadm: array /dev/md1 started.
  • Si aparece el error mdadm: error opening /dev/md1: No such file or directory deberemos crear el dispositivo mdX primero, según el que necesitemos:
    shian:~# mknod /dev/md0 b 9 0
    shian:~# mknod /dev/md1 b 9 1
    shian:~# mknod /dev/md2 b 9 2
    ...
  • Si miramos el fichero /proc/mdstat nos fijamos en el que raid está disponible pero sólo con un disco.
    shian:~# cat /proc/mdstat
    Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
    md1 : active raid1 sdb1[0]
    1044096 blocks [2/1] [U_]
  • Lo mismo ocurre si mostramos la información del raid:
    shian:~# mdadm --detail /dev/md1
    /dev/md1:
    Version : 00.90.03
    Creation Time : Fri Sep 28 08:09:16 2007
    Raid Level : raid1
    Array Size : 1044096 (1019.80 MiB 1069.15 MB)
    Device Size : 1044096 (1019.80 MiB 1069.15 MB)
    Raid Devices : 2
    Total Devices : 1
    Preferred Minor : 1
    Persistence : Superblock is persistent

    Update Time : Fri Sep 28 08:09:16 2007
    State : clean, degraded
    Active Devices : 1
    Working Devices : 1
    Failed Devices : 0
    Spare Devices : 0

    UUID : b0e5f96e:12266294:54e4f551:119b56e7
    Events : 0.1

    Number Major Minor RaidDevice State
    0 8 17 0 active sync /dev/sdb1
    1 0 0 1 removed
  • Formateamos el raid y lo montamos en /mnt/datos_raid. Así, estaría disponible para ser utilizado, pero con un único disco. Además, copiamos la información del disco antiguo (recordemos que está montado en /mnt/datos) al raid.
    shian:~# mkfs.ext3 /dev/md1
    shian:~#
    shian:~# mkdir /mnt/datos_raid
    shian:~# mount /dev/md1 /mnt/datos_raid
    shian:~#
    shian:~# cp -a /mnt/datos/* /mnt/datos_raid
  • En este punto ya tenemos toda la información en el raid. Ahora desmontamos la partición de nuestros datos /dev/sda1, particionamos el disco y creamos la partición de tipo raid (fd).
    shian:~# umount /dev/sda1
    shian:~# fdisk /dev/sda
    ...
    Disk /dev/sda: 1073 MB, 1073741824 bytes
    255 heads, 63 sectors/track, 130 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot Start End Blocks Id System
    /dev/sda1 1 130 1044193+ fd Linux raid autodetect
    ...
  • Y ahora añadimos al raid /dev/md1 la partición que acabamos de crear:
    shian:~# mdadm --manage /dev/md1 --add /dev/sda1
    mdadm: added /dev/sda1
  • Después de un tiempo el raid estará reconstruido con toda nuestra información a salvo en ambos discos:
    shian:~# cat /proc/mdstat
    Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
    md1 : active raid1 sda1[1] sdb1[0]
    1044096 blocks [2/2] [UU]
  • El paso final es actualizar el archivo de configuración /etc/mdadm/mdadm.conf con el nuevo raid.
    shian:~# cd /etc/mdadm
    shian:/etc/mdadm# cp mdadm.conf mdadm.conf.`date +%y%m%d`
    shian:/etc/mdadm# echo "DEVICE partitions" > mdadm.conf
    shian:/etc/mdadm# mdadm --detail --scan >> mdadm.conf
  • Y añadir al archivo /etc/fstab el montaje automático del raid en el arranque.
    shian:~# echo "/dev/md1        /mnt/datos       ext3    defaults        0       2" >> /etc/fstab

  •    Hemos visto cómo pasar de una configuración con un único disco a otra basada en un raid 1 sin tener que salvar toda nuestra información en otro medio independiente y reformatear todo a la vez.

       Lamentablemente, lo que quería hacer nuestro compañero Renato era crear un raid JBOD (o lineal), cosa que no entendí yo en un primer momento y me lancé a probarlo con un raid 1. Si intentamos crear el raid lineal con un único disco vemos que no es posible. Aunque el mensaje de mdadm no es muy claro, con dmesg vemos realmente la causa:
    shian:~# mdadm --create --verbose /dev/md2 --level=linear --raid-devices=2 /dev/sdb1 missing
    mdadm: chunk size defaults to 64K
    mdadm: RUN_ARRAY failed: Invalid argument
    mdadm: stopped /dev/md2

    shian:~# dmesg
    ...
    linear: not enough drives present. Aborting!
    md: pers->run() failed ...
    md: md3 stopped.
    md: unbind
    md: export_rdev(sdb1)

       La solución a cómo poder hacer esto sin tener que reformatear en el próximo post :-).

    jueves, 11 de octubre de 2007

    Ocultar la ventana de "Equipo Bloqueado" en Windows

       Siempre que bloqueamos una máquina con Windows NT/2K/XP aparece una ventana indicando que el equipo está bloqueado y nuestro nombre de usuario. Esta ventana aparece en el centro de la pantalla, por lo que si tenemos una foto de fondo, lo más probable es que tape el motivo principal de la foto. En mi caso, en el ordenador del trabajo, cuando bloqueo el equipo lo que veo es:

       En este artículo lo que vamos a ver es cómo ocultar esta ventana para que al bloquear el equipo se muestre la foto a pantalla completa.

       Para poder hacer este pequeño hack lo único que necesitamos es acceso a la consola de recuperación como administrador de la máquina (también serviría un live-cd de linux y NTFS-3G) y el Resource Hacker. Este programa sirve para ver, modificar y borrar recursos en archivos ejecutables, dlls,.... Podemos cambiar el texto de un diálogo, los iconos, eliminar una parte que no nos guste. Es bastante potente y sencillo de utilizar. ¡Empecemos!.
  • El diálogo que vamos a modificar se encuentra en la dll C:\Windows\system32\msgina.dll. La copiamos a C:\ pues que en la ubicación original no la podemos usar porque está bloqueada.
  • Ejecutamos el Resource Hacker y abrimos la dll.
  • En el menú Dialog -> 1900 vemos la ventana que vamos a modificar.
  • Podemos juguetear con el código para cambiar los textos y pulsando el botón Compile Script vemos cómo quedaría. En nuestro caso, para ocultarla completamente lo que hacemos es reemplazar el código por el siguiente:
    1900 DIALOGEX 0, 0, 0, 0
    STYLE WS_POPUP | WS_VISIBLE
    CAPTION ""
    LANGUAGE LANG_SPANISH, 0x3
    FONT 0, ""
    {
    }
  • Nuevamente pulsamos el botón Compile Script, salvamos los cambios y reiniciamos el equipo para entrar en la consola de recuperación.
  • Ahora vamos a sobreescribir la dll original (recordad hacer copia de seguridad) por la modificada. La dll se encuentra en C:\Windows\system32\ y también en C:\Windows\system32\dllcache\ y es necesario reemplazar las dos copias.
    copy c:\msgina.dll c:\windows\system32
    copy c:\msgina.dll c:\windows\system32\dllcache
  • Reinciamos de nuevo la máquina, entramos en windows y bloqueamos el equipo. Si hemos hecho todo bien el resultado debería ser algo parecido a esto (se ve la foto a pantalla completa sin ninguna ventana).
  • Aunque la ventana no se vea, realmente está ahí y el equipo está bloqueado, por lo que pulsamos CTRL+ALT+SUPR, introducimos nuestro password y a trabajar.

  •    Ahora ya, cuando os levantéis de vuestro sitio, lo único que tenéis que hacer es pulsar las teclas WIN + L y disfrutar con el fondo.

    viernes, 5 de octubre de 2007

    La gran comunidad Linux

       Otra de las cosas que aún no puedo hacer con linux es utilizar mi receptor infrarrojos usb para pasar canciones o fotos a mi móvil, así que tengo que usar nuevamente windows :-(.

       Una de las grandes ventajas de Linux y su gran comunidad de desarrolladores que hay detrás es que puedes abrir un bug y esperar a que alguien lo resuelva. Eso es lo que hice y se puede ver aquí (no vale reirse de mi inglés). Aunque han tardado más de un mes en mirarlo, me han dado las gracias por abrir el bug, pero como no es nada importante está parado. ¿Gracias a mi?. No, gracias a vosotros que hacéis posible que exista este sistema operativo que poco a poco nos está liberando del que llevamos tanto tiempo arrastrando.

       Ahora sólo queda esperar a que alguien lo arregle, aunque con la inminente salida de la próxima versión de Ubuntu para el 18 de este mes, con nueva versión del kernel incluída (2.6.22), es probable que se haya corregido. Y si no, pues a reabrirlo de nuevo porque desgraciadamente mis conocimientos de programación no llegan al nivel para poder arreglarlo yo mismo.

       ¿No es mágnifico poder abrir un bug del sistema operativo y que alguien lo pueda arreglar sin depender de una "megacorporación"?.

    lunes, 1 de octubre de 2007

    Mi nuevo gadget...

       ...un iPod Classic 80GB. Un amigo, Jose, ha estado una semana en Nueva York y con la gran diferencia entre el dolar y el euro he aprovechado para encargale este nuevo juguetito. Llevaba ya mucho tiempo detrás de un iPod y por fín me he decidido con este.

       La verdad es que de momento no me ha dado tiempo a hacer demasiado, me bajé el iTunes, lo instalé, actualicé el iPod y copié unas cuantas canciones y fotos para probarlo.

       Como sabéis, no existe iTunes para Linux, por lo que de momento no he tenido más remedio que usar windows. Además, en esta nueva generación de iPods, Apple ha hecho un pequeño cambio en la base de datos y los programas para linux no funcionan correctamente. Menos mal que en poco tiempo la comunidad linux ha encontrado la solución y en breve tendremos acceso de nuevo. Yo lo he conectado en linux y me lo reconoció perfectamente, he incluso se autoejecutó Rhythmbox, montó el iPod y me mostró todas las canciones. La pega fue que al sincronizarlo éstas se "perdieron" por el problemilla anterior que he comentado. Creo que Apple debería pensar un poco en toda la gente que compra sus productos y dar la oportunidad de utilizar iTunes en linux. Otra cosa es que lo usemos :-P.

       En fin, que poco a poco terminaré de etiquetar bien todos mis mp3 (¿alguien conoce un programa bueno para esto?), buscar las carátulas e ir pasando todas las canciones al iPod. Además tengo pendiente convertir algún video a ver qué tal se ven. Mientras tanto os dejo con unas fotos del juguetito:

    jueves, 27 de septiembre de 2007

    Iniciativa de Red.es: Programa NEW

    Este análisis está patrocinado por Zync.es

       En estos tiempos, estar presentes en internet ya no es una distinción frente a la competencia sino que es necesario para cualquier empresa. Puede surgir el problema de que seamos una empresa pequeña y no tengamos ni los conocimientos ni los recursos necesarios para poder comprar un dominio, tener un servidor, mantenerlo, administrarlo,... Teniendo esto en mente, el Ministerio de Industria, Turismo y Comercio en colaboración con Red.es han creado el Programa NEW: Ninguna Empresa sin Web. Este programa es un paquete web que permite a esas empresas sin demasiados recursos tener presencia en internet sin tener que preocuparse de la tediosa tarea de la administración. Así, según indican en su web, sus características son:
  • Registro y mantenimiento de un nombre de dominio bajo el código ".es".
  • Herramienta de creación de web con un mínimo de 3 páginas con una plantilla de diseño básica para la página inicial de la web.
  • Panel de control multilingüe (castellano, lenguas co-oficiales de España e inglés).
  • Buzones de correo con 100 MB de espacio por buzón.
  • 100 MB de espacio de disco para almacenamiento de la Web.
  • 1 GB de transferencia mensual.
  • Acceso a FTP.
  • Acceso a estadísticas de uso.
  • Back Up diario.
  • Acceso a correo por Webmail.
  • Acceso a correo por POP 3, IMAP4, etc. (compatibles con Outlook, Eudora, Thunderbird,...).
  • Antispam.

  •    Todo esto lo ofrecen desde 65 euros. Mi primera impresión ha sido que es algo elevado y además habría que aclarar unos cuantos temas adicionales:
  • El tráfico de 1GB al mes me parece algo limitado si la empresa quiere potenciar su web. Si la utilizan sólo como primera toma de contacto con los posibles clientes no habría demasiados problemas. Además, habría que definir qué ocurre si se sobrepasa ese límite. ¿Se bloquea la web?, ¿se cobra un sobreprecio?.
  • Las 10 cuentas de correo pueden quedarse cortas si se quieren personalizar y no utilizar las clásicas info@empresa.com y similares.
  • Simplemente se informa de que hay backup diario, pero se debería especificar qué tipo de herramientas se utilizan y cómo se podría recuperar ese backup en caso de necesidad.

  •    Aún así, creo que es una buena iniciativa para esas Pymes que todavía no se atreven o no poseen los conocimientos o infraestructura necesaria para poder tener presencia en internet ya que les puede abrir muchas puertas.

    lunes, 24 de septiembre de 2007

    El efecto Kriptópolis

       Después del final de las vacaciones y la reincorporación al trabajo llega el momento de ponerme a leer todo lo que tenía pendiente en Google Reader. Así, he llegado a este artículo de Kriptópolis que me ha enlazado.

    Iván López, amable lector de Kriptópolis, publicó hace unos meses otro artículo interesante al respecto: Rsync vs BackupPc vs Link-Backup. Es posible que para algunos lectores pueda resultar más apropiado que el método aquí expuesto. Además, Iván tiene publicado otro artículo muy majo sobre Raid 1 en Linux. Ambos artículos me parecen muy recomendables, sobre todo si nuestras necesidades van algo más allá de las de un sencillo sistema doméstico.


       Aunque no he tenido un aluvión de visitas como después del efecto barrapunto por el artículo del raid 1 en linux, sí que he notado en las estadísticas que durante un par de días hubo un incremento de los visitantes en torno al 50%, algo muy lejos del más de 4000% del efecto barrapunto.

       En fin, que todo un honor ser enlazado por un medio tan reconocido y de tanto prestigio como Kriptópolis.

    viernes, 14 de septiembre de 2007

    Wardriving y geoposicionamiento de puntos de acceso wifi con Google Earth

       Según la Wikipedia, el Wardriving es:
    La búsqueda de redes inalámbricas Wi-Fi desde un vehículo en movimiento. Implica usar un coche o camioneta y un ordenador equipado con Wi-Fi, como un portátil o una PDA, para detectar las redes.
       Además, si en la ecuación utilizamos también un GPS podemos geoposicionar dichos puntos de acceso.

       Yo he modificado ligeramente esta idea utilizando la PDA con el GPS y aprovechando los paseos que damos por las tardes con Judith. Así, sirviendome del mágnifico programa para buscar redes wifi WiFiFoFum y enlazando éste con el GPS he ido almacenando logs con los distintos puntos de acceso wifi que he ido encontrando en sucesivos paseos. Hasta aquí todo muy bien, pero tener un log como este no sirve de mucho:
    0001386FCE3D WLAN_D6  AP On  20:16:57 20:18:03 40,2397633333333 -3,77285833333333
    0002CF503AE3 WLAN_11 AP On 20:24:54 20:26:21 40,24089 -3,77058833333333
    0003C9D1E558 Comtrend AP On 19:58:44 20:04:13 40,244575 -3,77372
    000F213108CF Mota AP On 20:20:43 20:22:17 40,239985 -3,77503166666667
    0011E3E40BD0 THOMSON AP Off 20:35:02 20:35:03 40,241825 -3,77842333333333

       Pensando cómo mostrar esa información de manera que resultase útil visualmente, busqué información sobre cómo convertir mis logs (en formato CSV pero con tabuladores en lugar de comas) en archivos KML que pudiera importar en Google Earth. Existen webs que convierten datos en CSV a KML, pero después de probar el resultado no me convencía demasiado porque el código generado era demasiado complejo y contenía mucha información inútil. Así, después de buscar algo de información sobre KML me dispuse a crear mi propio generador en shell script y AWK. El resultado es el script gps2kml:
    #!/bin/sh
    #
    # gps2kml.sh: Script de creación de ficheros KML para
    # Google Earth a partir de CSV separados por tabuladores
    #
    # Iván López Martín
    # http://lopezivan.blogspot.com
    #
    DATA_FILE=$1
    KML_FILE=$2
    SKELETON=`mktemp -u`
    WEP=$4

    create_AWK_Skeleton() {
    echo { > $SKELETON
    echo if \(\$4 \== \""On"\"\) icon=\""http://farm2.static.flickr.com/1248/1196978492_72600c8064_o.png"\" >> $SKELETON
    echo if \(\$4 == \""Off"\"\) icon=\""http://farm2.static.flickr.com/1260/1196978476_e1a2070680_o.png"\" >> $SKELETON
    echo print \""<Placemark>"\" >> $SKELETON
    echo print \"" <name>\"\$2\"</name>"\" >> $SKELETON
    echo print \"" <description>\"\$1\"</description>"\" >> $SKELETON
    echo print \"" <Point>"\" >> $SKELETON
    echo print \"" <coordinates>\"\$8\",\"\$7\",0</coordinates>"\" >> $SKELETON
    echo print \"" </Point>"\" >> $SKELETON
    echo print \"" <Style>"\" >> $SKELETON
    echo print \"" <IconStyle>"\" >> $SKELETON
    echo print \"" <Icon>"\" >> $SKELETON
    echo print \"" <href>\"icon\"</href>"\" >> $SKELETON
    echo print \"" </Icon>"\" >> $SKELETON
    echo print \"" </IconStyle>"\" >> $SKELETON
    echo print \"" </Style>"\" >> $SKELETON
    echo print \""</Placemark>"\" >> $SKELETON
    echo } >> $SKELETON
    }

    # Comprobación de parámetros
    if [ "$#" != "2" ]; then
    echo "Uso: `basename $0` fich_datos fich_kml"
    exit 1
    fi

    # Creamos el esqueleto de la función para awk
    create_AWK_Skeleton


    # Escribimos la cabecera del fichero kml
    echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > $KML_FILE
    echo "<kml creator=\"gps2kml http://lopezivan.blogspot.com/2007/09/wardriving-y-geoposicionamiento-de.html\" xmlns=\"http://earth.google.com/kml/2.1\">" >> $KML_FILE
    echo "<Folder>" >> $KML_FILE
    echo " <name>APs Wifi Parla</name>" >> $KML_FILE
    echo " <open>0</open>" >> $KML_FILE

    # Cambiamos las comas por puntos
    sed "s/,/./g" $DATA_FILE > .tmp$DATA_FILE

    DATA_FILE=.tmp$DATA_FILE

    # Generamos los puntos
    awk -f $SKELETON -F"\t" $DATA_FILE >> $KML_FILE

    # Escribimos el final del fichero
    echo "</Folder>" >> $KML_FILE
    echo "</kml>" >> $KML_FILE

    # Borramos los temporales
    rm $SKELETON 2>/dev/null
    rm $DATA_FILE 2>/dev/null

       La forma de ejecutarlo es muy sencilla y lo único que necesita es el fichero de entrada con los datos y el fichero de salida. Aspectos a tener en cuenta:
  • Como es una versión de andar por casa no se realizan demasiadas comprobaciones.
  • Se utilizan dos iconos distintos en función de si el punto de acceso tiene cifrado o no.
  • Se generan todos los puntos de acceso en una misma carpeta dentro de GoogleEarth.
  • El fichero generado funciona correctamente en las versiones 4.1.7076.4458 y 4.2.0180.1134 de Google Earth bajo Linux. No lo he probado ni en windows ni con otras versiones, aunque no debería de haber problemas.

  •    Después de filtrar los puntos de acceso duplicados de todos los logs de los distintos días, ejecutamos el script con este fichero de entrada:
    ivan@doraemon:~$ ./gps2kml.sh datosGPS.txt paseoJudith.kml

       Abrimos Google Earth cargamos el fichero recien generado (por si no quereis generarlo) y obtendremos una vista de la zona por la que vivo con todos los puntos de acceso que he ido encontrado.

       Así que ya sabéis, si alguna tarde vais por Parla por esa zona y veis a esta preciosa niña, que sepáis que el que va empujando el carrito soy yo ;-).

       P.D: Después de terminar el script y el post he buscado en la web de WiFiFoFum y me he dado cuenta que desde la versión 2.2.5 del 10 de abril de 2007, el programa permite exportar a KML. ¡Eso me pasa por no utilizar versiones actualizadas! (la mía es de octubre de 2006). De todas formas me ha servido para conocer el formato KML y aprovechar los paseos de Judith. Además, el script se puede utilizar para generar el fichero KML desde otros orígenes que no sean el WifiFofum.

    jueves, 6 de septiembre de 2007

    GoogleReader vs Firefox LiveBookmarks

       Llevo mucho tiempo leyendo mis feeds por medio de los marcadores de Firefox. Así, tengo que ir abriéndolos de uno en uno en solapas, recordando los que ya he leído para no volverlos a leer, guardar en del.icio.us lo que más me pueda interesar,... en fin, que es una tarea bastante manual y tediosa.

       Al poco de que Google lanzara Google Reader comencé a usarlo y de hecho tenía algunos feeds configurados, pero por alguna extraña razón que no recuerdo dejé de usarlo. Hace ya un tiempo me lo volvió a recomendar un compañero y decidí darle otra oportunidad. Siguiendo la propia ayuda que proporciona Google Reader me instalé un plugin para firefox que me permitía exportar mis marcadores al formato OPML y poder importarlos de una manera sencilla con Google Reader. En menos de cinco minutos tenía todos mis feeds en Google Reader y lo único que tuve que hacer fue etiquetarlos correctamente y tuve todo listo para funcionar.

       La verdad es que después de llevar utilizándolo muy poco tiempo pienso "¿cómo he podido vivir sin esto?". Lo que más me gusta de Google Reader es:
  • La gestión de los feeds es realmente buena. Se utiliza un sistema de etiquetas similar al de Gmail y los feeds se refrescan automáticamente. Se pueden mostrar todos o sólo los que están sin leer, se pueden marcar feeds como favoritos,...
  • Las estadísticas (trends) aunque no demasiado útiles, sí son al menos curiosas.
  • Se pueden importar automáticamente los feeds de del.icio.us, flickr, blogger,...
  • Puedes compartir tus feeds o los post que consideres más interesantes. Para ello sólo tienes que publicar una url o un feed y listo, cualquiera puede leer lo que compartas.
  • La posibilidad de leer los feeds de manera Offline. Aunque en los tiempos de las conexiones por modem sí resultaría realmente útil porque te podrías descargar los posts (con un máximo de 2000) y desconectarte, en estos tiempos también viene bien por si hay cortes de adsl o lo que sea. Además, este año durante las vacaciones con wifi, sincronizaba mis feeds y por la tarde podía seguir leyendo en casa.
  • Puedes moverte por la interfaz con atajos de teclado, algo realmente útil para no tener que utilizar en todo momento el ratón.
  • Y la más importante por cortesía de Super Coco en los comentarios, la versión móvil para PDAs y móviles, imprescindible.

  •    Realmente todo me ha gustado mucho, lo único que he echado de menos en el tiempo que llevo usándolo era la opción de búsqueda en los feeds y justo hoy me ha sorprendido Google con el cambio. En definitiva, un DIEZ!.

    lunes, 3 de septiembre de 2007

    Usuario de Ubuntu

       Hace un tiempo descubrí la web The Ubuntu Counter Project, que está basada en Linux Counter y sirve para poder darte de alta como usuario de Ubuntu. Así que nada, desde hoy soy el usuario registrado número 15006 de Ubuntu, más concretamente de Feisty Fawn como ya sabéis.

       Aunque la web es casi una mera anécdota y obviamente hay muchísima más gente que usa cualquier distribución basada en Ubuntu y también hay mucha gente que se registra y lo más que prueba es un Live-CD, siempre están bien páginas como esta. Yo hace ya muchos años que me registré en Linux Counter, pero perdí mi registro :-(, aunque ahora es cuando por fin he dado el paso para dejar windows. Qué lejos queda mi segundo post en este blog del 4 de julio de 2005 en que el que contaba mi intención de cambiar de windows a linux...

    The Ubuntu Counter Project - user number # 15006