bk99.de entertain the web since 1997

Debian on the WRAP board: my router on a CF card

Summary

In September 2006 my home network ran through a WRAP board from PC Engines: a fanless small computer with a 266 MHz Geode CPU, three network ports and a CompactFlash card instead of a hard disk. I installed Debian Sarge on it with debootstrap and set up the board over the serial console. This post from my old blog shows the steps and configuration files of the time and what one would do differently today.

The board

The WRAP (Wireless Router Application Platform) from PC Engines was a favourite toy around 2006 for tinkerers who wanted to build their own router. At its heart was an AMD Geode SC1100 at 233 or 266 MHz, with 64 or 128 MB of RAM, up to three Ethernet ports with National DP83816 chips depending on the variant, and slots for Mini-PCI cards. There was no hard disk: system and programs ran from a CompactFlash card.

The board needed only about 3 to 5 watts at 12 volts, had no fan and a watchdog built into the CPU. There was no graphics output either; everything was set up over the serial port. That is exactly what made it a grateful router: once set up, it ran for months. During my load test in December 2006 it reported 97 days of uptime.

Debian onto the CF card

Instead of a ready-made router system I wanted a full Debian, at the time version 3.1 “Sarge”. The trick: the system is created on a normal PC with debootstrap on the CF card in a card reader and only then inserted into the board. A 256 MB card was enough. Commands and comments are shown as in the original, in German.

# CF-Karte im Kartenleser partitionieren
fdisk /dev/sda
# ext2: kein Journal, damit die Karte weniger Schreibzugriffe abbekommt
mkfs.ext2 /dev/sda1
mkdir /mnt/sda1
mount /dev/sda1 /mnt/sda1
# Debian-Grundsystem auf die Karte schreiben
debootstrap --arch i386 sarge /mnt/sda1 http://ftp.freenet.de/debian/
# in die neue Umgebung wechseln
chroot /mnt/sda1 /bin/bash
mount /proc
base-config
# Kernel und Bootloader
apt-get install linux-image-2.6.12-1-386 lilo
vi /etc/inittab /etc/fstab /etc/modules /etc/lilo.conf
lilo
umount /proc
exit
umount /mnt/sda1

After that the card went into the WRAP, and everything else, such as the network configuration, was done over the serial console.

The configuration files

Four files had to be adapted. In the board the CF card is no longer /dev/sda as in the card reader but /dev/hda, because it sits on the IDE port there. That is why lilo.conf contains both: boot=/dev/sda for the installation on the PC and root=/dev/hda1 for booting in the board. The kernel line redirects the console to the serial port.

# /etc/lilo.conf
boot=/dev/sda
root=/dev/sda1
compact
prompt
timeout=50
map=/boot/map
image=/boot/vmlinuz-2.6.12-1-386
     label="Linux 2.6.12"
     initrd=/boot/initrd.img-2.6.12-1-386
     append="console=ttyS0,38400"
     root=/dev/hda1

# /etc/fstab
proc       /proc   proc   defaults                    0 0
/dev/hda1  /       ext2   defaults,errors=remount-ro  0 1

# /etc/modules
natsemi
ohci-hcd
usb-storage

# /etc/inittab (Auszug): Login auf der seriellen Schnittstelle
T0:23:respawn:/sbin/getty -L ttyS0 38400 vt100

natsemi is the driver for the DP83816 network chips; I needed ohci-hcd and usb-storage for the USB disk. In inittab the login on ttyS0 was active so that I could reach the board even without a network; kernel and login used the same 38,400 baud.

My network around 2006

In the end the WRAP had three jobs. eth0 set up the PPPoE connection to the DSL modem. eth1 was the internal LAN with my work computers. eth2 was connected to an ordinary DSL router that only provided an unencrypted Wi-Fi network; this link was protected solely by OpenVPN, whose server ran on the WRAP.

An AES-256 encrypted hard disk was also attached via USB, its data shared over Samba and NFS into the internal network and the VPN tunnel. Alongside ran dnsmasq, an SNMP service for my statistics, Privoxy and a Tor node. How much of that worked at the same time is shown by the load test from December 2006.

What has changed since

The WRAP is long gone. PC Engines lists it as discontinued because the SC1100 CPU is no longer available. The successors ALIX and APU earned a similar reputation among tinkerers and as firewall hardware for pfSense and OPNsense. In April 2023, however, PC Engines also announced the end of the APU series: AMD accepted last orders for the processor until the end of June 2023, and shipments ran until June 2024. The founder wrote that after about 20 years of WRAP, ALIX and APU it was time for something else.

Today I would use either a device running OpenWrt or a frugal x86 mini PC with OPNsense for the same job. Instead of a CF card there is eMMC or an SSD, instead of lilo GRUB or systemd-boot, instead of Sarge and kernel 2.6.12 a current Debian. The basic idea has remained the same, though: a small, low-power device that you understand completely yourself.

Numbers at a glance

  • WRAP boards: AMD Geode SC1100 at 233 or 266 MHz, 64 or 128 MB RAM, CompactFlash as storage.
  • Power draw according to PC Engines about 3 to 5 watts at 12 volts, excluding Mini-PCI cards.
  • Installed was Debian 3.1 “Sarge” with kernel 2.6.12 and lilo, console on ttyS0 at 38,400 baud.
  • A 256 MB CF card was enough for the base system.
  • PC Engines also ended the APU series in 2023; shipments ran until June 2024.

References

Remarks

  • This post was originally published on 5 September 2006 in my old Plone blog and last edited in 2009. In 2026 I retrieved it from the Web Archive, revised the wording and added background. Commands and files are those of the time.
  • The photos of the board from my old gallery have not survived in the Web Archive.

Original post in the Web Archive