From: Kern Sibbald Date: Thu, 12 Mar 2009 13:56:33 +0000 (+0000) Subject: Add new USB rescue key X-Git-Tag: Release-5.0.3~627 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=5e29a9cbf2be45410e35c3a4ba47d0e05dbc2494;p=bacula%2Frescue Add new USB rescue key --- diff --git a/rescue/linux/usb/README.technotes b/rescue/linux/usb/README.technotes new file mode 100644 index 0000000..4b2f47c --- /dev/null +++ b/rescue/linux/usb/README.technotes @@ -0,0 +1,61 @@ + +Technical details of creating the USB key boot images. Unless +you want to rebuild (remaster) the iso boot image, you will not +need this. + +The directory "remaster" contains the scripts that allow picking +apart a Kubuntu Hardy ISO and then updating and recombining the +parts into a USB boot image. The information below is somewhat +low level and should not be needed unless you want to do your +own remastering either starting from the Kubuntu release or from +the Bacula remastered release. + +Note, the sqfs.tar.gz is the whole squashfs unsquashed. + +The kernel image (vmlinuz) is a copy of the most recent kernel i.e. + + sqfs/boot/vmlinuz-2.6.24-23-generic + +and initrd.gz is a copy of the most recent initrd.img i.e + + sqfs/boot/initrd.img-2.6.24-23-generic + +they are renamed and put in the kubuntu8 partition in: + + casper/vmlinuz +and + casper/initrd.gz + +respectively. + +The above updates are automatically done when running +the write_sqfs_to_disk_image script. Then the final +step is to tar up kubuntu8. + +Note, initrd.gz is made after fixing the bug in +/usr/share/initramfs-tools/scripts/casper +see note 2. in bugs with Kubuntu boot process below. + +When updating the USB root partition (changing something), I +strongly recommend that you work with the disk image then +repack it (pack_disk_image) and then run load_disk_image. + + +Packages needed: +apt-get install syslinux mbr + + +Kubuntu boot tricks: +1. Booting with persistence added to the kernel options will permit + mounting of a USB casper-rw and home-rw partitions on the USB key. + casper-rw is used to store changed OS files, and home-rw is the + home directory. + +Bugs with Kubuntu boot process: +1. The initrd.gz image must be opened, fixed and the repacked. +2. The fix involves removing the ,mode=755 from the mount line for + the persistent OS partition (casper-rw) or /cow + in /usr/share/initramfs-tools/scripts/casper +3. I have removed /etc/rc0.d/S89casper and /etc/rc6.d/S89casper + because they are related to a CDROM boot and create false + errors when booting from a USB key. diff --git a/rescue/linux/usb/README.usb b/rescue/linux/usb/README.usb new file mode 100644 index 0000000..c3a6403 --- /dev/null +++ b/rescue/linux/usb/README.usb @@ -0,0 +1,133 @@ + +Copyright (C) Kern E. Sibbald, 2009 + +This directory is used to build a USB key containing a Kubuntu 8.04 LiveCD +with persistent OS files and persistent /home files. + +You will need to run as root for most things ... + +Packages needed: +apt-get install syslinux mbr + + +1. Start by editing the "config" file. Be sure to get your USB_DEV + definition correct. Note: you can see what devices you have + connected by running: + + lsscsi + + For example, I get: + + $ lsscsi + [1:0:0:0] cd/dvd _NEC DVD+RW ND-1100A 108B /dev/scd0 + [1:0:1:0] cd/dvd PHILIPS DVD+-RW DVD8631 9D03 /dev/scd1 + [9:0:0:0] disk Kingston DataTraveler 2.0 PMAP /dev/sda + + and in my case, the USB device is the Kingston DataTraveler on + device /dev/sda. + + Alternatively you can do: + + fdisk -l + +2. The scripts you need to partition the key and + to write the boot image to it are all in this (usb) directory. + +3. If you ever want to put the key back to its prior state, *before* + running the partition_usb_key, you might consider doing a: + + sfdisk -d /dev/key-device >save_me + + where key-device is the key device name (e.g. sda). The + output file can be fed back into sfdisk to recreate the original + with: + + sfdisk /dev/key-device mount.bsi +mount -l -t ext2 >mount.ext2.bsi +mount -l -t ext3 >mount.ext3.bsi +mount -l -t reiserfs >mount.rei.bsi +cp /etc/fstab fstab.bsi +cp /etc/mtab mtab.bsi +df -Tl >df.bsi +# Pickup all disks except USB_DEV +sfdisk -s | grep -v "${USB_DEV}" >sfdisk.disks.bsi +grep "^/dev/" sfdisk.disks.bsi | sed -n 's%\(^/dev/[A-Za-z]*\):.*$%\1%p' >disks.bsi +for i in `cat disks.bsi`; do + j=`echo $i | cut -c6-` + sfdisk -l $i >sfdisk.$j.bsi + sfdisk -d $i >sfdisk.make.$j.bsi +done +cat /proc/swaps > swaps.bsi +route -n >route.bsi +ifconfig >ifconfig.bsi + +# Gather LVM information +# Only tested on LVM2 +dolvm=0 +if which lvm > /dev/null 2>/dev/null ; then + echo "Gathering LVM information" + dolvm=1 + + lvm pvs --noheadings --nosuffix -o pv_name,vg_name | cat > lvm-pv.bsi + lvm vgs --noheadings --nosuffix -o vg_name,vg_extent_size --units=k | cat > lvm-vg.bsi + lvm lvs --noheadings --nosuffix -o lv_name,vg_name,lv_size --units=k | cat > lvm-lv.bsi +fi + +echo "Done collecting info." + +# +# Done collecting information +# + + +echo "Begin creating scripts ..." +# +# First create partitioning script(s) +# +mkdir -p $scr +for i in `cat disks.bsi`; do + j=`echo $i | cut -c6-` + cat >$scr/partition.$j < $scr/create-pv <> $scr/create-pv + done + + cat >> $scr/create-pv <> $scr/create-pv + echo "lvm pvcreate -ff -y -v $pv" >> $scr/create-pv + done + echo "echo \"Done.\"" >> $scr/create-pv + echo "echo \"If there were no errors, run create-vg to create the volume groups.\"" >> $scr/create-pv + chmod +x $scr/create-pv + +# +# LVM phase 2: create Volume Groups +# + cat > $scr/create-vg <> $scr/create-vg + pelist="" + for pv in `cat lvm-pv.bsi | awk "\\\$2 == \"$vg\" { print \\\$1 }"` ; do + pelist="$pelist $pv" + done + echo "lvm vgcreate $vg -v -s ${pesize}k $pelist" >> $scr/create-vg + done + echo "echo \"Done.\"" >> $scr/create-vg + echo "echo \"If there were no errors, run create-lv to create the logical volumes.\"" >> $scr/create-vg + chmod +x $scr/create-vg + + +# +# LVM phase 3: create Logical Volumes +# +# One quick sidenote: this script creates LVs with a size based on the +# physical extent count, rather than the size in bytes. This is because +# at the time of writing this script, lvdisplay erroneously prints out +# the size in 512 byte sector count rather than 1024 byte blocks. +# Using the extent count should allow this script to continue to work +# even after the bug is fixed. + + cat > $scr/create-lv <> $scr/create-lv + echo "lvm lvcreate -L ${lvsize}k $vg -n $lv" >> $scr/create-lv + done + chmod +x $scr/create-lv +fi + +# +# Create formatting script(s) +# +echo "Begin making formatting script(s) ..." +for i in `cat disks.bsi`; do + j=`echo $i | cut -c6-` + cat >$scr/format.$j <>$scr/format.$j + echo "mkswap $check $disk" >>$scr/format.$j + echo "echo \"\"" >>$scr/format.$j + done + # Find ext2 partitions in mount output + k=`grep "^$i" mount.ext2.bsi | cut -d ' ' -f 1` + for disk in $k; do + echo "echo \"Formating $disk -- ext2 partition\"" >>$scr/format.$j + label=`grep "^$disk" mount.ext2.bsi | cut -d ' ' -f 7 | cut -c2- | cut -d ] -f 1` + if [ x$label = x ] ; then + echo "mke2fs -v \$check $disk" >>$scr/format.$j + else + echo "mke2fs -v \$check -L $label $disk" >>$scr/format.$j + fi + echo "echo \"\"" >>$scr/format.$j + done + # Find ext3 partitions in mount output + k=`grep "^$i" mount.ext3.bsi | cut -d ' ' -f 1` + for disk in $k; do + echo "echo \"Formating $disk -- ext3 partition\"" >>$scr/format.$j + label=`grep "^$disk" mount.ext3.bsi | cut -d ' ' -f 7 | cut -c2- | cut -d ] -f 1` + if [ x$label = x ] ; then + echo "mke2fs -v -j \$check $disk" >>$scr/format.$j + else + echo "mke2fs -v -j \$check -L $label $disk" >>$scr/format.$j + fi + echo "echo \"\"" >>$scr/format.$j + done + # Find reiserfs partitions in mount output + k=`grep "^$i" mount.rei.bsi | cut -d ' ' -f 1` + for disk in $k; do + echo "echo \"Formating $disk -- reiser partition\"" >>$scr/format.$j + label=`grep "^$disk" mount.rei.bsi | cut -d ' ' -f 7 | cut -c2- | cut -d ] -f 1` + if [ x$label = x ] ; then + echo "mkereiserfs -V \$check $disk" >>$scr/format.$j + else + echo "mkereiserfs -V \$check -L $label $disk" >>$scr/format.$j + fi + echo "echo \"\"" >>$scr/format.$j + done + chmod 755 $scr/format.$j +done + +# +# Create LVM formatting scripts(s) +# +# Somebody more clever than I with bash scripting +# could probably factor a lot of this code out. +# +if [ $dolvm -eq 1 ] ; then + echo "Begin making LVM formatting script(s) ..." + for i in `cat lvm-vg.bsi | awk '{print $1}'`; do + cat >$scr/format.$i <>$scr/format.$i + echo "mkswap $check $disk" >>$scr/format.$i + echo "echo \"\"" >>$scr/format.$i + done + # Find ext2 partitions in mount output + k=`grep "^$mapper" mount.ext2.bsi | cut -d ' ' -f 1` + for disk in $k; do + echo "echo \"Formating $disk -- ext2 partition\"" >>$scr/format.$i + label=`grep "^$disk on" mount.ext2.bsi | cut -d ' ' -f 7 | cut -c2- | cut -d ] -f 1` + if [ x$label = x ] ; then + echo "mke2fs -v \$check $disk" >>$scr/format.$i + else + echo "mke2fs -v \$check -L $label $disk" >>$scr/format.$i + fi + echo "echo \"\"" >>$scr/format.$i + done + # Find ext3 partitions in mount output + k=`grep "^$mapper" mount.ext3.bsi | cut -d ' ' -f 1` + for disk in $k; do + echo "echo \"Formating $disk -- ext3 partition\"" >>$scr/format.$i + label=`grep "^$disk on" mount.ext3.bsi | cut -d ' ' -f 7 | cut -c2- | cut -d ] -f 1` + if [ x$label = x ] ; then + echo "mke2fs -v -j \$check $disk" >>$scr/format.$i + else + echo "mke2fs -v -j \$check -L $label $disk" >>$scr/format.$i + fi + echo "echo \"\"" >>$scr/format.$i + done + # Find reiserfs partitions in mount output + k=`grep "^$mapper" mount.rei.bsi | cut -d ' ' -f 1` + for disk in $k; do + echo "echo \"Formating $disk -- reiser partition\"" >>$scr/format.$i + label=`grep "^$disk on" mount.rei.bsi | cut -d ' ' -f 7 | cut -c2- | cut -d ] -f 1` + if [ x$label = x ] ; then + echo "mkereiserfs -V \$check $disk" >>$scr/format.$i + else + echo "mkereiserfs -V \$check -L $label $disk" >>$scr/format.$i + fi + echo "echo \"\"" >>$scr/format.$i + done + chmod 755 $scr/format.$i + done +fi + +cd $scr + +# +# Create network start script +# +ifconfig eth0 2>/dev/null >/dev/null +if [ $? = 0 ] ; then + ip=`ifconfig eth0 | grep inet | head -1 | sed -n 's/\ \+inet addr:\([0-9]\+\(\.[0-9]\+\)\{3\}\).*/\1/p'` + cat >start_network <start_network +fi +# Try eth1 +ifconfig eth1 2>/dev/null >/dev/null +if [ $? = 0 ] ; then + ip=`ifconfig eth1 | grep inet | head -1 | sed -n 's/\ \+inet addr:\([0-9]\+\(\.[0-9]\+\)\{3\}\).*/\1/p'` + cat >>start_network <>start_network <$scr/mount_drives <${TMP1} +sed -n 's/\(^.*\)\ on\ \(.*\)\ type.*$/\1 \/mnt\/disk\2/p' $di/mount.ext3.bsi >>${TMP1} +sed -n 's/\(^.*\)\ on\ \(.*\)\ type.*$/\1 \/mnt\/disk\2/p' $di/mount.rei.bsi >>${TMP1} +# sort so that / is first +sort -k 2 <${TMP1} >${TMP2} +# output mkdir followed by its mount +sed -n 's/\(^.*\)\ \(.*$\)/mkdir -p \2\ +mount \1 \2/p' ${TMP2} >>$scr/mount_drives + +# Now build unmount_drives +cat >$scr/umount_drives <${TMP2} +sed -n 's/\(^.*\)\ \(.*$\)/umount \2/p' ${TMP2} >>$scr/umount_drives +echo "umount /mnt/cdrom 2>/dev/null >/dev/null" >>$scr/umount_drives +echo "sync" >>$scr/umount_drives +echo "sync" >>$scr/umount_drives + +rm -f ${TMP1} ${TMP2} + +chmod 755 $scr/mount_drives $scr/umount_drives +echo "Done building scripts." diff --git a/rescue/linux/usb/kernsconfig b/rescue/linux/usb/kernsconfig new file mode 100644 index 0000000..c26c306 --- /dev/null +++ b/rescue/linux/usb/kernsconfig @@ -0,0 +1,62 @@ +# +# You must define certain environment variables in this file +# so that the scripts know where to find things. +# + +CWD=`pwd` + +# +# Set your home directory here (do not use $HOME !!!) +# This is used when coping your desktop files to the +# USB key. +# +MY_HOME=/home/kern + +# +# The device name of your USB device (e.g. /dev/sda) +# You can find it by plugging it in then doing +# +# fdisk -l +# +# If you are unsure remove the USB device and rerun the fdisk -l +# If you get this wrong, your harddisk could be wiped out. +# It is probably "sda" or "sdb" or "sdc" +# +USB_DEV=/dev/sdg + +# +# When your USB key is mounted, what is the mount directory? +# +MOUNT_POINT=/media + +# +# This is where you downloaded the USB boot image +# +BOOT_IMAGE=${CWD}/kubuntu8.tar.gz + +# +# Disk image of boot partition of USB key -- this is where you +# unpacked the kubuntu8.tar.bz2 image. Unpacking the image +# is not necessary unless you want to change it. +# +DISK_IMAGE=${CWD}/kubuntu8 + +# +# If you are remastering a Ubuntu or Kubuntu ISO (not normally done) +# Point to the ISO image +# Used when picking apart a new ISO (i.e. upgrade or something) +# +ISO_IMAGE= + +# +# Partition 1 (kubuntu) size +# +SIZE_PART1="+750M" + +# +# Partition 2 (casper-rw) size +# +SIZE_PART2="+1000M" + +# +# Partition 3 uses whatever is left on the USB key diff --git a/rescue/linux/usb/partition_usb_key b/rescue/linux/usb/partition_usb_key new file mode 100755 index 0000000..6af5f5e --- /dev/null +++ b/rescue/linux/usb/partition_usb_key @@ -0,0 +1,76 @@ +#!/bin/sh +# +# Partition the USB stick -- the stick is assumed to be at least 3GB in size +# +# First delete all existing partitions +# +. ./config + +if [ ! `whoami` = "root" ] ; then + echo "" + echo "You need to be root to run this shell script" + echo "" + exit 1 +fi +if [ "x$USB_DEV" = "x" ] ; then + if [ "x$1" = "x" ] ; then + echo "You must supply the USB device name on the command line or in USB_DEV" + exit 1 + else + USB_DEV=$1 + fi +fi +echo "This script will distroy everything on $dev" +fdisk -l $USB_DEV +echo " " +echo "Answer yes to continue " +read a +if [ "$a" != "yes" ] ; then + echo "Device $USB_DEV unchanged" + exit 1 +fi +sfdisk -l $USB_DEV >original-partitioning.txt +fdisk $USB_DEV <md5sum.txt +tar cfz $CWD/kubuntu8.tar.gz . +cd $CWD +ls -l kubuntu8.tar.gz diff --git a/rescue/linux/usb/remaster/pack_initrd b/rescue/linux/usb/remaster/pack_initrd new file mode 100755 index 0000000..bd5677f --- /dev/null +++ b/rescue/linux/usb/remaster/pack_initrd @@ -0,0 +1,16 @@ +#!/bin/sh +# +if [ ! -d initrd ] ; then + echo "Cannot find initrd directory." + exit 1 +fi +cd initrd +echo "Packing initrd to initrd.gz ..." +find . | cpio -o -H newc | gzip -9 > ../initrd.gz +if [ "x$SUID_UID" != "x" ] ; then + if [ "x$SUID_GID" = "x" ] ; then + chown $SUID_UID ../initrd.gz + else + chown $SUID_UID:$SUID_GID ../initrd.gz + fi +fi diff --git a/rescue/linux/usb/remaster/pack_sqfs b/rescue/linux/usb/remaster/pack_sqfs new file mode 100755 index 0000000..f498ada --- /dev/null +++ b/rescue/linux/usb/remaster/pack_sqfs @@ -0,0 +1,13 @@ +#!/bin/sh +# +. ../config + +if [ ! -d sqfs ] ; then + echo "Cannot find sqfs ..." + exit 1 +fi +rm -f filesystem.squashfs +echo "Squashing the filesystem ..." +mksquashfs sqfs filesystem.squashfs +rm -f filesystem.manifest +cp sqfs/filesystem.manifest . diff --git a/rescue/linux/usb/remaster/unmount_iso b/rescue/linux/usb/remaster/unmount_iso new file mode 100755 index 0000000..18686f7 --- /dev/null +++ b/rescue/linux/usb/remaster/unmount_iso @@ -0,0 +1,7 @@ +#!/bin/sh +# + +umount cdrom +if [ $? -eq 0 ] ; then + rmdir cdrom +fi diff --git a/rescue/linux/usb/remaster/unpack_initrd b/rescue/linux/usb/remaster/unpack_initrd new file mode 100755 index 0000000..4874fa3 --- /dev/null +++ b/rescue/linux/usb/remaster/unpack_initrd @@ -0,0 +1,7 @@ +#!/bin/sh +# +rm -rf initrd +mkdir -p initrd +cd initrd +echo "Unpacking initrd.gz into initrd ..." +gzip -dc ../cdrom/casper/initrd.gz | cpio -i diff --git a/rescue/linux/usb/remaster/unpack_sqfs b/rescue/linux/usb/remaster/unpack_sqfs new file mode 100755 index 0000000..458f7f7 --- /dev/null +++ b/rescue/linux/usb/remaster/unpack_sqfs @@ -0,0 +1,22 @@ +#!/bin/sh +# +mkdir -p sqfs +mkdir cdsqfs +mount -o loop -t squashfs cdrom/casper/filesystem.squashfs cdsqfs +if [ $? -ne 0 ] ; then + echo "Error mounting squashfs ..." + rm -rf cdsqfs + exit 1 +fi +echo "Copying ISO squashfs to sqfs ..." +rsync -avx -P cdsqfs/. sqfs/. +# +umount cdsqfs/ +if [ $? -ne 0 ] ; then + umount cdsqfs/ + if [ $? -ne 0 ] ; then + echo "Could not umount cdsqfs ..." + exit 1 + fi +fi +rmdir cdsqfs diff --git a/rescue/linux/usb/remaster/update_packages b/rescue/linux/usb/remaster/update_packages new file mode 100644 index 0000000..5739e2c --- /dev/null +++ b/rescue/linux/usb/remaster/update_packages @@ -0,0 +1,82 @@ +#!/bin/sh +# +# Update squashfs -- assumes you start with a Hardy 8.04.1 desktop, +# but it should work even if you have already updated it. +# + +if [ ! -d sqfs ] ; then + echo "Cannot find squashfs (sqfs directory)" + exit 1 +fi +chroot sqfs /bin/sh +mount -t proc none /proc/ +mount -t sysfs non /sys/ +export HOME=/root + +# remove packages +apt-get remove --purge `dpkg-query -W --showformat '${Package}\n' | grep language-pack | egrep -v '\-en'` +apt-get remove --purge `dpkg-query -W --showformat '${Package}\n' | grep openoffice\.org-` +apt-get remove --purge amarok dictionaries-common + +cat >/etc/resolv.conf </etc/apt/sources.list <filesystem.manifest + +apt-get clean +rm -rf /tmp/* +rm -f /etc/hosts /etc/resolv.conf +umount /proc/ +umount /sys/ +exit +cp sqfs/filesystem.manifest . +rm -f sqfs/filsystem.manifest + +echo "Warning!!!! At this point, it may be better to reboot, since" +echo " upgrading packages may have restarted some daemons such as" +echo " cups, which uses sqfs/proc. If you thn try to pack the sqfs" +echo " you will get lots of errors reference /proc. Rebooting" +echo " resolves this problem." +echo " " diff --git a/rescue/linux/usb/remaster/write_sqfs_to_disk_image b/rescue/linux/usb/remaster/write_sqfs_to_disk_image new file mode 100755 index 0000000..c0c8597 --- /dev/null +++ b/rescue/linux/usb/remaster/write_sqfs_to_disk_image @@ -0,0 +1,37 @@ +#!/bin/sh +# +# Put a new squashfs on the disk image +# + +. ../config + + +if [ ! -d ${DISK_IMAGE}/casper ] ; then + echo "Cannot find ${DISK_IMAGE}/casper directory -- possibly not detarred" + exit 1 +fi + +if [ ! -f filesystem.squashfs ] ; then + echo "Cannot find filesystem.squashfs ..." + exit 1 +fi + +echo "Removing old squashfs" +rm -f ${DISK_IMAGE}/casper/filesystem.squashfs ${DISK_IMAGE}/casper/filesystem.manifest +rm -f ${DISK_IMAGE}/casper/filesystem.manifest-desktop + +echo "Moving new squashfs to ${DISK_IMAGE}" +cp filesystem.manifest ${DISK_IMAGE}/casper/ +cp filesystem.manifest ${DISK_IMAGE}/casper/filesystem.manifest-desktop +mv filesystem.squashfs ${DISK_IMAGE}/casper/ + +echo "Removing old initrd and kernel image" +rm -f ${DISK_IMAGE}/casper/initrd.gz +rm -f ${DISK_IMAGE}/casper/vmlinuz + +echo "Copying new initrd and kernel image" +cp sqfs/initrd.img ${DISK_IMAGE}/casper/initrd.gz +cp sqfs/vmlinuz ${DISK_IMAGE}/casper/vmlinuz +sync + +echo "Now you just need to tar up ${DISK_IMAGE}" diff --git a/rescue/linux/usb/write_disk_info_to_usb b/rescue/linux/usb/write_disk_info_to_usb new file mode 100755 index 0000000..b5374b3 --- /dev/null +++ b/rescue/linux/usb/write_disk_info_to_usb @@ -0,0 +1,39 @@ +#!/bin/sh +# +# write the disk info from the current system to the USB +# stick. We write it in the home-rw partition +# +. ./config + +if [ ! `whoami` = "root" ] ; then + echo "" + echo "You need to be root to run this shell script" + echo "" + exit 1 +fi + +echo " " +echo "This script will write your current system information to the USB" +echo "stick in the home-rw partition (/home/ubuntu)" + +if [ ! -d ${MOUNT_POINT}/home-rw ] ; then + mount ${USB_DEV}3 ${MOUNT_POINT}/home-rw +fi +if [ ! -d ${MOUNT_POINT}/home-rw ] ; then + echo "Mount of home-rw USB partition failed." + echo "Please pre-mount the USB stick and run this script again." + exit 1 +fi +cd ${MOUNT_POINT}/home-rw +if [ $? -ne 0 ] ; then + echo "Could not cd to home-rw USB partition" + exit 1 +fi + +mkdir -p ubuntu +chown 1000:1000 ubuntu +cd ubuntu +export USB_DEV +${CWD}/getdiskinfo +cp -f ${CWD}/write_disk_info_to_usb . +sync diff --git a/rescue/linux/usb/write_usb_boot_partition b/rescue/linux/usb/write_usb_boot_partition new file mode 100755 index 0000000..7c64a5f --- /dev/null +++ b/rescue/linux/usb/write_usb_boot_partition @@ -0,0 +1,66 @@ +#!/bin/sh +# +# tar the disk image +# +. ./config + +if [ ! `whoami` = "root" ] ; then + echo "" + echo "You need to be root to run this shell script" + echo "" + exit 1 +fi +if [ ! -f ${BOOT_IMAGE} ] ; then + echo "Could not find boot image: ${BOOT_IMAGE}" + exit 1 +fi +if [ "`which syslinux`x" = "x" ] ; then + echo "" + echo "Could not find syslinux. Try \"apt-get install syslinux\"" + echo "" + exit 1 +fi +if [ "`which install-mbr`x" = "x" ] ; then + echo "" + echo "Could not find install-mbr. Try \"apt-get install mbr\"" + echo "" + exit 1 +fi + +umount ${USB_DEV}1 2>/dev/null 1>/dev/null + +echo "Reformat USB boot partition" +mkfs.vfat -F 16 -n kubuntu8 ${USB_DEV}1 +if [ ! -d ${MOUNT_POINT}/kubuntu8 ] ; then + mkdir -p ${MOUNT_POINT}/kubuntu8 + created="yes" +fi +mount ${USB_DEV}1 ${MOUNT_POINT}/kubuntu8 +if [ $? -ne 0 ] ; then + echo "Mount of USB boot partition failed." + exit 1 +fi +cd ${MOUNT_POINT}/kubuntu8 +if [ $? -ne 0 ] ; then + echo "Could not cd to USB boot partition" + exit 1 +fi + +echo "Detaring boot image ..." +tar xfz ${BOOT_IMAGE} +# original-partioning.txt was created by partition_usb_key +if [ -e ${CWD}/original-partitioning.txt ] ; then + cp -f ${CWD}/original-partitioning.txt . + rm -f ${CWD}/original-partitioning.txt +fi +cd ${CWD} + +syslinux -sf ${USB_DEV}1 +install-mbr -p1 ${USB_DEV} +echo "syncing ..." +sync +sync +umount ${MOUNT_POINT}/kubuntu8 +if [ "x$created" = "xyes" ] ; then + rmdir ${MOUNT_POINT}/kubuntu8 +fi