Algo de Linux: 2010

viernes, 17 de diciembre de 2010

Configurar el correo de terra en el móvil

Este artículo es para Meño. Si se te olvidan los datos o se te desconfigura el correo de terra en el móvil aquí los tienes:

Configuración correo entrante:
  • usuario: tu nombre de usuario
  • contraseña: tu contraseña de correo
  • Servidor IMAP: imap.terra.es
  • puerto: 143 (si te lo pide, aunque normalmente está predeterminado)
  • tipo de seguridad: ninguna (si te lo pregunta)
Configuración correo saliente:
  • servidor SMTP: smtp.terra.es
  • puerto: 25
  • tipo de seguridad: ninguna (si te lo pregunta)
  • acceso obligatorio: marcado (si te lo pregunta)
  • nombre de usuario: tu nombre de usuario
  • contraseña: tu contraseña de correo

lunes, 22 de noviembre de 2010

CmosPwd: Descubrir la contraseña de la BIOS

A veces nos encontramos con equipos que tienen password para acceder a la configuración de la BIOS y alguien lo ha olvidado o no nos lo han querido dar.

CmosPwd es una herramienta gratuita (no distribuida mediante licencia GPL) que nos permitirá desencriptar el pasword almacenado en la CMOS, que se usa para acceder a la configuración de la BIOS.

Esta heramienta, según la información obtenida en su web, trabaja con las siguientes BIOS:
  • ACER/IBM BIOS
  • AMI BIOS
  • AMI WinBIOS 2.5
  • Award 4.5x/4.6x/6.0
  • Compaq (1992)
  • Compaq (New version)
  • IBM (PS/2, Activa, Thinkpad)
  • Packard Bell
  • Phoenix 1.00.09.AC0 (1994), a486 1.03, 1.04, 1.10 A03, 4.05 rev 1.02.943, 4.06 rev 1.13.1107
  • Phoenix 4 release 6 (User)
  • Gateway Solo - Phoenix 4.0 release 6
  • Toshiba
  • Zenith AMI

CmosPwd funciona y se compila en los siguientes sistemas operativos:
  • Dos-Win9x,
  • Windows NT/W2K/XP/2003,
  • Linux,
  • FreeBSD and NetBSD. 
Y, por lo que he podido ver, está incluida en muchas recopilaciones de herramientas, como por ejemplo UBCD, System Rescue CD, ...

Para más info, ver su web.

Pero veamos cómo utilizarla en un caso práctico:

Imaginemos que tenemos un portátil con linux cuyo acceso a la configuración de la BIOS ha sido protegido por contraseña.

Cuando se cargue el menú de opciones de grub, editamos la entrada que carga el kernel y la modificamos para que en lugar de iniciar el sistema, se inicie un shell. Ya sabemos: rw init=/bin/bash

E iniciamos.

Bien. Ahora que ya tenemos un shell, copiamos la herramienta, desde donde la tengamos guardada, por ejemplo: nuestro pendrive y la ejecutamos con el parámetro /d:

# cmospwd /d

Con ésto, estamos haciendo un volcado de la CMOS en pantalla. Pulsaremos Enter para ir pasando la información que nos muestra, y, entre todo ello, veremos la password que tiene la BIOS.

Si por alguna razón, no consiguiéramos obtener la password de la BIOS, siempre podríamos hacer un kill para resetear la CMOS.

# cmospwd /k

Eso sí. Si pensamos hacer un kill, recomiendo hacer antes un backup:

# cmospwd /d /w micmos.bak

Con ésto, tendríamos un backup de nuestra CMOS en el fichero micmos.bak.

Para ver el contenido del fichero de backup, no tenemos más que hacer un:

# cmospwd /l micmos.bak

Y si queremos restaurar la CMOS con el contenido del fichero en el que hemos hecho el backup:

# cmospwd /r micmos.bak

Al ejecutar el comando, nos dará tres opciones:
  • 1 - Restaurar completamente la CMOS.
  • 2 - Restaurar la CMOS, manteniendo la fecha y la hora.
  • 0 - Abortar.

domingo, 21 de noviembre de 2010

Crear un pendrive de arranque mediante system rescue cd

System rescue CD nos permite crear fácilmente un dispositivo usb de arranque: pendrive, tarjeta sd, hd usb... mediante una utilidad que incorpora: sysresccd-usbstick.

Con esta herramienta, si tenemos nuestro System Rescue CD en un CDROM y lo queremos montar en un pendrive, no tenemos más que arrancar el cd y ejecutar sysresccd-usbstick.

La secuencia para hacerlo, una vez arrancado el cd, sería la siguiente:

sysresccd-usbstick listdev
sysresccd-usbstick writembr /dev/sdX
sysresccd-usbstick format /dev/sdXY
sysresccd-usbstick copyfiles /dev/sdXY
sysresccd-usbstick syslinux /dev/sdXY


Veamos qué significa cada línea:

sysresccd-usbstick listdev nos lista los dispositivos usb conectados en ese momento. Con ésto veremos cuál es el pendrive que queremos preparar: sda, sdb, ...

sysresccd-usbstick writembr /dev/sdX escribirá el mbr en nuestro dispositivo usb. Naturalmente, tendremos que sustituir sdX por la letra unidad que corresponda: sda, sdb, ...

sysresccd-usbstick format /dev/sdXY formateará la partición Y en el dispositivo. Ejemplo: sysresccd-usbstick format /dev/sdb1. El formato de la partición será FAT32, por lo que podremos utilizarlo para almacenar lo que queramos tanto en windows, como en linux.

sysresccd-usbstick copyfiles /dev/sdXY copiará los ficheros del CDROM de System Rescue CD en la partición que le indiquemos. Ejemplo: sysresccd-usbstick copyfiles /dev/sdb1

sysresccd-usbstick syslinux /dev/sdXY transferirá el cargador syslinux a la partición que le indiquemos. Ejemplo: sysresccd-usbstick syslinux /dev/sdb1.

Podríamos utilizar esta herramienta para crear un pendrive de arranque y luego almacenar en él cualquier otra herramienta que haga uso de syslinux, omitiendo el paso que copia los ficheros de system rescue cd (sysresccd-usbstick copyfiles /dev/sdXY).

Un ejemplo completo:
Imaginemos que tenemos un pendrive a mano, que queremos preparar con nuestro system rescue cd.

* Arrancamos el ordenador con el CDROM de System Rescue CD.

* Cuando haya arrancado, introducimos el pendrive y ejecutamos:

# sysresccd-usbstick listdev

* Veremos los dispositivos usb que se han detectado. Imaginemos que nuestro pendrive se encuentra en /dev/sdb. Ejecutaríamos la siguiente secuencia de instrucciones para prepararlo:

# sysresccd-usbstick writembr /dev/sdb
# sysresccd-usbstick format /dev/sdb1
# sysresccd-usbstick copyfiles /dev/sdb1
# sysresccd-usbstick syslinux /dev/sdb1


Y listo. Una vez hecho ésto, ya tenemos nuestro pendrive de arranque con System Rescue CD.

Un detalle importante: Como podemos observar en el procedimiento, si tenemos algún contenido en el pendrive, lo perderemos. Así que, lo ideal es hacer copia de seguridad de los datos del mismo, prepararlo como pendrive de arranque, y, posteriormente, agregar los datos que quisiéramos almacenar en él.

Personalmente, utilizo un pendrive de arranque con system rescue cd y clonezilla, en el que he fusionado los syslinux.cfg de ambas herramientas y en el que también almaceno mis archivos.


Por supuesto, si tenemos un pendrive con system rescue cd y queremos crear otro mediante esta herramienta, podemos hacerlo del mismo modo.

miércoles, 27 de octubre de 2010

Instalar paquetes creados para arquitectura i386 en amd64

A veces tenemos un paquete creado para una arquitectura (por ejemplo i386) y queremos usarlo en otra arquitectura diferente (por ejemplo amd64). Para instalarlo podemos hacer uso del parámetro --force-architecture de dpkg del siguiente modo:

# dpkg -i --force-architecture paquete_loquesea.deb

De este modo, dpkg lo instalará, ignorando que el paquete pertenece a otra arquitectura diferente.

Si, una vez instalado, el paquete no funcionara, lo desinstalamos y listo:

# dpkg -r nombre_paquete

martes, 19 de octubre de 2010

Repositorios Debian Backports

El problema que siempre hemos tenido en Debian al utilizar la rama stable ha sido que el software ha estado menos actualizado que en otras distribuciones. Para solucionarlo hemos contado con los repositorios backports. Pues bien, a partir del 5 de septiembre de 2010, Backports se convirtió en un servicio oficial de Debian.

Pero ¿qué son backports? Backports son paquetes de la rama testing y unstable recompilados para ser usados en una distribución Debian stable. La mayoría de estos paquetes proceden de la rama testing y algunos, como por ejemplo, actualizaciones de seguridad, de la rama unstable.

Para usar backports, lo primero que debemos hacer es añadir la línea del repositorio a nuestro /etc/apt/sources.list:

deb http://backports.debian.org/debian-backports lenny-backports main

Como en nuestros centros no podemos modificar el fichero /etc/apt/sources.list, porque está controlado por puppet, creamos un archivo llamado por ejemplo lenny-backports.list dentro del directorio /etc/apt/sources.list.d/ con el repositorio:

deb http://backports.debian.org/debian-backports lenny-backports main

Una vez añadido, actualizamos los índices con un:

# apt-get update

Si instalamos un paquete mediante apt-get, se instalará la versión que haya en los otros repositorios que tengamos en nuestras listas. Si queremos instalarlo desde backports, tenemos que especificarlo:

# apt-get -t lenny-backports install "nombrepaqueteainstalar"

Una última cosa de la que nos advierten en la web de backports es que normalmente, los paquetes de backports.debian.org no se van a actualizar automáticamente. Para que se actualicen, añadimos el siguiente contenido al fichero /etc/apt/preferences:

Package: *
Pin: release a=lenny-backports
Pin-Priority: 200

Para más info: http://backports.debian.org

lunes, 4 de octubre de 2010

Descargar archivos mediante wget

wget es una herramienta que nos permite realizar descargas de contenidos de servidores web de una forma muy sencilla y que soporta descargas mediante los protocolos http, https y ftp.

A los administradores nos resulta tremendamente útil, porque con ella podemos realizar descargas de archivos almacenados en sitios web.

Tiene muchísimas opciones que no vamos a comentar, así que, como siempre, para más info. lo mejor es tirar de man.

Con wget es muy fácil descargarnos el contenido del directorio raiz de una web y sus subdirectorios:

# wget -r http://www.miweb.es/

La opción -r hace que se realice la descarga de forma recursiva.

Y si queremos descargar la página web de forma que se pueda navegar por el sitio descargado en modo off-line, usamos la opción -k, que convierte los enlaces en enlaces locales:

# wget -k -r http://www.miweb.es/

Por otra parte, podemos a indicar a wget el número de niveles que debe descender en el árbol de directorios, mediante el parámetro -l:

# wget -r -l1 http://www.miweb.es/

En el ejemplo anterior le estoy diciendo a wget que siga los enlaces, pero sólo hasta 1 nivel, es decir, que no siga los enlaces encontrados en las páginas enlazadas.


Puedo hacer que wget no siga enlaces a directorios padre, haciendo uso de la opción -np:

# wget -r -l1 -np http://www.miweb.es/

También puedo descargar un archivo de la web:

# wget http://www.miweb.es/descargas/fotostoldap-0.1.deb

Si por alguna razón, se cortara la descarga del archivo, no tendría que volver a descargarlo desde el principio. Podría continuar la descarga usando la opción -c:

# wget -c http://www.miweb.es/descargas/fotostoldap-0.1.deb

Puedo decirle a wget que me descargue tan sólo determinados archivos, mediante la opción -A. Por ejemplo, si quisiera descargar tan sólo los archivos .mp3 de un directorio concreto de una web, haría lo siguiente:

# wget -r -l1 -A .mp3 http://www.miweb.es/descargas/

Wget me va a descargar los archivos, pero me va a recrear la estructura de directorios donde se encuentran almacenados. Si lo que me interesa es descargar tan sólo los archivos, sin recrear la estructura de directorios donde se encuentran almacenados, no tengo más que usar la opción -nd:

# wget -r -l1 -A .mp3 -nd http://www.miweb.es/descargas/

Con este comando se van a descargar todos los archivos .mp3 que haya.

Si volviera a ejecutar wget y quisiera que sólo se descargasen aquellos archivos que no estuvieran descargados ya, añadiría la opción -nc a wget:

# wget -r -l1 -A .mp3 -nd -nc http://www.miweb.es/descargas/

Si sé que mi wget va a descargar varios archivos y quiero asegurarme de que la descarga no se atascará en alguno de ellos, puedo usar la opción -t para indicarle a web el número de reintentos que debe hacer para descargar el archivo que está fallando. Por ejemplo, con -t1 puedo decirle a wget que si falla una descarga haga sólo  1 reintento más:

# wget -r -l1 -A .mp3 -t1 -nd -nc http://www.miweb.es/descargas/

Hay otra opción que puede ser útil para descargar archivos. La opción -N. Esta opción descarga aquellos ficheros que no existan ya en local con el mismo nombre, o aquellos que existan pero que fueran más recientes que la copia local:

# wget -r -l1 -A .mp3 -t1 -nd -N http://www.miweb.es/descargas/

Un ejemplo que uso en ocasiones para descargar archivos .deb desde un servidor local, para después instalarlos:

# wget -r -l1 -A .deb -t1 -nd -N -np http://localhost/descargas/linux/

Y un par de opciones más que resultan útiles:

Podemos usar la opción -b para descargar los archivos en el background:

# wget -b -r -l1 -A .deb -t1 -nd -N -np http://localhost/descargas/linux/

O especificar los archivos que queremos descargar en un archivo de texto, con la opción -i listadescargas.txt

# wget -b -r -l1 -i urlsadescargar.txt -t1 -nd -N -np http://localhost/descargas/linux/


Por último, comentar que para aquellos que quieran usar la herramienta en modo gráfico, existe un front-end llamado gwget que nos permite manejar unas de las opciones de wget.

sábado, 25 de septiembre de 2010

Filtros de búsqueda LDAP

sHabitualmente usamos ldapsearch con determinados filtros de búsqueda para seleccionar entradas en nuestro servidor de ldap. Por ejemplo: Si quiero buscar en mi árbol de ldap un usuario cuyo cn (common name) sea Esteban Navas, mi filtro de búsqueda sería:

cn=Esteban Navas

Y si quisiera buscar un usuario cuyo sn fuera Santos, el filtro de búsqueda sería:

cn=Santos

Bien. Pues como podemos ver en estos dos ejemplos, la sintaxis básica de un filtro de búsqueda es la siguiente:

atributo operador valor


Operadores en filtros de búsqueda.-
Los operadores que podemos usar en un filtro de búsqueda son:

Tipo de búsqueda Operador Descripción
Igualdad = Este operador nos devuelve aquellas entradas que coincidan exactamente en el valor especificado. Ejemplo: cn=Esteban Navas
Subcadena =*cadena* Devuelve entradas que contengan la subcadena especificada. Ejemplos: cn=Esteban*  cn= *Navas* cn=E*Navas. El asterisco representa cero o más caracteres.
Mayor o igual >= Devuelve entradas que contengan atributos mayores o iguales que el valor especificado. Ejemplo: gidNumber >= 3000
Menor o igual <= Devuelve entradas que contengan atributos menores o iguales que el valor especificado. Ejemplo:  uidNumber >=100
Presencia =* Devuelve entradas que contengan uno o más valores en el atributo especificado. Ejemplo: cn=*
Aproximado ~= Devuelve entradas que contengan el atributo especificado con un valor que es aproximadamente igual al valor de búsqueda. Ejemplo: cn~=cnavas


Operadores booleanos.-

Además de los operadores anteriores, podemos utilizar operadores booleanos, que nos van a permitir combinar varios filtros en uno:

(Operador-booleano(filtro)(filtro)(filtro)...)

Por supuesto, también podemos combinar varios operadores booleanos en una expresión. Por ejemplo:

(Operador-booleano(filtro)((Operador-booleano(filtro)(filtro)))

Las expresiones booleanas se evalúan en el siguiente orden:
  • Primero de dentro hacia afuera en las expresiones con paréntesis.
  • De izquierda a derecha en otro caso.
Los operadores que podemos usar en un filtro de búsqueda son:

Tipo de búsqueda Operador Descripción
AND & La expresión será cierta cuando todos los filtros sean ciertos. Ejemplo: (&(filtro)(filtro)...(filtro))
OR | La expresión será cierta cuando al menos uno de los filtros sea cierto. Ejemplo: (|(filtro)(filtro)...(filtro))
NOT!Permite conseguir la negación del filtro. Ejemplo: (!(filtro))

Y eso es todo. Veamos algunos ejemplos de búsqueda:

El más sencillo. Cuando quiero buscar un elemento que contiene el valor igual a la cadena de búsqueda:

cn=Esteban Navas

Si quisiera buscar entradas que contengan uno o más valores en el atributo memberOf:


memberOf=*

Para buscar por ejemplo todas las entradas que no contengan el valor "teacher" en el atributo cn , haría lo siguiente:


(!(cn=teachers))

Y si quiero buscar entradas que contengan una subcadena en el atributo description:

description=*admin*

Imaginemos que quiero obtener todas las entradas cuyo objectClass=posixGroup y los usuarios son miembros del grupo teachers en la unidad organizacional ou=Group,dc=instituto,dc=extremadura,dc=es:

(&(objectClass=posixGroup)(memberOf=cn=teachers,ou=Group,dc=instituto,dc=extremadura,dc=es)

Y si quierra buscar las entradas  cuyo objectClass=posixGroup y los usuarios no sean miembros del grupo teachers en la unidad organizacional ou=Group,dc=instituto,dc=extremadura,dc=es:

(&(objectClass=posixGroup)(!(memberOf=cn=teachers,ou=Group,dc=instituto,dc=extremadura,dc=es))

Y si por ejemplo, quisiera ver aquellas entradas que no tengan el atributo estructural inetOrgPerson:

(!(objectClass=inetOrgPerson))

martes, 21 de septiembre de 2010

Instalar Dropbox en Debian Lenny

Dropbox es un servicio de "disco virtual" que nos permite guardar 2GB de archivos de forma gratuita. Lo uso en ocasiones para mantener archivos sincronizados. De este modo puedo acceder a ellos esté donde esté y tan sólo con una conexión a internet. Además, me permite compartir fácilmente archivos con otros usuarios.

En los ordenadores que uso habitualmente tengo instalado el cliente que se integra con nautilus y hace más sencilla la transferencia de archivos.
En ordenadores no habituales, siempre podemos acceder a través del navegador identificándonos en la web con nuestro login y password.

Instalarlo en Debian Lenny es sencillo:

# cd /usr/src
# wget https://www.dropbox.com/download?dl=packages/nautilus-dropbox-0.6.3.tar.bz2
# tar -jvxf nautilus-dropbox-0.6.3.tar.bz2
# cd nautilus-dropbox-0.6.3/
# ./configure
# make
# make install

Script para convertir un archivo iso_8859-1 a UTF-8

Después de las vacaciones, volvemos a la carga.

Aquí dejo un script que uso para convertir un fichero con codificación iso_8859-1 a UTF-8. El script toma como parámetro el archivo a convertir y deja el resultado de la conversión en el mismo archivo.

#!/bin/bash
#
# Esteban M. Navas Martín
# Script para convertir un archivo iso_8859-1 a UTF-8
# Ejemplo de uso: $0 archivo

# Comprobamos si se ha introducido un parámetro
if [ $# -eq 0 ]; then
   echo "Script para convertir un archivo iso_8859-1 a UTF-8"
   echo "ERROR: Debe especificar el nombre del archivo a convertir."
   echo "Sintaxis: $0 archivo"
   exit
fi

sed s/"ISO-8859-1"/"UTF-8"/ $1 > tmpfile
iconv -f ISO_8859-1 -t UTF-8 tmpfile > $1
rm -f tmpfile


Y el enlace para descargarlo directamente:
http://dl.dropbox.com/u/5004198/scripts/iso2utf.sh

jueves, 22 de julio de 2010

Convertir imágenes en formato .img a formato .iso

Para convertir imágenes de formato .img a formato .iso, podemos utilizar la herramienta ccd2iso.

Como en Debian tenemos esta herramienta en los repositorios, instalarla es más que sencillo:

# apt-get update && apt-get install ccd2iso

Una vez instalada, convertir una imagen es tan simple como abrir un terminal y ejecutar:

# ccd2iso archivo.img archivo.iso

Grabar imagen .img en un pendrive

Si queremos grabar una imagen .img en un pendrive, podemos utilizar un gui escrito en python llamado usb-imagewriter.

Podemos descargar esta aplicación desde la siguiente dirección:
https://launchpad.net/usb-imagewriter

La última versión disponible a día de hoy es la 0.1.3.

Para instalarla lo único que tenemos que hacer es descargar la aplicación:

# wget http://launchpad.net/usb-imagewriter/trunk/0.1/+download/usb-imagewriter-0.1.3.tar.gz

Descomprimirla:

# tar xfvz usb-imagewriter-0.1.3.tar.gz

Entrar en el directorio:

# cd usb-imagewriter-0.1.3

Y ejecutar el script de instalación:

# ./install.sh

Una vez instalado, para usarlo insertamos un pendrive en el puerto USB y lanzamos la aplicación.

Podemos ejecutar esta aplicación desde un terminal, escribiendo:

# imagewriter

O desde el menú de Inicio -> Accesorios -> ImageWriter.

Por cierto, debemos tener cuidado si tenemos algo en el pendrive porque lo borrará.

Montar imágenes de Nero para ver su contenido

Si hemos descargado una imagen de nero (.nrg) y no queremos convertirla a formato iso, podemos montarla directamente:

# mount -o loop,offset=307200 archivo.nrg /directorio/de/montaje

sábado, 17 de julio de 2010

Convertir imágenes Nero a iso

Muchas veces descargamos una imagen de cd o dvd y nos encontramos con que alguien la ha creado con Nero Burning Rom en formato nrg y no tenemos forma de montarla.

Una posible opción es convertirla a formato iso, haciendo uso de la herramienta nrg2iso, que, en Debian, tenemos en los repositorios.

Lo primero será instalar la herramienta, si no la tenemos:

# apt-get update && apt-get install nrg2iso

Una vez instalada, convertir un archivo .nrg a .iso será tan sencillo como hacer:

# nrg2iso imagen.nrg imagen.iso

Montar imágenes iso para ver su contenido

Ésto es algo muy básico, pero, como me lo han preguntado, lo pongo aquí.

A veces necesitamos montar una imagen iso para ver su contenido o incluso extraerlo. Por ejemplo, podemos querer poner el contenido de un livecd en nuestro dispositivo usb, sin tener que grabarlo antes en disco. Para ello, lo único que tenemos que hacer es montar la imagen iso en un directorio y copiar los archivos.

Montar la imagen iso es tan sencillo como hacer uso del comando mount:

# mount -o loop archivo.iso /directorio/de/montaje

Por ejemplo. Imaginemos que hemos descargado clonezilla y queremos montarlo en un directorio llamado /mnt/iso de nuestro equipo. No tenemos más que hacer lo siguiente:

# mount -o loop clonezilla-live-1.2.5-17-i686.iso /mnt/iso

miércoles, 2 de junio de 2010

Asociar .doc a word con wine en linux

A veces alguien necesita usar word en linux para abrir documentos .doc. Pero como podemos ver, si abrimos las propiedades de un documento con nautilus, no se nos ofrece esta opción, aún teniendo instalado wine.

Este problema puede resolverse fácilmente creando un pequeño script, llamado por ejemplo winword, con el siguiente contenido y guardándolo por ejemplo en /usr/local/bin:



#!/bin/bash
wine "C:\Archivos de programa\Microsoft Office\OFFICE11\WINWORD.EXE" "`winepath -w "$@"`"

Suponiendo que tenemos instalado word en la ruta especificada.

Una vez creado el script, le damos permisos de ejecución:

# chmod uga+x /usr/local/bin/winword

Este script nos servirá para asociar los archivos .doc a word.

Abrimos nautilus, seleccionamos con el botón derecho del ratón un archivo .doc y hacemos clic en la opción "Propiedades" del menú de contexto.

Se nos abrirá una ventana en la que podemos seleccionar con qué aplicación se abre este tipo de documento:

Hacemos clic en el botón Añadir y se nos mostrará otra pantalla en la que podremos seleccionar con qué aplicación abrimos el documento.


Hacemos clic en "Usar un comando personalizado". Escribimos el nombre del script que creamos para ello: winword. Y pulsamos el botón "Añadir".

Como podemos ver en la siguiente imagen, el tipo de documento .doc se abrirá a partir de ahora con el script que creamos. En definitiva, con winword.


Pulsamos cerrar. Y listo.

Ahora, cuando abramos un documento .doc haciendo clic sobre él en el explorador de linux (nautilus), se nos abrirá directamente en word.

martes, 1 de junio de 2010

Arreglar grub2

Hasta ahora era muy sencillo reparar grub utilizando un sistema live, puesto que teníamos grub 1 tanto en el sistema live como en el disco instalado. El problema que tenemos ahora es que nuestros discos live tienen grub 1 y los sistemas que se instalan actualmente tienen grub 2.

Tengo un disco recopilatorio de herramientas como System Rescue, entre las que cuento con otras como Backtrack. Habitualmente suelo tirar de System Rescue para casi todo, pero como no he podido hacer un chroot con System Rescue, he tenido que recurrir a Backtrack, que sí me lo permitía.

El sistema en el que tenía que reparar grub 2 disponía de un sistema dual Windows/LinEx 2010. Para arreglarlo, lo primero que hice fue arrancar Backtrack e introducir los datos de administrador: root - toor.

Bien. Pues ya tenía acceso a un terminal. Lo siguiente sería ver la lista de particiones para saber dónde se encontraba instalado grub 2:

# fdisk -l

Al ejecutar fdisk -l, ví la lista de particiones del disco duro y observé que linux se encontraba instalado en /dev/hda2.

Como Backtrack monta automáticamente todas las particiones que encuentra, no tuve más que hacer un mount para ver dóne se encontraba montada hda2:

# mount

La ejecución del comando anterior me mostró que la partición /dev/hda2 se encontraba montada en /mnt/hda2.

Monté /dev en la partición hda2:

# mount --bind /dev /mnt/hda2/dev

Y ejecuté el comando chroot para acceder al sistema instalado en /dev/hda2 (en este caso LinEx 2010):

# chroot /mnt/hda2

Bien, pues una vez hecho el chroot, realicé la instalación de grub:

# grub-install --recheck /dev/hda

Actualicé grub:

# update-grub2 

Y listo. Lo último fue salir del chroot:

# exit

Y reiniciar, sacando el cd live para arrancar desde el disco duro.

lunes, 24 de mayo de 2010

Montar un repositorio trivial para nuestros propios paquetes

En ocasiones hemos creado o bajado un paquete que no se encuentra en los repositorios y que tiene dependencias de otros paquetes.

Al instalarlo mediante dpkg -i paquete.deb nos surgirá el problema de que, como dpkg no se encarga de instalar las dependencias, tendremos que hacer un apt-get -f install para que se instalen dichas dependencias.

Para resolver este problema, podemos montar un repositorio trivial en nuestra máquina, de forma que al instalar uno de nuestros paquetes con apt-get o aptitude, se instalen las dependencias.

La forma más sencilla de hacerlo es usar nuestro servidor web, así que, suponiendo que ya tenemos apache instalado y corriendo, creamos un directorio para nuestros paquetes:

# mkdir /var/www/mirepositorio

Y copiamos en este directorio todos los paquetes que queramos. Por ejemplo:

# cp gpdftk_0.0.36-1_all.deb /var/www/mirepositorio/

Una vez copiados los paquetes, entramos en el directorio y generamos el fichero de índices:

# cd /var/www/mirepositorio
# dpkg-scanpackages . /dev/null>Packages && gzip -c9 Packages>Packages.gz && rm Packages

Como podremos observar, en el mismo directorio, se nos creará un fichero Packages.gz que contendrá el índice de nuestro repositorio.

Cada vez que añadamos nuevos paquetes al repositorio, volveremos a ejecutar el dpkg-scanpackages. Por ejemplo:

# cp mount-systray_0.5.4-1_all.deb /var/www/mirepositorio/


# cd /var/www/mirepositorio

# dpkg-scanpackages . /dev/null>Packages && gzip -c9 Packages>Packages.gz && rm Packages




Por último, no olvidemos añadir a nuestro /etc/apt/sources.list la localización del repositorio. Por ejemplo: Suponiendo que nuestro servidor de paquetes tiene la ip 192.168.1.3, añadiremos la siguiente línea:

deb http://192.168.1.3/mirepositorio /

La estructura de directorios que he creado es muy simple (un solo directorio). Pero, del mismo modo, podría crear diferentes directorios para distintas arquitecturas o incluso para código fuente.

jueves, 20 de mayo de 2010

Desempaquetar y empaquetar paquetes deb

A veces necesitamos desempaquetar un paquete deb para hacerle algún pequeño retoque.

Pues bien, si queremos desempaquetar un paquete .deb, creamos un directorio donde extraerlo y lo extraemos:

$ mkdir paquetedescomprimido
$ dpkg-deb --extract paquete.deb paquetedescomprimido

Con ésto, estaremos extrayendo los ficheros que se instalan en el sistema.

Ahora bien, si queremos además extraer la parte de control del paquete, lo haremos de la siguiente manera:

$ dpkg-deb --control paquete.deb paquetedescomprimido/DEBIAN

Con ésto, estamos extrayendo la información de control del paquete en el directorio paquetedescomprimido/DEBIAN.

Una vez hecho lo anterior, haremos las modificaciones que necesitemos, y, cuando hayamos terminado, lo volvemos a empaquetar:

$ dpkg --build paquetedescomprimido
$ mv paquetedescomprimido.deb paquete.deb

martes, 18 de mayo de 2010

Navegación anónima mediante tor y privoxy en Debian

La combinación tor+privoxy nos permite navegar anónimamente por internet,  mediante una técnica llamada "Onion Routing".

La técnica de "Onion Routing" crea una cadena larga de conexión entre el origen y el destino que pasa por muchos agentes (servidores Tor). Para asegurar la privacidad, las conexiones entre los agentes y nuestro ordenador se realizan encriptadas. Cuando el destino recibe nuestras peticiones lo hace desde el último de los agentes, lo que permite que no se sepa desde qué máquina se ha solicitado la información.

Para usar Tor en Debian, podemos instalarlo directamente desde los repositorios:

# apt-get update && apt-get -y install tor


Al instalarlo, se nos instalará también privoxy. Si no se instalara, lo instalamos:

# apt-get -y install privoxy


Bien, pues ahora ya tenemos Tor instalado y configurado para actuar como cliente, aceptando conexiones desde localhost al puerto 9050 que es lo que necesitamos.

El siguiente paso será modificar la configuración de Privoxy para que dirija todas las comunicaciones a localhost:9050, es decir, a Tor. Para ello, editaremos el fichero de configuración /etc/privoxy/config, añadiendo la siguiente línea al final:

forward-socks4a / localhost:9050 .

Ojo. El punto final también hay que ponerlo.

Bueno, pues con ésto, ya tendríamos tor y privoxy listos. No obstante, es recomendable configurar privoxy para que no registre el tráfico que pasa por él. cosa que podemos hacer comentando la línea que establecen cuál es el fichero de log:

logfile logfile


Como hemos modificado la configuración de privoxy, reinciamos el servicio:

#/etc/init.d/privoxy restart

Para que nos sea más cómodo activar y desactivar la navegación anónima cuando queramos, desde el navegador, podemos instalar  la extensión Torbutton

Esta extensión instala un botón en la barra inferior del navegador con el que podremos activar y desactivar cómodamente la navegación anónima.

Para comprobar que Tor está funcionando correctamente, lo habilitamos en el navegador. Veremos que el indicador de color rojo "Tor deshabilitado" cambia a "Tor habilitado" en color verde. Una vez habilitado, introducimos la siguiente dirección en el navegador y pulsamos enter: https://check.torproject.org/

Si todo funciona correctamente veremos una página con un mensaje como el siguiente y la dirección IP desde la que dice que estamos navegando en estos momentos:

Congratulations. You are using Tor.



En cambio, si deshabilitamos Tor, veremos otro mensaje en el que nos dice algo así y nos muestra nuestra dirección IP pública:

Sorry. You are not using Tor.


Las páginas tardan un poco más en cargarse al usar Tor debido a la técnica usada para conseguir la navegación anónima.

Otra cosa que debemos tener en cuenta al usar Tor es que Privoxy no maneja el tráfico FTP, así que, si tenemos activado tor, las conexiones FTP desde el navegador fallarán.

sábado, 8 de mayo de 2010

Modificar un initrd.img

Estaba actualizando el dvd recopilatorio de herramientas que tengo y me surgió el problema de que tenía dos live-cd que hacían referencia al mismo directorio. Como no podía ponerlos juntos porque había archivos con el mismo nombre, me decidí a modificar el initrd para cambiar el directorio donde buscaba los ficheros uno de los dos.

Para modificar un initrd,tendremos que seguir los siguientes pasos:
  1. Descomprimiremos el initrd. img
  2. Haremos las modificaciones en los ficheros que queramos
  3. Volveremos a crear el initrd.img
Primer paso: Descomprimir el fichero initrd.img


# mkdir tmp
# cp initrd.img ~/tmp
# cd /tmp

~/tmp# mv initrd.img initrd.gz
~/tmp# gunzip initrd.gz

Veremos que dentro del directorio ~/tmp tendremos un fichero initrd. Para extraer los ficheros, usaremos cpio:


~/tmp# mkdir tmp2
~/tmp# cd tmp2
~/tmp/tmp2# cpio -id < ../initrd
55669 blocks

Si hacemos un ls veremos que dentro del directorio tmp2 tendremos todos los directorios y archivos del initd. Por ejemplo:


~/tmp/tmp2# ls
bin  conf  etc init  lib  sbin  scripts  usr

Segundo paso: Hacer las modificaciones que necesitemos.

Tercer paso: Volver a crear el fichero initrd.img


~/tmp/tmp2# find . | cpio --create --format='newc' > ../newinitrd
55669 blocks

Ahora ya tenemos un nuevo initrd llamado newinitrd en el directorio ~/tmp. Lo comprimimos:


~/tmp# gzip newinitrd

Se nos creará un fichero comprimido: newinitrd.gz. Lo renombramos:


~/tmp# mv newinitrd.gz initrd.img

Y listo. Ya tenemos nuestro initrd.img modificado.

viernes, 12 de marzo de 2010

Mostrar documentos incrustados en nuestra web o blog

Para mostrar un documento de google docs embebido en nuestro sitio web o blog, no tenemos más que insertar el siguiente código:


<iframe src="http://docs.google.com/gview?a=v&pid=explorer&chrome=false&api=true&embedded=true&srcid=[id_documento]&hl=en&embedded=true" style="height: 500px; width: 600px;"></iframe>
Donde sustituiremos [id_documento] por la id del documento.

Otra posibilidad que nos ofrece Google es usar su visor mostrar un documento alojado en un servidor cualquiera. Para mostrar el documento embebido en nuestro sitio web o blog insertaremos el siguiente código:


<iframe src="http://docs.google.com/gview?url=[URL_ARCHIVO]&embedded=true" style="height: 500px; width: 600px;"></iframe>
Donde [URL_ARCHIVO] es la ruta del archivo a incrustar.

Montar un servidor radius con ZeroShell

Una forma sencilla y rápida de tener un servidor radius para autentificar nuestros clientes inalámbricos es usar ZeroShell (http://www.zeroshell.net), una distribución opensource para servidores y dispositivos embebidos cuyo objetivo es ofrecer los principales servicios que una LAN requiere, como por ejemplo:
• DHCP.
• DNS.
• Firewall.
• VLAN.
• VPN.
• RADIUS.
• LDAP.
• Portal Cautivo.

Aquí dejo un pdf basado en la experiencia de cómo lo monté en una máquina virtual:

miércoles, 10 de marzo de 2010

Crear plantillas de conexión con wicd

Últimamente estoy trabajando en un servidor radius con autentificación EAP-TTLS para controlar el acceso de clientes inalámbricos a mi centro.
Después de hacer pruebas con herramientas como radtest y eapol, voy a realizar una prueba con un cliente inalámbrico real y me doy cuenta de que el wicd de los portátiles no tiene una plantilla para usar el sistema de autentificación que estoy montando, así que, como trabajo extra, he tenido que crear una.

Para crear una plantilla (template) en wicd, tenemos que crear un archivo en el directorio /etc/wicd/encryption/templates:

Por ejemplo:

# nano /etc/wicd/encryption/templates/instituto

Podemos poner el nombre que queramos a la plantilla.

Una vez abierto el archivo, añadimos los ajustes que nos permitan establecer la conexión. Como ejemplo pongo la plantilla que he creado para mi sistema de autentificación:

name = EAP-TTLS
author = Esteban Navas
version = 1
require identity *Identity password *Password
-----
ap_scan=1
fast_reauth=1
ctrl_interface=/var/run/wpa_supplicant
network={
        ssid="$_ESSID"
        scan_ssid=$_SCAN
        key_mgmt=WPA-EAP
        proto=WPA2
        pairwise=CCMP TKIP
        group=CCMP TKIP
        eap=TTLS
        identity="$_IDENTITY"
        password="$_PASSWORD"
        phase2="auth=PAP"
}


Guardamos el archivo y listo.

Bien, pues una vez creada la plantilla, lo único que nos falta es activarla. Para ello, abrimos el archivo /etc/wicd/encryption/templates/active:

# nano /etc/wicd/encryption/templates/active

Y veremos las diferentes plantillas que tenemos activas para ser usadas. Por ejemplo:


wpa
wpa-psk
wep-hex
wep-passphrase
wep-shared
leap
ttls
eap
peap
peap-tkip
eap-tls


Añadimos al final el nombre de la nuestra:


wpa
wpa-psk
wep-hex
wep-passphrase
wep-shared
leap
ttls
eap
peap
peap-tkip
eap-tls
instituto


Guardamos y abrimos wicd (si lo teníamos abierto, lo cerramos para que tome las modificaciones que hemos hecho). Ahora, en las propiedades, dispondremos de un nuevo cifrado que ya podemos usar. ¿Cuál? El que hemos indicado en la plantilla:

name = EAP-TTLS

martes, 9 de marzo de 2010

Repositorios debian-multimedia en Debian

Debian-multimedia es un repositorio no oficial de software Debian mantenido por Christian Marillat que nos proporciona software multimedia como por ejemplo, avidemux, cinelerra, MythTV, entre otras muchas cosas como flash-player, w32codecs, w64codecs, acroread...

http://www.debian-multimedia.org

Para agregarlo a nuestra distribución, descargamos el paquete debian-multimedia-keyring:

# wget http://www.debian-multimedia.org/pool/main/d/debian-multimedia-keyring/debian-multimedia-keyring_2008.10.16_all.deb

Y lo instalamos:

# dpkg -i debian-multimedia-keyring_2008.10.16_all.deb

Con esto, conseguiremos tener las claves públicas del mantenedor del repositorio.

Una vez que tenemos instalado el paquete anterior, modificamos nuestro archivo sources.list:

# nano /etc/apt/sources.list

Si tenemos lenny, agregaremos la siguiente línea:

deb http://www.debian-multimedia.org lenny main

Y si queremos además poder instalar software non-free, en lugar de la línea anterior pondremos ésta:

deb http://www.debian-multimedia.org lenny main non-free

Si nuestra distro es squeeze, agregaremos la siguiente línea:

deb http://www.debian-multimedia.org squeeze main

Al igual que en lenny, si queremos además poder instalar software non-free, en lugar de la línea anterior pondremos ésta:

deb http://www.debian-multimedia.org squeeze main non-free

Una vez modificado nuestro /etc/apt/sources.list, hacemos un:

# apt-get update

Y ya tendremos actualizada nuestra lista de paquetes en la que podremos contar con software multimedia.

Avidemux: Unir dos videos avi

Avidemux es un programa open-source diseñado para editar y procesar video que funciona tanto en Linux como en Windows.

Esta herramienta soporta una gran cantidad de formatos de video como avi, mpeg4, ogm, mov, 3gp etc... Además soporta una amplia gama de codecs de video (divx, xvid, dv, vcd, dvd, svcd, mpeg1, mpeg2, etc...) y audio (mp2, mp3, pcm, aac, ac3, wma, vorbis).

Avidemux, nos permite cortar videos, unirlos, comprimirlos, añadir audio, etc.

Recuerdo que hace tiempo, se solía codificar el video en mpg y muchas veces, los videos ocupaban más de un CD. Con lo que la gente, partía sus videos en dos para colocar una parte en cada CD.

Una de las cosas que es muy fácil de hacer con avidemux es unir dos ficheros avi. La cosa es tan sencilla que lo único que hay que hacer es:

Primero: Abrir la primera parte de la película haciendo clic en el menú “Archivo -> Abrir”:

Segundo: Abrir la segunda parte de la película haciendo clic en el menú “Archivo -> Adjuntar”:

Tercero: Por último, guardamos la unión de ambos archivos de video, haciendo clic en el menú “Archivo -> Guardar -> Guardar Video…”.

Con esto, ya tendremos unidos los dos archivos de video en uno nuevo.

lunes, 1 de marzo de 2010

Clonar un disco duro de una máquina VirtualBox

Muchas veces necesitamos una copia de una máquina VirtualBox.
Y decimos que clonamos la máquina virtual para obtener una copia de la misma, pero, para ser más exactos, realmente lo que clonamos es su disco duro.

La forma habitual de clonar el disco duro de una máquina VirtualBox es usando VBoxManage, un interfaz de línea de comandos que nos permite hacer muchas cosas, clonar discos virtuales.

Por ejemplo, si quiero clonar el disco de una máquina virtual llamando radiuslenny.vdi, no tengo más que ejecutar:

# VBoxManage clonehd /home/admin/.VirtualBox/radiuslenny.vdi /home/admin/radiuslenny.vdi

bash-3.2# VBoxManage clonehd /home/admin/.VirtualBox/radiuslenny.vdi /media/VDI/radiuslenny1.vdi
VDI/ VirtualBox-1.3-linux.xml VirtualBox.xml
bash-3.2# VBoxManage clonehd /home/admin/.VirtualBox/VDI/radiuslenny.vdi /media/VDI/radiuslenny.vdi
VirtualBox Command Line Management Interface Version 3.1.2
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.

0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: d52b172f-18b9-42b4-94a5-cb261ec8c5ea


Otra posibilidad es usar una opción disponible y no documentada en VBoxManage, que parece funcionar sin problemas: el comando setvdiuuid. Esta opción es una herramienta de desarrollo que sólo debería usarse para analizar problemas, según la información de VBoxManage.

Para crear una imagen de un disco virtual usando este método, primero copiamos el archivo vdi. Por ejemplo:


# cp radiuslenny.vdi radiuslenny1.vdi

Y después le creamos un nuevo uuid al disco virtual:

# VBoxManage internalcommands setvdiuuid radiuslenny1.vdi

jueves, 25 de febrero de 2010

phpldapadmin: Problema al cargar la página

En alguna ocasión, creo recordar que tras reinstalar phpldapadmin, he intentado acceder a la herramienta, y no se cargaba la página:

http://localhost/phpldapadmin

Mostrándome un error como el siguiente:

Not Found
The requested URL /phpldapadmin was not found on this server.


Por lo que he podido comprobar, el problema es que, por alguna razón, no se ha creado el enlace a la misma, así que lo he tenido que crear a mano:

# ln -s /usr/share/phpldapadmin/ /var/www/

martes, 23 de febrero de 2010

Clonar un sistema usando dpkg --get-selections y dpkg --set-selections

Algunas veces me han preguntado cómo hacemos copia de seguridad de los servidores y  por qué no hacemos una imagen en cd o en disco duro de los mismos para poder recuperar un sistema ante un fallo.

La respuesta es sencilla: Los servidores no son estáticos y sus paquetes cambian y se actualizan frecuentemente. Además los datos que éstos almacenan también se modifican con cierta frecuencia.

Así que, si quisiéramos tener imágenes actualizadas, tendríamos que estar haciéndolas continuamente o con demasiada frecuencia.

Entonces, ¿de qué hacemos copia de seguridad? Pues básicamente de los archivos de configuración así como de los datos de nuestros usuarios, si el servidor trabaja con usuarios.  Por ejemplo, si mi servidor es un servidor de ldap, me interesará tener copia de seguridad de la base de datos de ldap. Si mi servidor es un servidor nfs que almacena el home de los usuarios, me interesará guardar copias de seguridad de los archivos de configuración del servidor nfs, así como los datos de los usuarios. Etc...

Para volver a montar mi sistema tras un desastre, puedo instalar un sistema mínimo usando netinst o, puede serme útil tener una iso con el sistema base, al que luego incorporaré los paquetes necesarios, así como los archivos de configuración y datos de los que guardo copia de seguridad. La secuencia sería más o menos así:
  1. Instalo un sistema mínimo.
  2. Actualizo dicho sistema con los paquetes que debería tener.
  3. Y restauro las copias de seguridad.
Lo que necesito, evidentemente, es que mi sistema de copias de seguridad guarde copia de la lista de paquetes que tiene mi sistema en el momento que se haga la copia de seguridad.  Bien, ¿y cómo puedo hacer ésto? Pues ayudándonos del comando dpkg:

Por ejemplo, si quiero obtener una lista de paquetes instalados y desinstalados en mi máquina, utilizo el siguiente comando:

# dpkg --get-selections

Ahora bien, si quiero obtener tan sólo la lista de paquetes instalados, aplicaré un filtro al comando:


# dpkg --get-selections | grep -v deinstall



Con ésto he obtenido la lista de paquetes en pantalla. Como lo que me interesa es tenerla en un archivo, redirijo la salida estándar:

# dpkg --get-selections | grep -v deinstall > listapaquetesinstalados.txt


Si ésto lo colocamos en un script que se ejecute periódicamente, podemos tener siempre a mano la lista de paquetes  que tiene nuestro sistema para poder recuperarlo en caso de fallo.

Si tuviera que recuperar mi sistema tras un fallo, como ya hemos dicho, primero instalaría una máquina con un sistema mínimo. Y después le añadiría los paquetes que debe tener.  ¿Cómo? Usando la lista de paquetes que tenía mi sistema antes del fallo: listapaquetesinstalados.txt

Incorporando la lista de paquetes al nuevo sistema:

# dpkg --set-selections < listapaquetesinstalados.txt

E instalando los paquetes de la lista:

# apt-get dselect-upgrade

Tarjeta inalámbrica Broadcom BCM43xx en Debian Squeeze

Instalé Debian Squeeze en un portátil con una tarjeta inalámbrica Broadcom BCM4312, que, por cierto, llevan muchos portátiles y no me funcionaba.

Por lo que pude ver, se cargaba el módulo b43legacy, pero ni levantaba el interfaz de red automáticamente ni me dejaba levantarlo manualmente.

Buscando un poco de información encontré que la versión 2.6.32 del kernel de linux tenía soporte para estas tarjetas y además permitía ponerlas en modo monitor, cosa que anteriormente no se podía hacer.

Así que miré si en los repositorios de squeeze estaba este kernel para no tener que instalarlo desde el código fuente, y ví que sí lo había.

Como la máquina en la que que quería instalarlo tiene un sistema de 32 bits instalé: linux-image-2.6.32-trunk-686

# aptitude install linux-image-2.6.32-trunk-686

Pero si vuestra máquina tiene un sistema de 64 bits, podéis instalar el siguiente, por ejemplo:linux-image-2.6.32-trunk-amd64
Hay más versiones del kernel en los repositorios, para el que necesite otra cosa.

Una vez instalado el kernel, necesitamos instalar el firmware de este chipset.
Así que instalamos el paquete b43-fwcutter, que se encargará de extraerlo y colocarlo en el directorio /lib/firmware:

# aptitude install b43-fwcutter

Eso es todo. Una vez instalado, reiniciamos la máquina.

Una vez iniciado el sistema, abrimos un terminal y comprobamos si el interfaz está levantado:

# iwconfig

Debemos ver que wlan0 está funcionando.

Si no estuviera levantado, lo levantamos:

# ifconfig wlan0 up

Y vemos si funciona:

# iwlist wlan0 scan

Para comprobar que podemos poner la tarjeta en modo monitor, instalamos aircrack-ng, si no lo tenemos instalado:

# aptitude install aircrack-ng

Y ejecutamos airmon-ng para iniciar el modo monitor:

# airmon-ng start wlan0

Si ejecutamos ahora iwconfig, además del interfaz wlan0 veremos un nuevo interfaz: m0n.

Como ya he comentado, ésto lo he probado en Squeeze. Si por alguna razón no funcionara, podemos probar a instalar b43-fwcutter desde el código fuente:

Para ello, instalamos git, si no lo tenemos instalado:

# aptitude install git

Es una buena costumbre colocar en /usr/src todo lo que instalamos desde código fuente:

# cd /usr/src

Y nos descargamos la versión en desarrollo de b43-fwcutter:

# git clone http://git.bu3sch.de/git/b43-tools.git

Una vez descargado, entramos en el directorio:

# cd b43-tools/fwcutter

y compilamos:

# make

Una vez compilado, descargamos el  firmware:

# cd /usr/src 
# wget http://downloads.openwrt.org/sources/broadcom-wl-4.178.10.4.tar.bz2

Lo descomprimimos:

# tar xfvj broadcom-wl-4.178.10.4.tar.bz2

E instalamos:

# cd broadcom-wl-4.178.10.4/linux
# /usr/src/b43-tools/fwcutter/b43-fwcutter -w /lib/firmware wl_apsta.o

Por último reiniciamos y comprobamos si todo ha ido bien.

jueves, 18 de febrero de 2010

phpdapadmin: Error Could not start TLS. Please check your LDAP server configuration.

En las versiones más recientes de phpldapadmin viene configurado por defecto que la conexión con el servidor ldap se haga mediante TLS, y si nuestro servidor de ldap no está configurado para usar TLS, al introducir el usuario y la contraseña nos mostrará un error como el siguiente:

ErrorCould not start TLS. Please check your LDAP server configuration.


 Para solucionarlo,  o hacemos que nuestro ldap soporte TLS o desactivamos el uso de tls en el fichero de configuración de phpldapadmin. Para desactivar tls en phpldapadmin, editamos su fichero de configuración:

# nano /etc/phpldapadmin/config.php

Modificando la línea que dice:


$ldapservers->SetValue($i,'server','tls',true);


Por:


$ldapservers->SetValue($i,'server','tls',false);

martes, 26 de enero de 2010

OpenWrt en routers Conceptronic C54APRA, D-Link G604T, D-Link G624T

Como ya comenté en algún artículo anterior, tengo un router Conceptronic C54APRA al que le puse el firmware del Dlink G604T y posteriormente pasé a Dlink G624T con el firmware V3.02B01T02.EU-A.20061124.

Después lo actualicé a la V310B01T02.EU-A20070613, simplemente por tener una versión más nueva del sistema, pero no me gustó porque perdía ciertas posibilidades como, por ejemplo, WDS, así que volví a dejarle el firmware V3.02B01T02.EU-A.20061124 del Dlink G624T.

La última prueba que he hecho con él ha sido esta semana, actualizándolo con la versión 8.09.2 del firmware kamikaze OpenWrt para dispositivos ar7.
Decir que me ha gustado mucho las posibilidades que ofrece este firmware, pero, después de probarlo, he vuelto a colocar el firmware anterior porque el kamikaze no tenía soporte para WPA.

Explico cómo he colocado este firmware por si en algún momento me interesara volver a hacerlo o por si a alguien le sirviera mi experiencia. En cualquier caso, me he basado en las instrucciones de oldwiki de OpenWrt.

Estos routers tienen un chip AR7 de Texas Instruments. Este chip contiene un bootloader llamado ADAM2 que ofrece soporte para:
  • La consola serie TI AR7 (16c550 compatible).
  • El driver TI Ethernet.
  • TCP/IP.
  • Cliente DHCP.
  • Servidor FTP.
  • Y FLASH memory writer/eraser.
ADAM2 se encuentra en la partición FLASH mtd2.

Este bootloader nos es muy útil para poder flashear el router con firmwares alternativos al original como kamikaze, o, por ejemplo, para recuperar nuestro router tras un mal flasheo.

Lo primero que tenemos que hacer es averiguar la dirección IP de ADAM2. Podemos hacerlo, conectándonos vía telnet a nuestro router con el firmware que tengamos antes de cambiarlo. Por ejemplo, suponiendo que la dirección IP de nuestro router es 172.22.65.1, ejecutamos en un terminal:

$ telnet 172.22.65.1

Veremos una salida similar a la siguiente:

Trying 172.22.65.1...
Connected to 172.22.65.1.
Escape character is '^]'.

BusyBox on (none) login:


Donde nos pide el login. Introduciremos root y nos pedirá el password de administrador. Introduciremos el password de administrador que tengamos en nuestro router.
Una vez introducido, ya estamos dentro del router:

BusyBox v0.61.pre (2007.04.13-08:29+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

#


Ejecutaremos la siguiente combinación de comandos:

# cat /proc/ticfg/env | grep my_ipaddress

Y el router nos devolverá la IP de ADAM2. Mi router tiene la 192.168.1.199. Esa es la dirección que tendré que usar cuando el router se está iniciando para acceder al bootloader.

No voy a entrar en detalles muy concretos, pero, en resumen, lo que tenemos que hacer es configurar el mapeado de mtd1 y flashear el firmware sobre mtd1 vía FTP.

Así que. ahora que sabemos que nuestra IP es la 192.168.1.199, reiniciaremos el router y haremos un telnet a nuestra IP en el puerto 21, ejecutando el siguiente comando en consola, lo más pronto que podamos (puesto que queremos que el telnet se conecte al bootloader, que se ejecuta en el inicio del router):

$ telnet 192.168.1.199 21

Veremos algo como lo siguiente:

Trying 192.168.1.199...
Connected to 192.168.1.199.
Escape character is '^]'.

220 ADAM2 FTP Server ready.

Si no lo vemos es porque hemos tardado mucho en ejecutar el comando, tras reiniciar el router. Así que tendremos que volver a reiniciarlo y ejecutar de nuevo el comando lo más pronto que podamos.

Para conectarnos a ADAM2, tendremos que introducir un nombre de usuario (adam2) y un password (adam2). Así que, escribiremos lo siguiente en la consola de telnet que tenemos abierta:

USER adam2

Nos mostrará un mensaje similar al siguiente:

331 Password required for adam2

Introduciremos el password (adam2), mediante el comando PASS:

PASS adam2

Nos mostrará un mensaje similar al siguiente:

User adam2 successfully logged in.

Lo que nos confirma que estamos logueados con el usuario adam2.

Bien, pues ahora que estamos logueados, lo siguiente que haremos será ver cómo están mapeadas las variables mtd1, mtd2, mtd3 y mtd4. Para ello ejecutaremos comandos GETENV con cada una de las variables:

GETENV mtd0
mtd0 0x900a1000,0x903f0000
200 GETENV command successful
GETENV mtd1
mtd1 0x90010090,0x900a1000
200 GETENV command successful
GETENV mtd2
mtd2 0x90000000,0x90010000
200 GETENV command successful
GETENV mtd3
mtd3 0x903f0000,0x90400000
200 GETENV command successful
GETENV mtd4
mtd4 0x90010000,0x903f0000
200 GETENV command successful


Como podemos ver, cada vez que ejecutamos un comando GETENV, obtenemos el direccionamiento asociado a la variable que consultamos. Y la salida de cada GETENV debería devolvernos los valores que mostramos anteriormente. Debemos asegurarnos de que el mapeo de direcciones de nuestro router coincide con el mostrado arriba.

Como coinciden, para poder cambiar el firmware, lo que vamos a hacer es cambiar el mapeo de mtd1 a 0x90010000,0x903f0000. Para ello usamos el comando SETENV:

SETENV mtd1,0x90010000,0x903f0000


Al ejecutar el comando recibiremos un mensaje informándonos de que se ha ejecutado correctamente:

200 GETENV command successful

Por tanto, ahora que ya hemos cambiado el direccionamiento, salimos:

QUIT

Con lo que acabamos de hacer, ya podemos flashear nuestro router vía ftp. Así que descargamos el firmware: 8.09.2 (el último disponible a día de hoy).

Para flashearlo, no sé por qué, hay que utilizar el cliente ftp de windows. He intentado hacerlo varias veces desde linux, pero, por alguna razón, la comunicación se cuelga y no finaliza.

Así que, buscamos un windows, conectamos el router y abrimos un terminal de comandos con cmd.

Una vez que tenemos el terminal de comandos abierto, hacemos ftp a la direccón adam2 de nuestro router:

ftp 192.168.1.199

El router nos mostrará un mensaje y nos perguntará un usuario y una password. Introduciremos adam2 como usuario y como password:

Connected to c54apra (192.168.199.1).
220 ADAM2 FTP Server ready.
Name (192.168.1.1:user): adam2
530 Please login with USER and PASS.
SSL not available
331 Password required for adam2.
Password: adam2


Y veremos un mensaje en el que nos dice que el usuario adam2 se ha logueado correctamente:

230 User adam2 successfully logged in.
ftp>


En el prompt de ftp establecemos el modo de transferencia binario e indicamos, por decirlo de algún modo, que vamos a flashear:


ftp> binary
ftp> quote MEDIA FLSH


El siguiente paso, será transferir el archivo:

put "openwrt-ar7-squashfs.bin" "openwrt-ar7-squashfs.bin mtd1"


Tardará un poquito en flashearlo, pero no demasiado. Una vez que termine, veremos de nuevo el prompt de ftp:

ftp>

Reiniciamos el router:

ftp>quote REBOOT

Y salimos de ftp:

ftp>QUIT

Y listo. Ya tendremos nuestro router funcionando con OpenWRT.

miércoles, 20 de enero de 2010

Instalar impressive en Debian Lenny

Impressive es una aplicación escrita en Python disponible para  GNU/Linux, Windows y Mac,  que nos permite mostrar, en forma de diapositivas:
  • Documentos PDF.
  • Carpetas de imágenes.
He instalado impressive en Debian Lenny y el proceso de instalación se ha realizado sin problemas, pero al intentar utilizar la herramienta:

$ impressive comandos.pdf


Me ha tirado una lista de errores:

Welcome to Impressive version 0.10.2
Traceback (most recent call last):
File "/usr/bin/impressive", line 161, in
from OpenGL.GL import *
File "/usr/lib/python2.5/site-packages/OpenGL/GL/__init__.py", line 2, in
from OpenGL.raw.GL import *
File "/usr/lib/python2.5/site-packages/OpenGL/raw/GL/__init__.py", line 6, in
from OpenGL.raw.GL.constants import *
File "/usr/lib/python2.5/site-packages/OpenGL/raw/GL/constants.py", line 7, in
from OpenGL import platform, arrays
File "/usr/lib/python2.5/site-packages/OpenGL/platform/__init__.py", line 36, in
_load()
File "/usr/lib/python2.5/site-packages/OpenGL/platform/__init__.py", line 27, in _load
plugin_class = plugin.load()
File "/usr/lib/python2.5/site-packages/OpenGL/plugins.py", line 14, in load
return importByName( self.import_path )
File "/usr/lib/python2.5/site-packages/OpenGL/plugins.py", line 28, in importByName
module = __import__( ".".join(moduleName), {}, {}, moduleName)
File "/usr/lib/python2.5/site-packages/OpenGL/platform/glx.py", line 8, in
class GLXPlatform( baseplatform.BasePlatform ):
File "/usr/lib/python2.5/site-packages/OpenGL/platform/glx.py", line 16, in GLXPlatform
mode=ctypes.RTLD_GLOBAL
File "/usr/lib/python2.5/site-packages/OpenGL/platform/ctypesloader.py", line 42, in loadLibrary
return dllType( name, mode )
File "/usr/lib/python2.5/ctypes/__init__.py", line 348, in __init__
self._handle = _dlopen(self._name, mode)
OSError: ('GL: cannot open shared object file: No such file or directory', 'GL', None)


Buscando un poco en google, he encontrado información acerca del bug y la solución que proponía alguien (instalar el paquete libgl1-mesa-dev), me ha resuelto el problema:

# aptitude install libgl1-mesa-dev

Crear presentaciones "portables" con OpenOffice

Los que trabajamos con Linux, lo habitual es que hagamos nuestras presentaciones con OpenOffice Impress y llevemos nuestro portátil para hacer la presentación. Pero muchas veces he visto a gente que va a dar una ponencia, lo único que lleva es un pendrive con la presentación en PowerPoint y se encuentra con que en las instalaciones no hay PowerPoint.

Naturalmente OpenOffice puede abrir presentaciones hechas con PowerPoint, pero a veces, se descolocan las cosas.

En otras ocasiones sucede lo contrario. Llevas tu presentación en OpenOffice y resulta que no lo tienen instalado en el equipo que vas a usar para impartir tu ponencia.

Como más vale ser prevenido, lo ideal es llevar el documento guardado también en otro formato, como por ejemplo: PDF.

Un equipo puede tener OpenOffice o PowerPoint, pero lo que es seguro es que tendrá algún visor de archivos PDF.

Con OpenOffice Impress podemos guardar una presentación en formato PDF de manera que:
  • Conserve el aspecto de presentación, ajustada para ser mostrada en pantalla.
  • Nos permita seguir utilizando el documento pdf como una presentación, que se puede mostrar a pantalla completa y navegar por la presentación.
¿Cómo lo hacemos?
Muy sencillo: Creamos nuestra presentación, como siempre, en OpenOffice. Y, una vez que la tengamos creada, hacemos clic en el menú Archivo -> Exportar en formato PDF, tal y como se muestra en la siguiente imagen:


Se nos abrirá un cuadro de diálogo similar al siguiente:

Seleccionamos la pestaña Interfaz del usuario, donde marcaremos la opción Abrir en modo de pantalla completa para que cuando abramos el documento pdf con un visor, se muestre directamente a pantalla completa.

Por último, hacemos clic en el botón Exportar para que genere el archivo PDF que contendrá nuestra presentación.

Y listo, ya tendremos nuestra presentación en otro formato adicional: pdf.

Ahora, cuando tengamos que hacer la presentación, nos llevaremos tanto el archivo .odt como el archivo .pdf, por si acaso...

lunes, 18 de enero de 2010

Filtrar tráfico p2p en linux

Un problema habitual para los administradores de redes es el abuso del uso de P2P. Si tenemos un servidor linux, podemos filtrar este tipo de tráfico con el fin de pararlo, o, al menos, ralentizarlo de forma que no merezca la pena.

Una forma de hacerlo es usando Xtables-addons.

Xtables-addons
contiene extensiones que no fueron aceptadas o aún no han sido aceptadas en los paquetes del kernel o iptables. Una de ellas es el módulo ipp2p (xt_ipp2p) que nos permite filtrar el tráfico p2p.

Como en Debian Lenny, a día de hoy, aún no tenemos la versión 1.4.3 de iptables, y es la versión mínima para trabajar con xtables, me he descargado el código fuente y lo he compilado. Pero vamos paso por paso lo que he hecho.

Primero, descargamos iptables-1.4.3.tar.bz2 y xtables-addons-1.21.tar.bz2.

Luego copiamos los archivos descargados a /usr/src:

# cp iptables-1.4.3.tar.bz2 /usr/src
# cp xtables-addons-1.21.tar.bz2 /usr/src

Y los descomprimimos:

# cd /usr/src
# tar xfvj iptables-1.4.3.tar.bz2

# tar xfvj xtables-addons-1.21.tar.bz2

Se nos crearán dos directorios:
  • iptables-1.5.3
  • xtables-addons-1.21
Como es necesario tener los headers correspondientes al núcleo que tenemos instalado, los instalamos:

# aptitude install linux-headers-`uname -r`

Primero compilaremos e instalaremos iptables. Para ello, entramos en el directorio iptables-1.5.3:

# cd iptables-1.5.3

# ./configure

Si tuviéramos algún error, es cuestión de ver qué es lo que nos falta. Si todo va bien, no tendremos ningún error y podremos compilar.

# make

Y, si el proceso de compilación no nos ha devuelto ningún error, instalamos:

# make install

Una vez instalado iptables, podemos ver si está funcionando si ejecutamos en un terminal:

# iptables --version

Una vez instalado iptables, vamos a instalar xtables-addons. Para ello, entramos en el directorio xtables-addons-1.21:

# cd xtables-addons-1.21

Y ejecutamos:

# ./configure

Si tuviéramos algún error, como ya dijimos al instalar iptables, es cuestión de ver qué es lo que nos falta. Si todo va bien, no tendremos ningún error y podremos compilar:

# make

Y, si el proceso de compilación no nos ha devuelto ningún error, instalamos:

# make install

Una vez instalado xtables-addons, podemos comprobar si todo ha ido bien de la siguiente manera:

# iptables -m ipp2p --help

Obtendremos una ayuda acerca de cómo usar ip2p con iptables.

Como podemos ver, podremos filtrar:


--edk [tcp,udp] All known eDonkey/eMule/Overnet packets
--dc [tcp] All known Direct Connect packets
--kazaa [tcp,udp] All known KaZaA packets
--gnu [tcp,udp] All known Gnutella packets
--bit [tcp,udp] All known BitTorrent packets
--apple [tcp] All known AppleJuice packets
--winmx [tcp] All known WinMX
--soul [tcp] All known SoulSeek
--ares [tcp] All known Ares

Ahora ya podríamos usar en iptables reglas que bloqueen los diferentes tipos de tráfico. Ejemplos:

iptables -A FORWARD -p tcp -m ipp2p --edk -j DROP
iptables -A FORWARD -p udp -m ipp2p --edk -j DROP
iptables -A FORWARD -p tcp -m ipp2p --dc -j DROP
iptables -A FORWARD -p tcp -m ipp2p --kazaa -j DROP
iptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP
iptables -A FORWARD -p tcp -m ipp2p --gnu -j DROP
iptables -A FORWARD -p udp -m ipp2p --gnu -j DROP
iptables -A FORWARD -p tcp -m ipp2p --bit -j DROP
iptables -A FORWARD -p udp -m ipp2p --bit -j DROP
iptables -A FORWARD -p tcp -m ipp2p --apple -j DROP
iptables -A FORWARD -p tcp -m ipp2p --winmx -j DROP
iptables -A FORWARD -p tcp -m ipp2p --soul -j DROP
iptables -A FORWARD -p tcp -m ipp2p --ares -j DROP

Configurar opciones por defecto en gnome para los usuarios

Como ya comenté en un artículo anterior, en Debian y distribuciones derivadas podemos añadir un fichero al directorio /usr/share/gconf/defaults/ donde especificaremos nuestras preferencias por defecto en gnome, como por ejemplo, activar el uso del teclado numérico como sustituto del ratón, configurar la tecla con el simbolito de windows para que, al pulsarla, se abra el menú principal, etc...

Recordando un poco el tema, como dijimos, creamos un fichero llamado, por ejemplo, 25_mispreferencias dentro del directorio /usr/share/gconf/defaults/:

# touch /usr/share/gconf/defaults/25_mispreferencias

Si ya lo hemos creado anteriormente, no tenemos más que añadir una línea por cada preferencia que queramos establecer.

Por ejemplo, para activar la posibilidad de usar el teclado numérico como sustituto del ratón, como ya dijimos, no tendremos más ejecutar el siguiente comando en un terminal para añadir la preferencia al archivo:

# echo "/desktop/gnome/accesibility/keyboard/mousekeys_enable true" >> /usr/share/gconf/defaults/25_mispreferencias

Y para que esta posibilidad se encuentre activada siempre al inicio, añadiremos otra línea más al fichero de preferencias:

# echo "/desktop/gnome/accesibility/keyboard/enable true" >> /usr/share/gconf/defaults/25_mispreferencias

Una vez configuradas las opciones por defecto para gconf, ejecutaremos el comando:

# update-gconf-defaults

Vuelvo a recordar lo que comenté en un artículo anterior: Usando este método definimos las opciones por defecto de gconf. Pero, si el usuario modifica su configuración particular, por ejemplo mediante gconf-editor, prevalecerá la configuración del usuario sobre la configuración por defecto.

Unas cuantas preferencias que tengo definidas:

Bloquear la modificación del panel:
/apps/panel/global/locked_down true

Establecer un fondo de escritorio por defecto:
/desktop/gnome/background/picture_filename /usr/share/wallpapers/debian-edu-wallpaper.png

Establecer el ajuste del fondo de escritorio:
/desktop/gnome/background/picture_options stretched

Establecer el uso del teclado numérico como sustituto del ratón:
/desktop/gnome/accessibility/keyboard/mousekeys_enable true

Activar el uso del teclado numérico como sustituto del ratón al inicio de la sesión:
/desktop/gnome/accessibility/keyboard/enable true

Habilitar opción de borrado en nautilus (sin pasar por la papelera):
/apps/nautilus/preferences/enable_delete true

Configurar la tecla de windows para que abra el menú principal:
/apps/metacity/global_keybindings/panel_main_menu Super_L

Más opciones por defecto, interesantes de aplicar:

/apps/gnome-screensaver/idle_activation_enabled false
/apps/gnome-screensaver/lock_enabled false
/apps/gnome-screensaver/user_switch_enabled false
/apps/gnome-session/options/logout_prompt false
/apps/panel/global/disable_lock_screen true
/apps/gnome-power-manager/general/can_suspend false
/apps/gnome-power-manager/general/can_hibernate false
/apps/gnome-power-manager/actions/sleep_type_ac nothing
/apps/gnome-power-manager/actions/sleep_type_battery nothing
/apps/nautilus/preferences/enable_delete true

Aprovecho para añadir un par de opciones más por las que me ha preguntado algún compañero:

Desactivar el botón logout:
/apps/panel/global/disable_log_out true

Desactivar el botón de apagado:

/apps/panel/global/disable_force_quit true



He visto que la opción /apps/panel/global/disable_lock_screen en Debian Squeeze apacece marcada como obsoleta y se indica que debemos cambiarla por:
/desktop/gnome/lockdown/disable_lock_screen true

miércoles, 13 de enero de 2010

ldd: Averiguar las dependencias de librerías de un programa

ldd es un comando muy interesante que nos muestra las librerías que necesita un programa o librería compartida.

Por ejemplo: Si quiero ver qué librerías necesita bash, ejecuto:

# ldd /bin/bash

Y obtendré una salida como la siguiente:

linux-gate.so.1 => (0xb80de000)
libncurses.so.5 => /lib/libncurses.so.5 (0xb8095000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb8091000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7f35000)
/lib/ld-linux.so.2 (0xb80df000)

Ojo, al comando ldd tenemos que proporcionarle la ruta completa al archivo (Ej: ldd /bin/bash). No vale con hacer: ldd bash. Si no sabemos dónde se encuentra localizado el programa o librería, siempre podemos buscarlo con el comando whitch.

Poner el teclado de la consola en español

Muchas veces trabajamos en consola con sistemas, sobre todo live, que por defecto cargan el mapa de teclado en inglés. Cambiarlo es muy sencillo utilizando el comando loadkeys.

Los mapas de teclado se encuentran habitualmente en /usr/share/keymaps/ aunque en algunas distribuciones suele variar su ubicación.
Como, habitualmente trabajamos con sistemas i386 y nuestro teclado es español querty, buscaremos concretamente el fichero es.map.gz dentro del directorio /usr/share/keymaps/i386/qwerty/

De este modo, cargar el mapa de teclado querty español es tan sencillo como ejecutar:
# loadkeys /usr/share/keymaps/i386/qwerty/es.map.gz