box.matto.nl

home/

Boa on the Olimex CS-E9302 Arm9 development board

Last edited

Running the Boa webserver on the Olimex CS-E9302

It is simple to add boa to the default NetBSD image of the Olimex CS-E9302 Arm9 development board

Low power webserver

The Arm9 Olimex CS-E9302 development board only requires 2.5 Watts to operate. This makes is a a great computer for 7 x 24 operation. You to can help to save the planet by moving your 7 x 24 running applications to low power alternatives!

Default NetBSD image

The Olimex CS-E9302 Arm9 board comes with two images: one with Debian and with for NetBSD. Both images contain rather old version of these operating systems. Expanding the installation can therefor be a difficult task. This means that either the operating system must first be upgraded to a recent version or build the additions from source.

I tried to expand the default NetBSD image with a small webserver.

Choosing the webserver

I choose Boa because this is a small and easy to compile webserver. It doesn't need any special libraries. Also I had good experiences with Boa running on my Foxboard.

Boa requires just libc to run: # ldd /usr/sbin/boa /usr/sbin/boa: -lc.12 => /usr/lib/libc.so.12

No cross compiling required

Although the Olimex is not a supercomputer, it is capable to compile software on the board. Be doing so, the steps of building a toolchain for cross compiing can be avoided. Compiling Boa on the Olimex CS-E9302 didn't introduce any heavy swapping, so no swap over nfs was required.

The CS-E9302 runs NetBSD from an USB memory pen. The filesystem is there slow on writes and doing a lot of writes wares out the USB memory pen. This is why I did setup a nfs share on a Debian GNU/Linux box for this. I unpacked the targz of Boa on this nfs share. Compilation can than be done on the hard disk of that box. I/O-times are much better and no USB memory pen is waisted.

Boa and rc.d

I copied the binary to /usr/sbin and created a file in /etc/rc.d for it. This was a shameless copy of the file /etc/rc.d/timed. A few modifcations turned it into the following:

# cat /etc/rc.d/boa
#!/bin/sh

# PROVIDE: boa
# REQUIRE: DAEMON
# BEFORE:  LOGIN

$_rc_subr_loaded . /etc/rc.subr

name="boa"
rcvar=$name
command="/usr/sbin/${name}"

load_rc_config $name
run_rc_command "$1"

In /etc/rc.conf a line is added:

boa="YES"

boa.conf

Copy the file boa.conf from the examples directory that came with the targz to /etc/boa/boa.conf and edit it. I used /dev/null for the error log and the access log, to prevent waring out the USB memory pen. Another option could be logging to a remote machine.

Below follows the contents of my boa.conf, with the comments left out:

# grep -v "^#" boa.conf | grep -v "^$"
Port 80
User nobody
Group nogroup
ErrorLog /dev/null
AccessLog /dev/null
ServerName box.matto.nl
DocumentRoot /var/www
UserDir public_html
DirectoryIndex index.html
KeepAliveMax 1000
KeepAliveTimeout 10
MimeTypes /etc/mime.types
DefaultType text/plain
CGIPath /bin:/usr/bin:/usr/local/bin
Alias /doc /usr/doc
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/