Wireless mesh networks in Africa

I’ve never been to Africa before, but I have many friends who have. I know that their internet access there (in Malawi, at least) could often be a lot better. The problem most likely arises from the lack of a solid data infrastructure. There are DSL solutions, but from what I’ve read they can be fairly unreliable, depending on where you are. Furthermore, Malawi often sees rolling black-outs. I don’t know exactly why they do this, but I imagine it probably has something to do with budgets.

Propagating network connections over long distances using wireless isn’t a new idea. In fact, it’s something many companies and municipalities across the world are considering in rural areas. All one needs is a pair of unidirectional, high-gain antennas pointed at each other and you can create a link between nodes miles apart. I’ve even seen experiments in the San Francisco bay area using nothing more than the asian frying scoop (round, mesh ladle of sorts) and a USB 802.11 adapter to connect to another one several miles away. But this isn’t the purpose of my post – just a little side note and something which may be a feature of my ideas later on.

What I AM thinking about:
My church, Flood, works closely with the African Bible College in Malawi. They’ve been around for quite a while, and even have a very good reputation for the quality of education they provide. But it’s only now that they’re getting broadband installed. All of a sudden they have an opportunity to connect their computer lab, their administrative offices, and their professors to a (faster) connection. The major hurdle, however, is that there’s probably no data cabling installed anywhere between buildings (or even within, for that matter). So the idea came to me when I read about MIT’s RoofNet project. Perfect! You buy a bunch of Netgear routers, flash them with a special distribution of linux and other customized software packages, and all of a sudden you have a pretty nice 802.11b/g mesh network. I could imagine littering these all over the campus, thus negating the need for dedicated ethernet links, additional switches, etc. I’m going to continue looking into this idea and talk to Flood’s resident networking pro, Seth Eaton, to see what he has been thinking of for this project. Perhaps the folks over at Meraki Networks (spin-off from RoofNet) wouldn’t mind donating some units in the perfect test location?? Seriously guys, please consider it and we can work something out =)

Maybe I’m going to Africa sooner than I thought!

Adding a new hard drive to a Linux system

Time came to add a second hard disk to my workstation. I didn’t need a whole lot – just another 250GB for backup and extra storage space until the new workstation arrives later this summer. Here’s a quick tutorial on how to get the new disk in and running on you linux box.

Once the hardware is properly installed, open up a terminal and log-in as root.

/sbin/fdisk /dev/hdb(assuming this is your second drive and your primary is /dev/hda).
/sbin/fdisk /dev/hdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

The number of cylinders for this disk is set to 30401.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Type m for help…

Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

type “n” for a new partition,
“p” for primary,
“1” for partition,
use the default size suggested (usually just hit enter for default):
Command (m for help): n
Command action
e extended
p primary partition (1-4)
Partition number (1-4): 1
First cylinder (1-30401, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-30401, default 30401):
Using default value 30401

Type “p” to get a list of the partition table:
Command (m for help): p

Disk /dev/hdb: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hdb1 1 30401 244196001 83 Linux

Then type “w” to write the changes to disk (create the partition on your new drive)
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

…you’re almost done. Just a couple more steps

The next command will make the filesystem on the disk:
/sbin/mkfs -t ext3 /dev/hdb1

The app will begin printing an incrementing number, and before you know it it’ll be done:
mke2fs 1.38 (30-Jun-2005)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
30539776 inodes, 61049000 blocks
3052450 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=62914560
1864 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

Final steps

Make a new directory in your filesystem to which the new drive will be mapped:
mkdir /drive2

Mount the drive:
mount -t ext3 /dev/hdb1 /drive2

Edit your fstab to auto-mount the disc:
(add this following line)/dev/hdb1 /drive2 ext3 defaults 1 1

That’s it!