emdebian install report
tl;dr - I brought up Wheezy with an i486 kernel using under 200MB
of storage. Then I summarized verbosely using markdown and URLs.
# Install of emdebian grip (wheezy) August 2012
Here is an installation report written more as a story as an attempt
to include the context and motivations as well as the technical
details. While working on this task, I realized much of what is
written has come from experts with great knowledge of the subject
punctuated by strange but sometimes enlightening errors found by
people with little knowledge of the subject. In each case the
context and motivation was so well understood by the authors that
it wasn't even written down.
A few years back I set up a computer dedicated to a single task,
placed it in a safe place connected to some additional analog
electronic devices. Of course, doing this in the early 21st century,
it all had to be Internet connected. To help keep it safe, I
installed Debian on it, to follow the benefits of security
updates. But it also got the benefits of more general updates
to keep up with progress in the world: I had installed Debian's
Sarge version - and over the years upgraded to Debian's newer
stable versions (Etch, Lenny and finally Squeeze). It became
reachable via IPv6 as well as IPv4 and kept chugging away at its
few tasks. It was a happy little computer.
## Natural Disaster
[June 2012 North American derecho](http://en.wikipedia.org/wiki/June_2012_North_American_derecho)
The effects of combining wind, trees and power lines meant
that the main power to this happy little computer became
quite disturbed. Several cycles of power on / power off / power on /
power off were observed over just a few minutes, possibly accompanied by
unobserved voltage spikes. (The lightning accompanying the
wind was well observed.)
Then the power was off for several days. When the lights
came on, the happy little computer did not boot.
Even the power supply for the analog electronic devices
no longer supplied power.
## Post mortem
The happy little computer was no longer happy. The
motherboard BIOS would run, but not find a hard drive.
The hard drive was no longer working, and would not
come up even when attached to a newer, non-traumatized
computer. But what's more - even known good hard disks
were not found by the unhappy little computers BIOS.
Time to put the old hard disk, the motherboard and its
power supply into the appropraite recycling dumpster.
## More crufty old hardware
It's now August 11, 2012.
I was remarking that failure of an old IDE hard drive
was really no surprise, and I really think I've got
good backup copies of the important stuff. While that
vintage technology did the job just fine, I was worried
that any technology refresh would bring us into a
new motherboard with SATA interfaces, and a new SATA
hard drive, and associated power supply with SATA power
"I've got some extra solid-state disk chips from retired
thin client computers that you could use...", said
a compassionate, helpful colleague. These turned out
to be 40 pin PATA Disk on Module devices with a whopping
256MB capacity. I also got two with only 32MB. Thanks!
SimpleTech 256MB IDE Flash Drive Disk On Module DOM
[PQI DiskOnModule DOM 32mb Flash Memory p/n FD032-019PR](http://www.5rltd.com/productcart/pc/viewPrd.asp?idproduct=790&idcategory=73)
This will let me use some other cast-away pre-SATA
motherboard to rebuild the system. (Yes, I know very
well that even in these trying times we can afford to
buy new stuff. But that's beside the point. The old
system was built of dumpster-grade parts - so should
the new system to replace it. Using other people's trash
is a design goal.)
## A new (old) computer
I found a motherboard: a mini-ITX VIA EPIA system.
Nice, small. No gigabit ethernet. No SATA. 256M RAM.
Perfect. It does have a parallel port. (Try that
trick with a new Atom-based board...)
So off I went to install Debian. I was able to netboot
the beta version of the debian-installer for Wheezy.
(Easy for me, but I do not recommend that Beginners
try this if they wish to retain their Beginner status.
I happen to already have a pre-existing up to date
Debian system providing DHCP and tftp for my home
network, and I've netbooted plenty of things before.)
I turns out that 256 MB of disk space is not enough
to install Debian Wheezy. So I put aside the flash
disk-on-module device and went ahead and installed
Debian Wheezy on a 12 GB laptop hard disk.
The sensible thing to do, of course, is just run
standard Debian on the available laptop hard disk,
and move on to replace the failed computer.
Instead of doing the sensible thing - I figured it
was time to use the Embedded version of Debian.
"Why use Emdebian rather than Debian?
The most obvious reason is installation sizes."
-- [Embedded Debian](http://www.emdebian.org/)
"What's Emdebian Grip all about?
Simply a smaller Debian. Smaller packages, smaller downloads,
smaller sets of packages, smaller installation sizes and smaller
update sizes; yet always and completely binary compatible with
Debian. Every backtrace from an Emdebian Grip device will match
the backtrace on a Debian machine of the same architecture,
package version etc. Packages can be mixed trivially (with some
allowances for strict dependencies like -dbg packages). The name
is a derivative of Squeeze - to make Debian smaller, we take a
hold of it; Grip it."
-- [[Neil Williams, 15 November 2010](http://www.linux.codehelp.co.uk/serendipity/index.php?/archives/217-Documenting-Emdebian-intro.html)
It would be cool if I cound make a replacement computer
system that used disk on chip. The old system produced
hard drive noise for years on end. Quieter is better.
Low power is better, since then the power supply, too,
can be fanless. Maybe use
[one of these](http://www.mini-box.com/DC-DC).
Starting with the laptop disk install is good. The Wheezy
base system installs and runs fine on i486 level of
CPU and only 256 MB of RAM. And it gave me a stepping
stone for installing Emdebian on the 256 MB module.
While Debian as a whole is remarkably well documented,
the Emdebian specific methods and tools are minimally
documented. Most current embdebian use is in the realm
of small, battery powered ARM CPU computers, and yet
I find myself using 10 year old computer parts. But there
are good things on the web sites, wiki pages, blogs
and mailing lists that are worth amplifying by quoting
## Web page wisdom
[Flavors of Emdebian](http://www.emdebian.org/emdebian/flavours.html)
- Grip, Baked and Crush flavors.
I am interested in
the work in progress to improve automation and maintainability
so that what began as Emdebian in the form of a project separate
from Debian becomes merely another feature included in Debian.
[Emdebian 2.0](]http://www.emdebian.org/release/squeeze.html) - the
## Mailing list wisdom
"Successful debootstrap of armel with emdebian!"
"Just a quick note to let you know that I've just finished setting up a
debootstrapped armel using almost solely the emdebian repositories. Great work, guys!!"
-- [Bill Gatliff et al, mailing list thread 09 Jan 2009](https://lists.debian.org/debian-embedded/2009/01/msg00013.html)
"Crush? There are no packages for Crush outside ARM for Lenny. (not
armel or armhf). There is no method of adding packages to Crush - none
at all. Until we have MultiArch in Debian and cross-building can be
migrated to MultiArch, there have been and will be no updates for Crush."
"The apt-grip manpage is slightly out of date because the bit
about adding packages to Grip directly is currently postponed."
"Once the EmdebianIntegration is complete, there will be a mechanism.
Right now, sid-grip is a best-effort and is still playing catch up with
a completely rewritten set of tools and wheezy-grip is not being
updated until sid-grip is in a better state. These things take time."
"Recommendation is to use Squeeze from www.emdebian.org/grip and
complement that with the output of apt-grip to create your own local
-- [Neil Williams, 30 Dec 2011](https://lists.debian.org/debian-embedded/2011/12/msg00004.html)
## Blog wisdom
mount /dev/sdc1 /media/grip/
sudo debootstrap lenny /media/grip/ http://www.emdebian.org/grip/
mount -o bind /dev/ dev/
mount -o bind /proc proc/
chroot . /bin/bash
aptitude install linux-image-2.6.28-1-686 initramfs-tools
aptitude install what-you-want
aptitude install grub
"Now you have a bootable EmDebian Grip install"
-- [Giovanni Toraldo, 20 March 2010](http://gionn.net/howto-install-emdebian-grip-deboostrap)
The [Codehelp blog](http://www.linux.codehelp.co.uk/serendipity/).
# My approach
First spend some time playing around with chroot installs of
several versions of Emdebian, then wrap up by forging ahead
with a wheezy based grip install.
## Cargo Culting
Now I have used the debootstrap tool before, and understand
the workings of chroot and the bind mounts used by Giovanni Toraldo.
Alas Debian's Lenny version is old, and recently security updates
for it have stopped. So I proceeded to give that method a try
using the current stable and supported Debian version squeeze.
I also saw things not work, and failed just like others before me.
The *debootstrap* method has bugs, and more recently people have been
having much better luck and put more effort into developing the
The term "Cargo Cult" came up in discussion, and I entertained the
thought that next time someone asks what my religious affiliation is
I just might answer "Cargo Cult".
I have certainly just been doing some
[Cargo Cult Programming](http://en.wikipedia.org/wiki/Cargo_cult_programming).
However, I am not on a remote Pacific island. I have
lots of Internet resources and now have software running where I
can try things out and see what happens using experimental methods.
(Even back when I was on a remote Pacific island I was able to
obtain documentation and do some low-level programming to get my
computers working better.)
## Wheezy install
Despite the advice of the knowledgeable developers of emdebian
found on the web pages and mailing list posts I was not content
to install the known-good stable software.
I wanted to poke at things as they exist *today*, see what breaks,
and offer some current work-arounds that might just get folded
into the next release.
I figured I'd go with the multistrap install method rather
than try pre-seeding the Debian Installer since it seemed
that multistrap would end up with a smaller installation size.
Time to do some [Yak Shaving](http://theagileadvisors.com/the-agile-team/so-there-i-am-shaving-a-yak/).
# Install notes
It seemed like a good idea to fetch the emdebian archive keyring.
aptitude install emdebian-archive-keyring multistrap emdebian-grip
Partition and mount embedded storage device. Mine showed up as /dev/sda
yours might very likely be different.
mount /dev/sda1 /media/grip/
(If you don't run fdisk and instead just use the partitions left on
the device by an embedded Windows installation you may find when
you go to install grub it will fail because there is not enough
room between the start of the disk and the start of the first
partition for grub to store stuff.)
Multistrap: get pre-built gripped binary packages.
multistrap -d /media/grip -f grip-wheezy.conf
apt-grip: make your own gripped binary packages from standard
pre-built debian binary pockages. These are packages I wanted installed,
but multistrap could not find.
TMPDIR=/var/tmp apt-grip --build-only -M http://ftp.us.debian.org/debian/ linux-image-3.2.0-3-486 kmod linux-base initramfs-tools klibc-utils cpio udev libkmod2 libuuid-perl libklibc libudev0 grub-common grub-pc grub-pc-bin grub2-common libdevmapper1.02.1 libfreetype6 libfuse2 gettext-base dmsetup libasprintf0c2
cp /var/lib/apt-grip/output/* /media/grip/root/
cp /etc/resolv.conf etc/
cp /etc/hostname etc/
echo /dev/sda1 / ext4 rw,relatime,user_xattr,barrier=1,data=ordered 0 0 > etc/mtab
mount -o bind /dev/ dev/
mount -o bind /proc proc/
chroot . /bin/bash
I'm not sure it was necessary, but I created a tentative etc/mtab
in case that information was useful to initramfs-tools when installing
## Things done in the chroot
Set the root password in order to be able to log in after reboot.
Also add a non-root user:
Install all the fresh-made embedded debs:
dpkg -i *deb
Get some packages:
apt-get install grub-common grub-pc grub-pc-bin grub2-common
apt-get install ssh isc-dhcp-client ifupdown
apt-get install what-you-want
Keep an eye on remaining disk space.
Actually, grub might not install the first time, you
might need to fiddle with boot/grub/device.map
or at least examine what's in there to better drive
## Back outside the chroot
Edit the etc/fstab - I used
to some up with a UUID to use for the root partition.
Edit the grip etc/network/interfaces so that eth0 comes
up when booting.
cat >> etc/network/interfaces
iface eth0 inet dhcp
Since I'm using the same hostname for the embedded
disk as I am for the laptop disk (after all, it is
the same motherboard, same ethernet MAC address) I
copy the ssh host keys:
cp /etc/ssh/ssh_host* etc/ssh/ssh_host*
Reboot and reconfigure the BIOS to boot from the
Finally, on 19 August 2012, I have an Emdebian Wheezy
box that boots and runs with a 256 MB IDE flash drive.
df -Th gives me something along the lines of:
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 241M 199M 30M 87% /
And I've already gotten updated packages from the
emdebian repository. Very nice to see progress.
TODO: see what filesystem tuning might help better
use the flash device, along the lines of
[Tips for running Linux on a flash device](http://www.cyrius.com/debian/nslu2/linux-on-flash.html)
To all who made this possible -
Thank you for all the great work you did!
The remaining work I did went quickly and easily because
you have done such a good job.
(If you've read this far... Comments?
Please trim your replies.)