But let's get to this topic. Supposing you want to install NetBSD 5.0 onto your newly acquired Netbook (which has no CD-ROM drive), here's how you can create a bootable USB key with the necessary installation content.
Getting started
My other system is a NetBSD amd64 workstation, whereas the Netbook is i386. Once you have downloaded NetBSD sources to /usr/src:
# cd /usr # cvs -d:anoncvs@anoncvs3.de.NetBSD.org:/cvsroot co -r netbsd-5 srcyou are free to bootstrap a compilation environment, in /home/i386 for example:
# mkdir -p /home/i386/obj /home/i386/tools # cd /usr/src # ./build.sh -m i386 -O /home/i386/obj -T /home/i386/tools -u toolsCongratulations, you now have a cross-compiler for i386 on your system. What is usually a tedious task took only one command with the wrapper.
Compiling a kernel
It is easier to use NetBSD's build.sh wrapper again:
# cd /usr/src # ./build.sh -m i386 -O /home/i386/obj -T /home/i386/tools -u kernel=INSTALL_FLOPPYYou should now have a kernel in /home/i386/obj/sys/arch/i386/compile/INSTALL_FLOPPY/netbsd. Let's make a copy in a more convenient location:
$ mkdir -p /tmp/netbook $ cp /home/i386/obj/sys/arch/i386/compile/INSTALL_FLOPPY/netbsd /tmp/netbook/This kernel is not yet usable as an installation kernel though: it is configured to run in RAM, but does not embed any such filesystem yet.
Creating a RAM disk
Again, this is quite straightforward:
# cd /usr/src/distrib/i386/ramdisks/ramdisk-big # /home/i386/tools/bin/nbmake-i386If all went well, you now have a ramdisk file in /home/i386/obj/distrib/i386/ramdisks/ramdisk-big/ramdisk-big.fs. If something went wrong, such as compiling restore (like for me), simply edit the list file and comment out this line as so:
#PROG sbin/restore sbin/rrestoreLet's make it more convenient again:
$ cp /home/i386/obj/distrib/i386/ramdisks/ramdisk-big/ramdisk-big.fs /tmp/netbook/Preparing the kernel
We can now embed the ramdisk inside the kernel. It only takes this:
$ cd /tmp/netbook/ $ mdsetimage -v -s netbsd ramdisk-big.fs $ gzip -9 netbsd && mv netbsd.gz netbsd-INSTALL.gzThis kernel is now able to start the installer. By booting it, we could already download and install a system, if the sets were available. Unfortunately, we may have to compile them ourselves at the moment.
Generating the sets
This should just work:
# cd /usr/src # ./build.sh -m i386 -O /home/i386/obj -T /home/i386/tools -u setsIt will also help for the following step to copy the sets over:
$ cp -R /home/i386/obj/releasedir/i386/binary/sets /tmp/netbook/We will also need a kernel, for which the GENERIC configuration should be safe:
# cd /usr/src # ./build.sh -m i386 -O /home/i386/obj -T /home/i386/tools -u kernel=GENERICCreating the kernel set should be as simple as this:
$ cd /tmp/netbook/ $ cp /home/i386/obj/sys/arch/i386/compile/GENERIC/netbsd . $ gzip -9 netbsd && mv netbsd.gz netbsd $ tar -czvf kern-GENERIC.tgz ./netbsdMake a bootable USB key
Now comes the tricky part. First, identify how your USB key is seen by the system. A good way to do so is to run:
$ tail -f /var/log/messagesand to read what the kernel has to say. It should print something like this:
/netbsd: sd0 at scsibus0 target 0 lun 0: <, , > disk removable /netbsd: sd0: fabricating a geometrywhich means, in my case, that the key is seen as sd0. If it is already formatted as a FAT volume, you should be able to mount it like this:
# mkdir -p /mnt/usb # mount /dev/sd0e /mnt/usbYou can make sure that it is the case through the disklabel command:
# disklabel sd0 [...] 5 partitions: # size offset fstype [fsize bsize cpg/sgs] d: 2023424 0 unused 0 0 # (Cyl. 0 - 987) e: 2021634 62 MSDOS # (Cyl. 0*- 987*)(the d partition is virtual and represents the whole disk)
Starting with the obvious, it is time to copy the installation kernel and associated sets onto the USB key:
# cp /tmp/netbook/* /mnt/usb # mv /mnt/usb/netbsd-INSTALL.gz /mnt/usb/netbsdBooting will also require this file on the key:
# cp /usr/mdec/boot /mnt/usbIt is time to unmount the media:
# umount /mnt/usbAnd finally, the following command will make the key bootable:
# installboot -v -o timeout=5 /dev/rsd0e /usr/mdec/bootxx_msdosTroubleshooting
If the key does not boot, it can be that:
- there is already a bootloader in the Master Boot Record (MBR)
- the partition needs to be active
- the partition is incorrectly formatted



