[Fedora-livecd-list] tools/livecd-iso-to-disk.sh

Bruno Wolff III bruno at fedoraproject.org
Sun Sep 12 01:12:24 UTC 2010


 tools/livecd-iso-to-disk.sh |   44 +++++++++++++++++++++++++++++++++++++-------
 1 file changed, 37 insertions(+), 7 deletions(-)

New commits:
commit 35a1a5675216ea0528509b0401719ddf4108a945
Author: Jasper Hartline <jasper.hartline at gmail.com>
Date:   Sat Sep 11 20:07:29 2010 -0500

    Add support for ext4 now that syslinux supports it.
    
    Signed-off-by: Bruno Wolff III <bruno at wolff.to>

diff --git a/tools/livecd-iso-to-disk.sh b/tools/livecd-iso-to-disk.sh
index 1519594..03efc7e 100755
--- a/tools/livecd-iso-to-disk.sh
+++ b/tools/livecd-iso-to-disk.sh
@@ -199,6 +199,28 @@ createMSDOSLayout() {
     USBLABEL="UUID=$(/sbin/blkid -s UUID -o value $USBDEV)"
 }
 
+createEXTFSLayout() {
+    dev=$1
+    getdisk $dev
+
+    echo "WARNING: THIS WILL DESTROY ANY DATA ON $device!!!"
+    echo "Press Enter to continue or ctrl-c to abort"
+    read
+    umount ${device}? &> /dev/null
+    /sbin/parted --script $device mklabel msdos
+    partinfo=$(LC_ALL=C /sbin/parted --script -m $device "unit b print" |grep ^$device:)
+    size=$(echo $partinfo |cut -d : -f 2 |sed -e 's/B$//')
+    /sbin/parted --script $device unit b mkpart primary ext2 17408 $(($size - 17408)) set 1 boot on
+    USBDEV=${device}1
+    # Sometimes automount can be _really_ annoying.
+    echo "Waiting for devices to settle..."
+    /sbin/udevadm settle
+    sleep 5
+    umount $USBDEV &> /dev/null
+    /sbin/mkfs.ext4 -L LIVE $USBDEV
+    USBLABEL="UUID=$(/sbin/blkid -s UUID -o value $USBDEV)"
+}
+
 checkGPT() {
     dev=$1
     getdisk $dev
@@ -231,10 +253,13 @@ checkFilesystem() {
     dev=$1
 
     USBFS=$(/sbin/blkid -s TYPE -o value $dev)
-    if [ "$USBFS" != "vfat" -a "$USBFS" != "msdos" -a "$USBFS" != "ext2" -a "$USBFS" != "ext3" ]; then
-	echo "USB filesystem must be vfat or ext[23]"
-	exitclean
+    if [ "$USBFS" != "vfat" ] && [ "$USBFS" != "msdos" ]; then
+        if [ "$USBFS" != "ext2" ] && [ "$USBFS" != "ext3" ] && [ "$USBFS" != "ext4" ]; then
+	    echo "USB filesystem must be vfat or ext[234]"
+	    exitclean
+        fi
     fi
+    
 
     USBLABEL=$(/sbin/blkid -s UUID -o value $dev)
     if [ -n "$USBLABEL" ]; then 
@@ -247,7 +272,7 @@ checkFilesystem() {
 	    echo "Need to have a filesystem label or UUID for your USB device"
 	    if [ "$USBFS" = "vfat" -o "$USBFS" = "msdos" ]; then
 		echo "Label can be set with /sbin/dosfslabel"
-	    elif [ "$USBFS" = "ext2" -o "$USBFS" = "ext3" ]; then
+	    elif [ "$USBFS" = "ext2" -o "$USBFS" = "ext3" -o "$USBFS" = "ext4" ]; then
 		echo "Label can be set with /sbin/e2label"
 	    fi
 	    exitclean
@@ -451,6 +476,7 @@ if [ -z "$noverify" ]; then
     fi
 fi
 
+checkFilesystem $USBDEV
 # do some basic sanity checks.  
 checkMounted $USBDEV
 if [ -n "$format" -a -z "$skipcopy" ];then
@@ -458,14 +484,18 @@ if [ -n "$format" -a -z "$skipcopy" ];then
   # checks for a valid filesystem
   if [ -n "$efi" ];then
     createGPTLayout $USBDEV
-  else
+  elif [ "$USBFS" == "vfat" -o "$USBFS" == "msdos" ]; then
     createMSDOSLayout $USBDEV
+  else
+    createEXTFSLayout $USBDEV
   fi
 fi
+
 checkFilesystem $USBDEV
 if [ -n "$efi" ]; then
   checkGPT $USBDEV
 fi
+
 checkSyslinuxVersion
 # Because we can't set boot flag for EFI Protective on msdos partition tables
 [ -z "$efi" ] && checkPartActive $USBDEV
@@ -785,7 +815,7 @@ if [ -z "$multi" ]; then
     cp /usr/lib/syslinux/menu.c32 $USBMNT/$SYSLINUXPATH/menu.c32
   fi
 
-  if [ "$USBFS" = "vfat" -o "$USBFS" = "msdos" ]; then
+  if [ "$USBFS" == "vfat" -o "$USBFS" == "msdos" ]; then
     # syslinux expects the config to be named syslinux.cfg 
     # and has to run with the file system unmounted
     mv $USBMNT/$SYSLINUXPATH/isolinux.cfg $USBMNT/$SYSLINUXPATH/syslinux.cfg
@@ -797,7 +827,7 @@ if [ -z "$multi" ]; then
     else
       syslinux $USBDEV
     fi
-  elif [ "$USBFS" = "ext2" -o "$USBFS" = "ext3" ]; then
+  elif [ "$USBFS" == "ext2" -o "$USBFS" == "ext3" -o "$USBFS" == "ext4" ]; then
     # extlinux expects the config to be named extlinux.conf
     # and has to be run with the file system mounted
     mv $USBMNT/$SYSLINUXPATH/isolinux.cfg $USBMNT/$SYSLINUXPATH/extlinux.conf




More information about the livecd mailing list