viernes, mayo 09, 2008

Virtual Server iSCSI and AiO 600

After a lot of problems in my work, I'm now back on track to write about what I normally do at work.

About my last attempts of using iSCSI these are roughly my conclusions:

- Virtual Server is not a good solution for networking under Windows or Linux if you need to use gigabit throughput: the network drivers from Virtual Server don't support gigabit simulation and although they say it is a naming thing and actually the network interfaces use all the capacity available, the truth is that with iSCSI is impossible to get good performances.

- We have switched to Vmware Server 1.0.4. There are some drawbacks: 2.4.x kernel series fail a lot (the default in Debian 3.1), but they claim they are solved in next version of Vmware Server 1.0.5. In the meantime they claim that upgrading to 2.6.18-4 kernel stops the hangs in the virtual machine. I've just upgraded, so I'll report if this helps. I had another debian 4.0 that doesn't hang at all under the same Vmware server. I've upgraded to that etch kernel, so hopefully the 2.6.18-4 kernel will be in Debian 3.1 as stable as it is in Debian 4.0.

- Also although the performance of iSCSI against my AiO 600 using gigabit network drivers under Debian is much better than in Virtual Server (you have to change the .vmx configuration file to have gigabit drivers), still is not satisfactory. My way to go was the following: since the host OS is Windows Server, I created an iSCSI drive through windows and store in that iSCSI partition my vmware hard drive. That's the best of performances that I could get.

jueves, octubre 04, 2007

Fedora in Virtual Server

After several months without posting anything on this blog I'm going to start again, at least with short posts.

Today I'm going to talk about virtualization and my last experiments with iSCSI. I'm testing iSCSI against our NAS in our HP StorageWorks machine. HP claims that is possible to use it not only for SMB shares but for NFS shares and iSCSI drives.

Our current environment makes use of Virtual Server as our virtualization solution, so our Windows and Linux servers run on this virtual platform.

I've configured open-iscsi on my Debian etch (stable) virtual machine following these instructions:

http://www.howtoforge.com/iscsi_on_linux

I've tested it and I'm getting a poor performance:

svn:~# dd if=/dev/zero of=/mnt/virtualdata1/zero bs=4096 count=1572864
1572864+0 records in
1572864+0 records out
6442450944 bytes (6.4 GB) copied, 486.128 seconds, 13.3 MB/s
svn:~#
svn:~# dd if=/mnt/virtualdata1/zero of=/dev/null bs=4096

1572864+0 records in
1572864+0 records out
6442450944 bytes (6.4 GB) copied, 505.934 seconds, 12.7 MB/s

So I'm now testing on a virtual machine with Fedora 7 installed.

Installing Fedora on Virtual Server is really painful. First, after having configured all the settings the screen turns blank. It took me a while to figure out how to overcome this, just clicking alt+f1 (as If I was switching to other console) helped me to gain access to the console.

Not being enough with this, after rebooting and although I unselect all the X-related packages, apparently was trying to boot on graphical mode and I got an annoying welcome page where I couldn't see anything.

The way to trick this using grub, was escaping pressing 'Esc' to get the grub menu in the booting process, then press 'a' to append to the booting options the following:

"vga=791 3"

this boots in runlevel 3 (not graphical mode), but still this is not enough, you need to set the vga mode. You will see that the Virtual Server machine console turns bigger and you can see booting your machine cleanly :)

Next posts will be about how I figure out if the poor performance is due to our SAN, the Linux flavour or a network issue.

New storage NAND system will replace Hard Drives

Fusion IO has developed a non-volatile PCI Express card with NAND memories for replacing hard drives. They will feature hard drives from 80 to 640 Gb. The worst is the price: $30 per Gigabyte.

I guess the first customers will be data centers since It will cut down prices on power consumption.
http://www.fusionio.com/faq.html

martes, abril 03, 2007

Weird problems with Apache2 and Tomcat

I am using Tomcat and Apache working together through mod_jk. I am using Debian, so I have to stick to the configuration and the already built-in packages, which are mod_jk2 packages, although you can have mod_jk.so library (kind of weird, for being honest).

I was getting a strange message when cycling Apache:

Forcing reload of web server: Apache2[Tue Apr 03 13:05:58 2007] [error] env.createBean2(): Error getting factory for [workers.tomcat_home] (null)
[Tue Apr 03 13:05:58 2007] [error] config.update(): Can't create workers.tomcat_home
[Tue Apr 03 13:05:58 2007] [error] env.createBean2(): Error getting factory for [workers.java_home] (null)
[Tue Apr 03 13:05:58 2007] [error] config.update(): Can't create workers.java_home
[Tue Apr 03 13:05:58 2007] [error] env.createBean2(): Error getting factory for [ps] (null)
[Tue Apr 03 13:05:58 2007] [error] config.update(): Can't create ps
[Tue Apr 03 13:05:58 2007] [error] env.createBean2(): Error getting factory for [worker.list] (null)
[Tue Apr 03 13:05:58 2007] [error] config.update(): Can't create worker.list
[Tue Apr 03 13:05:58 2007] [error] env.createBean2(): Error getting factory for [worker.worker1.port] (null)
[Tue Apr 03 13:05:58 2007] [error] config.update(): Can't create worker.worker1.port
[Tue Apr 03 13:05:58 2007] [error] env.createBean2(): Error getting factory for [worker.worker1.host] (null)
[Tue Apr 03 13:05:58 2007] [error] config.update(): Can't create worker.worker1.host
[Tue Apr 03 13:05:58 2007] [error] env.createBean2(): Error getting factory for [worker.worker1.type] (null)
[Tue Apr 03 13:05:58 2007] [error] config.update(): Can't create worker.worker1.type
[Tue Apr 03 13:05:58 2007] [error] env.createBean2(): Error getting factory for [worker.worker1.lbfactor] (null)
[Tue Apr 03 13:05:58 2007] [error] config.update(): Can't create worker.worker1.lbfactor
[Tue Apr 03 13:05:58 2007] [error] env.createBean2(): Error getting factory for [worker.loadbalancer.type] (null)
[Tue Apr 03 13:05:58 2007] [error] config.update(): Can't create worker.loadbalancer.type
[Tue Apr 03 13:05:58 2007] [error] env.createBean2(): Error getting factory for [worker.loadbalancer.balanced_workers] (null)
[Tue Apr 03 13:05:58 2007] [error] config.update(): Can't create worker.loadbalancer.balanced_workers
[Tue Apr 03 13:05:58 2007] [error] env.createBean2(): Error getting factory for [worker.inprocess.type] (null)
[Tue Apr 03 13:05:58 2007] [error] config.update(): Can't create worker.inprocess.type
[Tue Apr 03 13:05:58 2007] [error] env.createBean2(): Error getting factory for [worker.inprocess.class_path] (null)
[Tue Apr 03 13:05:58 2007] [error] config.update(): Can't create worker.inprocess.class_path
[Tue Apr 03 13:05:58 2007] [error] env.createBean2(): Error getting factory for [worker.inprocess.cmd_line] (null)
[Tue Apr 03 13:05:58 2007] [error] config.update(): Can't create worker.inprocess.cmd_line
[Tue Apr 03 13:05:58 2007] [error] env.createBean2(): Error getting factory for [worker.inprocess.jvm_lib] (null)
[Tue Apr 03 13:05:58 2007] [error] config.update(): Can't create worker.inprocess.jvm_lib
[Tue Apr 03 13:05:58 2007] [error] env.createBean2(): Error getting factory for [worker.inprocess.stdout] (null)
[Tue Apr 03 13:05:58 2007] [error] config.update(): Can't create worker.inprocess.stdout
[Tue Apr 03 13:05:58 2007] [error] env.createBean2(): Error getting factory for [worker.inprocess.stderr] (null)
[Tue Apr 03 13:05:58 2007] [error] config.update(): Can't create worker.inprocess.stderr
[Tue Apr 03 13:05:58 2007] [notice] mod_jk2: Unrecognized option config.file /etc/apache2/workers.properties
[Tue Apr 03 13:06:01 2007] [error] env.createBean2(): Error getting factory for [workers.tomcat_home] (null)
[Tue Apr 03 13:06:01 2007] [error] config.update(): Can't create workers.tomcat_home
[Tue Apr 03 13:06:01 2007] [error] env.createBean2(): Error getting factory for [workers.java_home] (null)
[Tue Apr 03 13:06:01 2007] [error] config.update(): Can't create workers.java_home
[Tue Apr 03 13:06:01 2007] [error] env.createBean2(): Error getting factory for [ps] (null)
[Tue Apr 03 13:06:01 2007] [error] config.update(): Can't create ps
[Tue Apr 03 13:06:01 2007] [error] env.createBean2(): Error getting factory for [worker.list] (null)
[Tue Apr 03 13:06:01 2007] [error] config.update(): Can't create worker.list
[Tue Apr 03 13:06:01 2007] [error] env.createBean2(): Error getting factory for [worker.worker1.port] (null)
[Tue Apr 03 13:06:01 2007] [error] config.update(): Can't create worker.worker1.port
[Tue Apr 03 13:06:01 2007] [error] env.createBean2(): Error getting factory for [worker.worker1.host] (null)
[Tue Apr 03 13:06:01 2007] [error] config.update(): Can't create worker.worker1.host
[Tue Apr 03 13:06:01 2007] [error] env.createBean2(): Error getting factory for [worker.worker1.type] (null)
[Tue Apr 03 13:06:01 2007] [error] config.update(): Can't create worker.worker1.type
[Tue Apr 03 13:06:01 2007] [error] env.createBean2(): Error getting factory for [worker.worker1.lbfactor] (null)
[Tue Apr 03 13:06:01 2007] [error] config.update(): Can't create worker.worker1.lbfactor
[Tue Apr 03 13:06:01 2007] [error] env.createBean2(): Error getting factory for [worker.loadbalancer.type] (null)
[Tue Apr 03 13:06:01 2007] [error] config.update(): Can't create worker.loadbalancer.type
[Tue Apr 03 13:06:01 2007] [error] env.createBean2(): Error getting factory for [worker.loadbalancer.balanced_workers] (null)
[Tue Apr 03 13:06:01 2007] [error] config.update(): Can't create worker.loadbalancer.balanced_workers
[Tue Apr 03 13:06:01 2007] [error] env.createBean2(): Error getting factory for [worker.inprocess.type] (null)
[Tue Apr 03 13:06:01 2007] [error] config.update(): Can't create worker.inprocess.type
[Tue Apr 03 13:06:01 2007] [error] env.createBean2(): Error getting factory for [worker.inprocess.class_path] (null)
[Tue Apr 03 13:06:01 2007] [error] config.update(): Can't create worker.inprocess.class_path
[Tue Apr 03 13:06:01 2007] [error] env.createBean2(): Error getting factory for [worker.inprocess.cmd_line] (null)
[Tue Apr 03 13:06:01 2007] [error] config.update(): Can't create worker.inprocess.cmd_line
[Tue Apr 03 13:06:01 2007] [error] env.createBean2(): Error getting factory for [worker.inprocess.jvm_lib] (null)
[Tue Apr 03 13:06:01 2007] [error] config.update(): Can't create worker.inprocess.jvm_lib
[Tue Apr 03 13:06:01 2007] [error] env.createBean2(): Error getting factory for [worker.inprocess.stdout] (null)
[Tue Apr 03 13:06:01 2007] [error] config.update(): Can't create worker.inprocess.stdout
[Tue Apr 03 13:06:01 2007] [error] env.createBean2(): Error getting factory for [worker.inprocess.stderr] (null)
[Tue Apr 03 13:06:01 2007] [error] config.update(): Can't create worker.inprocess.stderr
[Tue Apr 03 13:06:01 2007] [notice] mod_jk2: Unrecognized option config.file /etc/apache2/workers.properties

In the end, The key was the last line, there is an apache2 module configuration under /etc/apache2/mods-enable/jk2.conf where you can see the following lines:

# To enable mod_jk2, customize workers2.properties* from
# /usr/share/doc/libapache2-mod-jk2/examples and copy it to
# /etc/apache2/workers2.properties. Then uncomment the following line:
#JkSet config.file /etc/apache2/workers.properties

As can be seen, if you uncomment (which I did) the last line, it means that you activate mod_jk2. Anyway, by default it uses the worker.properties because it is configured to do so in /usr/lib/apache-tomcat/auto/conf/mod_jk.conf

So double check any configuration, I passed several hours figuring out what was actually happening, since I thought it was a JVM issue.

Finally, some quoting on the website that pointed me out to the right place to look at:

http://www.open-xchange.org/oxwiki/OXDebianSargeFromPackage

lunes, marzo 05, 2007

Update Daylight Saving Time in Debian

Finally I managed to come to the US :)

Right now I am fixing the Daylight Saving Time issue, for Debian boxes you have to test if you have your OS time set correctly, so you have to issue:

file:~# zdump -v /etc/localtime |grep 2007

/etc/localtime Sun Apr 1 06:59:59 2007 UTC = Sun Apr 1 01:59:59 2007 EST isdst=0 gmtoff=-18000

/etc/localtime Sun Apr 1 07:00:00 2007 UTC = Sun Apr 1 03:00:00 2007 EDT isdst=1 gmtoff=-14400

/etc/localtime Sun Oct 28 05:59:59 2007 UTC = Sun Oct 28 01:59:59 2007 EDT isdst=1 gmtoff=-14400

/etc/localtime Sun Oct 28 06:00:00 2007 UTC = Sun Oct 28 01:00:00 2007 EST isdst=0 gmtoff=-18000

If you happen to have these dates instead of March 11 and November 4 your system needs to be updated.

Debian stable users: apt-get update && apt-get install libc6

Debian unstable users: apt-get update && apt-get install tzdata

After patching you should get the right time:

file:~# zdump -v /etc/localtime |grep 2007

/etc/localtime Sun Mar 11 06:59:59 2007 UTC = Sun Mar 11 01:59:59 2007 EST isdst=0 gmtoff=-18000

/etc/localtime Sun Mar 11 07:00:00 2007 UTC = Sun Mar 11 03:00:00 2007 EDT isdst=1 gmtoff=-14400

/etc/localtime Sun Nov 4 05:59:59 2007 UTC = Sun Nov 4 01:59:59 2007 EDT isdst=1 gmtoff=-14400

/etc/localtime Sun Nov 4 06:00:00 2007 UTC = Sun Nov 4 01:00:00 2007 EST isdst=0 gmtoff=-18000


You need to check whether you need to fix other applications:

http://istpub.berkeley.edu:4201/bcc/Spring2007/1019.html

domingo, diciembre 03, 2006

Setting up WPA-PSK with madwifi

I was setting up my wireless AP to support WPA-PSK, for that I used the
following instructions:

http://madwifi.org/wiki/UserDocs/HostAP
http://madwifi.org/wiki/UserDocs/WPA_PSK_on_Both_Ends

Mainly under Debian you have to issue:

apt-get install hostapd

and modify /etc/hostapd/hostapd.conf following the instructions in
madwifi.org. But I kept getting among all the traces this:

madwifi_del_key: addr=00:0c:f1:5d:de:b5 key_idx=0
madwifi_set_sta_authorized: addr=00:0c:f1:5d:de:b5 authorized=0
ath0: STA 00:0c:f1:5d:de:b5 IEEE 802.1X: unauthorizing port

I just had to change in hostapd.conf

from eapol_version=2

to eapol_version=1

and now it works!! :-D

Hope this helps for those who had the same problem...

Beta version of the Sunbird Mozilla Calendar system

For the ones who want to test the new system of Mozilla Calendar called
Sunbird, it is already in the BETA version:

http://www.mozilla.org/projects/calendar/sunbird/download.html

Free and open essential software for Windows

I have a nice list of free and open software for Windows as replacement
of proprietary software. A nice to have list for the ones who wants a
smooth path from Windows for Linux and someone who needs to run the same
software in Windows as in their Linux PCs.

http://www.thesimpledollar.com/2006/12/01/30-essential-pieces-of-free-and-open-software-for-windows/


sábado, noviembre 18, 2006

Manage bandwidth in Apache for web hosting

I am having problems with my Apache Server and I am trying to tune the
performance of Apache 2. It seems that there are not enough Apache
processes to handle all requests and I am changing some parameters to
check whether this solves this problem.

In the meantime, you always come across with interesting information,
which does not solve your problem, but It could be interesting in the
future.

I found an apache module to handle the bandwidth of an specific virtual
host, this way you can divide your bandwidth of your connection among
all your customers.

Herewith you can find a nice howto:

http://www.howtoforge.com/mod_cband_apache2_bandwidth_quota_throttling

jueves, noviembre 02, 2006

Montar un Punto de Acceso Barato Wireless 802.11g en Linux con Madwifi

Uno de mis principales objetivos de la infraestructura que intento montar en mi red casera es desplegar un punto de acceso para poder conectarme a Internet desde mi salón :) (lo se, soy un poco vago). Dos son las principales ventajas de esta tarjeta inalambrica. La primera, la que se menciona en el titulo, y es que es bastante barata, y la segunda es que es una tarjeta 802.11g. La mayoría de los artículos o páginas que he encontrado se referían a puntos de acceso 802.11b. La ventaja que añade el uso de esta tarjeta es que funciona con el driver madwifi, que utiliza una interesante característica que se llama VAPs o Virtual Access Points. La ventaja es que puedes crear varios interfaces virtuales, en diferentes modos, de tal manera que puedes tener diferentes interfaces de red, p.ej.: un interfaz en la que te puedas conectar sin clave, otra interfaz cifrada con WEP o WPA/2 o incluso crear una interfaz en modo infraestructura (managed) o bridge y conectarlo con otro Punto de Acceso (lo cual puede ser interesante para edificios grandes o para comunidades Wireless).

Aunque la interfaz wireless del portatil Dell 600 que tengo, es una Intel 2100 y por tanto 802.11b, quería montar un punto de acceso G (y que es compatible hacía atrás con B). Hice una busqueda por Internet y descubrí el driver madwifi y su soporte al chip Atheros. Otro requisito que me marqué fue que la tarjeta fuera PCI y no PCMCIA y no tener que gastar mas dinero en un adaptador PCI para PCMCIA. Después de buscar encontré la tarjeta SMCWPCI que tiene un chipset Atheros y que me costó cerca de 20 euros. Compré primero la tarjeta de 54 Mbps (se puede ver en la imagen debajo), y como todo fue bien, compré una tarjeta más para otro punto de acceso para mi familia y una tarjeta con mayor ganancia (5 dBi) que la que antena que venía con la tarjeta que tenia sólo 2 dBi. La diferencia fue, que la señal podía atravesar dos pareces y llegar a misalón :)

La primera tarjeta que compré era de 54 Mbps, y funcionaba perfectamente en un Pentium MMX con 128 Mb con una RedHat 7.3.En el punto limpio de mi ciudad encontré varios PCs, y descubrí que alguien dejo un AMD XP 1800 y un AMD 1000, los cuales los he convertido en PCs de sobremesa. Tenía varios PCs antiguos, Pentium II y III, así que decidí convertir los Pentium II en mis routers y puntos de acceso Wifi e intentar hacer cosas más sofisticadas como utilizar OpenVPN, que demandan mas CPU. Cuando compré la tarjeta extra para el otro router para mi familia, no me di cuenta de que era realmente una tarjeta de 108 Mbps. Asumir que era una tarjeta 54 Mbps me dió algunos dolores de cabeza, pero al final conseguí hacerla funcionar.El driver como ya he comentado es madwifi (http://madwifi.org).

Seguir las instrucciones fue bastante fácil. Inicialmente en el primer router que tenía un Pentium MMX con una RedHat recompile el kernel 2.4.x y funcionó perfectamente. Pero como he migrado mis servidores a Debian, decidí utilizar las instrucciones para Debian dadas en la web de madwifi.

Para poder instalar el paquete Debian, tienes que añadir estas entradas en tu fichero sources.list (yo utilizo testing):

# Testing
deb http://ftp.au.debian.org/debian testing main contrib non-free
deb-src http://ftp.au.debian.org/debian testing main contrib non-free

y ejecutar:

$ su
# apt-get update
# apt-get install madwifi-source
# apt-get install madwifi-tools
# m-a prepare
# m-a a-i madwifi

Esto instala el driver, que se puede cargar utilizando modprobe:

# modprobe ath_pci

Y se obtiene algo así:

ath_hal: 0.9.16.16 (AR5210, AR5211, AR5212, RF5111, RF5112, RF2413, RF5413)
wlan: 0.8.4.2 (svn 1451)
ath_rate_sample: 1.2 (svn 1451)
ath_pci: 0.9.4.5 (svn 1451)
ACPI: PCI Interrupt 0000:02:02.0[A] -> Link [LNKC] -> GSI 10 (level,
low) -> IRQ 10
wifi0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
wifi0: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps
24Mbps 36Mbps 48Mbps 54Mbps
wifi0: H/W encryption support: WEP AES AES_CCM TKIP
wifi0: mac 5.6 phy 4.1 radio 1.7
wifi0: Use hw queue 1 for WME_AC_BE traffic
wifi0: Use hw queue 0 for WME_AC_BK traffic
wifi0: Use hw queue 2 for WME_AC_VI traffic
wifi0: Use hw queue 3 for WME_AC_VO traffic
wifi0: Use hw queue 8 for CAB traffic
wifi0: Use hw queue 9 for beacons
wifi0: Atheros 5212: mem=0xd0000000, irq=10
ACPI: PCI Interrupt 0000:03:00.0[A] -> Link [LNKC] -> GSI 10 (level,
low) -> IRQ 10
wifi1: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
wifi1: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps
24Mbps 36Mbps 48Mbps 54Mbps
wifi1: turboG rates: 6Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps
wifi1: H/W encryption support: WEP AES AES_CCM TKIP
wifi1: mac 7.9 phy 4.5 radio 5.6
wifi1: Use hw queue 1 for WME_AC_BE traffic
wifi1: Use hw queue 0 for WME_AC_BK traffic
wifi1: Use hw queue 2 for WME_AC_VI traffic
wifi1: Use hw queue 3 for WME_AC_VO traffic
wifi1: Use hw queue 8 for CAB traffic
wifi1: Use hw queue 9 for beacons
wifi1: Atheros 5212: mem=0xd2000000, irq=10

y solo hay que añadirlo a la lista de modulos:

# echo ath_pci >> /etc/modules

Después de esto, comienza la peor parte, que para mi fue hacerlo funcionar cuando el sistema arranca :)

La página de madwifi recomienda el uso de los scripts pre-up y post-up

Mi intención era configurar la tarjeta en modo master y lo intenté añadiendo lo siguiente en el script interfaces de Debian:

iface ath0 inet static
pre-up wlanconfig ath0 destroy
pre-up wlanconfig ath0 create wlandev wifi0 wlanmode ap
pre-up iwconfig ath0 essid breinestorm rate auto
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0

pero aunque me configuraba la tarjeta en modo master, pero no era capaz de cambiar la potencia de 9 a 15 dB, tenía que hacerlo siempre una vez ejecutado el script interfaces.Por tanto opté por añadir el siguiente script bash en /etc/rc.local, que es el último servicio que se ejecuta:

con mi RedHat funcionaba el siguiente script:

#!/bin/bash
echo "Arrancando Access Point"
wlanconfig ath0 destroy
ifdown ath0
wlanconfig ath0 create wlandev wifi0 wlanmode ap
ifup ath0
iwconfig ath0 essid breinestorm rate auto

con la antena original de 2 dBi funcionaba bien, pero incluso con la tarjeta de 108 Mbps, la calidad de la conexión no era muy buena (20/94) así que busque un poquito y descubrí en un foro que ejecutando esto la calidad mejoraba:

iwconfig ath0 channel 9

y repentinamente la calidad del enlace mejoró a 50/94 :) Para hacer uso de la antena de 5 dBi tuve que añadir:

iwconfig ath0 txpower 16

asi que mi script terminó siendo:

#!/bin/bash
echo "Arrancando Access Point"
wlanconfig ath0 destroy
ifdown ath0
wlanconfig ath0 create wlandev wifi0 wlanmode ap
#iwpriv ath0 bgscan removed
ifup ath0
iwconfig ath0 essid breinestorm rate auto
#athctrl ath0 -d 20
sleep 10
iwconfig ath0 txpower 16
iwconfig ath0 channel 9

Las lineas que he comentado las dejo como ejemplo de diferentes posibilidades para mejorar la conexion :)

Espero que esto sirva de ayuda básica a la gente, no pretende ser una guía exhaustiva sino una pequeña referencia para no tener que darle vueltas a la hora de encontrar una tarjeta barata 802.11g y que tenga el chipset Atheros soportado por el driver madwifi.Espero comentarios o
posibles mejoras.