Author Archive for milmazz

Configurando nuestras interfaces de red con ifupdown

Si usted es de esas personas que suele mover su máquina portátil entre varias redes que no necesariamente proveen DHCP y usualmente vuelve a configurar sus preferencias de conexión, seguramente este artículo llame su atención puesto que se explicará acerca de la configuración de diversos perfiles de conexión vía línea de comandos.

En los sistemas Debian y los basados en él, Ubuntu por ejemplo, para lograr la configuración de las redes existe una herramienta de alto nivel que consiste en los comandos ifup e ifdown, adicionalmente se cuenta con el fichero de configuración /etc/network/interfaces. También el paquete wireless-tools incluye un script en /etc/network/if-pre-up.d/wireless-tools que hace posible preparar el hardware de la interfaz inalámbrica antes de darla de alta, dicha configuración se hace a través del comando iwconfig.

Para hacer uso de las ventajas que nos ofrece la herramienta de alto nivel ifupdown, en primer lugar debemos editar el fichero /etc/network/interfaces y establecer nuestros perfiles de la siguiente manera:

auto lo
iface lo inet loopback

# Conexión en casa usando WPA
iface home inet dhcp
    wpa-driver wext
    wpa-ssid foo
    wpa-psk baz
    wpa-keymgmt WPA-PSK
    wpa-pairwise TKIP CCMP
    wpa-group TKIP CCMP
    wpa-proto WPA RSN

# Conexión en la oficina
# sin DHCP
iface office inet static
    wireless-essid bar
    wireless-key s:egg
    address 192.168.1.97
    netmask 255.255.255.0
    broadcast 192.168.1.255
    gateway 192.168.1.1
    dns-search company.com #search@resolv.conf
    dns-nameservers 192.168.1.2 192.168.1.3 #nameserver@resolv.conf

# Conexión en reuniones
iface meeting inet dhcp
	wireless-essid ham
	wireless-key s:jam

En este ejemplo se encuentran 3 configuraciones particulares (home, work y meeting), la primera de ellas define que nos vamos a conectar con un Access Point cuyo ssid es foo con un tipo de cifrado WPA-PSK/WPA2-PSK, esto fue explicado en detalle en el artículo Haciendo el cambio de ipw3945 a iwl3945. La segunda configuración indica que nos vamos a conectar a un Access Point con una IP estática y configuramos los parámetros search y nameserver del fichero /etc/resolv.conf (para más detalle lea la documentación del paquete resolvconf). Finalmente se define una configuración similar a la anterior, pero en este caso haciendo uso de DHCP.

Llegados a este punto es importante aclarar lo que ifupdown considera una interfaz lógica y una interfaz física. La interfaz lógica es un valor que puede ser asignado a los parámetros de una interfaz física, en nuestro caso home, office, meeting. Mientras que la interfaz física es lo que propiamente conocemos como la interfaz, en otras palabras, lo que regularmente el kernel reconoce como eth0, wlan0, ath0, ppp0, entre otros.

Como puede verse en el ejemplo previo las definiciones adyacentes a iface hacen referencia a interfaces lógicas, no a interfaces físicas.

Ahora bien, para dar de alta la interfaz física wlan0 haciendo uso de la interfaz lógica home, como superusuario puede hacer lo siguiente:

# ifup wlan0=home

Si usted ahora necesita reconfigurar la interfaz física wlan0, pero en este caso particular haciendo uso de la interfaz lógica work, primero debe dar de baja la interfaz física wlan0 de la siguiente manera:

# ifdown wlan0

Seguidamente deberá ejecutar el siguiente comando:

# ifup wlan0=work

Es importante hacer notar que tal como está definido ahora el fichero /etc/network/interfaces ya no es posible dar de alta la interfaz física wlan0 ejecutando solamente lo siguiente:

ifup wlan0

La razón de este comportamiento es que el comando ifup utiliza el nombre de la interfaz física como el nombre de la interfaz lógica por omisión y evidentemente ahora no está definido en el ejemplo un nombre de interfaz lógica igual a wlan0.

En un próximo artículo se harán mejoras en la definición del fichero /etc/network/interfaces y su respectiva integración con una herramienta para la detección de redes que tome como entrada una lista de perfiles de redes candidatas, cada una de ellas incluyendo casos de pruebas. Teniendo esto como entrada ya no será necesario indicar la interfaz lógica a la que se hace referencia ya que la herramienta se encargará de probar todos los perfiles en paralelo y elegirá aquella que cumpla en primera instancia con los casos de prueba. De modo tal que ya podremos dar de alta nuestra interfaz física con solo hacer ifup wlan0.

subversion: Recuperar cambios y eliminaciones hechas

Muchos compañeros de trabajo y amigos en general que recién comienzan con el manejo de sistemas de control de versiones centralizados, en particular subversion, regularmente tienen inquietudes en cuanto al proceso de recuperación de cambios una vez que han sido enviados al repositorio, así como también la recuperación de ficheros y directorios que fueron eliminados en el pasado. Trataré de explicar algunos casos en base a ejemplos para que se tenga una idea más clara del problema y su respectiva solución.

En el primero de los casos se tiene recuperar la revisión previa a la actual, suponga que usted mantiene un repositorio de recetas, una de ellas en particular es la ensalada caprese, por error o descuido añadió el ingrediente Mostaza tipo Dijón a la lista, si usted posee siquiera un lazo con italinos sabe que está cometiendo un error que puede devenir en escarnio público, desprecio e insultos.

~/svn/wc/trunk$ svn diff -r 2:3 ${URL}/trunk/caprese
Index: caprese
===================================================================
--- caprese	(revision 2)
+++ caprese	(revision 3)
@@ -7,3 +7,4 @@
  - Albahaca fresca
  - Aceite de oliva
  - Pimienta
+ - Mostaza tipo Dijon

Note que el comando anterior muestra las diferencias entre las revisiones 2 y 3 del repositorio, en el resumen se puede apreciar que en la revisión 3 ocurrió el error. Un modo rápido de recuperarlo es como sigue.

~/svn/wc/trunk$ svn merge -c -3 ${URL}/trunk/caprese
--- Reverse-merging r3 into 'caprese':
U    caprese

En este caso particular se están aplicando las diferencias entre las revisiones consecutivas a la copia de trabajo. Es hora de verificar que los cambios hechos sean los deseados:

~/svn/wc/trunk$ svn status
M      caprese
~/svn/wc/trunk$ svn diff
Index: caprese
===================================================================
--- caprese	(revision 3)
+++ caprese	(working copy)
@@ -7,4 +7,3 @@
  - Albahaca fresca
  - Aceite de oliva
  - Pimienta
- - Mostaza tipo Dijon

Una vez verificado enviamos los cambios hechos al repositorio a través de comando svn commit.

Seguramente usted se estará preguntando ahora que sucede si las revisiones del ficheros no son consecutivas como en el caso mostrado previamente. En este caso es importante hacer notar que la opción -c 3 es equivalente a -r 2:3 al usar el comando svn merge, en nuestro caso particular -c -3 es equivalente a -r 3:2 (a esto se conoce como una fusión reversa), substituyendo la opción -c (o --changes) en el caso previo obtenemos lo siguiente:

~/svn-tests/wc/trunk$ svn merge -r 3:2 ${URL}/trunk/caprese
--- Reverse-merging r3 into 'caprese':
U    caprese

Referencias: svn help merge, svn help diff, svn help status.

Recuperando ficheros o directorios eliminados

Una manera bastante sencilla de recuperar ficheros o directorios eliminados es haciendo uso de comando svn cp o svn copy, una vez determinada la revisión del fichero o directorio que desea recuperar la tarea es realmente sencilla:

~/svn-tests/wc/trunk$ svn cp ${URL}/trunk/panzanella@6 panzanella
A         panzanella

En este caso se ha duplicado la revisión 6 del fichero panzanella en la copia de trabajo local, se ha programado para su adición incluyendo su historial, esto último puede verificarse en detalle al observar el signo ‘+’ en la cuarta columna del comando svn status.

~/svn-tests/wc/trunk$ svn status
A  +   panzanella

Referencias: svn help copy, svn help status.

Haciendo el cambio de ipw3945 a iwl3945

Si usted es de esas personas que cuenta con una tarjeta inalámbrica Intel Corporation PRO/Wireless 3945, seguramente sabrá que existen al menos dos proyectos que le dan soporte. El primero de ellos es ipw3945 y se encuentra obsoleto, el desarrollo pasó al proyecto iwlwifi.

Aprovechando que recientemente ha ingresado a la versión inestable de Debian la serie del kernel 2.6.24, este contiene el nuevo modulo iwl3945 que reemplaza al viejo ipw3945. Una de las ventajas de este cambio es que ya no hay necesidad de tener activo el demonio ipw3945d. Sin embargo, aun se necesita del firmware que se encuentra en la sección non-free del repositorio de Debian.

Hasta donde he leído el plan será remover los paquetes ipw3945-modules-* e ipw3945d de los repositorios de Debian (al menos en testing y en unstable) una vez que la serie 2.6.24 del kernel llegue a la versión de pruebas (testing). Aquellos que se encuentren hoy día en la versión inestable (unstable) de Debian deberán cambiar el driver desde ipw3945 a iwl3945. Para aquellos que trabajan en etch también es posible usar el driver iwl3945 si actualiza su versión del kernel por medio del repositorio etch-backports (el nuevo stack mac80211 que usa iwlwifi se encuentra a partir de la versión del kernel 2.6.22).

Las instrucciones que verá a continuación se han aplicado en Debian inestable, si usted desea instalar iwlwifi en etch puede seguir estas instrucciones.

Obteniendo algunos datos de interés antes de proceder con la actualización.

Versión del kernel:

$ uname -r
2.6.22-3-686

Verifique que en realidad tiene una tarjeta Intel Corporation PRO/Wireless 3945

$ lspci -nn | grep Wireless
03:00.0 Network controller [0280]: Intel Corporation PRO/Wireless 3945ABG Network Connection [8086:4227] (rev 02)

Paquetes necesarios

Ahora bien, es necesario instalar el nuevo kernel y el firmware necesario para hacer funcionar a iwlwifi

# aptitude install linux-image-2.6-686 \\
linux-image-2.6.24-1-686 \\
firmware-iwlwifi

Evitando problemas

Verifique que no existe alguna entrada que haga referencia al modulo ipw3945 en el fichero /etc/modules. Para ello recurrimos a Perl que nos facilita la vida.

# perl -i -ne 'print unless /^ipw3945/' /etc/modules

Debido a algunos problemas que se presentan en el paquete network-manager si anteriormente ha venido usando el modulo ipw3945 se recomienda eliminar la entrada que genera udev para dicho modulo en el fichero /etc/udev/rules.d/z25_persistent-net.rules, la entrada es similar a la siguiente:

# PCI device 0x8086:0x4227 (ipw3945)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:13:02:4c:12:12", NAME="eth2"

Fichero /etc/network/interfaces

Este paso es opcional, agregamos la nueva interfaz wlan0 al fichero /etc/network/interfaces y procedemos a configurarla de acuerdo a nuestras necesidades.

auto lo
iface lo inet loopback

auto wlan0
iface wlan0 inet dhcp
wpa-driver wext
wpa-ssid foo
wpa-psk baz
wpa-key-mgmt WPA-PSK
wpa-pairwise TKIP CCMP
wpa-group TKIP CCMP
wpa-proto WPA RSN

En este caso particular se está indicando que nos vamos a conectar a un Access Point cuyo ssid es foo con tipo de cifrado WPA-PSK/WPA2-PSK, haciendo uso del driver wext que funciona como backend para wpa_supplicant. Es de hacer notar que el driver wext es utilizado por todos los adaptadores Intel Pro Wireless, eso incluye ipw2100, ipw2200 e ipw3945.

Para hacer funcionar WPA recuerde que debe haber instalado previamente el paquete wpasupplicant.

# aptitude install wpasupplicant

De igual manera se le recuerda adaptar todos aquellos parámetros como wpa-ssid y wpa-psk a aquellos adecuados en su caso. En particular el campo wpa-psk lo puede generar con el siguiente comando:

$ wpa_passphrase su_ssid su_passphrase

Aunque mi recomendación es usar el comando wpa_passphrase de la siguiente manera.

$ wpa_passphrase su_ssid

Posteriormente deberá introducir su_passphrase desde la entrada estándar, esto evitará que su_passphrase quede en el historial de comandos.

Para mayor detalle de los campos expuestos en la configuración del fichero /etc/network/interfaces se le recomienda leer la documentación expuesta en /usr/share/doc/wpasupplicant/README.modes.gz.

Una vez concluidos estos pasos reiniciamos el sistema y seleccionamos en nuestro Gestor de Arranque (ej. GRUB) la versión del kernel recien instalada. Al momento de iniciar su sesión verifique que su tarjeta inalámbrica esté funcionando, de lo contrario haga las revisiones que se indican en la siguiente sección.

En caso de persistir los problemas

Remueva y reinserte el modulo iwl3945

# modprobe -r iwl3945
# modprobe iwl3945

De manera adicional compruebe que udev haya generado una nueva entrada para iwl3945.

$ cat /etc/udev/rules.d/z25_persistent-net.rules
...
# PCI device 0x8086:0x4227 (iwl3945)
SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="00:13:02:4c:12:12", ATTR{type}=="1", NAME="wlan0"

Finalmente, reestablecemos la interfaz de red.

# ifdown wlan0
# ifup wlan0

Elimine ipw3945

Una vez verificado el correcto funcionamiento del módulo iwl3945 puede eliminar con seguridad todo aquello relacionado con el modulos ipw3945.

# aptitude --purge remove firmware-ipw3945 \\
ipw3945-modules-$(uname -r) \\
ipw3945-source ipw3945d

Estas instrucciones también aplican para el modulo iwl4965. Mayor información en Debian Wiki § iwlwifi.

Activado el registro de participantes del V Foro Mundial de Conocimiento Libre

Logotipo del VFCML Hace pocos minutos la Comisión para la Plataforma Tecnológica del V Foro Mundial de Conocimiento Libre tomó la decisión de hacer pública la aplicación para el registro de participantes.

El V Foro Mundial de Conocimiento Libre es un evento que se llevará a cabo desde el 19 al 23 de Noviembre del año 2007 en las instalaciones del Centro de Convenciones del Hotel Intercontinental Guayana de la Ciudad de Puerto Ordaz, Edo. Bolívar, en Venezuela. Para mayor información acerca del evento puede visitar la página oficial del evento V Foro Mundial de Conocimiento Libre.

En el comunicado oficial emitido por la Comisión para la Plataforma Tecnológica del evento se les recomienda a todas aquellas personas que deseen aclarar alguna inquietud sobre el V Foro Mundial de Conocimiento Libre hagan uso del formulario de contacto que se ha habilitado para tal fin.

Recuperando una antigua Logitech Quickcam Express

No se porque motivo o razón comencé a revisar en unas cajas de mi cuarto, cuando de repente me encontré con la primera cámara web que compre, de hecho, vino como accesorio a mi máquina de escritorio Compaq Presario 5006LA. Así que me pregunté, ¿será que todavía funciona esta reliquia?.

Lo primero que hice fue conectar el dispositivo en cuestión a mi portátil actual, enseguida ejecuté el comando:

$ lsusb | grep -i logitech
Bus 002 Device 002: ID 046d:0840 Logitech, Inc. QuickCam Express

Una vez conocido el PCI ID (046d:0840) del dispositivo realicé una búsqueda rápida en Google y llegué a un sitio muy interesante, en donde podemos obtener una descripción de los dispositivos USB para Linux, al usar la función de búsqueda en la base de datos del sitio mencionado previamente ingreso el dato correspondiente al Vendor ID (en mi caso, 046d), posteriormente filtre los resultados por el Product ID (en mi caso, 0840), sentía que ya estaba dando con la solución a mi problema, había encontrado información detallada acerca de mi Logitech Quickcam Express. Al llegar acá descubrí el Linux QuickCam USB Web Camera Driver Project.

En la página principal del Linux QuickCam USB Web Camera Driver Project observo que mi vejestorio de cámara es soportada por el driver qc-usb.

Con la información anterior decido hacer uso del manejador de paquetes aptitude y en los resultados avisté el nombre de un paquete qc-usb-source, así que definitivamente nuestra salvación es module-assistant.

# aptitude install qc-usb-source \\
build-essential \\
module-assistant \\
modconf \\
linux-headers-`uname -r`
# m-a update
# m-a prepare
# m-a a-i qc-usb

Una vez realizado el paso anterior recurro a la utilidad de configuración de módulos en Debian modconf e instalo el módulo quickcam, el cual se encuentra en /lib/modules/2.6.18-4-686/misc/quickcam.ko y verificamos.

# tail /var/log/messages
May 14 21:16:57 localhost kernel: Linux video capture interface: v2.00
May 14 21:16:57 localhost kernel: quickcam: QuickCam USB camera found (driver version QuickCam USB 0.6.6 $Date: 2006/11/04 08:38:14 $)
May 14 21:16:57 localhost kernel: quickcam: Kernel:2.6.18-4-686 bus:2 class:FF subclass:FF vendor:046D product:0840
May 14 21:16:57 localhost kernel: quickcam: Sensor HDCS-1000/1100 detected
May 14 21:16:57 localhost kernel: quickcam: Registered device: /dev/video0
May 14 21:16:57 localhost kernel: usbcore: registered new driver quickcam

Como puede observarse el dispositivo es reconocido y se ha registrado en /dev/video0. En este instante que poseemos los módulos del driver qc-sub para nuestro kernel, podemos instalar la utilidad qc-usb-utils, esta utilidad nos permitirá modificar los parámetros de nuestra Logitech QuickCam Express.

# aptitude install qc-usb-utils

Ahora podemos hacer una prueba rápida de nuestra cámara, comienza la diversión, juguemos un poco con mplayer.

$ mplayer tv:// -tv driver=v4l:width=352:height=288:outfmt=rgb24:device=/dev/video0:noaudio -flip

A partir de ahora podemos probar más aplicaciones ;)

Charla: Informática al alcance de todos

El día miércoles 9 de Mayo, en el salón 1O02 (Piso #1, sala Oeste, salón #2)ubicado en la Facultad de Ingeniería, Núcleo La Hechicera de la Universidad de Los Andes, a partir de las 2:00 p.m. Edgar Guzmán (a.k.a. edgarin) estará conversando sobre el proyecto Informática al Alcance de Todos, dicho proyecto está orientado a ”la satisfacción de las necesidades que requiere la población guatemalteca y también muchos pueblos de América Latina, sobretodo las personas de bajos recursos o que pertenezcan a grupos étnicos que se encuentran marginados al acceso de nuevas tecnologías“.

Uno de los puntos que discutirá Edgar en su charla es el avance en la traducción y adaptación de aplicaciones en Software Libre, así como la creación de infocentros en regiones donde las personas no poseen los medios para acceder a un ordenador o computadora.

De manera adicional, Edgar estará relatando sobre un caso de migración de una oficina que se dedica a llevar la contabilidad a diferentes empresas en Guatemala, a través de varias charlas y discusiones que se dieron, se decidió la migración a Software Libre, aunque algunos inconvenientes surgieron en el proceso de migración, estos se lograron solventar a tiempo. Edgar estará conversando acerca de las soluciones encontradas y las ventajas que les ha traído a dicha empresa la migración a Software Libre.

Le invito a participar en esta charla, la cual está dirigida a cualquier tipo de público que desee conocer casos de éxito que se han dado al utilizar Software Libre en su totalidad.

Acerca del ponente

Edgar Guzmán actualmente cuenta con apenas 16 años de edad, pero desde los 9 años ha tenido contacto con los ordenadores, comulga con la filosofía detrás del Software Libre y sus proyectos buscan el bienestar social.

Edgar actualmente está involucrado en la traducción del navegador IceWeasel al idioma k’iche’. A su vez, este pequeño, a la edad de 15 años, participó en el IV Foro Mundial de Conocimiento Libre, el cual se llevó a cabo desde el 17 hasta el 21 de Noviembre en la ciudad de Maturín, estado Monagas, Venezuela. La charla que presentó para aquel entonces fue sobre Linux Terminal Server Project.

Puede encontrar mayor información acerca de Edgar Guzmán en su blog o leyendo el artículo lleva por título Guzmán el gusto por lo complicado, publicado en la edición 26 de noviembre de 2006 del diario Siglo XXI.

Network Manager: Facilitando el manejo de redes inalámbricas

NetworkManager En la entrada previa, Establecer red inalámbrica en Dell m1210, comencé a describir el proceso que seguí para lograr hacer funcionar la tarjeta Broadcom Corporation Dell Wireless 1390 WLAN Mini-PCI Card (rev 01) en una portátil Dell m1210. El motivo de esta entrada se debe a que muchos usuarios hoy día no les interesa ni debe interesarles estar lidiando con la detección de redes inalámbricas, por eso les pasaré a comentar acerca de NetworkManager.

NetworkManager es una aplicación cuyo objetivo es que el usuario nunca tenga que lidiar con la línea de comandos o la edición de ficheros de configuración para manejar sus redes (ya sea cableada o inalámbrica), haciendo que la detección de dichas redes simplemente funcione tanto como se pueda y que interrumpa lo menos posible el flujo de trabajo del usuario. De manera que cuando usted se dirija a áreas en las cuales usted ha estado antes, NetworkManager se conectará automáticamente a la última red que haya escogido. Asimismo, cuando usted esté de vuelta al escritorio, NetworkManager cambiará a la red cableada más rápida y confiable.

Por los momentos, NetworkManager soporta redes cifradas WEP, el soporte para el cifrado WPA está contemplado para un futuro cercano. Respecto al soporte de VPN, NetworkManager soporta hasta ahora vpnc, aunque también está contemplado darle pronto soporte a otros clientes.

Para hacer funcionar NetworkManager en Debian los pasos que debemos seguir son los siguientes. En primera instancia instalamos el paquete.

# aptitude -r install network-manager-gnome

Que conste que NetworkManager funciona para entornos de escritorios como GNOME, KDE, XFCE, entre otros. En este caso particular estoy instalando el paquete disponible en Debian para GNOME en conjunto con sus recomendaciones.

De acuerdo al fichero /usr/share/doc/network-manager/README.Debian NetworkManager consiste en dos partes: uno a nivel del demonio del sistema que se encarga de manejar las conexiones y recoge información acerca de las nuevas redes. La otra parte es un applet que el usuario emplea para interactuar con el demonio de NetworkManager, dicha interacción se lleva a cabo a través de D-Bus.

En Debian por seguridad, los usuarios que necesiten conectarse al demonio de NetworkManager deben estar en el grupo netdev. Si usted desea agregar un usuario al grupo netdev utilice el comando adduser usuario netdev, luego de ello tendrá que recargar dbus haciendo uso del comando /etc/init.d/dbus reload.

Es necesario saber que NetworkManager manejará todos aquellos dispositivos que no estén listados en el fichero /etc/network/interfaces, o aquellos que estén listados en dicho fichero con la opción auto o dhcp, de esta manera usted puede establecer una configuración para un dispositivo que sea estática y puede estar seguro que NetworkManager no tratará de sobreescribir dicha configuración. Para mayor información le recomiendo leer detenidamente el fichero /usr/share/doc/network-manager/README.Debian.

Si usted desea que NetworkManager administre todas las interfaces posibles en su ordenador, lo más sencillo que puede hacer es dejar solo lo siguiente en el fichero /etc/network/interfaces.

$ cat /etc/network/interfaces
auto lo
iface lo inet loopback

Una vez que se ha modificado el fichero /etc/network/interfaces reiniciamos NetworkManager con el comando /etc/dbus-1/event.d/25NetworkManager restart. El programa ahora se encargará de detectar las redes inalámbricas disponibles. Para ver una lista de las redes disponibles, simplemente haga clic en el icono, tal como se muestra en la figura al principio de este artículo.

Había mencionado previamente que NetworkManager se conectará automáticamente a las redes de las cuales tiene conocimiento con anterioridad, pero usted necesitará conectarse manualmente a una red al menos una vez. Para ello, simplemente seleccione una red de la lista y NetworkManager automáticamente intentará conectarse. Si la red requiere una llave de cifrado, NetworkManager le mostrará un cuadro de dialogo en el cual le preguntará acerca de ella. Una vez ingresada la llave correcta, la conexión se establecerá.

Para cambiar entre redes, simplemente escoja otra red desde el menú que le ofrece el applet.

Establecer red inalámbrica en Dell m1210

Hace ya algunos días Ana me comentaba que no le estaba funcionando la configuración que tenía para su red inalámbrica, eso ocurrió una vez que actualizó la versión del kernel de linux, espero entrar en detalle acerca de los pasos que seguí para configurarle todo como se debe bajo Debian Etch.

Lo primero que debía saber era el tipo de componente PCI al que me estaba enfrentando.

$ lspci -nn | grep Wireless
0c:00.0 Network controller [0280]:
Broadcom Corporation Dell Wireless 1390
WLAN Mini-PCI Card [14e4:4311] (rev 01)

Lo anterior dice que nos estamos enfrentando ante una Broadcom cuyo chipset id es el 4311, debemos saber que el módulo para linux de estos chips es el bcm43xx y ha sido incluido al kernel de linux desde la versión 2.6.17-rc21, al revisar la lista de dispositivos soportados me percaté que el soporte para este chipset id aún es inestable, así que el siguiente paso era eliminar su presencia si aplicaba.

$ lsmod | grep bcm43xx
bcm43xx               148500  0
ieee80211softmac       40704  1 bcm43xx
ieee80211              39112  2 bcm43xx,ieee80211softmac

Como se puede observar en este caso aplica, así que comenzamos a eliminar su presencia.

# grep -q '^blacklist bcm43xx' /etc/modprobe.d/blacklist \\
|| tee -a 'blacklist bcm43xx' /etc/modprobe.d/blacklist

La inclusión de la línea blacklist bcm43xx al fichero /etc/modprobe.d/blacklist si aplica me permite indicar que dicho módulo no debe cargarse como resultado de la expansión de su alias, es decir, bcm43xx, esto se hace con el propósito de evitar que el subsistema hotplug lo carge, aunque esto no evita que el módulo se carge automáticamente por el kernel.

Luego verifique el fichero /etc/modules, el cual contiene los nombre de los módulos que serán cargados a la hora del inicio del sistema, no había entrada para el módulo bcm43xx, ahora es necesario remover dicho módulo, para lo cual hacemos:

# modprobe -r bcm43xx

Una vez culminado este proceso es necesario hacer uso de ndiswrapper, el cual es un módulo que me permite cargar y ejecutar drivers propietarios de Windows para tarjetas inalámbricas.

# aptitude -r install build-essential \\
module-assistant ndiswrapper-common
# m-a update
# m-a prepare
# m-a a-i ndiswrapper
# modprobe ndiswrapper

Una vez cargado el módulo ndiswrapper es necesario instalar el nuevo driver propietario, para ello debemos encontrar el fichero con extensión inf, este fichero especifica que ficheros necesitan estar presentes o descargarse para que el componente funcione correctamente, para dicho driver. Al consultar en la lista de tarjetas que funcionan con ndiswrapper me percato que han habido problemas de seguridad en algunos de los drivers recomendados para esta tarjeta, así que para asegurarme de obtener las versiones más recientes ingreso al sitio oficial de Dell, bajo la sección USASupport search: “m1210″Drivers and DownloadsNetwork & InternetNetwork Driver, ingreso el campo correspondiente al service tag, y finalmente descargo el fichero R151517.EXE.

El siguiente paso es extraer los ficheros que se encuentran dentro de R151517.EXE, para ello:

unzip R151517.EXE

Ahora nos interesa el fichero bcmwl5.inf que está dentro del directorio DRIVER.

$ tree R151517/DRIVER/
R151517/DRIVER/
|-- bcm43xx.cat
|-- bcm43xx64.cat
|-- bcmwl5.inf
|-- bcmwl5.sys
`-- bcmwl564.sys

Una vez extraídos los ficheros, procedemos a cargar el driver, para ello hacemos lo siguiente:

# ndiswrapper -i R151517/DRIVER/bcmwl5.inf

Comprobamos que el driver se ha instalado correctamente.

# ndiswrapper -l
installed drivers:
bcmwl5          driver installed, hardware (14E4:4324) present (alternate driver: bcm43xx)

Luego verificamos nuestro trabajo al ejecutar el comando dmesg, tal como se muestra a continuación:

$ dmesg
[44093.473325] ndiswrapper version 1.27 loaded (preempt=no,smp=yes)
[44095.311236] ndiswrapper (link_pe_images:577): fixing KI_USER_SHARED_DATA address in the driver
[44093.482777] ndiswrapper: driver bcmwl5 (Broadcom,03/23/2006, 4.40.19.0) loaded
[44093.483250] ACPI: PCI Interrupt 0000:0c:00.0[A] -> GSI 17 (level, low) -> IRQ 177
[44093.483367] PCI: Setting latency timer of device 0000:0c:00.0 to 64
[44093.491760] ndiswrapper: using IRQ 177
[44094.162703] wlan0: vendor:
[44094.162708] wlan0: ethernet device 00:18:f3:6b:fc:3b using NDIS driver bcmwl5, 14E4:4311.5.conf
[44094.162772] wlan0: encryption modes supported: WEP; TKIP with WPA, WPA2, WPA2PSK; AES/CCMP with WPA, WPA2, WPA2PSK
[44094.166554] usbcore: registered new driver ndiswrapper
[44094.167390] ndiswrapper: changing interface name from 'wlan0' to 'eth1'

En este preciso instante el comando ifconfig -a debe mostrarnos la nueva interfaz, y el comando iwlist eth1 scan al ejecutarse como superusuario devolverá la lista de redes que han sido detectadas.

Recuerde que para que todo esto siga funcionando aún después de reiniciar el sistema, es necesario cargar el módulo de ndiswrapper, para ello hago uso del comando modconf.

  1. Fuente: http://bcm43xx.berlios.de/[regresar]

GRUB: Mejorando nuestro gestor de arranque

Anteriormente había comentado en la primera entrega del artículo Debian: Bienvenido al Sistema Operativo Universal que por medidas de seguridad establezco las opciones de montaje ro, nodev, nosuid, noexec en la partición /boot, donde se encuentran los ficheros estáticos del gestor de arranque.

El gestor de arranque que manejo es GRUB. Por lo tanto, el motivo de este artículo es explicar como suelo personalizarlo, tanto para dotarle de seguridad como mejorar su presentación.

Seguridad

Lo primero que hago es verificar el dueño y los permisos que posee el fichero /boot/grub/menu.lst, en mi opinión la permisología más abierta y peligrosa sería 644, pero normalmente la establezco en 600, evitando de ese modo que todos los usuarios (excepto el dueño del fichero, que en este caso será root) puedan leer y escribir en dicho fichero. Para lograr esto recurrimos al comando chmod.

# chmod 600 /boot/grub/menu.lst

Si usted al igual que yo mantiene a /boot como una partición de solo lectura, deberá montar de nuevo la partición /boot estableciendo la opción de escritura, para lo cual hacemos:

# mount -o remount,rw /boot

Después de ello si podrá cambiar la permisología del fichero /boot/grub/menu.lst de ser necesario.

El segundo paso es evitar que se modifique de manera interactiva las opciones de inicio del kernel desde el gestor de arranque, para ello estableceremos una contraseña para poder editar dichas opciones, pero primero nos aseguraremos de cifrar esa contraseña con el algoritmo MD5. Por lo tanto, haremos uso de grub-md5-crypt

# grub-md5-crypt
Password:
Retype password:
$1$56z5r1$yMeSchRfnxdS3QDzLpovV1

La última línea es el resultado de aplicarle el algoritmo MD5 a nuestra contraseña, la copiaremos e inmediatamente procedemos a modificar de nuevo el fichero /boot/grub/menu.lst, el cual debería quedar más o menos como se muestra a continuación.

password --md5 $1$56z5r1$yMeSchRfnxdS3QDzLpovV1

title           Debian GNU/Linux, kernel 2.6.18-3-686
root            (hd0,1)
kernel          /vmlinuz-2.6.18-3-686 root=/dev/sda1 ro
initrd          /initrd.img-2.6.18-3-686
savedefault

title           Debian GNU/Linux, kernel 2.6.18-3-686 (single-user mode)
root            (hd0,1)
kernel          /vmlinuz-2.6.18-3-686 root=/dev/sda1 ro single
initrd          /initrd.img-2.6.18-3-686
savedefault

La instrucción password --md5 aplica a nivel global, así que cada vez que desee editar las opciones de inicio del kernel, tendrá que introducir la clave (deberá presionar la tecla p para que la clave le sea solicitada) que le permitirá editar dichas opciones.

Presentación del gestor de arranque

A muchos quizá no les agrade el aspecto inicial que posee el GRUB, una manera de personalizar la presentación de nuestro gestor de arranque puede ser la descrita en la segunda entrega de la entrada Debian: Bienvenido al Sistema Operativo Universal en donde instalaba el paquete grub-splashimages y posteriormente establecía un enlace simbólico, el problema de esto es que estamos limitados a las imágenes que trae solo ese paquete.

A menos que a usted le guste diseñar sus propios fondos, puede usar los siguientes recursos:

Después de escoger la imagen que servirá de fondo para el gestor de arranque, la descargamos y la colocamos dentro del directorio /boot/grub/, una vez allí procedemos a modificar el fichero /boot/grub/menu.lst y colocaremos lo siguiente:

splashimage=(hd0,1)/grub/debian.xpm.gz

En la línea anterior he asumido lo siguiente:

  • La imagen que he colocado dentro del directorio /boot/grub/ lleva por nombre debian.xpm.gz

  • He ajustado la ubicación de mi partición /boot, es probable que en su caso sea diferente, para obtener dicha información puede hacerlo al leer la tabla de particiones con fdisk -l o haciendo uso del comando mount.

    $ mount | grep /boot
    /dev/sda2 on /boot type ext2 (rw,noexec,nosuid,nodev)
    # fdisk -l | grep ^/dev/sda2
    /dev/sda2            1217        1226       80325   83  Linux

    Por lo tanto, la ubicación de la partición /boot es en el primer disco duro, en la segunda partición, recordando que la notación en el grub comienza a partir de cero y no a partir de uno, tenemos como resultado hd0,1.

También puede darse el caso que ninguno de los fondos para el gestor de arranque mostrados en los recursos señalados previamente sean de su agrado. En ese caso, puede que le sirva el siguiente video demostrativo sobre como convertir un fondo de escritorio en un Grub Splash Image (2 MB) haciendo uso de The Gimp, espero le sea útil.

Después de personalizar el fichero /boot/grub/menu.lst recuerde ejecutar el comando update-grub como superusuario para actualizar las opciones.

Generando contraseñas aleatorias con Perl

El día de hoy se manifestó la necesidad de generar una serie de claves aleatorias para un proyecto en el que me he involucrado recientemente, la idea es que la entrada que tenemos corresponde más o menos al siguiente formato:

username_1
username_2
...
username_n

La salida que se desea obtener debe cumplir con el siguiente formato:

username_1 pass_1
username_2 pass_2
username_3 pass_3
...
username_n pass_n

En este caso debía cumplir un requisito fundamental, las contraseñas deben ser suficientemente seguras.

No pensaba en otra cosa que usar el lenguaje de programación Perl para realizar esta tarea, así fue, hice uso del poderío que brinda Perl+CPAN y en menos de 5 minutos ya tenía la solución al problema planteado, el tiempo restante me sirvió para comerme un pedazo de torta que me dió mi hermana, quien estuvo de cumpleaños el día de ayer.

En primer lugar, debemos instalar el módulo String::MkPasswd, el cual nos permitirá generar contraseñas de manera aleatoria. Si usted disfruta de una distribución decente como Debian1 la instalación del módulo es realmente trivial.

# aptitude install libstring-mkpasswd-perl

Además, si usted se detiene unos segundos y lee la documentación del módulo String::MkPasswd2, se dará cuenta que la función mkpasswd() toma un hash de argumentos opcionales. Si no le pasa ningún argumento a esta función estará generando constraseñas aleatorias con las siguientes características:

  • La longitud de la contraseña será de 9.
  • El número mínimo de dígitos será de 2.
  • El número mínimo de caracteres en minúsculas será de 2.
  • El número mínimo de caracteres en mayúsculas será de 2.
  • El número mínimo de caracteres no alfanuméricos será de 1.
  • Los caracteres no serán distribuidos entre los lados izquierdo y derecho del teclado.

Ahora bien, asumiendo que el fichero de entrada es users.data, la tarea con Perl es resumida en una línea de la siguiente manera.

perl -MString::MkPasswd=mkpasswd -nli -e 'print $_, " ", mkpasswd()' users.data

La línea anterior hace uso de la función mkpasswd del módulo String::MkPasswd para generar las contraseñas aleatorias para cada uno de los usuarios que se encuentran en el fichero de entrada users.data, además, la opción -i3 permite editar el fichero de entrada in situ, ahora bien, quizá para algunos paranoicos (me incluyo) no sea suficiente todo esto, así que vamos a generar contraseñas aleatorias aún más complicadas.


#!/usr/bin/perl -li

use strict;
use warnings;
use String::MkPasswd qw(mkpasswd);

while(<>){
        chomp;
        print $_, " ", mkpasswd(
                -length => 16,
                -minnum => 5,
                -minlower => 5,
                -minupper => 3,
                -minspecial => 3,
                -distribute => 1
        );
}

En esta ocasión el la función mkpasswd() generará claves aún más complejas, dichas claves cumplirán con las siguientes condiciones.

-length

La longitud total de la contraseña, 16 en este caso.
-minnum
El número mínimo de digitos. 5 en este caso.
-minlower
El número mínimo de caracteres en minúsculas, en este caso 5.
-minupper
El número mínimo de caracterés en mayúsculas, en este caso 3.
-minspecial
El número mínimo de caracteres no alfanuméricos, en este caso será de 3.
-distribute

Los caracteres de la contraseña serán distribuidos entre el lado izquierdo y derecho del teclado, esto hace más díficil que un fisgón vea la contraseña que uno está escribiendo. El valor predeterminado es falso, en este caso el valor es verdadero.

El script mostrado anteriormente lo podemos reducir a una línea, aunque preferí guardarlo en un fichero al que denomine genpasswd.pl por cuestiones de legibilidad.

  1. Recuerde, Debian es inexorable[regresar]
  2. Este modulo en particular no solo se encuentra perfectamente integrado con nuestra distribución favorita, sino que además sus dependencias están resueltas. Esto es una simple muestra del poderío que ofrece una distribución como Debian.[regresar]
  3. Para mayor información acerca de las distintas opciones usadas se le sugiere referirse a man perlrun[regresar]