Subject: Re: Creating bootable USB disks
To: None <current-users@NetBSD.org>
From: David Young <dyoung@pobox.com>
List: current-users
Date: 04/30/2007 16:54:47
On Mon, Apr 30, 2007 at 10:16:52AM +0100, Alan Barrett wrote:
> On Sun, 29 Apr 2007, Blair Sadewitz wrote:
> > I think it would be convenient for a lot of people if there were
> > images available for booting from USB keys.  [...] mount the ISO image
> > as a vnd [...] grub [...] FAT partition [...]
> 
> You don't need grub; the NetBSD/i386 /usr/mdec/mbr_bootsel works just
> fine on a USB flash drive.  You can also partition the drive with an FFS
> partition, so you don't need a FAT partition.  You don't even need to
> mount the ISO image as a vnd, but it might be convenient to do so.
> 
> I have a strong preference for doing it using tools that are in the base
> system (and that are already part of the cross-build tools, or that can
> easily be added to the tools).  So no grub.  Apart from that, there are
> many ways to do it, and I think it would be useful if you put something
> together.

I have put a lot of this together already.  The build system for CUWiN
uses NetBSD's cross-build tools to build a bootable i386 image with
FFS root.  You can also build a bootable CD-ROM with an ISO9660 root,
and other targets.  To try it out, check out the CUWiN sources,

$ cd $HOME
$ svn co http://svn.cuwireless.net/svn/cuw/trunk

Check out NetBSD sources:

$ cvs -d anoncvs@anoncvs.netbsd.org:/cvsroot co -P src

Create a directory for the build products, and create a .mkstabootrc
that tells the location of both your NetBSD sources and your build
products directory:

$ mkdir build
$ cat > .mkstabootrc<<EOF
> BUILDDIR=$HOME/build 
> SRC=$HOME/src 
> EOF
$

Build a boot image for, say, a Soekris net45xx with 128MB Sandisk
CompactFlash card---I suggest that target because it is closest to a
USB key:

$ cd trunk/src/boot-image
$ ./buildelan128 2>&1 | tee $HOME/build.log

This will create a elan128-30-Apr-2007.img file that you can dd to a
CF card.

For a USB key, you should override both the kernel configuration and the
disk geometry.  The script trunk/src/boot-image/regcfcard will extract
the geometry from your USB key by zeroing the disklabel (!!!) and running
disklabel -r on it.  Name the geometry you have extracted, and put it
into boot-image/disktab.d/native.  Build the USB key like so:

$ ./buildelan128 -k [[path to your kernel configuration]] \
> -t disktab.d/native -T [[name of your geometry]] -u 2>&1 | \
> tee $HOME/build.log.2

(buildelan128 passes -u to build.sh so that it skips the 'make clean'
 step.)

Note well: that script is going to build the CUWiN daemons & utilities,
install some of our scripts and configuration files, install some default
users (with crummy passwords!), and patch a few files from the NetBSD
distribution.  What you get is a wireless router.  You can override a
lot of those operations with changes to command-line options, in order
to build a more "pure" NetBSD system.

Someday, I would like to add a lot of the functions of this script
to build.sh.

Dave

-- 
David Young             OJC Technologies
dyoung@ojctech.com      Urbana, IL * (217) 278-3933