En Linux, los trabajos que se programan con 'at' se guardan como scripts en ficheros de texto. Suelen estar guardados en /var/spool/at
El nombre que tienen es como el siguiente:
a001680132fd55
Lo anterior significa:
- La 'a' es la cola de at que lo ejecutará (puede ser la 'a' o la 'b').
- El '00168' el identificador del trabajo de at en hexadecimal. Es el que sale al ejecutar atq.
- El '0132fd55' es la fecha en que se ejecutará el trabajo. Es el número de minutos desde el 1-1-1970 a las 0:00
Para calcular la fecha en que se ejecutará uno de estos trabajos a partir del nombre del fichero se puede mirar el identificador y compararlo con la salida de atq, o convertir los minutos a la fecha de la siguiente manera:
1) Pasar 0132fd55 a decimal -> 20118869
2) Multiplicarlo por 60, para obtener los segundo desde Epoch que es como se calculan fechas en Unix normalmente -> 1207132140
3) Usar alguna utilidad para calcular fechas a partir del Epoch. Por ejemplo la que hay en http://www.onlineconversion.com/unix_time.htm
1207132140 -> Wed, 02 Apr 2008 10:29:00 GMT
Mostrando entradas con la etiqueta Linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta Linux. Mostrar todas las entradas
miércoles, 3 de julio de 2019
miércoles, 23 de noviembre de 2016
Abaqus installation issue with license server
The problem
I was installing Abaqus 6.14-1 in a Linux cluster outside my enterprise network. In order to allow the FlexLM license server to be reached from the cluster, I opened the appropiate ports in my firewall and tested it was Ok by connecting with telnet, e.g.:# telnet 193.144.xxx.yyy 27000
Trying 193.144.xxx.yyy...
Connected to 193.144.xxx.yyy.
Escape character is '^]'.
But, during the installation process, when I was asked the license server address the installer couldn't contact it and returned an error.
The cause & the solution
In the license file, the first line had this form:SERVER lambda 112233445566 27000
It turns out that the server name (lambda) was not public for security reasons and therefore it couldn't be resolved with DNS outside the enterprise network, so I used instead its IP address (193.144.xxx.yyy). For some reason, the installer and the FlexLM license server didn't like this, so after many tests, I finally found that if I change the license file line to this:
SERVER 193.144.xxx.yyy 112233445566 27000
...an reloaded the license daemon, all worked fine. That is, simply change in the license file the host name with its IP address.
Abaqus error: System Error fcntl: Function not implemented
I've lost a lot of time with this problem, which for I didn't found any solution googling it:
$ abaqus -j Job-1
$ cat abaque Job-1.log
Abaqus JOB Job-1
Abaqus 6.14-1
System Error fcntl: Function not implemented
System Error fcntl: Function not implemented
Abaqus/Analysis cleanup failed.
- Mount Lustre with suitable parameters, as it's explained in the following page: Abaqus with Lustre file system
The problem
After installing Abaqus 6.14-1 in a Linux cluster, when I launched a testing input the following messages appeared in the log file:$ abaqus -j Job-1
$ cat abaque Job-1.log
Abaqus JOB Job-1
Abaqus 6.14-1
System Error fcntl: Function not implemented
System Error fcntl: Function not implemented
Abaqus/Analysis cleanup failed.
The cause
It turns out that the file system where the job was being launched was Lustre. If instead I launched the job in an ext3/ext4 file system (e.g. /tmp) it finished without any error.Solutions
- Execute Abaqus in a local directory with a file system such as ext3, ext4 or similar.- Mount Lustre with suitable parameters, as it's explained in the following page: Abaqus with Lustre file system
viernes, 4 de noviembre de 2011
Instalación del driver propietario de ATI en Linux
Estos son los pasos que hay que dar para (re)instalar los drivers propietarios de AMD/ATI Radeon en Linux.
1) Descargarlos de la página de AMD. En el momento de escribir esta entrada se podía hacer a través de este enlace.
2) Nos convertimos en root (por ejemplo con su o con sudo -s) y damos permisos de ejecución al fichero que acabamos de descargar:
chmod +x ati-driver-installer-11-9-x86.x86_64.run
3) Lo ejecutamos:
./ati-driver-installer-11-9-x86.x86_64.run
4) Se descomprimirá y a continuación nos irá haciendo preguntas y dando opciones. Simplemente elegiremos la opción por defecto o la única que se pueda.
5) Si todo ha ido bien, siguiendo las instrucciones que aparecen solo faltará reiniciar el sistema (por ejemplo con reboot) y habrá terminado el proceso. Si algo no ha ido bien, ver el siguiente apartado.
Problemas que pueden surgir
Existen ficheros de una instalación anterior (A previous install of the fglrx driver has been detected. Please uninstall the older version before installing this version.Optionally, run the installer with --force to overwrite the existing driver)
Opción 1: Desinstalar el driver
1) Desinstalar el driver ejecutando el instalador con la opción --uninstall:
./ati-driver-installer-11-9-x86.x86_64.run --uninstall
2) Se desinstalarán los ficheros del driver presentes en el sistema.
3) Si todo ha ido bien, será necesario reiniciar el sistema y se puede intentar la instalación normal.
Opción 2: Instalar el driver sobreescribiendo los ficheros anteriores
1) Ejecutar:
./ati-driver-installer-11-9-x86.x86_64.run --force
2) Se instalarán los ficheros del driver sobreescribiendo otros que hubiera antes.
3) Si todo ha ido bien, será necesario reiniciar el sistema y se puede intentar la instalación normal.
1) Descargarlos de la página de AMD. En el momento de escribir esta entrada se podía hacer a través de este enlace.
2) Nos convertimos en root (por ejemplo con su o con sudo -s) y damos permisos de ejecución al fichero que acabamos de descargar:
chmod +x ati-driver-installer-11-9-x86.x86_64.run
3) Lo ejecutamos:
./ati-driver-installer-11-9-x86.x86_64.run
4) Se descomprimirá y a continuación nos irá haciendo preguntas y dando opciones. Simplemente elegiremos la opción por defecto o la única que se pueda.
5) Si todo ha ido bien, siguiendo las instrucciones que aparecen solo faltará reiniciar el sistema (por ejemplo con reboot) y habrá terminado el proceso. Si algo no ha ido bien, ver el siguiente apartado.
Problemas que pueden surgir
Existen ficheros de una instalación anterior (A previous install of the fglrx driver has been detected. Please uninstall the older version before installing this version.Optionally, run the installer with --force to overwrite the existing driver)
Opción 1: Desinstalar el driver
1) Desinstalar el driver ejecutando el instalador con la opción --uninstall:
./ati-driver-installer-11-9-x86.x86_64.run --uninstall
2) Se desinstalarán los ficheros del driver presentes en el sistema.
3) Si todo ha ido bien, será necesario reiniciar el sistema y se puede intentar la instalación normal.
Opción 2: Instalar el driver sobreescribiendo los ficheros anteriores
1) Ejecutar:
./ati-driver-installer-11-9-x86.x86_64.run --force
2) Se instalarán los ficheros del driver sobreescribiendo otros que hubiera antes.
3) Si todo ha ido bien, será necesario reiniciar el sistema y se puede intentar la instalación normal.
lunes, 2 de noviembre de 2009
Múltiples tarjetas de sonido en KDE
En mi ordenador portátil tengo dos tarjetas de sonido: Una, la que lleva integrada y que suena a través de los altavoces igualmente integrados en la carcasa. La otra, es una USB que compré en DealExtreme que suena a través de un par de altavoces externos de calidad algo mejor que los del ordenador. Esta última la tengo conectada a un hub USB y la idea es que sea la que se oiga cuando uso el portátil como ordenador fijo.
Pero me encontré con un problema: ¿Cómo elegir desde el entorno KDE 3.5 por cual de las dos tarjetas de sonido quiero escuchar, por ejemplo, música? Uno esperaría encontrar en el panel de control del sistema de sonido un desplegable con todas las tarjetas de sonido presentes, y que se pudiera elegir una. Sin embargo, esto no es así. Lo más parecido es que se puede regular el volumen de cada una mediante la utilidad Kmix, pero no elegir por cual se quiere sacar el sonido.
La solución es relativamente sencilla, aunque nada intuitiva. La descubrí simplemente leyendo el FAQ de Amarok, el reproductor de sonido por defecto de KDE que permite el uso de distintos sistemas de sonido, entre ellos ALSA. Concretamente, en un apartado explica que:
Si se usa esa misma nomenclatura en el panel de control de sonido de KDE, también funciona:

Y de esta manera, se pueden utilizar de manera sencilla varias tarjetas de sonido en Linux con ALSA. Se pueden hacer muchas más virguerías (es muy potente), pero para este problema concreto no hace falta darle más vueltas.
Pero me encontré con un problema: ¿Cómo elegir desde el entorno KDE 3.5 por cual de las dos tarjetas de sonido quiero escuchar, por ejemplo, música? Uno esperaría encontrar en el panel de control del sistema de sonido un desplegable con todas las tarjetas de sonido presentes, y que se pudiera elegir una. Sin embargo, esto no es así. Lo más parecido es que se puede regular el volumen de cada una mediante la utilidad Kmix, pero no elegir por cual se quiere sacar el sonido.
La solución es relativamente sencilla, aunque nada intuitiva. La descubrí simplemente leyendo el FAQ de Amarok, el reproductor de sonido por defecto de KDE que permite el uso de distintos sistemas de sonido, entre ellos ALSA. Concretamente, en un apartado explica que:
(...) puedes usar la salida hw:0,0 o hw:1,0
Si se usa esa misma nomenclatura en el panel de control de sonido de KDE, también funciona:

Y de esta manera, se pueden utilizar de manera sencilla varias tarjetas de sonido en Linux con ALSA. Se pueden hacer muchas más virguerías (es muy potente), pero para este problema concreto no hace falta darle más vueltas.
martes, 30 de diciembre de 2008
Downgrade desde Intrepid a Hardy
Esto lo hice hace dos o tres semanas pero lo escribo ahora que tengo un rato en vacaciones.
Como contaba en otra entrada, mi actualización a la última versión de Kubuntu fue bien, excepto en un detalle importante para mí (vease el mencionado post si se quiere saber cuál era).
El caso es que decidí hacer algo que solo había intentado antes en una ocasión: Instalar una versión inferior del sistema encima de la más reciente. En este caso pasar del Kubuntu 8.10 Intrepid Ibex al anterior 8.04 Hardy Heron. Como esta última tiene LTS (Long Term Support) creo que podré vivir tres años con ella hasta que saquen la próxima, y para entonces espero no necesitar ya lo que me hace falta de esta.
Antes de comenzar el proceso, me hago copia de seguridad en otro disco de todos los datos y configuraciones de mi sistema actual. Básicamente el directorio /home y el /etc.
Me bajo la ISO para empezar la reinstalación, y antes de tostarla se me ocurre que es una buena ocasión para, de paso, poner a prueba la utilidad Unetbootin. Con ella y la ISO del CD genero una memoria USB autoarrancable y reinicio el ordenador. Le digo que arranque desde el USB y... ¡voilá! aparece el menú de arranque de Kubuntu.
Selecciono la opción para instalarlo en el disco duro y arranca sin problemas. Le digo que el particionado de los discos lo quiero hacer manual, e indico los puntos de montaje de cada partición. Me aseguro bien de desactivar la opción que formateará las particiones y finalizo la configuración de los discos. A continuación comenzará la copia de ficheros al disco duro. ¿Se dará cuenta el instalador de que ya hay un sistema instalado? ¿Conservará las configuraciones y los datos existentes? La respuesta a la primera pregunta es que sí; no aparece ningún cartel con grandes letras anunciándolo pero antes de iniciar la copia de archivos se deinstalan muchos paquetes que había en el sistema y que podrían dar problemas al hacer el downgrade. Sobre las configuraciones de los programas instalados, la respuesta es que en general NO se conservan, así que hice bien en salvar el directorio /etc con todas ellas.
A continuación comienza la copia e instalación de los paquetes de la versión que estoy instalando, de la misma forma en que se hace normalmente. Al leerlos desde la memoria USB 2.0 en lugar del CD, el proceso es muy rápido. Cuando finaliza, se reinicia el ordenador y terminan de instalarse algunos paquetes.
En cuestión de 20 minutos tengo el sistema otra vez funcionando como antes. Mis datos de /home siguen ahí intactos, lo único que echo en falta es la personalización del escritorio, que no está como lo tenía antes de empezar esta odisea. Pero, sorprendentemente tampoco está como si acabara de hacer una instalación nueva, algunas cosas sí que las ha guardado. Teniendo en cuenta que estoy volviendo desde KDE 4.1 a la versión 3.5 es una agradable sorpresa comprobar que la versión más nueva no machacó todo lo de la vieja y que seguía guardando las configuraciones de forma similar.
Lo siguiente que hago es instalar y configurar Synce y Raki para poder conectar mi PDA. Tengo que buscarlos por la web porque tampoco venían de serie con la versión 8.04, aunque sí que están en uno de los repositorios oficiales de Ubuntu. Una vez más, lo vuelvo a hacer funcionar sin problemas.
En las dos o tres semanas que han pasado desde que hice el downgrade no he tenido ningún problema, solo alguna utilidad o aplicación que he tenido que instalar porque no estaba después del downgrade, o reconfigurar alguna cosilla que, gracias a que guardé el directorio /etc, solo he tenido que copiar el fichero de configuración encima del nuevo.
Solo me queda decir que tanto Unetbootin como Kubuntu 8.04 se han comportado muy bien en todo el proceso, durante el que no han dado ni un solo problema ni ha habido que hacer nada raro.
Como contaba en otra entrada, mi actualización a la última versión de Kubuntu fue bien, excepto en un detalle importante para mí (vease el mencionado post si se quiere saber cuál era).
El caso es que decidí hacer algo que solo había intentado antes en una ocasión: Instalar una versión inferior del sistema encima de la más reciente. En este caso pasar del Kubuntu 8.10 Intrepid Ibex al anterior 8.04 Hardy Heron. Como esta última tiene LTS (Long Term Support) creo que podré vivir tres años con ella hasta que saquen la próxima, y para entonces espero no necesitar ya lo que me hace falta de esta.
Antes de comenzar el proceso, me hago copia de seguridad en otro disco de todos los datos y configuraciones de mi sistema actual. Básicamente el directorio /home y el /etc.
Me bajo la ISO para empezar la reinstalación, y antes de tostarla se me ocurre que es una buena ocasión para, de paso, poner a prueba la utilidad Unetbootin. Con ella y la ISO del CD genero una memoria USB autoarrancable y reinicio el ordenador. Le digo que arranque desde el USB y... ¡voilá! aparece el menú de arranque de Kubuntu.
Selecciono la opción para instalarlo en el disco duro y arranca sin problemas. Le digo que el particionado de los discos lo quiero hacer manual, e indico los puntos de montaje de cada partición. Me aseguro bien de desactivar la opción que formateará las particiones y finalizo la configuración de los discos. A continuación comenzará la copia de ficheros al disco duro. ¿Se dará cuenta el instalador de que ya hay un sistema instalado? ¿Conservará las configuraciones y los datos existentes? La respuesta a la primera pregunta es que sí; no aparece ningún cartel con grandes letras anunciándolo pero antes de iniciar la copia de archivos se deinstalan muchos paquetes que había en el sistema y que podrían dar problemas al hacer el downgrade. Sobre las configuraciones de los programas instalados, la respuesta es que en general NO se conservan, así que hice bien en salvar el directorio /etc con todas ellas.
A continuación comienza la copia e instalación de los paquetes de la versión que estoy instalando, de la misma forma en que se hace normalmente. Al leerlos desde la memoria USB 2.0 en lugar del CD, el proceso es muy rápido. Cuando finaliza, se reinicia el ordenador y terminan de instalarse algunos paquetes.
En cuestión de 20 minutos tengo el sistema otra vez funcionando como antes. Mis datos de /home siguen ahí intactos, lo único que echo en falta es la personalización del escritorio, que no está como lo tenía antes de empezar esta odisea. Pero, sorprendentemente tampoco está como si acabara de hacer una instalación nueva, algunas cosas sí que las ha guardado. Teniendo en cuenta que estoy volviendo desde KDE 4.1 a la versión 3.5 es una agradable sorpresa comprobar que la versión más nueva no machacó todo lo de la vieja y que seguía guardando las configuraciones de forma similar.
Lo siguiente que hago es instalar y configurar Synce y Raki para poder conectar mi PDA. Tengo que buscarlos por la web porque tampoco venían de serie con la versión 8.04, aunque sí que están en uno de los repositorios oficiales de Ubuntu. Una vez más, lo vuelvo a hacer funcionar sin problemas.
En las dos o tres semanas que han pasado desde que hice el downgrade no he tenido ningún problema, solo alguna utilidad o aplicación que he tenido que instalar porque no estaba después del downgrade, o reconfigurar alguna cosilla que, gracias a que guardé el directorio /etc, solo he tenido que copiar el fichero de configuración encima del nuevo.
Solo me queda decir que tanto Unetbootin como Kubuntu 8.04 se han comportado muy bien en todo el proceso, durante el que no han dado ni un solo problema ni ha habido que hacer nada raro.
jueves, 4 de diciembre de 2008
Synce en KDE
Hace poco he actualizado mi Kubuntu a la última versión de ese sistema, la 8.10 Intrepid Ibex.
El proceso de actualización fue bien, sin que haya nada que destacar, salvo que en esta versión desaparece el KDE 3.5 y se instala por defecto la versión 4.1. Es muy bonita y tiene muchas cosas nuevas, algunas de ellas muy radicales, como que la carpeta del Escritorio pasa a ser una carpeta más y todos los accesos directos y carpetas que tuviéramos creados antes desaparecen del nuevo, pasando a ser ficheros normales y corrientes. También está muy bien el visor de documentos (y) PDFs (Okular se llama) que permite hacer anotaciones y marcas sobre el texto. Y muchas más cosas que no describiré aquí (como los plasmoides, o las mejoras en efectos gráficos).
Lo que no está tan bien es lo que han hecho con el software para conectarse a PDAs. En la versión 3.5 estaba el paquete synce-kde para conectar con el aparato y con Raki y Kcemirror se podía acceder a sus ficheros y controlarla con el ratón. Este paquete ha sido sustituido en la versión 4.1 por otro llamado synce-kpm. Se supone que tiene las mismas funcionalidades, pero está pensado para dispositivos con Windows Mobile 5 o 6, los que son más viejos y llevan versiones anteriores no se podrán conectar, o lo harán muy limitadamente.
Lo peor es que no se puede volver a instalar el software antiguo, el paquete synce-kde no funciona con la nueva versión y por ello ha desaparecido de los repositorios de Intrepid. Debido a que lo necesito para trabajar con mi "vieja" PDA, que el OpenOffice que trae sigue siendo el 2.4 (y no el 3.0), y a que al entorno aun le quedan algunos detalles por pulir, estoy pensando seriamente volver a instalarme la versión 8.04, que además es LTS. Lo que significa que durante 3 años tendrá actualizaciones de seguridad, y si en este tiempo jubilo mi actual PDA y me hago con otra más nueva, siempre estaré a tiempo de actualizar.
El proceso de actualización fue bien, sin que haya nada que destacar, salvo que en esta versión desaparece el KDE 3.5 y se instala por defecto la versión 4.1. Es muy bonita y tiene muchas cosas nuevas, algunas de ellas muy radicales, como que la carpeta del Escritorio pasa a ser una carpeta más y todos los accesos directos y carpetas que tuviéramos creados antes desaparecen del nuevo, pasando a ser ficheros normales y corrientes. También está muy bien el visor de documentos (y) PDFs (Okular se llama) que permite hacer anotaciones y marcas sobre el texto. Y muchas más cosas que no describiré aquí (como los plasmoides, o las mejoras en efectos gráficos).
Lo que no está tan bien es lo que han hecho con el software para conectarse a PDAs. En la versión 3.5 estaba el paquete synce-kde para conectar con el aparato y con Raki y Kcemirror se podía acceder a sus ficheros y controlarla con el ratón. Este paquete ha sido sustituido en la versión 4.1 por otro llamado synce-kpm. Se supone que tiene las mismas funcionalidades, pero está pensado para dispositivos con Windows Mobile 5 o 6, los que son más viejos y llevan versiones anteriores no se podrán conectar, o lo harán muy limitadamente.
Lo peor es que no se puede volver a instalar el software antiguo, el paquete synce-kde no funciona con la nueva versión y por ello ha desaparecido de los repositorios de Intrepid. Debido a que lo necesito para trabajar con mi "vieja" PDA, que el OpenOffice que trae sigue siendo el 2.4 (y no el 3.0), y a que al entorno aun le quedan algunos detalles por pulir, estoy pensando seriamente volver a instalarme la versión 8.04, que además es LTS. Lo que significa que durante 3 años tendrá actualizaciones de seguridad, y si en este tiempo jubilo mi actual PDA y me hago con otra más nueva, siempre estaré a tiempo de actualizar.
viernes, 5 de septiembre de 2008
Ubuntu en un IBM 760XL
Hace unos meses rescaté del olvido un viejo portátil que compré hace algunos años de segunda mano, y decidí darle una segunda vida instalándole algo más moderno que el Windows 98 que llevaba. Al tener tantos años sus prestaciones no son precisamente el último grito:
- Procesador Pentium MMX a 166 Mhz
- 64 Mb de RAM
- 9 Gb de disco duro

¿Se le podría instalar un sistema operativo de última generación? Y no me estoy refiriendo a Windows Vista, por supuesto :-) Probemos con Ubuntu...
El arranque
El primer problema es cómo arrancar la instalación. El equipo dispone de un lector de CD-ROM pero no tiene la capacidad de arrancar desde un CD(eso lo inventaron allá por el año 1998, este portátil es anterior). La única forma de hacerlo es desde disquete, pero la instalación de Ubuntu y la mayoría de distros actuales no permiten iniciar la instalación arrancando con ellos.
Tras googlear un poco doy con la solución, que resulta que viene en el mismo CD de instalación de Ubuntu: Se trata de una utilidad llamada Smart Boot Manager (SBM), que es un disquete desde el que es posible arrancar a su vez el CD, aunque el ordenador no esté preparado para ello. La imagen del disquete está en el directorio install del CD de Ubuntu, con unas instrucciones que se resumen en que para generarlo basta ejecutar algo como:
dd if=sbm.bin of=/dev/fd0
Una vez se consigue iniciar el ordenador con el CD, ya se puede hacer la instalación del resto del sistema de la manera habitual... o casi.
Elección del sistema
El Ubuntu para escritorio al que estamos acostumbrados es muy bonito, muy fácil de instalar y tiene todo el software que se puede necesitar, pero en nuestro caso ese es precisamente su mayor problema: No quiero entorno gráfico ni software como OpenOffice o K3B, solo que arranque y después ya instalaré por red lo que vaya haciendo falta.
Con las versiones de escritorio no se puede elegir una instalación así, pero en cambio la versión de servidor sí que lo permite (la instalación de un sistema mínimo) y además se puede hacer en modo consola (sin entorno gráfico). Así que, paradójicamente, instalo la versión más potente en el equipo más humilde.
Instalación
No hay mucho que decir. Se copian los ficheros al disco duro, detecta la tarjeta de red PCMCIA que tengo pinchada en el portátil, y todo va como la seda. Tras finalizar el proceso se reinicia y configuro el ssh para conectarme desde otro equipo y continuar configurándolo de forma más cómoda. Antes de hacer nada más aplico las últimas actualizaciones con aptitude update; aptitude upgrade y reinicio para que arranque con el último kernel.
Problema al arrancar
Para mi horror, depués de actualizar el kernel y reiniciar el proceso se interrumpe con un mensaje de error:
"ALERT! /dev/disk/by-uuid/xxxxxxxxxxx Does not exist, dropping to a shell"
...y aparece un shell reducido cuyo prompt es
(initramfs)
Así que toca googlear para averiguar qué significa y cómo arreglarlo. Parece ser que cuando, tras actualizar el kernel, se genera el disco ram de inicio no se cargan ciertos drivers para dispositivos IDE muy antiguos y por esa razón cuando arranca da el error de que no encuentra el disco duro.
Para solucionarlo en el shell reducido del ramfs hay que cargar los módulos ide, montar el sistema y regenerar el disco ram (el initrd):
Cargamos los módulos IDE:
(initramfs) modprobe ide-disk
(initramfs) modprobe ide-generic
Creamos un directorio y montamos en él la partición raiz:
(initramfs) mkdir /mnt
(initramfs) mount -t ext3 /dev/hda1 /mnt
En vez de /dev/hda1 habrá que poner el nombre de la partición raiz de tu sistema. En el comando mount hay que especificar el sistema de ficheros (ext3) ya que al ser una versión reducida no es capaz de averiguarlo por sí misma.
Convertimos el directorio que acabamos de montar en el nuevo raiz.
(initramfs) chroot /mnt
Al hacer esto se me quedaba congelado el shell y no continuaba. Si ocurre esto, se puede interrumpir con CTRL+D y ejecutarlo de nuevo indicando el comando a ejecutar con ese nuevo raiz, que será el intérprete bash para que podamos seguir introduciendo comandos: chroot /mnt bash
Montamos /proc y /sys:
# mount /proc
# mount /sys
Vamos a /boot, borramos el initrd de nuestra versión de kernel y lo regeneramos con el comando yaird. Si tenemos el /boot en una partición separada habrá que montarlo también.
# cd /boot
# rm initrd.img-2.6.24-19-generic
# /usr/sbin/yaird -o initrd.img-2.6.24-19-generic
Se generará el fichero del initrd, y además veremos que tiene bastante menos tamaño que el original. Reiniciamos, y cuando arranque ya no volverá a salir el error. Lo malo es que cuando se actualice de nuevo la versión del kernel, probablemente volverá a ocurrir lo mismo.
Y ahora que ya funciona el ordenador y arranca ¿para qué se puede usar con su limitada potencia? Bueno, diría que eso es casi lo de menos, lo divertido es hacerlo funcionar, pero lo he estado usando para capturar tráfico de redes wifi vecinas con fines puramente educacionales ;-)
- Procesador Pentium MMX a 166 Mhz
- 64 Mb de RAM
- 9 Gb de disco duro

¿Se le podría instalar un sistema operativo de última generación? Y no me estoy refiriendo a Windows Vista, por supuesto :-) Probemos con Ubuntu...
El arranque
El primer problema es cómo arrancar la instalación. El equipo dispone de un lector de CD-ROM pero no tiene la capacidad de arrancar desde un CD
Tras googlear un poco doy con la solución, que resulta que viene en el mismo CD de instalación de Ubuntu: Se trata de una utilidad llamada Smart Boot Manager (SBM), que es un disquete desde el que es posible arrancar a su vez el CD, aunque el ordenador no esté preparado para ello. La imagen del disquete está en el directorio install del CD de Ubuntu, con unas instrucciones que se resumen en que para generarlo basta ejecutar algo como:
dd if=sbm.bin of=/dev/fd0
Una vez se consigue iniciar el ordenador con el CD, ya se puede hacer la instalación del resto del sistema de la manera habitual... o casi.
Elección del sistema
El Ubuntu para escritorio al que estamos acostumbrados es muy bonito, muy fácil de instalar y tiene todo el software que se puede necesitar, pero en nuestro caso ese es precisamente su mayor problema: No quiero entorno gráfico ni software como OpenOffice o K3B, solo que arranque y después ya instalaré por red lo que vaya haciendo falta.
Con las versiones de escritorio no se puede elegir una instalación así, pero en cambio la versión de servidor sí que lo permite (la instalación de un sistema mínimo) y además se puede hacer en modo consola (sin entorno gráfico). Así que, paradójicamente, instalo la versión más potente en el equipo más humilde.
Instalación
No hay mucho que decir. Se copian los ficheros al disco duro, detecta la tarjeta de red PCMCIA que tengo pinchada en el portátil, y todo va como la seda. Tras finalizar el proceso se reinicia y configuro el ssh para conectarme desde otro equipo y continuar configurándolo de forma más cómoda. Antes de hacer nada más aplico las últimas actualizaciones con aptitude update; aptitude upgrade y reinicio para que arranque con el último kernel.
Problema al arrancar
Para mi horror, depués de actualizar el kernel y reiniciar el proceso se interrumpe con un mensaje de error:
"ALERT! /dev/disk/by-uuid/xxxxxxxxxxx Does not exist, dropping to a shell"
...y aparece un shell reducido cuyo prompt es
(initramfs)
Así que toca googlear para averiguar qué significa y cómo arreglarlo. Parece ser que cuando, tras actualizar el kernel, se genera el disco ram de inicio no se cargan ciertos drivers para dispositivos IDE muy antiguos y por esa razón cuando arranca da el error de que no encuentra el disco duro.
Para solucionarlo en el shell reducido del ramfs hay que cargar los módulos ide, montar el sistema y regenerar el disco ram (el initrd):
Cargamos los módulos IDE:
(initramfs) modprobe ide-disk
(initramfs) modprobe ide-generic
Creamos un directorio y montamos en él la partición raiz:
(initramfs) mkdir /mnt
(initramfs) mount -t ext3 /dev/hda1 /mnt
En vez de /dev/hda1 habrá que poner el nombre de la partición raiz de tu sistema. En el comando mount hay que especificar el sistema de ficheros (ext3) ya que al ser una versión reducida no es capaz de averiguarlo por sí misma.
Convertimos el directorio que acabamos de montar en el nuevo raiz.
(initramfs) chroot /mnt
Al hacer esto se me quedaba congelado el shell y no continuaba. Si ocurre esto, se puede interrumpir con CTRL+D y ejecutarlo de nuevo indicando el comando a ejecutar con ese nuevo raiz, que será el intérprete bash para que podamos seguir introduciendo comandos: chroot /mnt bash
Montamos /proc y /sys:
# mount /proc
# mount /sys
Vamos a /boot, borramos el initrd de nuestra versión de kernel y lo regeneramos con el comando yaird. Si tenemos el /boot en una partición separada habrá que montarlo también.
# cd /boot
# rm initrd.img-2.6.24-19-generic
# /usr/sbin/yaird -o initrd.img-2.6.24-19-generic
Se generará el fichero del initrd, y además veremos que tiene bastante menos tamaño que el original. Reiniciamos, y cuando arranque ya no volverá a salir el error. Lo malo es que cuando se actualice de nuevo la versión del kernel, probablemente volverá a ocurrir lo mismo.
Y ahora que ya funciona el ordenador y arranca ¿para qué se puede usar con su limitada potencia? Bueno, diría que eso es casi lo de menos, lo divertido es hacerlo funcionar, pero lo he estado usando para capturar tráfico de redes wifi vecinas con fines puramente educacionales ;-)
domingo, 15 de junio de 2008
Romper claves wireless
El caso es que todos los métodos de cifrado de datos en las redes Wifi tienen un bug (un error), que es que hay un dato que se repite en cada paquete que se transmite. Consiguiendo un número de paquetes de datos suficientes, podremos romper la clave, ya sea WEP, WPA o WPA2. Cada tipo de clave tiene su historia.
Usaremos la distribución LiveCD Wifislax, está basada en entorno grafico KDE, aunq se puede arrancar en modo texto. Mola mas con las KDE, ya que puedes hacerlo todo en ventanitas.
Usaremos la distribución LiveCD Wifislax, está basada en entorno grafico KDE, aunq se puede arrancar en modo texto. Mola mas con las KDE, ya que puedes hacerlo todo en ventanitas.
usuario: root contraseña: toor
Tiene accesos directos en las KDE a todas las herramientas y a más, usaremos la suite actual (*-ng), y el driver Atheros, primero incrementaremos en un dispositivo más el interface, para tener un ath1 (se monta sobre el /wifi0), la d-link se ve inicialmente como wifi0 haciendo un ifconfig -a
Las herramientas *-ng (NewGeneration):
airodump-ng es para capturar el trático que hay en el aire, por defecto se lanza y guarda los paquetes en /root/swireless/capturas/ o algo así, hace captura bruta de todo el trafico, no solo de IVs, de este modo da igual el ataque que hagamos que el fichero .cap nos vale
aireplay-ng es la herramienta con la que inyectaremos paquetes y efectuaremos el ataque, con varios portátiles se puede hacer más rápido (abriendo varias no valdría, ya que todo lo procesa un único interfaz físico). La idea es que tu le indicas una MAC o un SSID de un punto de acceso y lanzas paquetes enmascarados por la MAC de un cliente (los clientes asociados se ven con el airodump).
Ojo, para inyectar hay que tener un chip wireless compatible con el driver atheros.
Ojo, para inyectar hay que tener un chip wireless compatible con el driver atheros.
aircrack-ng es el que machaca las claves bien por fuerza bruta o usando diccionario
aircrack-ptw, este es nuevo, está en la distribución actual, es un nuevo algoritmo para sacar weps con ataque ARP con unos 50000 paquetes es suficiente (esta usé yo).
En la práctica:
El ataque que hice yo el finde fue el de ARP, para sacarlo con el aircrack-ptw, mientras el airodump-ng escucha, usé el aireplay-ng asi (primera MAC es la del router, la segunda la de un cliente que se ha asociado en algún momento -en este momento la seguridad por filtrado MAC ya no vale una mierda-):
aireplay-ng -3 -b 00:AA:BB:CC:DD:FF -h 00:11:22:33:44:55 ath1Lo dejé una noche, y consegui unos 70k paquetes (de sobra), el descifrado de la WEP es inmediato, no es fuerza bruta, es con un algoritmo nuevo.La suite esta preparada para que cuando lanzas las herramientas desde los lanzadores de las KDE, apuntan directamente a donde están los .cap, de este modo el aircrack-ng o el -ptw directamente lo leen y te dicen que elijas que wifi machacar.
Segunda parte, hackear una WPA/WPA2.
Usaremos:
airodump-ng Para capturar
airodump-ng -w -c ath1
aireplay-ng Para inyectar (-0 nos hace el ataque de deautenticación, el 5 es numero de deautenticaciones por segundo)
aireplay-ng -0 5 -a -c ath1
aircrack-ng Para crackear por fuerza bruta (-a es ataque por fuerza bruta, el 2 es para ataques para WPA/WPA2, el -0 nos pone colorines, y el -w hay q decirle una ruta de un diccionario)
aircrack-ng -a 2 -0 -w
Para este ataque necesitamos un diccionaro, hay cienes por ahí....
Pequeño tutorial de Cracking para mas info:
Redes WLAN_XX de telefónica: Algoritmo descubierto para varios modelos de routers
Hay una aplicación que se llama WLANDECRYPTER, con ponerle el principio de la MAC del AP y el nombre completo de la WLAN_XX de Telefónica, te genera un diccionario corto donde está la WEP. Necesitas únicamente unos 10 paquetes y luego por fuerza bruta saca la clave WEP mediante el diccionario que has generado. Esta aplicación está en el Wifislax, por supuesto.
Ojo, todos los datos los almacena en memoria, si se apaga el PC se pierden, así que merece la pena guardarse los .cap que contienen todo.
Una vez sacada la clave, se pueden descifrar los ficheros .cap y en teoría puedes ver todo el trafico que has capturado previamente.
Un saludo y no seais malos ;)
Ah, se me olvidaba algo:
ATENCIÓN: Este tutorial es únicamente para que puedas comprobar la seguridad de tu red wireless, si lo utilizas para romper la red de otro lo harás bajo tu responsabilidad.
Un saludo y no seais malos ;)
Ah, se me olvidaba algo:
ATENCIÓN: Este tutorial es únicamente para que puedas comprobar la seguridad de tu red wireless, si lo utilizas para romper la red de otro lo harás bajo tu responsabilidad.
miércoles, 28 de mayo de 2008
En momentos de tormenta...
... como el que está siendo ahora mismo, cuando estoy trabajando con el ordenador me entra el acojone de que haya un corte eléctrico y se me pierdan datos. Se supone que en los sistemas de ficheros modernos, como ext3 o reiserfs, gracias al journaling el disco no quedaría en un estado inconsistente, pero no se asegura que los datos escritos sean los más recientes.
Yo, por si acaso, en momentos de tormenta como el de ahora me convierto en root y ejecuto.
que lo que hace es volver a montar la partición raiz con la opción sync, que sirve para que los datos se escriban siempre en el disco sin pasar por la caché del sistema. Esto afecta al rendimiento, pero es temporal ya que la siguiente vez que arranca el ordenador se vuelve a montar con las opciones habituales, entre las que no está la de sync.
No estoy seguro de que sirviera de mucho en caso de catástrofe eléctrica, pero me quedo más tranquilo...
Yo, por si acaso, en momentos de tormenta como el de ahora me convierto en root y ejecuto.
mount / -o remount,sync
que lo que hace es volver a montar la partición raiz con la opción sync, que sirve para que los datos se escriban siempre en el disco sin pasar por la caché del sistema. Esto afecta al rendimiento, pero es temporal ya que la siguiente vez que arranca el ordenador se vuelve a montar con las opciones habituales, entre las que no está la de sync.
No estoy seguro de que sirviera de mucho en caso de catástrofe eléctrica, pero me quedo más tranquilo...
jueves, 1 de mayo de 2008
Papelera autoborrante en KDE
He leido en OSNews una entrada sobre lo malo y lo bueno de la papelera de los entornos de escritorio actuales. Me ha sorprendido un poco porque el autor parece hacer una montaña de un grano de arena. La cosa se resume en que no le gusta tener que estar pendiente de la papelera: Si tira algo a ella tiene la manía de vaciarla inmediatamente porque le molesta ver el icono de que está llena, y si hace el esfuerzo de olvidarse de que está ahí, se le llena de información vieja y que ocupa mucho espacio.
La solución que propone es que se autogestione y se limpie automáticamente, poniéndole un límite de tamaño o de antigüedad de los ficheros borrados. Lo primero puede hacerse en Windows y no estoy seguro ahora de si se puede también en Gnome. Por lo visto en el sistema que usa el autor del post (MacOS-X) no se puede configurar eso y ni siquiera se puede usar tampoco ninguna combinación de teclas que permita borrar un fichero directamente sin tirarlo a la papelera.
Mi manía al respecto es la siguiente: Hasta hace poco no usaba la papelera, siempre borraba todo directamente y si no estaba seguro lo hacía de todas formas :-) Hasta que un día me arrepentí de ello cuando me hubiera gustado recuperar algo que había eliminado días antes. Como no me gusta tampoco la idea de dedicar espacio de disco a ficheros que seguramente no necesitaré más, se me ocurrio la (¡oh! gran idea) solución de hacer que se borrase automáticamente pasados N días. Como en KDE (el escritorio que uso) no está tampoco esa opción me hice un script que se ejecuta en en el cron todos los días sobre la hora a la que escribo este post. Hace estas 3 cosas:
Las dos primeras líneas borran los ficheros de más de 15 días que hay en la papelera, que resulta que se encuentra en el $HOME del usuario, dentro de .local/share/Trash/files y .local/share/Trash/info.
La tercera línea borrar las imágenes miniatura que se crean cuando entramos por ejemplo a una carpeta llena de fotos. La primera vez que lo hacemos se crean y se guardan en este directorio para que las siguientes veces se muestren directamente de manera más rápida. Como todo, esto también ocupa espacio, así que ya de paso las borro también.
Y ya está, no tiene más misterio :-)
La solución que propone es que se autogestione y se limpie automáticamente, poniéndole un límite de tamaño o de antigüedad de los ficheros borrados. Lo primero puede hacerse en Windows y no estoy seguro ahora de si se puede también en Gnome. Por lo visto en el sistema que usa el autor del post (MacOS-X) no se puede configurar eso y ni siquiera se puede usar tampoco ninguna combinación de teclas que permita borrar un fichero directamente sin tirarlo a la papelera.
Mi manía al respecto es la siguiente: Hasta hace poco no usaba la papelera, siempre borraba todo directamente y si no estaba seguro lo hacía de todas formas :-) Hasta que un día me arrepentí de ello cuando me hubiera gustado recuperar algo que había eliminado días antes. Como no me gusta tampoco la idea de dedicar espacio de disco a ficheros que seguramente no necesitaré más, se me ocurrio la (¡oh! gran idea) solución de hacer que se borrase automáticamente pasados N días. Como en KDE (el escritorio que uso) no está tampoco esa opción me hice un script que se ejecuta en en el cron todos los días sobre la hora a la que escribo este post. Hace estas 3 cosas:
find $HOME/.local/share/Trash/files -mtime +15 -exec rm -rf {} \;
find $HOME/.local/share/Trash/info -mtime +15 -exec rm -rf {} \;
find $HOME/.thumbnails -type f -mtime +15 -exec rm -f {} \;
Las dos primeras líneas borran los ficheros de más de 15 días que hay en la papelera, que resulta que se encuentra en el $HOME del usuario, dentro de .local/share/Trash/files y .local/share/Trash/info.
La tercera línea borrar las imágenes miniatura que se crean cuando entramos por ejemplo a una carpeta llena de fotos. La primera vez que lo hacemos se crean y se guardan en este directorio para que las siguientes veces se muestren directamente de manera más rápida. Como todo, esto también ocupa espacio, así que ya de paso las borro también.
Y ya está, no tiene más misterio :-)
martes, 29 de abril de 2008
Mando de la Wii en Linux
Cierto ser humano se enteró hace poco de que uno de los mandos de la Wii (el conocido como Wiimote) se puede utilizar en el PC como si de un ratón o joystick se tratara, ya que se comunica mediante la norma Bluetooth, estándar a más no poder. Al susodicho ser humano le faltó tiempo para entrar en eBay y adquirir uno de ellos por 46$, que al cambio actual son unos 30€.

Esta mañana lo ha recibido y por la tarde he estado trasteando un poco con él y con mi Linux.
Lo primero que he hecho ha sido comprobar que se veía a través del bluetooth. Después de mirar por Internet he averiguado que presionando a la vez los botones '1' y '2' el cacharrito se vuelve visible durante unos segundos, durante los cuales parpadean los cuatro LEDs azules que tiene en la parte de abajo. Se puede ver con el comando:
Lo siguiente es hacer "algo" con él. Busco y encuentro la página del proyecto WiiLi, en la que hay mucha información útil. Me descargo CWiid, que es una librería para Linux que permite hacer programas que usen el mando. Hay que compilarla, y como es habitual los pasos a dar son:
El primero lo tengo que ejecutar varias veces y tras cada una de ellas instalar alguna otra librería necesaria para que se pueda compilar esta (por ejemplo, las de bluetooth o las del interfaz gráfico GTK). Cuando están todas, el
Todos estos programas nada más lanzarlos lo primero que hacen es mostrar un mensaje en el que indica que hay que mantener apretados los botones 1 y 2 del mando para que lo descubra. Tras unos segundos comienzan a funcionar sin que haya que hacer nada más para que lo detecte.
La última prueba que he hecho ha sido bajarme el Tetriis. Las piezas se mueven con los cursores que tiene el mando, y para rotarlas hay que girarlo tanto como queramos que se mueva la pieza. Es decir, si queremos que gire 90 grados a la izquierda deberemos hacer eso mismo con el mando. Un poco raro de jugar, ya que al sacudir el mando lo que se espera que pase es que se muevan las piezas en lugar de girarse.
En fin, un cacharro curioso. No se me ocurren aplicaciones prácticas salvo usarlo para jugar (que al fin y al cabo es para lo que está pensado) o como mando a distancia, aunque para esto hay otras alternativas más convencionales (y menos geeks claro :-)

Esta mañana lo ha recibido y por la tarde he estado trasteando un poco con él y con mi Linux.
Lo primero que he hecho ha sido comprobar que se veía a través del bluetooth. Después de mirar por Internet he averiguado que presionando a la vez los botones '1' y '2' el cacharrito se vuelve visible durante unos segundos, durante los cuales parpadean los cuatro LEDs azules que tiene en la parte de abajo. Se puede ver con el comando:
$ hcitool scan
Scanning...
00:1E:35:E3:62:B5 Nintendo RVL-CNT-01
Lo siguiente es hacer "algo" con él. Busco y encuentro la página del proyecto WiiLi, en la que hay mucha información útil. Me descargo CWiid, que es una librería para Linux que permite hacer programas que usen el mando. Hay que compilarla, y como es habitual los pasos a dar son:
./configure
make
sudo make install
El primero lo tengo que ejecutar varias veces y tras cada una de ellas instalar alguna otra librería necesaria para que se pueda compilar esta (por ejemplo, las de bluetooth o las del interfaz gráfico GTK). Cuando están todas, el
./configure termina bien y el resto de pasos se ejecutan correctamente. Las librerias se instalan en /usr/local/lib y los programas de ejemplo en /usr/local/bin. Entre ellos están:- wmdemo, que muestra en un menú en modo texto varias opciones que permiten encender y apagar los LEDs del mando, el vibrador, mostrar los botones pulsados, y por supuesto los valores de aceleración en los 3 ejes que hacen tan especial a este mando.
- Otro programa de prueba es wmgui, que hace lo mismo que el anterior, pero en modo gráfico, mostrando toda la información anterior en una ventana más amigable, y utilizando barras para los datos del acelerómetro.
- Por último, con wminput podemos utilizar el mando para controlar nuestro PC. Antes de ello hay que cargar un módulo para que funcione algo llamado uinput simplemente ejecutando el comando
modprobe uinput, ya que si no aparece un error nada más ejecutar el programita. Después de esto, se puede mover el puntero del ratón moviendo el mando hacia los lados o arriba/abajo, y apretar los botones izquierdo/derecho con los del mando ('A' y 'B'). Cuesta un poco hacerse con el control, pero el resultado es muy curioso.
Todos estos programas nada más lanzarlos lo primero que hacen es mostrar un mensaje en el que indica que hay que mantener apretados los botones 1 y 2 del mando para que lo descubra. Tras unos segundos comienzan a funcionar sin que haya que hacer nada más para que lo detecte.
La última prueba que he hecho ha sido bajarme el Tetriis. Las piezas se mueven con los cursores que tiene el mando, y para rotarlas hay que girarlo tanto como queramos que se mueva la pieza. Es decir, si queremos que gire 90 grados a la izquierda deberemos hacer eso mismo con el mando. Un poco raro de jugar, ya que al sacudir el mando lo que se espera que pase es que se muevan las piezas en lugar de girarse.
En fin, un cacharro curioso. No se me ocurren aplicaciones prácticas salvo usarlo para jugar (que al fin y al cabo es para lo que está pensado) o como mando a distancia, aunque para esto hay otras alternativas más convencionales (y menos geeks claro :-)
lunes, 21 de abril de 2008
Disquetera USB
Por una razón que ahora no viene al caso (bueno, en realidad sí que podría venir pero ya lo contaré otro día) he tenido que generar un disquete de arranque a partir de un fichero imagen. Como mi portátil no trae disquetera, he tomado prestada una del trabajo para poder hacerlo.
En Linux hay muchos y variados comandos para manejar disquetes de 3,5'' pero tienen un problema: Están pensados para unidades fijas (p.e. dispositivo /dev/fd0) y no funcionan bien (o no lo hacen en absoluto) con unidades USB. La razón es la forma en que tiene de trabajar con las unidades de disquete: Como todos los dispositivos, tiene asociado un fichero en el directorio /dev, siendo el que más frecuentemente se usa el famoso /dev/fd0 para referirse a la "unidad A:". Pero además existen otros llamados /dev/fd0H1440, /dev/fdH02880, etc. para especificar que el disquete tiene capacidad de 1,44 o 2,88 MB.
Las disqueteras USB se detectan como dispositivos SCSI (en mi caso /dev/sdb) y las utilidades típicas (como fdformat) necesitan tener acceso a esos otros ficheros con las capacidades posibles del soporte para saber cómo ha de tratarlo al formatearlo.
La única solución que he encontrado ha sido utilizar un programa especialmente preparado para manejar unidades USB, que increiblemente no viene en los repositorios oficiales de las distribuciones habituales. Se llama ufiformat y de su página se pueden descargar tanto los fuentes como binarios y paquetes RPMs.
Una vez instalado su uso es muy simple. Basta con ejecutar:
así sin parámetros, y él solito encontrará la disquetera que tengamos conectada y dará formato al disco según su capacidad máxima. Si somos poco atrevidos con eso de la detección automática podemos especificar el dispositivo si nos quedamos más tranquilos con ello:
En Linux hay muchos y variados comandos para manejar disquetes de 3,5'' pero tienen un problema: Están pensados para unidades fijas (p.e. dispositivo /dev/fd0) y no funcionan bien (o no lo hacen en absoluto) con unidades USB. La razón es la forma en que tiene de trabajar con las unidades de disquete: Como todos los dispositivos, tiene asociado un fichero en el directorio /dev, siendo el que más frecuentemente se usa el famoso /dev/fd0 para referirse a la "unidad A:". Pero además existen otros llamados /dev/fd0H1440, /dev/fdH02880, etc. para especificar que el disquete tiene capacidad de 1,44 o 2,88 MB.
Las disqueteras USB se detectan como dispositivos SCSI (en mi caso /dev/sdb) y las utilidades típicas (como fdformat) necesitan tener acceso a esos otros ficheros con las capacidades posibles del soporte para saber cómo ha de tratarlo al formatearlo.
La única solución que he encontrado ha sido utilizar un programa especialmente preparado para manejar unidades USB, que increiblemente no viene en los repositorios oficiales de las distribuciones habituales. Se llama ufiformat y de su página se pueden descargar tanto los fuentes como binarios y paquetes RPMs.
Una vez instalado su uso es muy simple. Basta con ejecutar:
ufiformatasí sin parámetros, y él solito encontrará la disquetera que tengamos conectada y dará formato al disco según su capacidad máxima. Si somos poco atrevidos con eso de la detección automática podemos especificar el dispositivo si nos quedamos más tranquilos con ello:
ufiformat /dev/sdb
miércoles, 13 de febrero de 2008
Configuración de un NAP bluetooth (II)
Este post es una ampliación de otro anterior en el que se explicaba cómo configurar un punto de acceso bluetooth (NAP) en Linux. Con ello se conseguía una forma básica de conectar una PDA a Internet, pero tiene el inconveniente de que no sirve si se quieren conectar al mismo tiempo varios dispositivos.
A continuación resumiré todos los pasos que hay que seguir para configurar un NAP que permite la conexión de varios dispositivos simultáneamente. Están hechos pensando en Debian/Ubuntu Linux, en otras distribuciones se hará de forma parecida aunque posiblemente algún fichero esté en otro sitio.
1) Instalar utilidades de bluetooth y de ethernet bridging:
2) Asegurarse de que se detecta el adaptador bluetooth en el ordenador:
3) Editar /etc/bluetooth/hcid.conf y modificar las siguientes líneas para que queden así:
4) Si no existe ya, crear un interfaz puente Ethernet de nombre pan0, con el siguiente comando:
Para asegurarnos de que se ha creado podemos ejecutar:
5) El interfaz pan0 se puede configurar como cualquier otro, en /etc/network/interfaces, por ejemplo así:
6) Editar /etc/default/bluetooth y modificar las siguientes líneas para que queden así:
7) Crear el fichero /etc/bluetooth/pan/dev-up con el siguiente contenido:
No olvidarse de darle permisos de ejecución. Este script se invocará cada vez que se conecte al ordenador un dispositivo. Cuando esto sucede se crea automáticamente un interfaz de red llamado bnep0 (o bnep1, bnep2... si se conectan otros después). El script anterior lo que hace es añadir el recien creado interfaz al puente pan0 del que hemos hablado antes y se asegura de que está levantado.
8) En el fichero /etc/init.d/bluetooth buscar la parte donde pone start) y justo después de donde pone start_pan || true añadir una línea como esta:
Que lo que hace es esperar 5 segundos antes de lanzar el servidor SDP (el que anuncia los servicios ofrecidos por el bluetooth). El "&" del final lo lanza como tarea de fondo, para que el arranque no se ralentice mientras pasan los cinco segundos.
9) Por último, para que el PC haga de router:
Se supone que la PDA tiene una dirección IP estática en la misma red que la que se ha configurado para el interfaz pan0. Se podría poner también que fuera dinámica configurando en el PC un servidor DHCP para esa red, que es bastante sencillo.
Si todo funciona como debería cada vez que se conecte un dispositivo bluetooth al PC deberá aparecer un interface de red llamado bnepX. Al hacer un
Cosas que pueden fallar
A continuación resumiré todos los pasos que hay que seguir para configurar un NAP que permite la conexión de varios dispositivos simultáneamente. Están hechos pensando en Debian/Ubuntu Linux, en otras distribuciones se hará de forma parecida aunque posiblemente algún fichero esté en otro sitio.
1) Instalar utilidades de bluetooth y de ethernet bridging:
$ sudo aptitude install bluez-utils
$ sudo aptitude install bridge-utils
2) Asegurarse de que se detecta el adaptador bluetooth en el ordenador:
$ hcitool dev
Devices:
hci0 00:03:7A:EE:B6:76
3) Editar /etc/bluetooth/hcid.conf y modificar las siguientes líneas para que queden así:
# Default PIN code for incoming connections
# (Aquí ponemos el PIN que queramos).
passkey "1234";
# Default link mode
# none - no specific policy
# accept - always accept incoming connections
# master - become master on incoming connections,
# deny role switch on outgoing connections
lm accept,master;
4) Si no existe ya, crear un interfaz puente Ethernet de nombre pan0, con el siguiente comando:
# brctl addbr pan0 Para asegurarnos de que se ha creado podemos ejecutar:
$ brctl show
bridge name bridge id STP enabled interfaces
pan0 8000.000000000000 no
5) El interfaz pan0 se puede configurar como cualquier otro, en /etc/network/interfaces, por ejemplo así:
auto pan0
iface pan0 inet static
address 192.168.2.1
netmask 255.255.255.0
gateway 192.168.0.1
6) Editar /etc/default/bluetooth y modificar las siguientes líneas para que queden así:
BLUETOOTH_ENABLED = 1
PAND_ENABLED = 1
PAND_OPTIONS=" --listen --role NAP --devup /etc/bluetooth/pan/dev-up"
SDPTOOL_OPTIONS="add NAP"
7) Crear el fichero /etc/bluetooth/pan/dev-up con el siguiente contenido:
#!/bin/sh
ifup pan0
brctl addif pan0 $1
ifconfig $1 0.0.0.0
No olvidarse de darle permisos de ejecución. Este script se invocará cada vez que se conecte al ordenador un dispositivo. Cuando esto sucede se crea automáticamente un interfaz de red llamado bnep0 (o bnep1, bnep2... si se conectan otros después). El script anterior lo que hace es añadir el recien creado interfaz al puente pan0 del que hemos hablado antes y se asegura de que está levantado.
8) En el fichero /etc/init.d/bluetooth buscar la parte donde pone start) y justo después de donde pone start_pan || true añadir una línea como esta:
start_rfcomm || true
start_pan || true
(sleep 5; run_sdptool || true) &
log_end_msg 0
Que lo que hace es esperar 5 segundos antes de lanzar el servidor SDP (el que anuncia los servicios ofrecidos por el bluetooth). El "&" del final lo lanza como tarea de fondo, para que el arranque no se ralentice mientras pasan los cinco segundos.
9) Por último, para que el PC haga de router:
$ sudo echo "1" > /proc/sys/net/ipv4/ip_forward
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Se supone que la PDA tiene una dirección IP estática en la misma red que la que se ha configurado para el interfaz pan0. Se podría poner también que fuera dinámica configurando en el PC un servidor DHCP para esa red, que es bastante sencillo.
Si todo funciona como debería cada vez que se conecte un dispositivo bluetooth al PC deberá aparecer un interface de red llamado bnepX. Al hacer un
ifconfig veremos que no tiene IP asignada en el PC, pero responderá a un ping si se lo hacemos a la dirección estática que le hubieramos configuradoCosas que pueden fallar
- Al intentar conectar desde la PDA al PC no ofrece ningún servicio bluetooth: No se ha configurado bien SDP. Revisar el parámetro SDPTOOL_OPTIONS y que se ha cambiado /etc/init.d/bluetooth como se decía en el apartado 8.
Se puede añadir el servicio a mano ejecutandosdptool add nap.
Deberá responder con el mensaje "NAP service registered", de lo contrario significará, que algo está pasando con ese servicio que no funciona bien... - El servicio de Network Access Point se ve, pero cuando se intenta conectar falla. Puede ser por muchas cosas. Asegurarse de que:
- Existe el interface pan0 y tiene configurada una IP:
ifconfig pan0
pan0 Link encap:Ethernet direcciónHW 00:03:7a:ee:b6:76
inet dirección:192.168.2.1 Difusión:192.168.2.255 Máscara:255.255.255.0
ARRIBA DIFUSIÓN CORRIENDO MULTICAST MTU:1500 Métrica:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
colisiones:0 txqueuelen:0
RX bytes:796 (796.0 B) TX bytes:2565 (2.5 KB) - Está creado el puente ethernet y en él está el interface pan0:
brctl show
bridge name bridge id STP enabled interfaces
pan0 8000.00037aeeb676 no - Está ejecutándose el demonio pand:
ps -ef | grep pand
root 26317 1 0 Jun04 ? 00:00:00 /usr/bin/pand --devup /etc/bluetooth/pan/dev-up --listen --role NAP
Si no está corriendo podemos lanzarlo a mano desde la línea de comandos con los parámetros de arriba. Si al hacerlo sigue sin lanzarse miraremos el log/var/log/syslogy es probable que encontremos algún mensaje como:
Bind failed. Address already in use(98)
Puede ser debido a que haya alguna otra utilidad de bluetooth pululando en el sistema. En alguna ocasión que me ha pasado eso mirando los procesos había dos llamados así:
root 16844 16839 0 20:52 ? 00:00:00 /usr/lib/bluetooth/bluetoothd-service-input
root 16845 16839 0 20:52 ? 00:00:00 /usr/lib/bluetooth/bluetoothd-service-network
Tras matarlos pude lanzar el demonio pand.
Si falla alguna de estas tres cosas se puede probar a reiniciar el servicio de bluetooth entero (/etc/init.d/bluetooth restart) o a descargar y volver a cargar el driver del dispositivo bluetooth que tengamos (puede variar según el hardware). - Existe el interface pan0 y tiene configurada una IP:
lunes, 31 de diciembre de 2007
Recuperando tabla de particiones perdida
Ayer pasé una "divertida" tarde luchando a brazo partido por recuperar la tabla de particiones de mi disco duro. Todo empezó cuando tuve la feliz idea de probar el comando
No se por qué (aunque lo intuyo, ver final del post) cuando se reinició el ordenador en lugar de arrancar el Windows (que era lo que estaba probando), lo que arrancó fue... nada. Así que cogí el CD de instalación de mi Kubuntu y arranqué con él, esperando que se arreglara simplemente reinstalando el GRUB, cosa sencilla y que ya he hecho otras veces.
Tras arrancar desde el CD, abro una consola como root y me aseguro de que se ve la partición del disco, ejecutando
Gracias a que el CD con el que he arrancado es live puedo utilizar el entorno gráfico y el navegador para buscar en Internet la forma de arreglarlo. Encuentro una utilidad llamada gpart que escanea el disco duro en busca de particiones. Sus creadores han pensado en todo y hay una versión compilada estáticamente para Linux, con lo que solo hay que descargársela y ejecutarla. Al hacerlo encuentra algunas de las particiones que tenía, y me da la opción de escribir la tabla en el disco. Como no tengo mucho que perder, le digo que sí y lo hace inmediatamente. Sin necesidad de reiniciar, compruebo que puedo montar la partición de mi Linux, y que está todo ahí. No sería demasiado catastrófico que se perdiera porque tengo la buena costumbre de hacer backup de vez en cuando en otro disco, pero sería un rollo tener que instalar otra vez el sistema y configurarlo a mi gusto.
Bien, reinicio y me sale el GRUB. El Windows no lo puedo arrancar, pero el Linux sí, así que eso hago. Mi objetivo ahora es intentar recuperar la partición de Windows. Tampoco tengo datos en ella, pero hay dos cosas por las que me interesa: Porque es un XP legal instalado en lugar del Vista que traía, y porque tengo ahí mis partidas del Zero Hour :-)
Antes de hacer ningún experimento me guardo en una memoria USB la tabla de particiones actual, por si acaso. Aunque no sea la correcta, por lo menos me arranca el ordenador con ella.
Busco y encuentro otra utilidad, TestDisk, similar a la anterior y que también revisa todo el disco duro buscando vestigios de particiones. Esta parece que funciona algo mejor, ya que encuentra incluso la definición de la partición original del Windows Vista que venía preinstalado en mi portátil. La de XP no aparece, pero da la opción de hacer un escaneo más profundo y tras unos minutos la encuentra. Le digo cuales son las particiones que tenía y las restauro.
Reinicio de nuevo y ya puedo arrancar el Windows. Perfecto, pienso, pero aun no ha terminado la cosa, porque cuando vuelvo a reiniciar para volver a mi querido Linux ahora no arranca, al seleccionarlo en el GRUB me da este error:
grub-install /dev/sda
Pero da un error de que no encuentra el directorio de instalación de GRUB. Para solucionarlo tengo que indicarle dónde está, así que primero hay que montar la partición en algún sitio, por ejemplo en /mnt:
mount /dev/sda6 /mnt
A continuación reinstalar GRUB indicándole el sitio anterior:
grub-install --root-directory=/mnt /dev/sda
Con esto es suficiente el 99% de las veces, pero dado el problema que he tenido con la tabla de particiones me da un error, de que no encuentra el fichero stage1. Vuelvo a buscar y encuentro la solución. Primero hay que ejecutar grub a secas, lo que hace que se le puedan ejecutar comandos interactivamente, y entonces hago lo siguiente:
grub> find /boot/grub/stage1
Me devuelve (hd0,5)
grub> root (hd0,5)
grub> setup(hd0)
Y se instala sin errores. Vuelvo a reiniciar, y al elegir la entrada del GRUB para arrancar me vuelve a decir que no puede montar la partición. Presiono la 'e' para editarla, y veo que hay una entrada en la que pone root (hd0,6), así que la sustituyo por (hd0,5), y presiono la 'b' para que arranque de ella, y por fin todo vuelve a funcionar como antes. Por alguna razón ha cambiado el número de la partición del sistema con todo este lío (antes era la 6 y ahora es la 5). Para que no vuelva a ocurrir lo del arranque, corrijo el fichero /boot/grub/menu.lst con la nueva información.
Y ahora, las conclusiones:
Links de utilidad:
- gpart, programa de recuperación de particiones.
- TestDisk, otro programa de recuperación de particiones, más grande, más completo, y para más sistemas (incluido Windows).
- Solución al problema de reinstalación de GRUB.
grub-reboot, que sirve para reiniciar un sistema Linux y hacer que se arranque con la entrada del menú de GRUB que le indiquemos.No se por qué (aunque lo intuyo, ver final del post) cuando se reinició el ordenador en lugar de arrancar el Windows (que era lo que estaba probando), lo que arrancó fue... nada. Así que cogí el CD de instalación de mi Kubuntu y arranqué con él, esperando que se arreglara simplemente reinstalando el GRUB, cosa sencilla y que ya he hecho otras veces.
Tras arrancar desde el CD, abro una consola como root y me aseguro de que se ve la partición del disco, ejecutando
fdisk -l. ¡Horror! No es que no vea la partición del Linux, es que no ve ninguna, el mensaje que devuelve dice que el disco ¡no tiene particiones!Gracias a que el CD con el que he arrancado es live puedo utilizar el entorno gráfico y el navegador para buscar en Internet la forma de arreglarlo. Encuentro una utilidad llamada gpart que escanea el disco duro en busca de particiones. Sus creadores han pensado en todo y hay una versión compilada estáticamente para Linux, con lo que solo hay que descargársela y ejecutarla. Al hacerlo encuentra algunas de las particiones que tenía, y me da la opción de escribir la tabla en el disco. Como no tengo mucho que perder, le digo que sí y lo hace inmediatamente. Sin necesidad de reiniciar, compruebo que puedo montar la partición de mi Linux, y que está todo ahí. No sería demasiado catastrófico que se perdiera porque tengo la buena costumbre de hacer backup de vez en cuando en otro disco, pero sería un rollo tener que instalar otra vez el sistema y configurarlo a mi gusto.
Bien, reinicio y me sale el GRUB. El Windows no lo puedo arrancar, pero el Linux sí, así que eso hago. Mi objetivo ahora es intentar recuperar la partición de Windows. Tampoco tengo datos en ella, pero hay dos cosas por las que me interesa: Porque es un XP legal instalado en lugar del Vista que traía, y porque tengo ahí mis partidas del Zero Hour :-)
Antes de hacer ningún experimento me guardo en una memoria USB la tabla de particiones actual, por si acaso. Aunque no sea la correcta, por lo menos me arranca el ordenador con ella.
Busco y encuentro otra utilidad, TestDisk, similar a la anterior y que también revisa todo el disco duro buscando vestigios de particiones. Esta parece que funciona algo mejor, ya que encuentra incluso la definición de la partición original del Windows Vista que venía preinstalado en mi portátil. La de XP no aparece, pero da la opción de hacer un escaneo más profundo y tras unos minutos la encuentra. Le digo cuales son las particiones que tenía y las restauro.
Reinicio de nuevo y ya puedo arrancar el Windows. Perfecto, pienso, pero aun no ha terminado la cosa, porque cuando vuelvo a reiniciar para volver a mi querido Linux ahora no arranca, al seleccionarlo en el GRUB me da este error:
Error 17, cannot mount selected partitionVuelvo a arrancar con el CD y busco información. Hay que reinstalar el GRUB, así que ejecuto:
grub-install /dev/sda
Pero da un error de que no encuentra el directorio de instalación de GRUB. Para solucionarlo tengo que indicarle dónde está, así que primero hay que montar la partición en algún sitio, por ejemplo en /mnt:
mount /dev/sda6 /mnt
A continuación reinstalar GRUB indicándole el sitio anterior:
grub-install --root-directory=/mnt /dev/sda
Con esto es suficiente el 99% de las veces, pero dado el problema que he tenido con la tabla de particiones me da un error, de que no encuentra el fichero stage1. Vuelvo a buscar y encuentro la solución. Primero hay que ejecutar grub a secas, lo que hace que se le puedan ejecutar comandos interactivamente, y entonces hago lo siguiente:
grub> find /boot/grub/stage1
Me devuelve (hd0,5)
grub> root (hd0,5)
grub> setup(hd0)
Y se instala sin errores. Vuelvo a reiniciar, y al elegir la entrada del GRUB para arrancar me vuelve a decir que no puede montar la partición. Presiono la 'e' para editarla, y veo que hay una entrada en la que pone root (hd0,6), así que la sustituyo por (hd0,5), y presiono la 'b' para que arranque de ella, y por fin todo vuelve a funcionar como antes. Por alguna razón ha cambiado el número de la partición del sistema con todo este lío (antes era la 6 y ahora es la 5). Para que no vuelva a ocurrir lo del arranque, corrijo el fichero /boot/grub/menu.lst con la nueva información.
Y ahora, las conclusiones:
- Hay que hacer copia de seguridad de nuestros datos de vez en cuando. Yo tenía hecha una reciente, así que todo este proceso para recuperarlos ha sido para mi simplemente una molestia. Si no los hubiera tenido, hubiera sido una lucha desesperada. Prefiero las molestias a la desesperación.
- Hacer copia de seguridad del sector de arranque (MBR), que contiene la tabla de particiones es muy simple, basta ejecutar:
dd if=/dev/sda of=copia_tabla.bin bs=512 count=1
Que copia los primeros 512 bytes del disco en el fichero copia_tabla.bin. Para restaurarla hay que ejecutar el comando contrario. Desde hoy, este fichero lo he añadido a mi copia de seguridad. - ¿Por qué me pasó todo esto simplemente por ejecutar grub-reboot? No lo se, puede ser debido a algún problema con la tabla de particiones original o algún tema de comunicación BIOS - sistema sobre la geometría del disco. Lo miraré con calma un día de estos.
Links de utilidad:
- gpart, programa de recuperación de particiones.
- TestDisk, otro programa de recuperación de particiones, más grande, más completo, y para más sistemas (incluido Windows).
- Solución al problema de reinstalación de GRUB.
miércoles, 12 de diciembre de 2007
Configuración de un NAP bluetooth en Ubuntu Linux
En la jerga de bluetooth un NAP es un Network Access Point. Es decir, podemos hacer que nuestro ordenador actúe cómo router o pasarela para conectarse a Internet desde algún dispositivo que se comunique por bluetooth, como una PDA o un teléfono móvil.
Ubuntu tiene unas buenas utilidades gráficas para el manejo de dispositivos bluetooth, pero están orientadas al intercambio de ficheros y utilización como módem de los teléfonos móviles. No he sido capaz de configurar un NAP solo con esas utilidades, así que hay que hacerlo por línea de comandos. Para ello, hay que configurar por un lado la parte concreta de bluetooth, y por otro la parte más general de red del sistema. Estos pasos están pensados para Ubuntu y Debian, pero en otros sabores de Linux serán similares.
Configuración de la parte bluetooth
Para empezar, si no lo tenemos ya hay que instalar las utilidades bluetooth, ejecutando como root:
aptitude install bluez-utils
Lo primero será comprobar que el sistema detecta el adaptador de bluetooth que tengamos en el PC, mediante el comando:
hcitool dev
Deberá aparecer algo parecido a:
Devices:
hci0 00:03:7A:EE:B6:16
Donde hci0 es el dispositivo bluetooth y los números su dirección MAC. Si no aparece nada, es que el sistema no está detectando el adaptador.
Editar el fichero /etc/default/bluetooth. Está muy bien comentado qué es cada parámetro de los que aparecen en él, para nuestros propósitos será necesario asegurarse de que, al menos, los siguiente valores están así:
BLUETOOTH_ENABLED = 1
PAND_ENABLED = 1
PAND_OPTIONS="--devup /etc/bluetooth/pan/dev-up"
PAND_OPTIONS=$PAND_OPTIONS" --listen --role NAP "
SDPTOOL_OPTIONS="add NAP"
Aquí hay un par de cosas importantes que no vienen configuradas por defecto y que no he visto bien explicado en ningún sitio: En la primera línea PAND_OPTIONS indicamos la ruta de un script que se ejecutará cuando se establezca la conexión para levantar el interface. Este script no existe, hay que crearlo; es muy simple y más abajo se explica cómo hacerlo. El otro detalle es que en la otra línea donde pone PAND_OPTIONS, si no le añadimos lo que hemos puesto en la línea anterior se perderá. Para que no ocurra, se pone primero el valor que ya tenía, con $PAND_OPTIONS, y a continuación se le concatenan los nuevos valores.
A continuación, editar el fichero /etc/bluetooth/hcid.conf, y modificar la que pone passkey, donde indicaremos un password para la conexión desde la PDA. Más abajo donde pone Default link mode deberá poner: lm accept,master;
En el paquete bluez-utils hay una cosa mal en el script de arranque /etc/init.d/bluetooth, y es que no se lanza el demonio del servicio SDP, que se encarga de mostrar los servicios ofrecidos por nuestro servidor a los dispositivos que se quieran conectar a él. Para que lo lance deberemos buscar en el mencionado fichero la parte donde pone start) y veremos que hay varias líneas donde pone 'start_algo || true'. Añadiremos run_sdptool || true
Configuración de la parte de red del sistema
Cuando se establezca la conexión bluetooth se creará un interface llamado bnep0, que deberá tener su dirección IP. Para hacerlo más simple, suponemos que esta dirección es estática, y lo configuramos en el fichero donde se encuentran todos los interfaces de red del sistema, en /etc/network/interfaces :
auto bnep0
iface bnep0 inet static
address 192.168.2.1
netmask 255.255.255.0
gateway 192.168.0.1 (o el que tengamos en nuestra conexión a Internet por defecto)
Con esto configuramos la IP, pero el interface no estará activo hasta que no se conecte un dispositivo como una PDA. Para activarlo cuando llegue ese momento es necesario un pequeño script al que nos hemos referido más arriba. Lo habíamos configurado para que se llamara /etc/bluetooth/pan/dev-up, pero podría estar en cualquier otro sitio. Su contenido es el siguiente:
#!/bin/sh
ifup --force $1
La opción de --force es mejor ponerla porque a veces al terminar la conexión el interface se queda creado y la siguiente vez no se vuelve a levantar porque se piensa que sigue activo. El script este es ejecutado por el demonio que atiende las conexiones bluetooth, y le pasa como parámetro el nombre del interfaz creado, en nuestro caso bnep0.
Para que el PC haga de router y conseguir así que la PDA se conecte a internet, deberemos ejecutar estos dos comandos:
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Suponiendo que sea eth0 la tarjeta de red por la que salimos. Estos comandos pueden ponerse en algún script de arranque para que se ejecuten al iniciar el sistema.
Para terminar, reiniciaremos los servicios de bluetooth y de red para asegurarnos de que los cambios se aplican:
/etc/init.d/networking restart
/etc/init.d/bluetooth restart
Conexión desde la PDA
Esta parte ya depende del dispositivo que tengamos. En mi caso, una PDA HP iPAQ.
Lo primero es configurarle una dirección IP. Por simplificar, se la pongo también estática y la configuro como tarjeta de red. Esto también es importante, he visto muchos tutoriales que para hacer esto mismo usan una conexión serie, como si fuera un módem. En nuestro caso todo lo contrario, lo hacemos como si fuera una tarjeta ethernet.
A continuación, activar el interface bluetooth y escanear en busca de dispositivos. Deberá aparecer nuestro PC. Lo seleccionaremos y saldrán los servicios ofrecidos. Debería aparecer uno llamado "Network Access Point" o similar. Lo seleccionaremos y nos pedirá que introduzcamos un PIN, que es el que habremos configurado en el fichero /etc/bluetooth/hcid.conf
Y si todo va bien, se establecerá la conexión. En nuetro PC al ejecutar un ifconfig aparecerá el interface bnep0 y si hacemos ping a la IP de la PDA deberá responder. Parece complicado, pero después de hacerlo tres o cuatro veces es muy sencillo :-)
Más información:
http://bluez.sourceforge.net/contrib/HOWTO-PAN
http://quozl.netrek.org/bluetooth/
http://www.triptico.com/software/bluetooth.html
Ubuntu tiene unas buenas utilidades gráficas para el manejo de dispositivos bluetooth, pero están orientadas al intercambio de ficheros y utilización como módem de los teléfonos móviles. No he sido capaz de configurar un NAP solo con esas utilidades, así que hay que hacerlo por línea de comandos. Para ello, hay que configurar por un lado la parte concreta de bluetooth, y por otro la parte más general de red del sistema. Estos pasos están pensados para Ubuntu y Debian, pero en otros sabores de Linux serán similares.
Configuración de la parte bluetooth
Para empezar, si no lo tenemos ya hay que instalar las utilidades bluetooth, ejecutando como root:
aptitude install bluez-utils
Lo primero será comprobar que el sistema detecta el adaptador de bluetooth que tengamos en el PC, mediante el comando:
hcitool dev
Deberá aparecer algo parecido a:
Devices:
hci0 00:03:7A:EE:B6:16
Donde hci0 es el dispositivo bluetooth y los números su dirección MAC. Si no aparece nada, es que el sistema no está detectando el adaptador.
Editar el fichero /etc/default/bluetooth. Está muy bien comentado qué es cada parámetro de los que aparecen en él, para nuestros propósitos será necesario asegurarse de que, al menos, los siguiente valores están así:
BLUETOOTH_ENABLED = 1
PAND_ENABLED = 1
PAND_OPTIONS="--devup /etc/bluetooth/pan/dev-up"
PAND_OPTIONS=$PAND_OPTIONS" --listen --role NAP "
SDPTOOL_OPTIONS="add NAP"
Aquí hay un par de cosas importantes que no vienen configuradas por defecto y que no he visto bien explicado en ningún sitio: En la primera línea PAND_OPTIONS indicamos la ruta de un script que se ejecutará cuando se establezca la conexión para levantar el interface. Este script no existe, hay que crearlo; es muy simple y más abajo se explica cómo hacerlo. El otro detalle es que en la otra línea donde pone PAND_OPTIONS, si no le añadimos lo que hemos puesto en la línea anterior se perderá. Para que no ocurra, se pone primero el valor que ya tenía, con $PAND_OPTIONS, y a continuación se le concatenan los nuevos valores.
A continuación, editar el fichero /etc/bluetooth/hcid.conf, y modificar la que pone passkey, donde indicaremos un password para la conexión desde la PDA. Más abajo donde pone Default link mode deberá poner: lm accept,master;
En el paquete bluez-utils hay una cosa mal en el script de arranque /etc/init.d/bluetooth, y es que no se lanza el demonio del servicio SDP, que se encarga de mostrar los servicios ofrecidos por nuestro servidor a los dispositivos que se quieran conectar a él. Para que lo lance deberemos buscar en el mencionado fichero la parte donde pone start) y veremos que hay varias líneas donde pone 'start_algo || true'. Añadiremos run_sdptool || true
Configuración de la parte de red del sistema
Cuando se establezca la conexión bluetooth se creará un interface llamado bnep0, que deberá tener su dirección IP. Para hacerlo más simple, suponemos que esta dirección es estática, y lo configuramos en el fichero donde se encuentran todos los interfaces de red del sistema, en /etc/network/interfaces :
auto bnep0
iface bnep0 inet static
address 192.168.2.1
netmask 255.255.255.0
gateway 192.168.0.1 (o el que tengamos en nuestra conexión a Internet por defecto)
Con esto configuramos la IP, pero el interface no estará activo hasta que no se conecte un dispositivo como una PDA. Para activarlo cuando llegue ese momento es necesario un pequeño script al que nos hemos referido más arriba. Lo habíamos configurado para que se llamara /etc/bluetooth/pan/dev-up, pero podría estar en cualquier otro sitio. Su contenido es el siguiente:
#!/bin/sh
ifup --force $1
La opción de --force es mejor ponerla porque a veces al terminar la conexión el interface se queda creado y la siguiente vez no se vuelve a levantar porque se piensa que sigue activo. El script este es ejecutado por el demonio que atiende las conexiones bluetooth, y le pasa como parámetro el nombre del interfaz creado, en nuestro caso bnep0.
Para que el PC haga de router y conseguir así que la PDA se conecte a internet, deberemos ejecutar estos dos comandos:
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Suponiendo que sea eth0 la tarjeta de red por la que salimos. Estos comandos pueden ponerse en algún script de arranque para que se ejecuten al iniciar el sistema.
Para terminar, reiniciaremos los servicios de bluetooth y de red para asegurarnos de que los cambios se aplican:
/etc/init.d/networking restart
/etc/init.d/bluetooth restart
Conexión desde la PDA
Esta parte ya depende del dispositivo que tengamos. En mi caso, una PDA HP iPAQ.
Lo primero es configurarle una dirección IP. Por simplificar, se la pongo también estática y la configuro como tarjeta de red. Esto también es importante, he visto muchos tutoriales que para hacer esto mismo usan una conexión serie, como si fuera un módem. En nuestro caso todo lo contrario, lo hacemos como si fuera una tarjeta ethernet.
A continuación, activar el interface bluetooth y escanear en busca de dispositivos. Deberá aparecer nuestro PC. Lo seleccionaremos y saldrán los servicios ofrecidos. Debería aparecer uno llamado "Network Access Point" o similar. Lo seleccionaremos y nos pedirá que introduzcamos un PIN, que es el que habremos configurado en el fichero /etc/bluetooth/hcid.conf
Y si todo va bien, se establecerá la conexión. En nuetro PC al ejecutar un ifconfig aparecerá el interface bnep0 y si hacemos ping a la IP de la PDA deberá responder. Parece complicado, pero después de hacerlo tres o cuatro veces es muy sencillo :-)
Más información:
http://bluez.sourceforge.net/contrib/HOWTO-PAN
http://quozl.netrek.org/bluetooth/
http://www.triptico.com/software/bluetooth.html
Suscribirse a:
Entradas (Atom)