Installing with the Debian Installer

It's now possible to install armel directly with d-i, using one of the daily snapshots. Oystein Viggen describes his success and what he had to do differently in a message to the debian-arm list.

nslu2 users should instead get an image from , if you need to use the onboard ethernet. See for instructions on using d-i with a slug.

Thecus N2100/Allnet ALL6500 and IO-Data Glantank users should follow the installation guides under using the installer images from the top-most link above.

The options below are for installing without d-i.

Debian repositories

armel port is available directly from normal Debian mirror network. Check from mirrorlist a mirror near you that carries armel.

In /etc/apt/sources.list put something like:

deb lenny main
deb unstable main

Installing armel to qemu with d-i

Generally, you need to follow Aurelian Jarno's instructions with some small changes we'll document here.

You need a recent (sid?) qemu for this to work. Download kernel and d-i initrd:



ln -s initrd.img-2.6.26-1-versatile initrd.gz
ln -s vmlinuz-2.6.26-1-versatile vmlinuz-versatile

Get it from "NOTE: Take a lot of care, that _only this old linux kernel version works_. If you use another, you will get errors while trying to mount files (disks) as: No filesystem could mount root Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0) SOLVED on this document now (not before) and got solution from:"

"NOTE2 (alternative solving method): After installation procedure you need to get a boot dir from hda.img. For this:

1. mounting image
modprobe nbd max_part=63
qemu-nbd -c /dev/nbd0 hda.img
mount /dev/nbd0p1 /mnt
2. copy boot dir 
cp -r /mnt/boot .
3. umounting image
umount /mnt
qemu-nbd -d /dev/nbd0

After this run qemu:

qemu-system-arm -M versatilepb -kernel boot/vmlinuz-2.6.32-5-versatile -initrd boot/initrd.img-2.6.32-5-versatile -hda hda.img -append "root=/dev/sda1"


Create a hard disk image and boot d-i;

qemu-img create -f qcow2 hda.img 10G
qemu-system-arm -M versatilepb -redir tcp:2222::22 -kernel vmlinuz-versatile -initrd initrd.gz -m 256 -hda hda.img -append 'root=/dev/ram mem=256M'

Install as usual. After install boot with the following command line:

qemu-system-arm -M versatilepb -kernel vmlinuz-versatile -hda hda.img -append "root=/dev/sda1"

Building EABI ready Kernel

You need to enable the following options to enable both EABI and OLDABI


To simplify things, make sure you have all essential kernel modules built-in, since oldabi modprobe can't load EABI modules nor the other way around.

Creating a EABI chroot using debootstrap

If you have a machine running oldabi arm port, you can ?CrossDebootstrap to create a armel chroot:

debootstrap --verbose --arch armel --foreign lenny /armel-chroot
chroot /armel-chroot /debootstrap/debootstrap --second-stage

to put an armel chroot into the directory /armel-chroot. For the "--second-stage" part one needs a kernel compiled with options listed in previous section.

If you have a non-debian EABI system, you need to download and debootstrap manually (perl required):

# replace 1.0.9 with latest debootstrap version:
ar -x debootstrap_1.0.9_all.deb
cd /
tar xvzf  /full-path-to-work/work/data.tar.gz
debootstrap --arch armel lenny /data/debian/armel

Migrating arm installation to arm EABI installation

There is no proper way yet. The following instructions worked for me, but no guarantees at all.

  1. Create a chroot like above.
  2. store your current package selections with "dpkg --get-selections > file"

  3. enter your chroot and set the selections to match: "dpkg --set-selections < file"

  4. test install all the same applications to your chroot: "apt-get --no-act dselect-upgrade"
  5. backup
  6. boot into single user mode and make sure there is no processess running
  7. bind-mount / somewhere under the armel chroot, and move the directories (this is the scary part)

# mount -o bind / /chroot/armel/mnt/
# chroot /chroot/armel/
# cd /mnt
# mkdir old
# mv bin sbin lib usr var old # relocate the old binary directores
# cp -a /bin /sbin /lib /usr /var . # copy the armel binaryes and library directories to root
# mv /sbin/start-stop-daemon.REAL /sbin/start-stop-daemon

At this point, make *sure* you have everything you need to boot and access your system under /mnt.

Exit the armel chroot and *REBOOT*. If it breaks, you get to keep the pieces.

If you are lucky, you have now a armel system. Finish the installation by pulling in the rest of packages you had installed:

apt-get dselect-upgrade

TODO: recover old /var selectively.


* - experience report of an arm to armel conversion