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

Jeremy Katz katzj at fedoraproject.org
Fri Mar 6 21:57:14 UTC 2009


 tools/livecd-iso-to-disk.sh |  132 +++++++++++++++++++++-----------------------
 1 file changed, 63 insertions(+), 69 deletions(-)

New commits:
commit 3db0a1cc2cbd218673cb9174e83fcfb059c1a59f
Author: Jeremy Katz <katzj at redhat.com>
Date:   Fri Mar 6 15:58:27 2009 -0500

    Basic support for multi-image mode
    
    Multi-image mode doesn't install a boot loader, so you have to set it up by hand for now
    which is left as an exercise for the reader

diff --git a/tools/livecd-iso-to-disk.sh b/tools/livecd-iso-to-disk.sh
index def083b..c803bc7 100755
--- a/tools/livecd-iso-to-disk.sh
+++ b/tools/livecd-iso-to-disk.sh
@@ -245,6 +245,8 @@ checkSyslinuxVersion() {
     fi
     if ! syslinux 2>&1 | grep -qe -d; then
 	SYSLINUXPATH=""
+    elif [ -n "$multi" ]; then
+	SYSLINUXPATH="$LIVEOS/syslinux"
     else
 	SYSLINUXPATH="syslinux"
     fi
@@ -346,7 +348,11 @@ while [ $# -gt 2 ]; do
 	    LIVEOS=$2
 	    shift
 	    ;;
+	--multi)
+	    multi=1
+	    ;;
 	*)
+	    echo "invalid arg -- $1"
 	    usage
 	    ;;
     esac
@@ -637,28 +643,33 @@ EOF
 
 fi
 
-echo "Installing boot loader"
-if [ -n "$efi" ]; then
+if [ -z "$multi" ]; then
+  echo "Installing boot loader"
+  if [ -n "$efi" ]; then
     # replace the ia32 hack
     if [ -f "$USBMNT/EFI/boot/boot.conf" ]; then cp -f $USBMNT/EFI/boot/bootia32.conf $USBMNT/EFI/boot/boot.conf ; fi
-fi
+  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
     cleanup
     if [ -n "$SYSLINUXPATH" ]; then
-	syslinux -d $SYSLINUXPATH $USBDEV
+      syslinux -d $SYSLINUXPATH $USBDEV
     else
-	syslinux $USBDEV
+      syslinux $USBDEV
     fi
-elif [ "$USBFS" = "ext2" -o "$USBFS" = "ext3" ]; then
+  elif [ "$USBFS" = "ext2" -o "$USBFS" = "ext3" ]; 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
     extlinux -i $USBMNT/$SYSLINUXPATH
     cleanup
+  fi
+else
+  cleanup
+  echo "Multi-image mode selected; not setting up bootloader"
 fi
 
 echo "USB stick set up as live image!"


commit 96e874e2893f2f73348d19037a08b51ee72651d2
Author: Jeremy Katz <katzj at redhat.com>
Date:   Fri Mar 6 14:56:12 2009 -0500

    More generally, this is EFI support, not just Intel Macs

diff --git a/tools/livecd-iso-to-disk.sh b/tools/livecd-iso-to-disk.sh
index b7677f0..def083b 100755
--- a/tools/livecd-iso-to-disk.sh
+++ b/tools/livecd-iso-to-disk.sh
@@ -68,8 +68,8 @@ resetMBR() {
        return
     fi
     getdisk $1
-    # if mactel, we need to use the hybrid MBR
-    if [ -n "$mactel" ];then
+    # if efi, we need to use the hybrid MBR
+    if [ -n "$efi" ];then
       if [ -f /usr/lib/syslinux/gptmbr.bin ]; then
         gptmbr='/usr/lib/syslinux/gptmbr.bin'
       elif [ -f /usr/share/syslinux/gptmbr.bin ]; then
@@ -313,8 +313,8 @@ while [ $# -gt 2 ]; do
 	--reset-mbr|--resetmbr)
 	    resetmbr=1
 	    ;;
-	--mactel)
-	    mactel=1
+	--efi|--mactel)
+	    efi=1
 	    ;;
 	--format)
 	    format=1
@@ -384,19 +384,19 @@ fi
 checkMounted $USBDEV
 if [ -n "$format" ];then
   # checks for a valid filesystem
-  if [ -n "$mactel" ];then
+  if [ -n "$efi" ];then
     createGPTLayout $USBDEV
   else
     createMSDOSLayout $USBDEV
   fi
 fi
 checkFilesystem $USBDEV
-if [ -n "$mactel" ]; then
+if [ -n "$efi" ]; then
   checkGPT $USBDEV
 fi
 checkSyslinuxVersion
 # Because we can't set boot flag for EFI Protective on msdos partition tables
-[ -z "$mactel" ] && checkPartActive $USBDEV
+[ -z "$efi" ] && checkPartActive $USBDEV
 [ -n "$resetmbr" ] && resetMBR $USBDEV
 checkMBR $USBDEV
 
@@ -436,7 +436,7 @@ if [ -f "$USBMNT/$LIVEOS/$HOMEFILE" -a -n "$keephome" -a "$homesizemb" -gt 0 ];
   exitclean
 fi
 
-if [ -n "$mactel" -a ! -d $CDMNT/EFI/boot ]; then
+if [ -n "$efi" -a ! -d $CDMNT/EFI/boot ]; then
   echo "ERROR: This live image does not support EFI booting"
   exitclean
 fi
@@ -492,7 +492,7 @@ fi
 
 # Bootloader is always reconfigured, so keep these out of the if skipcopy stuff.
 [ ! -d $USBMNT/$SYSLINUXPATH ] && mkdir -p $USBMNT/$SYSLINUXPATH
-[ -n "$mactel" -a ! -d $USBMNT/EFI/boot ] && mkdir -p $USBMNT/EFI/boot
+[ -n "$efi" -a ! -d $USBMNT/EFI/boot ] && mkdir -p $USBMNT/EFI/boot
 
 if [ -z "$skipcopy" ];then
   echo "Copying live image to USB stick"
@@ -516,7 +516,7 @@ cp $CDMNT/isolinux/* $USBMNT/$SYSLINUXPATH
 BOOTCONFIG=$USBMNT/$SYSLINUXPATH/isolinux.cfg
 # Set this to nothing so sed doesn't care
 BOOTCONFIG_EFI=
-if [ -n "$mactel" ];then
+if [ -n "$efi" ];then
   cp $CDMNT/EFI/boot/* $USBMNT/EFI/boot
 
   # this is a little ugly, but it gets the "interesting" named config file
@@ -638,7 +638,7 @@ EOF
 fi
 
 echo "Installing boot loader"
-if [ -n "$mactel" ]; then
+if [ -n "$efi" ]; then
     # replace the ia32 hack
     if [ -f "$USBMNT/EFI/boot/boot.conf" ]; then cp -f $USBMNT/EFI/boot/bootia32.conf $USBMNT/EFI/boot/boot.conf ; fi
 fi


commit 5aa56a03e6d75d439d06a65635c0c394106c0e60
Author: Jeremy Katz <katzj at redhat.com>
Date:   Fri Mar 6 14:54:43 2009 -0500

    Stop supporting making our own EFI-able images
    
    Fedora 10 images supported EFI boot and Fedora 11 will.  Earlier releases don't
    really have all of the needed bits to make this work well

diff --git a/tools/livecd-iso-to-disk.sh b/tools/livecd-iso-to-disk.sh
index d816533..b7677f0 100755
--- a/tools/livecd-iso-to-disk.sh
+++ b/tools/livecd-iso-to-disk.sh
@@ -436,6 +436,11 @@ if [ -f "$USBMNT/$LIVEOS/$HOMEFILE" -a -n "$keephome" -a "$homesizemb" -gt 0 ];
   exitclean
 fi
 
+if [ -n "$mactel" -a ! -d $CDMNT/EFI/boot ]; then
+  echo "ERROR: This live image does not support EFI booting"
+  exitclean
+fi
+
 # let's try to make sure there's enough room on the stick
 if [ -d $CDMNT/LiveOS ]; then
   check=$CDMNT/LiveOS
@@ -512,35 +517,7 @@ BOOTCONFIG=$USBMNT/$SYSLINUXPATH/isolinux.cfg
 # Set this to nothing so sed doesn't care
 BOOTCONFIG_EFI=
 if [ -n "$mactel" ];then
-  if [ -d $CDMNT/EFI/boot ]; then
-    cp $CDMNT/EFI/boot/* $USBMNT/EFI/boot
-  else
-    # whee!  this image wasn't made with grub.efi bits.  so we get to create
-    # them here.  isn't life grand?
-    cp $CDMNT/isolinux/* $USBMNT/EFI/boot
-    mount -o loop,ro -t squashfs $CDMNT/$LIVEOS/squashfs.img $CDMNT
-    mount -o loop,ro -t ext3 $CDMNT/$LIVEOS/ext3fs.img $CDMNT
-    cp $CDMNT/boot/efi/EFI/redhat/grub.efi $USBMNT/EFI/boot/boot.efi
-    cp $CDMNT/boot/grub/splash.xpm.gz $USBMNT/EFI/boot/splash.xpm.gz
-    if [ -d $CDMNT/lib64 ]; then efiarch="x64" ; else efiarch="ia32"; fi
-    umount $CDMNT
-    umount $CDMNT
-
-    # magic config...
-    cat > $USBMNT/EFI/boot/boot.conf <<EOF
-default=0
-splashimage=/EFI/boot/splash.xpm.gz
-timeout 10
-hiddenmenu
-
-title Live
-  kernel /EFI/boot/vmlinuz0 root=CDLABEL=live rootfstype=iso9660 ro quiet liveimg
-  initrd /EFI/boot/initrd0.img
-EOF
-
-    cp $USBMNT/EFI/boot/boot.conf $USBMNT/EFI/boot/boot${efiarch}.conf
-    cp $USBMNT/EFI/boot/boot.efi $USBMNT/EFI/boot/boot${efiarch}.efi
-  fi
+  cp $CDMNT/EFI/boot/* $USBMNT/EFI/boot
 
   # this is a little ugly, but it gets the "interesting" named config file
   BOOTCONFIG_EFI=$USBMNT/EFI/boot/boot?*.conf


commit 95393d0e4be6b5599f54baaf727c17bce09fb3f7
Author: Jeremy Katz <katzj at redhat.com>
Date:   Fri Mar 6 16:23:03 2009 -0500

    Simple parameterization to replace all LiveOS instances with $LIVEOS
    
    To start supporting multiple live images, we need to handle switching out.  Note there are still
    a few things which are always LiveOS (eg, CDs created by livecd-creator)

diff --git a/tools/livecd-iso-to-disk.sh b/tools/livecd-iso-to-disk.sh
index 7ab1d86..d816533 100755
--- a/tools/livecd-iso-to-disk.sh
+++ b/tools/livecd-iso-to-disk.sh
@@ -278,6 +278,7 @@ keephome=1
 homesizemb=0
 swapsizemb=0
 overlaysizemb=0
+LIVEOS=LiveOS
 
 HOMEFILE="home.img"
 while [ $# -gt 2 ]; do
@@ -341,6 +342,10 @@ while [ $# -gt 2 ]; do
         --force)
             force=1
             ;;
+	--livedir)
+	    LIVEOS=$2
+	    shift
+	    ;;
 	*)
 	    usage
 	    ;;
@@ -425,7 +430,7 @@ mount $mountopts $USBDEV $USBMNT || exitclean
 
 trap exitclean SIGINT SIGTERM
 
-if [ -f "$USBMNT/LiveOS/$HOMEFILE" -a -n "$keephome" -a "$homesizemb" -gt 0 ]; then
+if [ -f "$USBMNT/$LIVEOS/$HOMEFILE" -a -n "$keephome" -a "$homesizemb" -gt 0 ]; then
   echo "ERROR: Requested keeping existing /home and specified a size for /home"
   echo "Please either don't specify a size or specify --delete-home"
   exitclean
@@ -437,9 +442,9 @@ if [ -d $CDMNT/LiveOS ]; then
 else
   check=$CDMNT
 fi
-if [ -d $USBMNT/LiveOS ]; then
-  tbd=$(du -s -B 1M $USBMNT/LiveOS | awk {'print $1;'})
-  [ -f $USBMNT/LiveOS/$HOMEFILE ] && homesz=$(du -s -B 1M $USBMNT/LiveOS/$HOMEFILE | awk {'print $1;'})
+if [ -d $USBMNT/$LIVEOS ]; then
+  tbd=$(du -s -B 1M $USBMNT/$LIVEOS | awk {'print $1;'})
+  [ -f $USBMNT/$LIVEOS/$HOMEFILE ] && homesz=$(du -s -B 1M $USBMNT/$LIVEOS/$HOMEFILE | awk {'print $1;'})
   [ -n "$homesz" -a -n "$keephome" ] && tbd=$(($tbd - $homesz))
 else
   tbd=0
@@ -463,9 +468,9 @@ if [ $(($overlaysizemb + $homesizemb + $livesize + $swapsizemb)) -gt $(($free +
 fi
 
 if [ -z "$skipcopy" ];then
-  if [ -d $USBMNT/LiveOS -a -z "$force" ]; then
+  if [ -d $USBMNT/$LIVEOS -a -z "$force" ]; then
       echo "Already set up as live image."  
-      if [ -z "$keephome" -a -e $USBMNT/LiveOS/$HOMEFILE ]; then
+      if [ -z "$keephome" -a -e $USBMNT/$LIVEOS/$HOMEFILE ]; then
         echo "WARNING: Persistent /home will be deleted!!!"
         echo "Press Enter to continue or ctrl-c to abort"
         read
@@ -473,10 +478,10 @@ if [ -z "$skipcopy" ];then
         echo "Deleting old OS in fifteen seconds..."
         sleep 15
 
-        [ -e "$USBMNT/LiveOS/$HOMEFILE" -a -n "$keephome" ] && mv $USBMNT/LiveOS/$HOMEFILE $USBMNT/$HOMEFILE
+        [ -e "$USBMNT/$LIVEOS/$HOMEFILE" -a -n "$keephome" ] && mv $USBMNT/$LIVEOS/$HOMEFILE $USBMNT/$HOMEFILE
       fi
 
-      rm -rf $USBMNT/LiveOS
+      rm -rf $USBMNT/$LIVEOS
   fi
 fi
 
@@ -486,19 +491,19 @@ fi
 
 if [ -z "$skipcopy" ];then
   echo "Copying live image to USB stick"
-  [ ! -d $USBMNT/LiveOS ] && mkdir $USBMNT/LiveOS
-  [ -n "$keephome" -a -f "$USBMNT/$HOMEFILE" ] && mv $USBMNT/$HOMEFILE $USBMNT/LiveOS/$HOMEFILE
+  [ ! -d $USBMNT/$LIVEOS ] && mkdir $USBMNT/$LIVEOS
+  [ -n "$keephome" -a -f "$USBMNT/$HOMEFILE" ] && mv $USBMNT/$HOMEFILE $USBMNT/$LIVEOS/$HOMEFILE
   if [ -n "$skipcompress" -a -f $CDMNT/LiveOS/squashfs.img ]; then
       mount -o loop $CDMNT/LiveOS/squashfs.img $CDMNT
-      cp $CDMNT/LiveOS/ext3fs.img $USBMNT/LiveOS/ext3fs.img || (umount $CDMNT ; exitclean)
+      cp $CDMNT/LiveOS/ext3fs.img $USBMNT/$LIVEOS/ext3fs.img || (umount $CDMNT ; exitclean)
       umount $CDMNT
   elif [ -f $CDMNT/LiveOS/squashfs.img ]; then
-      cp $CDMNT/LiveOS/squashfs.img $USBMNT/LiveOS/squashfs.img || exitclean
+      cp $CDMNT/LiveOS/squashfs.img $USBMNT/$LIVEOS/squashfs.img || exitclean
   elif [ -f $CDMNT/LiveOS/ext3fs.img ]; then
-      cp $CDMNT/LiveOS/ext3fs.img $USBMNT/LiveOS/ext3fs.img || exitclean
+      cp $CDMNT/LiveOS/ext3fs.img $USBMNT/$LIVEOS/ext3fs.img || exitclean
   fi
   if [ -f $CDMNT/LiveOS/osmin.img ]; then
-      cp $CDMNT/LiveOS/osmin.img $USBMNT/LiveOS/osmin.img || exitclean
+      cp $CDMNT/LiveOS/osmin.img $USBMNT/$LIVEOS/osmin.img || exitclean
   fi
 fi
 
@@ -513,8 +518,8 @@ if [ -n "$mactel" ];then
     # whee!  this image wasn't made with grub.efi bits.  so we get to create
     # them here.  isn't life grand?
     cp $CDMNT/isolinux/* $USBMNT/EFI/boot
-    mount -o loop,ro -t squashfs $CDMNT/LiveOS/squashfs.img $CDMNT
-    mount -o loop,ro -t ext3 $CDMNT/LiveOS/ext3fs.img $CDMNT
+    mount -o loop,ro -t squashfs $CDMNT/$LIVEOS/squashfs.img $CDMNT
+    mount -o loop,ro -t ext3 $CDMNT/$LIVEOS/ext3fs.img $CDMNT
     cp $CDMNT/boot/efi/EFI/redhat/grub.efi $USBMNT/EFI/boot/boot.efi
     cp $CDMNT/boot/grub/splash.xpm.gz $USBMNT/EFI/boot/splash.xpm.gz
     if [ -d $CDMNT/lib64 ]; then efiarch="x64" ; else efiarch="ia32"; fi
@@ -546,15 +551,16 @@ echo "Updating boot config file"
 # adjust label and fstype
 sed -i -e "s/CDLABEL=[^ ]*/$USBLABEL/" -e "s/rootfstype=[^ ]*/rootfstype=$USBFS/" $BOOTCONFIG  $BOOTCONFIG_EFI
 if [ -n "$kernelargs" ]; then sed -i -e "s/liveimg/liveimg ${kernelargs}/" $BOOTCONFIG $BOOTCONFIG_EFI ; fi
+if [ "$LIVEOS" != "LiveOS" ]; then sed -i -e "s;liveimg;liveimg live_dir=$LIVEOS;" $BOOTCONFIG $BOOTCONFIG_EFI ; fi
 
 if [ "$overlaysizemb" -gt 0 ]; then
     echo "Initializing persistent overlay file"
     OVERFILE="overlay-$( /lib/udev/vol_id -l $USBDEV )-$( /lib/udev/vol_id -u $USBDEV )"
     if [ "$USBFS" = "vfat" ]; then
 	# vfat can't handle sparse files
-	dd if=/dev/zero of=$USBMNT/LiveOS/$OVERFILE count=$overlaysizemb bs=1M
+	dd if=/dev/zero of=$USBMNT/$LIVEOS/$OVERFILE count=$overlaysizemb bs=1M
     else
-	dd if=/dev/null of=$USBMNT/LiveOS/$OVERFILE count=1 bs=1M seek=$overlaysizemb
+	dd if=/dev/null of=$USBMNT/$LIVEOS/$OVERFILE count=1 bs=1M seek=$overlaysizemb
     fi
     sed -i -e "s/liveimg/liveimg overlay=${USBLABEL}/" $BOOTCONFIG $BOOTCONFIG_EFI
     sed -i -e "s/\ ro\ /\ rw\ /" $BOOTCONFIG  $BOOTCONFIG_EFI
@@ -562,8 +568,8 @@ fi
 
 if [ "$swapsizemb" -gt 0 ]; then
     echo "Initializing swap file"
-    dd if=/dev/zero of=$USBMNT/LiveOS/swap.img count=$swapsizemb bs=1M
-    mkswap -f $USBMNT/LiveOS/swap.img
+    dd if=/dev/zero of=$USBMNT/$LIVEOS/swap.img count=$swapsizemb bs=1M
+    mkswap -f $USBMNT/$LIVEOS/swap.img
 fi
 
 if [ "$homesizemb" -gt 0 ]; then
@@ -572,13 +578,13 @@ if [ "$homesizemb" -gt 0 ]; then
     [ -n "$cryptedhome" ] && homesource=/dev/urandom
     if [ "$USBFS" = "vfat" ]; then
 	# vfat can't handle sparse files
-	dd if=${homesource} of=$USBMNT/LiveOS/$HOMEFILE count=$homesizemb bs=1M
+	dd if=${homesource} of=$USBMNT/$LIVEOS/$HOMEFILE count=$homesizemb bs=1M
     else
-	dd if=/dev/null of=$USBMNT/LiveOS/$HOMEFILE count=1 bs=1M seek=$homesizemb
+	dd if=/dev/null of=$USBMNT/$LIVEOS/$HOMEFILE count=1 bs=1M seek=$homesizemb
     fi
     if [ -n "$cryptedhome" ]; then
 	loop=$(losetup -f)
-	losetup $loop $USBMNT/LiveOS/$HOMEFILE
+	losetup $loop $USBMNT/$LIVEOS/$HOMEFILE
 	setupworked=1
 	until [ ${setupworked} == 0 ]; do
             echo "Encrypting persistent /home"
@@ -597,8 +603,8 @@ if [ "$homesizemb" -gt 0 ]; then
         losetup -d $loop
     else
         echo "Formatting unencrypted /home"
-	mke2fs -F -j $USBMNT/LiveOS/$HOMEFILE
-	tune2fs -c0 -i0 -ouser_xattr,acl $USBMNT/LiveOS/$HOMEFILE
+	mke2fs -F -j $USBMNT/$LIVEOS/$HOMEFILE
+	tune2fs -c0 -i0 -ouser_xattr,acl $USBMNT/$LIVEOS/$HOMEFILE
     fi
 fi
 
@@ -608,7 +614,7 @@ fi
 if [ -n "$xo" ]; then
     echo "Setting up /boot/olpc.fth file"
     args=$(egrep "^[ ]*append" $USBMNT/$SYSLINUXPATH/isolinux.cfg |head -n1 |sed -e 's/.*initrd=[^ ]*//')
-    if [ -z "$xonohome" -a ! -f $USBMNT/LiveOS/$HOMEFILE ]; then
+    if [ -z "$xonohome" -a ! -f $USBMNT/$LIVEOS/$HOMEFILE ]; then
 	args="$args persistenthome=mtd0"
     fi
     args="$args reset_overlay"





More information about the Fedora-livecd-list mailing list