For the last 6 months or so, I’ve been running a free wireless access point for my neighborhood. In an effort to get my local community to know each other (and local goings-on), I’ve back-ended the system using the elgg social networking platform.
To use the free wifi, you have to register on the social site.
Uptime however has been a major pain – for quite some time NoCatSplash has been broken in DD-WRT. Ever since version 24 (at the very least), it’s been grouchy – all of the sudden not working and requiring a reboot (or possibly clearing and resetting the iptables targets and restarting splashd) to fix. The wiki documents a few workarounds, but I’ve gotten tired of the overall bugs.
Initially I planned on simply fixing it, but after a little bit of thought, I decided to give OpenWRT another look. I’m sure I could have gotten away with using the mini or micro versions of DD-WRT and adding to it, but last time I used OpenWRT’s build environment I was really impressed – so I spent this weekend working with it again.
Building your own image is simple – using the ImageBuilder system (I’m working with WRT-54G’s) simply “make image” setting the target PROFILE and PACKAGES via environment variables. This method uses existing binary packages to build a .bin or .trx file for easy installation (via the web interface or mtd command). “make info” will give you a long list of profiles, and packages that are readily available are contained in the packages subdirectory.
Recompiling packages is extremely easy – download the SDK:
mkdir ~/devel && cd ~/devel
wget http://downloads.openwrt.org/kamikaze/8.09.2/brcm-2.4/OpenWrt-SDK-brcm-2.4-for-Linux-i686.tar.bz2
tar xjvpf OpenWrt-SDK-brcm-2.4-for-Linux-i686.tar.bz2
If the package already exists, check it out via subversion:
cd OpenWrt-SDK-brcm-2.4-for-Linux-i686
svn export svn://svn.openwrt.org/openwrt/packages/net/<packagename> package/<packagename>
And to compile simply execute:
make package/<packagename>/compile V=99
(On older versions it’s “make package/<packagename>–compile V=99″)
After hitting my head against the nocatsplash package’s failure to build correctly, I finally opted to look at nodogsplash. “Because it will at least build” is probably not the best way to choose captive portal software, but it’s mine.
First thing requiring a fix is a bug that causes nodogsplash to crash when one sends a request to the auth-server without a “redir” GET variable being set – a bug evidenced by:
links “http://192.168.1.1:2050/nodogsplash_auth/?tok=fffffff”
Thankfully the crash is “gracefully” handled in safe.c’s safe_strdup()…. but it still causes the daemon to crash.
So – a quick patch, as well as some added “features” (including a magic token) and I’m set. Patches to source can be added to package/<packagename>/patches. Upon make, patches in this directory are first applied.
So instead of waiting around for a fix to NoCatSplash in DD-WRT, I’m moving on. So far NoDogSplash has proven effective – although I’m far from actually migrating to it (the old access point is still running for the time being). In the next few weeks I should have a custom web interface built, as well as pmacctd configured (I am exporting Netflow version 9 data to a collector as a C.Y.A measure), and bandwidth shaping properly enabled.
Custom patches to NoDogSplash are forthcoming.