Source and Build instructions for RUNT

Bootdisk

To build the bootdisk, you'll need a few things.

The most substantial change to my bootdisk from Slackware's bare.i bootdisk is the inclusion of an initial ramdisk. You can just download mine below, but then again if you wanted to just download things, you could have just downloaded the bootdisk from the main page. So here's how I built it.

Build Busybox

The first thing you need is to make buildroot. You can download the latest version from svn, grab a daily snapshot, or just download an older prebuilt rootfs. Configuring and building buildroot is beyond the scope of this document, so if you get confused, just grab the older prebuilt rootfs.

If you haven't yet, download Busybox. You probably want the latest version, but sometimes older versions result in smaller files.

You'll want busybox to build using uclibc, so you can either configure busybox to use the binaries buildroot made, or you can build it within the chroot filesystem.

Configure busybox with as minimal a configuration as possible. You need only echo, insmod, lash, and sleep.

Build busybox, and run make install to create an _install directory within the busybox source tree.

Build the initial ramdisk

Create a directory for the files you want to put in your initrd. I'll call it initrdfiles.

Copy the contents of the _install directory busybox created into the initrdfiles directory

Create a dev and a lib directory withing initrdfiles.

Make the console device in /dev

mknod dev/console c 5 1

Copy the modules you want into the lib directory. I copied usbcore, uhci, usb-ohci, and ehci-hcd. If you know what type of host controller you'll be using, you could potentially eliminate one or two fo the controller modules. You also get better compression in the initrd if these modules are not compressed.

Copy linuxrc into the root directory. Make sure it is executable. If you are building this to run off of a different drive, adjust the sleep time in this file as necessary.

Assuming you have the slackware mkinitrd, run the following:

mkinitrd -s initrdfiles -o initrd.gz

You should now have an initrd.gz file which can be used with RUNT.

Build the bootdisk

NOTE: This step can be done automatically by RUNT with the mkfloppy.sh or mkfloppy.bat scripts.

This can be done directly on a floppy disk, but I prefer to prepare an image in RAM before writing it to disk.

Create a directory for preparing the floppy disk. I'll call it floppyfiles.

Copy the following files to the disk:

NOTE: As of slackware 11, the bare.i kernel doesn't work right with umsdos due to the inclusion of HIGHMEM. For RUNT 5.0, I have built my own kernel using the same source code as slackware's bare.i, and only changing the config to remove HIGHMEM support. This kernel is linked above.

Build a floppy image using the following commands:

dd if=/dev/zero of=floppy.img bs=1440k count=1
mkdosfs -n RUNT floppy.img
syslinux floppy.img
mkdir floppy
mount -t msdos -o loop floppy.img floppy
cp floppyfiles/* floppy
umount floppy

If you want to copy this image to a floppy now. run:

dd if=floppy.img of=/dev/fd0 bs=1440k count=1

Main Installation

Start with the Slackware Zipslack distribution. Mount an msdos filesystem with -t msdos and unzip zipslack to it. Unmount it and remount it with -t umsdos. I like to do this with a loopback filesystem, as it runs faster than developing on flash, but it will work fine to do this directly on a flash drive.

Add any additional packages you like. By setting the ROOT variable, you can run installpkg and upgradepkg on the directory where zipslack is mounted. I installed the following additional packages:

Update any patches available from Slackware. I updated:

I also upgraded the kernel-modules package with my kernel-modules package compiled without HIGHMEM support

Delete the existing vmlinuz from / and the config, and system.map files from /boot under zipslack and copy my vmlinuz, System.map, and config to /boot in their place.

Copy the following files into /boot:

Copy this lilo.conf to /etc

Edit /linux.bat to contain the following line:

\linux\loadlin \linux\boot\vmlinuz initrd=\linux\boot\initrd.gz root=/dev/sda1 rw^M

Edit networking related files to fit your needs. I edited:

Set up keymapping on startup by copying the follwing files to /etc/rc.d:

Configure modules that you want loaded:

Set your timezone by making a link from /etc/localtime to your zone. I ran:

ln -sf /usr/share/zoneinfo/America/New-York localtime-copied-from
cp localtime-copied-from localtime

Edit /etc/fstab to meet your needs. I did the following:

Copy runthelp and diskhelp into / so a list of common commands can be displayed to the screen. Create an executable script called runthelp in /usr/bin with the following text:

#!/bin/bash
cat /runthelp

You can make this command any name you like. I used both "runt" and "runthelp".

Make a similar file for diskhelp

Copy in the Changelog and gpl.txtas COPYING to /

Directly on the drive, not in the linux directory, create a new directory called runtutil. In this directory, create subdirectories of /bin and /etc. Into the etc directory, copy the following files from the floppy setup above:

Copy the following files into the bin directory:

Copy the following files into the runtutil directory:

To make RUNT bootable directly from USB, runt makeboot.sh

Unmount the drive and remount it again with -t msdos. Zip up the linux directory with -r.

Contact

If you have suggestions of how I could improve RUNT, please email me at runt@mybox.org