This is part of the Debian PowerPC e500 porting effort, the series on my blog starts at: "How to bootstrap a new Debian port"
Well, after all that work building new packages I figured it was time to see how far I could get at building a chroot filesystem and upgrading it to be current. I'll be doing all of my work in "/srv/stuff", but you can use any volume you would like with several gigs of free disk space.
The first step is building a chroot with the most recent historical snapshot of the Debian-Ports archive that actually still worked, taken on 2011-04-03, at 00:58:02 GMT. Note that the "unstable" and "experimental" archives don't include sources (see "omitdebsrc=true" below) as those must only be binary builds of upstream Debian sources. The "unreleased" archive does include sources, as that is intended for packages which need temporary patches to build.
NOTE: I spent a few hours trying various ways to get the multistrap to pull some packages from the current archives (including my fresh-built stuff), but so much stuff was uninstallable (especially Perl stuff) that I determined it was less work to install an old archive and try to upgrade by hand.
First I created "/srv/stuff/e500chroot.multistrap.conf":
[General]
arch=powerpcspe
directory=/srv/stuff/e500chroot/
noauth=true
cleanup=true
unpack=true
aptsources=Old-Unstable Old-Experimental Old-Unreleased
bootstrap=Old-Unstable Old-Experimental Old-Unreleased
[Old-Unstable]
packages=build-essential debhelper fakeroot sbuild masqmail
source=http://snapshot.debian.org/archive/debian/ports/20110403T005802Z/
suite=unstable
omitdebsrc=true
[Old-Experimental]
packages=
source=http://snapshot.debian.org/archive/debian/ports/20110403T005802Z/
suite=experimental
omitdebsrc=true
[Old-Unreleased]
packages=
source=http://snapshot.debian.org/archive/debian/ports/20110403T005802Z/
suite=unreleased
Then I wrote "/srv/stuff/setup-e500chroot.sh" to copy QEMU into the chroot before starting the multistrap process:
#! /bin/sh
set -e
CHROOT=/srv/stuff/e500chroot
MULTISTRAP_CONF=/srv/stuff/e500chroot.multistrap.conf
install -d "${CHROOT}/usr/bin"
install -t "${CHROOT}/usr/bin" "/usr/bin/qemu-ppc-static"
install -d "${CHROOT}/usr/local/bin" "/usr/local/bin/qemu-e500v2-static"
exec multistrap -f "${MULTISTRAP_CONF}"
I ran my multistrap wrapper script and waited about 5-10 minutes for the download and file extraction to complete.
WARNING: The chroot is NOT DONE YET!!! It has been unpacked, but none of the packages have been configured yet (with "dpkg --configure -a"), because that needs to be run on the target system.
I tried to do the testing entirely on my amd64 workstation using the the QEMU procedure I described in "Using qemu-user-static to help the Debian e500 bootstrap". Unfortunately I almost immediately started getting "Illegal instruction" exceptions out of QEMU; it looks like it might be fixed by this patch to qemu-ppc but I don't really feel like trying to rebuild all of QEMU for that.
So I need to get the files onto one of my actual HWW-1U-1A boards. Fortunately for me, I have an old build of an initramfs (based on busybox and a few other things) which lets me do a very-basic NFS boot. Unfortunately for anyone trying to do this over again, I don't have the original sources for that initramfs so I can't actually distribute it. In that situation I strongly recommend formatting a plain old SATA disk with ext4 to do the multistrap onto; then just connect the disk to your hardware.
NOTE: This assumes that you already have an existing kernel you can boot on your hardware (probably from U-Boot) with everything you need built in. Eventually you will need to switch to a Debian-standard kernel, don't worry about it for now.
Once I finish getting NFS and TFTP working I'll be back with another post.
Cheers,
Kyle Moffett
No comments:
Post a Comment