Installing onto a thumb drive ============================= This explains how to install Dirtbags Tiny Linux, and then a CTF contest, onto a thumb drive. After you're done, you can continue to use the thumb drive as a FAT-formatted storage device with (probably) everything that could use it before. Step 1: Partitioning -------------------- Using cfdisk, parted, or fdisk, create two partitions on the device. Partition 1 should be a bootable FAT16 (type 06), and take most of the space. Partition 2 should be Linux (type 83), and take a smaller amount of space: I use around 20MiB. Here is what my 4G thumb drive looked like in cfdisk after partitioning: Name Flags Part Type FS Type [Label] Size (MB) ----------------------------------------------------------------------- sdb1 Boot Primary FAT16 3979.56 sdb2 Primary Linux 27.56 For the rest of this document, I'll refer to the whole device as $DRIVE, the FAT partiton as $FATFS, and the EXT3 partition as $EXTFS. # DRIVE=/dev/sdb # FATFS=/dev/sdb1 # EXTFS=/dev/sdb2 Step 2: File system creation ---------------------------- The `packages` service of dbtl looks for a filesystem labeled "PACKAGES", or whichever device is specified in the "packages=" kernel command-line option. In the interest of simplicity, we'll just go with "PACKAGES". This will get mounted under /mnt/packages. # mkdosfs -n PACKAGES $FATFS The second partition will be used for persistent storage: things like scores, what puzzles have been solved, and tank history. The packages service mounts the filesystem labeled "VAR", or the "var=" kernel option, will be mounted under `/var`. We'll make this a journalled filesystem to better handle nastiness. # mke2fs -j -L VAR $EXTFS You can use `blkid` to check that things worked properly: # blkid ... /dev/sdb1: LABEL="PACKAGES" UUID="0A17-A576" TYPE="vfat" /dev/sdb2: LABEL="VAR" UUID="ae019f2b-d00a-4b19-803b-3d1c1fb47765" SEC_TYPE="ext2" TYPE="ext3" Note: if dbtl can't mount /var, it uses a tmpfs. Step 3: Making it boot ---------------------- I use a boot loader called "syslinux" to boot the kernel. It reads its configuration file, kernel image, and initrd, off of a FAT. First, you need a MBR: # cat /usr/lib/syslinux/mbr.bin > $DRIVE Next, set up syslinux. I like to make syslinux put all its bits in the `/syslinux` directory, to keep the root clean. # mount $FATFS /mnt/b # mkdir /mnt/b/syslinux # umount /mnt/b # syslinux -d syslinux $FATFS Step 4: Installing Linux ------------------------ Hopefully you have a dbtl kernel and initrd. These need to go on the FAT. # mount $FATFS /mnt/b # cp dbtl.squashfs /mnt/b/syslinux/ # cp bzImage /mnt/b/syslinux/ Step 5: Telling syslinux what to boot ------------------------------------- Syslinux looks for a file called `syslinux.cfg` for its instructions. Feel free to make it as spiffy as you like. For instance, I carry around a thumb drive with boot options for bare DBTL, DBTL with CTF, and a Debian installer. This is the minimum configuration needed to boot our contest. # cat </mnt/b/syslinux/syslinux.cfg > DEFAULT ctf > LABEL ctf > KERNEL bzImage > INITRD dbtl.squashfs > EOD Step 5: Installing packages --------------------------- Finally, you need to tell it what packages to load. The set of packages determines the "personality" of the image. If you need help picking packages, talk to me. In this guide we'll just install everything. # cp *.pkg /mnt/b Step 6: Clean up ---------------- Unmount the volume and you're good to go! # umount /mnt/b