Using Debian's live-package to Build a Live CD Based Router

I have a router, not some specialty gadget. It's a PC with 3 interfaces. One 10baseT card that connect to my ADSL modem. One 100baseT card that connects to my home network switch switch. And one Prism54 based 802.11g card. It runs Debian Gnu/Linux. And it happily routes away. My biggest problem with it has always been the hard drive. It doesn't need lots of hard drive space or really fast access so I tend to just stick whatever old HD I have lying around in there. This has lead to a couple problems. These old hard drives tend to be flaky, so I spend a good portion of time rebuilding this machine due to hard drive failures. After the first couple I started keeping CD backups just so I could copy the configuration out of /etc. More recently I've run out of old hard drives to put into it. Faced with dropping enough cash on a small reliable HD as it would to buy a WRT54GL. I thought I have plenty of old cd-rom drives, could I make a live CD that would provided me with the comfort and flexibility that I have come to expect from my HD based Debian system?

Searching around revealed that the key tools I needed were already available from the live-package package available in etch (and I assume later versions). Its key tool is the make-live program which is far more designed to make live CDs for use in portable desktop demos than it is for making very specific complex networking configs. But with some config file modifications and chroot hooks it could be made to work.

A little on make-live

If you just run:


It will pull together a default set of packages into sub-directories of ./debian-live/ and create ./debian-live/binary.iso. I would recommend running it as:

make-live --hook bash

It will kick off a bash shell as root in the chroot. This way you can configure anything you want before it makes the final iso image.

If you want to rebuild the iso image after changing a file in debian-live/chroot run:

rm debian-live/.stage/image_binary

If you want to re-enter a shell in the chroot and then rebuild the image:

rm debian-live/.stage/image_binary debian-live/.stage/chroot
make-live --hook bash

Here are the key changes I made to /etc/make-live.conf.

# /etc/make-live.conf - configuration file for make-live(8)

# make-live does work out of the box. However, if you want to customize it,
# you can edit the variables below. Look make-live.conf(8) for more information.

# Bootstrap architecture    (Default: auto-detected)
# specify the architecture of your target platform rather than using that of
# your source example my router is i386 my desktop is amd64

# Boot parameters       (Default: empty)
LIVE_BOOTAPPEND="ip=frommedia hostname=XXXXX"
# tell casper to not overwrite the /etc/network/interfaces file
# specify what to set the hostname to

# Debian distribution       (Default: sid)
# I don't want a router based on unstable. Do you?

# Kernel flavour        (Default: auto-detected)
# just like LIVE_ARCHITECHTURE specify what the target needs.
# I think you can also use the LIVE_KERNEL_PACKAGES option to
# specify a personalized kernel image

# Debian mirror         (Default:
# I use my local mirror

# Debian security mirror    (Default:
# same here

# Packages          (Default: empty)
LIVE_PACKAGES="pppoe pppoeconf wireless-tools dhcp3-server bind9 iptraf \
        popularity-contest iptables libc6-i686 udev ssh less nano vim cupsys \
        cupsys-bsd cupsys-client syslinux lynx lynx-cur mutt dnsutils \
        traceroute tcptraceroute mtr-tiny chkrootkit vrms openvpn ntp lsb"
# packages that my router needs feel free to make your own adjustments

# Image templates       (Default: /usr/share/make-live/templates)
# note this setting if you want to change anything in the boot image it needs
# to be made in this dir


When the CD boots it uses isolinux to bootstrap Linux.

The only change I felt it needed was I wanted it to autoboot after 2s, not to keep waiting for me to hit enter. All that had to be done was in /usr/share/make-live/templates/syslinux/isolinux.cfg (note relationship to LIVE_TEMPLATES above) the line:

timeout 0

was changed to:

timeout 20

This file contains many options that could be tweaked. also the template directory gives you the ability to change the files that are available to casper.


The Live CD system is actually run in the casper framework.

It is designed to allow a bootable system from a read only media. It does this by merging read only file system images with ram disks to create a writable virtual file system.

The key configuration changes for casper were passed in as boot parameters in the make-live.conf file. By default, it will set you host name to live and configure all you interfaces by DHCP.

Files of Import

Here is a list of all the key configuration files I changed in the chroot before creating the ISO image.

File Description
/etc/network/interfaces Specify how to set-up the interfaces
/etc/iptables The file I usually store my default iptables settings
/etc/udev/rules.d/z25_persistent-net.rules Keep interfaces matched to names
/etc/dhcp3/dhcpd.conf Specify zones and network info, linked to bind9.
/etc/bind/* Setup local DNS caching, linked to dhcp3.
/etc/ppp/* Setup for PPPoE connections

Other Tools

I found qemu very useful in testing images before I burned them.

qemu -m 256 -cdrom debian-live/binary.iso -boot d

The etch replacement for cdrecord is wodim to burn this to a cd I used:

wodim -v debian-live/binary.iso

Most of the defaults worked well for me. While I was trying out multiple different images I used a CDRW that can be burned as follows.

wodim -v blank=fast debian-live/binary.iso

Outstanding Issues


This should give you a better understanding of the basic tools available to make a live CD. I will probably expand this with more detail later. If you know your way around a Debian system you should be able to create a custom disk. And then you too can say good by to magnetic media in your router.