[Voyage-linux] HowTo: Voyage Linux on a USB flash drive

Damini Mark (spam-protected)
Fri May 19 00:05:22 HKT 2006


Thanks Danny

This is very useful for me. I am very glad this issue was raised and resolved.

By the way I have made a custom kernel to support Raid 1-6 and 10, Broadcom GigE cards, Lager Block Devices and Qlogic Fiber Channel Cards. It works with Voyage-current and its Kernel 2.6.15. This custom kernel can also mount >2TB on a single LUN. Where can I upload this?

 Best Regards
 Marvin 
-----Original Message-----
From: voyage-linux-bounces+dmark=berkcom.com at list.voyage.hk
[mailto:voyage-linux-bounces+dmark=berkcom.com at list.voyage.hk]On Behalf
Of Danny Adair
Sent: Wednesday, May 17, 2006 8:56 PM
To: voyage-linux at voyage.hk
Subject: [Voyage-linux] HowTo: Voyage Linux on a USB flash drive


Voyage Linux on USB flash drive

Author:      Danny W. Adair <danny at adair.net>
Last Change: 18 May 2006
------------------------------------------------------------


Voyage Linux won't work "on" USB storage devices out of the box.
This is how I did get it working:

--------------------
Summary
--------------------
- We will make two partitions on the USB key, one for the boot loader
and the kernel, one for the rest of the system. We need a separate
partition for the kernel because of BIOS limitations (grub error 18
someone?).

- We'll get and unpack the current Voyage Linux distribution. It's got
advantages over 0.2 and I hope it's going to be a stable release soon.

- Voyage's "stock" kernel can't load the USB modules for mounting / to
the second partition because that's a Catch-22: they're sitting on a
USB drive partition! The solution is to recompile the kernel with this
support built-in (hooray - we've got nothing better to do!): After
recompiling the kernel and making a .deb package for it, we chroot
into voyage on the host computer and install the new kernel.

- We'll install voyage on the USB key, and it'll have our shiny new kernel.

- We'll make minor adjustments to the installation on the USB key
which the installation script currently doesn't do for us (Voyage
seems to have its focus on Compact Flash drives, which are "real" IDE,
and "hda" is assumed to be the target disk for voyage. We adjust that
to "sda".



####################
Make sure you do all this as root.
####################


--------------------
1. Prepare USB key
--------------------
Make sure the right device driver is loaded: On my system EHCI was
loaded instead of UHCI. Just rmmod ehci_hcd, modprobe uhci_hcd and
then put the USB key in. The EHCI driver may look like it's working -
if you get I/O errors, switch.
a) Use fdisk or cfdisk to create one small bootable (make it at least
3MB, it needs to fit a kernel image) and one big (=rest) Linux
partition.
b) Create ext2 file systems on the partitions and turn off automated fsck:
   # mkfs.ext2 /dev/sda1
   # tune2fs -c 0 /dev/sda1
   # mkfs.ext2 /dev/sda2
   # tune2fs -c 0 /dev/sda2
Your USB key is now ready for installation.

--------------------
2. Download voyage and kernel source
--------------------
# mkdir ~/voyage-build
# cd ~/voyage-build
or whatever directory you would like to put this in
# wget http://www.voyage.hk/download/voyage/voyage-current.tar.gz
# wget http://www.voyage.hk/dists/unstable/kernel/kernel-source-2.6.15-voyage_3.0-1_all.deb
# wget http://www.voyage.hk/download/kernel_config/config-2.6.15-486-voyage_3.0-1
You now have all you need for the installation.

--------------------
3. Recompile kernel for built-in USB storage support
--------------------
I assume you have all necessary packages (make, gcc, kernel-package,
etc.) installed on your host computer.
a) Install source and unpack:
   # dpkg -i ~/voyage-build/kernel-source-2.6.15-voyage_3.0-1_all.deb
   # cd /usr/src/
   # tar xjvf kernel-source-2.6.15-voyage.tar.bz2
b) Copy the "stock" voyage kernel configuration to the source tree:
   # cd kernel-source-2.6.15-voyage
   # cp ~/voyage-build/config-2.6.15-486-voyage_3.0-1 .config
c) Ensure all the necessary drivers will be built-in:
   # make menuconfig
   You can navigate with cursor keys, select with enter, one level up
with escape.
   Make sure the following are included (marked as "*" by hitting 'y'):
   - Device Drivers -> USB support -> Support for Host-side USB
   - Device Drivers -> USB support -> UHCI HCD
   (or OHCI HCD depending on the controller on your target computer -
hopefully even EHCI HCD (USB 2.0) - not in my case)
   - Device Drivers -> USB support -> USB Mass Storage support
   - Device Drivers -> SCSI device support -> legacy /proc/scsi/ support
   - Device Drivers -> SCSI device support -> SCSI disk support
   Escape out and say "yes" to save the new kernel configuration.
c) Compile the new kernel as a debian package:
   # make-kpkg --revision="3.0USB" --append-to-version "-486-voyage"
kernel-image
   You can change the revision string if you like, I just want to
indicate what this kernel will (additionally) be for.
   Now this usually takes a while...
d) A shiny new kernel package (in my case called
"kernel-image-2.6.15.6-ubuntu1-486-voyage_3.0USB_i386.deb") should now
be sitting in /usr/src/.

--------------------
4. Unpack voyage
--------------------
a) # cd ~/voyage-build/
   # tar --numeric-owner -zxvf voyage-current.tar.gz

--------------------
5. Install new kernel in voyage
--------------------
We will need to do the old chroot procedure (see "Manual
Customizations" in the Voyage wiki).
a) Copy the new kernel into voyage:
   # cp /usr/src/kernel-image-2.6.15.6-ubuntu1-486-voyage_3.0USB_i386.deb
voyage-current/usr/src/
b) Get voyage ready for changes:
   # cd voyage-current/
   # cp -r ro/* rw/
   # cd ..
   # chroot voyage-current/
   # mount -t proc none /proc
c) Install the new kernel
   # dpkg -i /usr/src/kernel-image-2.6.15.6-ubuntu1-486-voyage_3.0USB_i386.deb
   - Say no to creating a boot floopy
   - Say no to booting Linux from the hard disk
d) Leave the voyage "changes" environment:
   # umount /proc
   # exit
e) To save space on the target, you can delete the kernel package from
voyage now:
   # rm voyage-current/usr/src/kernel-image-2.6.15.6-ubuntu1-486-voyage_3.0USB_i386.deb
NOTE: You're installing on a "fresh" key. Subsequent installations
will change files differently. Shouldn't be too hard to figure out.

--------------------
6. Install voyage on USB key, adjust parameters for USB
--------------------
Make sure your USB key is plugged in but not mounted.
a) # cd ~/voyage-build/voyage-current
b) Adjust the file system table of voyage: / will be mounted to sda2:
   # vi etc/fstab
   (vi or whatever editor you prefer)
   - Change "/dev/hda1" to "/dev/sda2" in the first line
c) # mkdir /mnt/usbkey1
   # mkdir /mnt/usbkey2
   Or wherever you would like to temporarily mount the key for installation.
   We'll be working on two partitions (and will need to copy from one
to the other) so I'm using two directories.
   /mnt/usbkey2 will be used now, /mnt/usbkey1 will be needed in (the
last) step 7.
d) # ./voyage_update
   Specify correct disk (/dev/sda), voyage partition (2 -> /dev/sda2),
bootstrap partition (1 -> /dev/sda1),
   temporary mount point (/mnt/usbkey2), and module 5 "Generic PC".
   Choose grub instead of lilo.
   You should get some congratulations soon. :-)
e) Adjust the grub parameters on the boot partition (I hope this will
become part of the voyage_update script):
   # mount /dev/sda1 /mnt/usbkey1/
   # vi /mnt/usbkey1/grub/menu.lst
   (vi or whatever editor you prefer)
   - Change "kernel /vmlinuz root=/dev/hda2" to "kernel /vmlinuz
root=/dev/sda2 rootdelay=10"
   - Change "root (hd0,1)" to "root (hd0,0)" - I think this is a bug
in the voyage_update script (it puts the voyage instead of the
bootstrap partition here).
f) Provide a device map, so that grub knows what hd0 is in this case:
   # echo '(hd0) /dev/sda' > /mnt/usbkey1/grub/device.map

--------------------
7. Copy kernel to boot partition
--------------------
We told grub that the kernel is at /vmlinuz, but it's on the other
partition at the moment. Move the kernel over to the grub partition:
a) /mnt/usbkey1 should still be mounted from the last steps, mount the
voyage partition:
   # mount /dev/sda2 /mnt/usbkey2/
b) Move the entire "boot" directory to the grub partition - we'll be
booting from there:
   # mv	/mnt/usbkey2/boot/ /mnt/usbkey1/
c) Don't forget the symbolic link "/vmlinuz":
   # mv /mnt/usbkey2/vmlinuz/ /mnt/usbkey1/
   You might have to adjust the link to point to the new kernel:
   # cd /mnt/usbkey1
   # rm vmlinuz
   # ln -s boot/vmlinuz-2.6.15.6-ubuntu1-486-voyage vmlinuz
   # cd ..
d) Done. Unmount the USB key partitions:
   # umount /dev/sda1
   # umount /dev/sda2
e) Delete the "boot" directory from your host voyage so it doesn't get
re-installed next time:
   # rm -R ~/voyage-build/voyage-current/boot/

--------------------
8. Smile
--------------------
Put the key into the target computer and turn it on.

a) If you're not happy, tell me.
   I'll put problems (and hopefully their solutions) in the following
"Troubleshooting" section.
b) If you're happy, tell others. :-)

--------------------
Troubleshooting
--------------------
wfm

_______________________________________________
Voyage-linux mailing list
Voyage-linux at list.voyage.hk
http://list.voyage.hk/mailman/listinfo/voyage-linux




More information about the Voyage-linux mailing list