Custom Kernel to Memory Stick

Giorgos Keramidas keramida at ceid.upatras.gr
Tue Mar 30 17:08:38 UTC 2010


On Mon, 29 Mar 2010 10:49:08 -0500, Jay Hall <jhall at socket.net> wrote:
> Ladies and Gentlemen,
>
> I have been asked to explore the possibility of booting FreeBSD from a
> memory stick.  This was not a problem; worked great when installed  from
> the distribution CD.
>
> What would be the best way to get our custom configuration onto the
> memory stick?

The fastest way I know is to create an image to an 'image' file stored
on disk or ramdisk and then dd the image to the USB disk.  You can
create a suitably large image with truncate(1), e.g.:

    truncate -s 1g /var/tmp/image.bin

Then attach the image to an mdconfig device:

    mdconfig -a -t vnode -u 20 -f /var/tmp/image.bin

Create a filesystem on it, and install everything from your buildworld
and buildkernel run:

    fdisk -BI /dev/md20
    bsdlabel -w -B /dev/md20s1
    newfs -U /dev/md20s1a

Mount the new image partition before installkernel+installworld:

    mount -t ufs /dev/md20s1a /mnt

Then you sould be able to install with DESTDIR pointing to the image
partition:

    cd /usr/src
    env DESTDIR=/mnt make installkernel installworld

Don't forgte to use mergemaster with -D /mnt to install the /mnt/etc
files from /usr/src/etc.  Then tweak the /mnt/etc/fstab file to point at
the USB disk as the root filesystem.

Finally detach the image and write it on a USB disk:

    umount /mnt
    mdconfig -du 20
    dd if=/var/tmp/image.bin of=/dev/da0 bs=4m

One of the nice tricks you can use for the root filesystem of the USB
disk is to add a UFS label to the USB root filesystem.  This way you
don't have to assume that the USB root filesystem is called da0s1a but
you can use /dev/ufs/LABELNAME in the fstab file of the image partition.



More information about the freebsd-questions mailing list