Despite the crappy things I’ve had to say about 6.3 I’ve decided to tough it out on my new home router. Normally, where the modem and router-ap are separate pieces of equipment you can simply turn off DHCP on the old router and keep using it as an access point by plugging the switch side of it into the local network and moving its LAN IP somewhere it won’t conflict with the new router. Unfortunately, my ISP has made the “step up” to all-in-one modem-router-APs and the only way to bypass the limitations of the built-in router is to put the device in “bridged mode;” effectively turning it into a modem and sacrificing all of its other functionality. This would require either purchasing a separate, stand-alone access point or adding AP functionality to the ClearOS router to keep wifi going.
I settled on the Ralink 3090 because at about $10 it’s the cheapest 802.11n card offered on eBay at present. Unfortunately, the kernel module for this card seems to be the only Ralink module missing from those distributed with ClearOS by default – necessitating building and swapping in a new kernel.
First, it’s necessary to install the build environment:
yum --enablerepo=clearos-developer,clearos-epel install clearos-devel
Now we’ll grab and install the kernel sources:
# wget http://mirror2-houston.clearsdn.com/clearos/community/6.3.0/dev/SRPMS/kernel-2.6.32-279.2.1.v6.src.rpm
# rpm -iv kernel-2.6.32-279.2.1.v6.src.rpm
# cd ~/rpmbuild
Now we need to install a few dependencies and patch the kernel according to the rpm spec:
# yum install xmlto asciidoc elfutils-libelf-devel binutils-devel newt-devel python-devel "perl(ExtUtils::Embed)" hmaccalc
# rpmbuild -bp --target=x86_64 SPECS/kernel.spec
# cp -a BUILD/kernel-2.6.32-279.2.1.el6/ /usr/src
# ln -s kernel-2.6.32-279.2.1.el6/linux-2.6.32-279.2.1.v6.x86_64/ linux
We need to install ncurses-devel to run make menuconfig.
# yum install ncurses-devel
Since we’re rolling our own kernel we can’t rely on the stock initrd to get us booting. Once you’re in menuconfig be sure to compile these modules into the kernel statically:
- Your disk controller module(s)
- Multiple devices driver support (RAID and LVM)
- Device mapper support
- Wired network devices (optional but I’m fond of guarantees)
Once you’ve configured your kernel and module selection compile and install them:
# make modules_install
# cp arch/x86_64/boot/bzImage /boot/vmlinuz-new
Now modify /boot/grub/grub.conf and copy-paste the existing entry so you have two identical entries. Modify the first one to reference the new kernel’s file name and leave the second intact so if we can’t boot the new kernel we can still get back in to do more tweaking without having to break out a livecd.
Your wireless card will probably require external firmware to be loaded with its module. Be sure to install the firmware image to /lib/firmware so it can be found easily on bootup. For the RT3090 a .bin image is available in the linux source code zip at http://www.ralinktech.com/en/04_support/support.php?sn=501.
You may at this point reboot, and if successful should be looking at a new interface (i.e. wlan0):
lo no wireless extensions.
eth0 no wireless extensions.
eth1 no wireless extensions.
wlan0 IEEE 802.11bgn Mode:Master Frequency:2.462 GHz Tx-Power=27 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
imq0 no wireless extensions.
imq1 no wireless extensions.
Now we need to install hostapd, which will take care of WPA authentication and putting your card into Master mode:
# yum install hostapd
Edit /etc/hostapd/hostapd.conf to reflect your environment:
# Some usable default settings...
# Uncomment these for base WPA & WPA2 support with a pre-shared key
# DO NOT FORGET TO SET A WPA PASSPHRASE!!
# Most modern wireless drivers in the kernel need driver=nl80211
# Customize these for your local configuration...
# Wireless N
Now start hostapd and add it to the appropriate runlevels:
# /etc/init.d/hostapd start
# chkconfig --level 2345 hostapd on
If you want the wireless to be on the same subnet as your wired LAN you must bridge the wireless and wired interfaces using standard ifcfg config files and restart networking; webconfig will not allow you to edit a bridge interface’s IP settings so these must be included in the ifcfg file. Otherwise, assign a different subnet to the wireless device and choose the LAN role to allow routing between the two subnets. Alternatively, choose the Hot LAN role if you want to keep wireless clients from poking around on your wired network (probably a good idea!).
Be sure to enable DHCP for your bridged or wireless interface and congratulations on your new ClearOS access point.