Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Dengler <martin@martindengler.com>2009-06-23 19:40:37 (GMT)
committer Martin Dengler <martin@martindengler.com>2009-06-23 20:18:11 (GMT)
commita8444e713ced98123d9c0ee1a9afc7cc677b8b95 (patch)
treec011d5250f7ba00b86d38c0a9ab5d73e5151ddc1
parentd60911265e4173ce779589d16a84a0440e2a690f (diff)
remove livecd-iso-to-disk and replace with livecd-iso-to-disk from git head
replace livecd-iso-to-disk.sh with version from git (672e6db330432d260204ac4bc73ac0df86617364): http://git.fedoraproject.org/git/?p=hosted/livecd;a=blob;f=tools/livecd-iso-to-disk.sh;h=672e6db330432d260204ac4bc73ac0df86617364;hb=HEAD
-rwxr-xr-xbuild2
-rwxr-xr-xlivecd-iso-to-disk625
-rw-r--r--[-rwxr-xr-x]livecd-iso-to-disk.sh59
3 files changed, 40 insertions, 646 deletions
diff --git a/build b/build
index fce23c0..e471ff1 100755
--- a/build
+++ b/build
@@ -19,7 +19,7 @@ ln -s ${bstem}.plc fs.plc
popd
device=`./make_fake_device.sh ${stem}-bootable.img`
-./livecd-iso-to-disk --reset-mbr --xo --noverify ${stem}.iso $device
+./livecd-iso-to-disk.sh --reset-mbr --xo --xo-no-home --noverify ${stem}.iso $device
pushd images
tar cf - ${bstem}-bootable.img | lzma -1 > ${bstem}-bootable.tar.lzma
popd
diff --git a/livecd-iso-to-disk b/livecd-iso-to-disk
deleted file mode 100755
index 817082c..0000000
--- a/livecd-iso-to-disk
+++ /dev/null
@@ -1,625 +0,0 @@
-#!/bin/bash
-# Convert a live CD iso so that it's bootable off of a USB stick
-# Copyright 2007 Red Hat, Inc.
-# Jeremy Katz <katzj@redhat.com>
-#
-# overlay/persistence enhancements by Douglas McClendon <dmc@viros.org>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Library General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-set -x
-
-export PATH=/sbin:/usr/sbin:$PATH
-
-usage() {
- echo "$0 [--reset-mbr] [--noverify] [--overlay-size-mb <size>] [--home-size-mb <size>] [--unencrypted-home] <isopath> <usbstick device>"
- exit 1
-}
-
-cleanup() {
- [ -d "$CDMNT" ] && umount $CDMNT && rmdir $CDMNT
- [ -d "$USBMNT" ] && umount $USBMNT && rmdir $USBMNT
-}
-
-exitclean() {
- echo "Cleaning up to exit..."
- cleanup
- exit 1
-}
-
-getdisk() {
- DEV=$1
-
- if [[ "$DEV" =~ "/dev/loop*" ]]; then
- device="$DEV"
- return
- fi
-
- p=$(udevinfo -q path -n $DEV)
- if [ -e /sys/$p/device ]; then
- device=$(basename /sys/$p)
- else
- device=$(basename $(readlink -f /sys/$p/../))
- fi
- if [ ! -e /sys/block/$device -o ! -e /dev/$device ]; then
- echo "Error finding block device of $DEV. Aborting!"
- exitclean
- fi
-
- device="/dev/$device"
- # FIXME: weird dev names could mess this up I guess
- p=/dev/`basename $p`
- partnum=${p##$device}
-}
-
-resetMBR() {
- #if [[ "$DEV" =~ "/dev/loop*" ]]; then
- # return
- #fi
- getdisk $1
- if [ -f /usr/lib/syslinux/mbr.bin ]; then
- cat /usr/lib/syslinux/mbr.bin > $device
- elif [ -f /usr/share/syslinux/mbr.bin ]; then
- cat /usr/share/syslinux/mbr.bin > $device
- else
- exitclean
- fi
-}
-
-checkMBR() {
- getdisk $1
-
- bs=$(mktemp /tmp/bs.XXXXXX)
- dd if=$device of=$bs bs=512 count=1 2>/dev/null || exit 2
-
- mbrword=$(hexdump -n 2 $bs |head -n 1|awk {'print $2;'})
- rm -f $bs
- if [ "$mbrword" = "0000" ]; then
- echo "MBR appears to be blank."
- echo "Do you want to replace the MBR on this device?"
- echo "Press Enter to continue or ctrl-c to abort"
- read
- resetMBR $1
- fi
-
- return 0
-}
-
-checkPartActive() {
- dev=$1
- getdisk $dev
-
- # if we're installing to whole-disk and not a partition, then we
- # don't need to worry about being active
- if [ "$dev" = "$device" ]; then
- return
- fi
- if [[ "$dev" =~ "/dev/loop*" ]]; then
- return
- fi
-
- if [ "$(/sbin/fdisk -l $device 2>/dev/null |grep $dev |awk {'print $2;'})" != "*" ]; then
- echo "Partition isn't marked bootable!"
- echo "You can mark the partition as bootable with "
- echo " # /sbin/parted $device"
- echo " (parted) toggle N boot"
- echo " (parted) quit"
- exitclean
- fi
-}
-
-createGPTLayout() {
- dev=$1
- getdisk $dev
-
- echo "WARNING: THIS WILL DESTROY ANY DATA ON $device!!!"
- echo "Press Enter to continue or ctrl-c to abort"
- read
-
- /sbin/parted --script $device mklabel gpt
- partinfo=$(/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 '"EFI System Partition"' fat32 17408 $(($size - 17408)) set 1 boot on
- USBDEV=${device}1
- /sbin/udevsettle
- /sbin/mkdosfs -n LIVE $USBDEV
- USBLABEL="UUID=$(/lib/udev/vol_id -u $dev)"
-}
-
-checkGPT() {
- dev=$1
- getdisk $dev
-
- if [ "$(/sbin/fdisk -l $device 2>/dev/null |grep -c GPT)" -eq "0" ]; then
- echo "EFI boot requires a GPT partition table."
- echo "This can be done manually or you can run with --reset-mbr"
- exitclean
- fi
-
- partinfo=$(/sbin/parted --script -m $device "print" |grep ^$partnum:)
- volname=$(echo $partinfo |cut -d : -f 6)
- flags=$(echo $partinfo |cut -d : -f 7)
- if [ "$volname" != "EFI System Partition" ]; then
- echo "Partition name must be 'EFI System Partition'"
- echo "This can be set in parted or you can run with --reset-mbr"
- exitclean
- fi
- if [ "$(echo $flags |grep -c boot)" = "0" ]; then
- echo "Partition isn't marked bootable!"
- echo "You can mark the partition as bootable with "
- echo " # /sbin/parted $device"
- echo " (parted) toggle N boot"
- echo " (parted) quit"
- exitclean
- fi
-}
-
-checkFilesystem() {
- dev=$1
-
- USBFS=$(/lib/udev/vol_id -t $dev)
- if [ "$USBFS" != "vfat" -a "$USBFS" != "msdos" -a "$USBFS" != "ext2" -a "$USBFS" != "ext3" ]; then
- echo "USB filesystem must be vfat or ext[23]"
- exitclean
- fi
-
- USBLABEL=$(/lib/udev/vol_id -u $dev)
- if [ -n "$USBLABEL" ]; then
- USBLABEL="UUID=$USBLABEL" ;
- else
- USBLABEL=$(/lib/udev/vol_id -l $dev)
- if [ -n "$USBLABEL" ]; then
- USBLABEL="LABEL=$USBLABEL"
- else
- 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
- echo "Label can be set with /sbin/e2label"
- fi
- exitclean
- fi
- fi
-
- if [ "$USBFS" = "vfat" -o "$USBFS" = "msdos" ]; then
- mountopts="-o shortname=winnt,umask=0077"
- fi
-}
-
-checkSyslinuxVersion() {
- if [ ! -x /usr/bin/syslinux ]; then
- echo "You need to have syslinux installed to run this script"
- exit 1
- fi
- if ! syslinux 2>&1 | grep -qe -d; then
- SYSLINUXPATH=""
- else
- SYSLINUXPATH="syslinux"
- fi
-}
-
-checkMounted() {
- dev=$1
- if grep -q "^$dev " /proc/mounts ; then
- echo "$dev is mounted, please unmount for safety"
- exitclean
- fi
- if grep -q "^$dev " /proc/swaps; then
- echo "$dev is in use as a swap device, please disable swap"
- exitclean
- fi
-}
-
-checkint() {
- if ! test $1 -gt 0 2>/dev/null ; then
- usage
- fi
-}
-
-if [ $(id -u) != 0 ]; then
- echo "You need to be root to run this script"
- exit 1
-fi
-
-cryptedhome=1
-keephome=1
-homesizemb=0
-swapsizemb=0
-overlaysizemb=0
-
-HOMEFILE="home.img"
-while [ $# -gt 2 ]; do
- case $1 in
- --overlay-size-mb)
- checkint $2
- overlaysizemb=$2
- shift
- ;;
- --home-size-mb)
- checkint $2
- homesizemb=$2
- shift
- ;;
- --swap-size-mb)
- checkint $2
- swapsizemb=$2
- shift
- ;;
- --crypted-home)
- cryptedhome=1
- ;;
- --unencrypted-home)
- cryptedhome=""
- ;;
- --delete-home)
- keephome=""
- ;;
- --noverify)
- noverify=1
- ;;
- --reset-mbr|--resetmbr)
- resetmbr=1
- ;;
- --mactel)
- mactel=1
- ;;
- --xo)
- xo=1
- unsquashfs="1"
- ;;
- --xo-no-home)
- xonohome=1
- ;;
- --keep-squashfs)
- unsquashfs=""
- ;;
- --unsquashfs)
- unsquashfs=1
- ;;
- --extra-kernel-args)
- kernelargs=$2
- shift
- ;;
- --force)
- force=1
- ;;
- *)
- usage
- ;;
- esac
- shift
-done
-
-ISO=$(readlink -f "$1")
-USBDEV=$(readlink -f "$2")
-
-if [ -z "$ISO" ]; then
- usage
-fi
-
-if [ ! -b "$ISO" -a ! -f "$ISO" ]; then
- usage
-fi
-
-if [ -z "$USBDEV" -o ! -b "$USBDEV" ]; then
- usage
-fi
-
-if [ -z "$noverify" ]; then
- # verify the image
- echo "Verifying image..."
- checkisomd5 --verbose "$ISO"
- if [ $? -ne 0 ]; then
- echo "Are you SURE you want to continue?"
- echo "Press Enter to continue or ctrl-c to abort"
- read
- fi
-fi
-
-# do some basic sanity checks.
-checkFilesystem $USBDEV
-checkMounted $USBDEV
-if [ -z "$mactel" ]; then
- checkSyslinuxVersion
- checkPartActive $USBDEV
- [ -n "$resetmbr" ] && resetMBR $USBDEV
- checkMBR $USBDEV
-elif [ -n "$mactel" ]; then
- [ -n "$resetmbr" ] && createGPTLayout $USBDEV
- checkGPT $USBDEV
-fi
-
-
-if [ "$overlaysizemb" -gt 0 -a "$USBFS" = "vfat" ]; then
- if [ "$overlaysizemb" -gt 2047 ]; then
- echo "Can't have an overlay of 2048MB or greater on VFAT"
- exitclean
- fi
-fi
-
-if [ "$homesizemb" -gt 0 -a "$USBFS" = "vfat" ]; then
- if [ "$homesizemb" -gt 2047 ]; then
- echo "Can't have a home overlay greater than 2048MB on VFAT"
- exitclean
- fi
-fi
-
-if [ "$swapsizemb" -gt 0 -a "$USBFS" = "vfat" ]; then
- if [ "$swapsizemb" -gt 2047 ]; then
- echo "Can't have a swap file greater than 2048MB on VFAT"
- exitclean
- fi
-fi
-
-# FIXME: would be better if we had better mountpoints
-CDMNT=$(mktemp -d /media/cdtmp.XXXXXX)
-mount -o loop,ro "$ISO" $CDMNT || exitclean
-USBMNT=$(mktemp -d /media/usbdev.XXXXXX)
-mount $mountopts $USBDEV $USBMNT || exitclean
-
-trap exitclean SIGINT SIGTERM
-
-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
-fi
-
-# let's try to make sure there's enough room on the stick
-if [ -d $CDMNT/LiveOS ]; then
- check=$CDMNT/LiveOS
-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;'})
- [ -n "$homesz" -a -n "$keephome" ] && tbd=$(($tbd - $homesz))
-else
- tbd=0
-fi
-livesize=$(du -s -B 1M $check | awk {'print $1;'})
-if [ -n "$unsquashfs" -a -f $CDMNT/LiveOS/squashfs.img ]; then
- cat /etc/mtab
- mount -o loop $CDMNT/LiveOS/squashfs.img $CDMNT && \
- livesize=$(du -s -B 1M $CDMNT/LiveOS/ext3fs.img | awk {'print $1;'}) && \
- umount $CDMNT
- cat /etc/mtab
-fi
-free=$(df -B1M $USBDEV |tail -n 1 |awk {'print $4;'})
-
-if [ $(($overlaysizemb + $homesizemb + $livesize + $swapsizemb)) -gt $(($free + $tbd)) ]; then
- echo "Unable to fit live image + overlay on available space on USB stick"
- echo "Size of live image: $livesize"
- [ "$overlaysizemb" -gt 0 ] && echo "Overlay size: $overlaysizemb"
- [ "$homesizemb" -gt 0 ] && echo "Home overlay size: $homesizemb"
- [ "$swapsizemb" -gt 0 ] && echo "Home overlay size: $swapsizemb"
- echo "Available space: $(($free + $tbd))"
- exitclean
-fi
-
-if [ -d $USBMNT/LiveOS -a -z "$force" ]; then
- echo "Already set up as live image."
- 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
- else
- echo "Deleting old OS in fifteen seconds..."
- sleep 15
-
- [ -e "$USBMNT/LiveOS/$HOMEFILE" -a -n "$keephome" ] && mv $USBMNT/LiveOS/$HOMEFILE $USBMNT/$HOMEFILE
- fi
-
- rm -rf $USBMNT/LiveOS
-fi
-
-echo "Copying live image to USB stick"
-[ -z "$mactel" -a ! -d $USBMNT/$SYSLINUXPATH ] && mkdir -p $USBMNT/$SYSLINUXPATH
-[ -n "$mactel" -a ! -d $USBMNT/EFI/boot ] && mkdir -p $USBMNT/EFI/boot
-[ ! -d $USBMNT/LiveOS ] && mkdir $USBMNT/LiveOS
-[ -n "$keephome" -a -f "$USBMNT/$HOMEFILE" ] && mv $USBMNT/$HOMEFILE $USBMNT/LiveOS/$HOMEFILE
-# cases without /LiveOS are legacy detection, remove for F10
-if [ -n "$unsquashfs" -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)
- umount $CDMNT
-elif [ -f $CDMNT/LiveOS/squashfs.img ]; then
- cp $CDMNT/LiveOS/squashfs.img $USBMNT/LiveOS/squashfs.img || exitclean
-elif [ -f $CDMNT/squashfs.img ]; then
- cp $CDMNT/squashfs.img $USBMNT/LiveOS/squashfs.img || exitclean
-elif [ -f $CDMNT/LiveOS/ext3fs.img ]; then
- cp $CDMNT/LiveOS/ext3fs.img $USBMNT/LiveOS/ext3fs.img || exitclean
-elif [ -f $CDMNT/ext3fs.img ]; then
- cp $CDMNT/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
-fi
-
-if [ -z "$mactel" ]; then
- cp $CDMNT/isolinux/* $USBMNT/$SYSLINUXPATH
- BOOTCONFIG=$USBMNT/$SYSLINUXPATH/isolinux.cfg
-else
- 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
-
- # this is a little ugly, but it gets the "interesting" named config file
- BOOTCONFIG=$USBMNT/EFI/boot/boot?*.conf
- rm -f $USBMNT/EFI/boot/grub.conf
-fi
-
-echo "Updating boot config file"
-# adjust label and fstype
-sed -i -e "s/CDLABEL=[^ ]*/$USBLABEL/" -e "s/rootfstype=[^ ]*/rootfstype=$USBFS/" $BOOTCONFIG
-if [ -n "$kernelargs" ]; then sed -i -e "s/liveimg/liveimg ${kernelargs}/" $BOOTCONFIG ; 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
- else
- dd if=/dev/null of=$USBMNT/LiveOS/$OVERFILE count=1 bs=1M seek=$overlaysizemb
- fi
- sed -i -e "s/liveimg/liveimg overlay=${USBLABEL}/" $BOOTCONFIG
- sed -i -e "s/\ ro\ /\ rw\ /" $BOOTCONFIG
-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
-fi
-
-if [ "$homesizemb" -gt 0 ]; then
- echo "Initializing persistent /home"
- if [ "$USBFS" = "vfat" ]; then
- # vfat can't handle sparse files
- dd if=/dev/zero of=$USBMNT/LiveOS/$HOMEFILE count=$homesizemb bs=1M
- else
- 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
- echo "Encrypting persistent /home"
- cryptsetup luksFormat -y -q $loop
- echo "Please enter the password again to unlock the device"
- cryptsetup luksOpen $loop EncHomeFoo
- mke2fs -j /dev/mapper/EncHomeFoo
- tune2fs -c0 -i0 -ouser_xattr,acl /dev/mapper/EncHomeFoo
- cryptsetup luksClose EncHomeFoo
- losetup -d $loop
- else
- echo "Formatting unencrypted /home"
- mke2fs -F -j $USBMNT/LiveOS/$HOMEFILE
- tune2fs -c0 -i0 -ouser_xattr,acl $USBMNT/LiveOS/$HOMEFILE
- fi
-fi
-
-# create the forth files for booting on the XO if requested
-# we'd do this unconditionally, but you have to have a kernel that will
-# boot on the XO anyway.
-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
- args="$args persistenthome=mtd0"
- fi
- args="$args reset_overlay"
- if [ ! -d $USBMNT/boot ]; then mkdir -p $USBMNT/boot ; fi
- cat > $USBMNT/boot/olpc.fth <<EOF
-\ Boot script for USB boot
-hex rom-pa fffc7 + 4 \$number drop h# 2e19 < [if]
- patch 2drop erase claim-params
- : high-ramdisk ( -- )
- cv-load-ramdisk
- h# 22c +lp l@ 1+ memory-limit umin /ramdisk - ffff.f000 and ( new-ramdisk-adr )
- ramdisk-adr over /ramdisk move ( new-ramdisk-adr )
- to ramdisk-adr
- ;
- ' high-ramdisk to load-ramdisk
-[then]
-
-: set-bootpath-dev ( -- )
- " /chosen" find-package if ( phandle )
- " bootpath" rot get-package-property 0= if ( propval$ )
- get-encoded-string ( bootpath$ )
- [char] \ left-parse-string 2nip ( dn$ )
- dn-buf place ( )
- then
- then
-
- " /sd" dn-buf count sindex 0>= if
- " sd:"
- else
- " u:"
- then
- " BOOTPATHDEV" \$set-macro
-;
-
-set-bootpath-dev
-" $args" to boot-file
-" \${BOOTPATHDEV}\syslinux\initrd0.img" expand$ to ramdisk
-" \${BOOTPATHDEV}\syslinux\vmlinuz0" expand$ to boot-device
-unfreeze
-boot
-EOF
-
-fi
-
-echo "Installing boot loader"
-# this is a bit of a kludge, but syslinux doesn't guarantee the API for its com32 modules :/
-if [ -f $USBMNT/$SYSLINUXPATH/vesamenu.c32 -a -f /usr/share/syslinux/vesamenu.c32 ]; then
- cp /usr/share/syslinux/vesamenu.c32 $USBMNT/$SYSLINUXPATH/vesamenu.c32
-elif [ -f $USBMNT/$SYSLINUXPATH/vesamenu.c32 -a -f /usr/lib/syslinux/vesamenu.c32 ]; then
- cp /usr/lib/syslinux/vesamenu.c32 $USBMNT/$SYSLINUXPATH/vesamenu.c32
-elif [ -f $USBMNT/$SYSLINUXPATH/menu.c32 -a -f /usr/share/syslinux/menu.c32 ]; then
- cp /usr/share/syslinux/menu.c32 $USBMNT/$SYSLINUXPATH/menu.c32
-elif [ -f $USBMNT/$SYSLINUXPATH/menu.c32 -a -f /usr/lib/syslinux/menu.c32 ]; then
- cp /usr/lib/syslinux/menu.c32 $USBMNT/$SYSLINUXPATH/menu.c32
-fi
-
-if [ -n "$mactel" ]; 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
- cleanup
-elif [ "$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
- else
- syslinux $USBDEV
- fi
-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/syslinux
- cleanup
-fi
-
-echo "USB stick set up as live image!"
diff --git a/livecd-iso-to-disk.sh b/livecd-iso-to-disk.sh
index 3ee51b1..672e6db 100755..100644
--- a/livecd-iso-to-disk.sh
+++ b/livecd-iso-to-disk.sh
@@ -152,8 +152,8 @@ createGPTLayout() {
/sbin/udevadm settle
sleep 5
umount $USBDEV &> /dev/null
- /sbin/mkdosfs -n FEDORA $USBDEV
- USBLABEL="UUID=$(/lib/udev/vol_id -u $USBDEV)"
+ /sbin/mkdosfs -n LIVE $USBDEV
+ USBLABEL="UUID=$(/sbin/blkid -s UUID -o value $USBDEV)"
}
createMSDOSLayout() {
@@ -174,8 +174,8 @@ createMSDOSLayout() {
/sbin/udevadm settle
sleep 5
umount $USBDEV &> /dev/null
- /sbin/mkdosfs -n FEDORA $USBDEV
- USBLABEL="UUID=$(/lib/udev/vol_id -u $USBDEV)"
+ /sbin/mkdosfs -n LIVE $USBDEV
+ USBLABEL="UUID=$(/sbin/blkid -s UUID -o value $USBDEV)"
}
checkGPT() {
@@ -191,6 +191,11 @@ checkGPT() {
partinfo=$(/sbin/parted --script -m $device "print" |grep ^$partnum:)
volname=$(echo $partinfo |cut -d : -f 6)
flags=$(echo $partinfo |cut -d : -f 7)
+ if [ "$volname" != "EFI System Partition" ]; then
+ echo "Partition name must be 'EFI System Partition'"
+ echo "This can be set in parted or you can run with --reset-mbr"
+ exitclean
+ fi
if [ "$(echo $flags |grep -c boot)" = "0" ]; then
echo "Partition isn't marked bootable!"
echo "You can mark the partition as bootable with "
@@ -204,17 +209,17 @@ checkGPT() {
checkFilesystem() {
dev=$1
- USBFS=$(/lib/udev/vol_id -t $dev)
+ 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
fi
- USBLABEL=$(/lib/udev/vol_id -u $dev)
+ USBLABEL=$(/sbin/blkid -s UUID -o value $dev)
if [ -n "$USBLABEL" ]; then
USBLABEL="UUID=$USBLABEL" ;
else
- USBLABEL=$(/lib/udev/vol_id -l $dev)
+ USBLABEL=$(/sbin/blkid -s LABEL -o value $dev)
if [ -n "$USBLABEL" ]; then
USBLABEL="LABEL=$USBLABEL"
else
@@ -457,19 +462,32 @@ else
fi
livesize=$(du -s -B 1M $check | awk {'print $1;'})
if [ -n "$skipcompress" ]; then
- mount -o loop $CDMNT/LiveOS/squashfs.img $CDMNT
- livesize=$(du -s -B 1M $CDMNT/LiveOS/ext3fs.img | awk {'print $1;'})
- umount $CDMNT
+ if [ -e $CDMNT/LiveOS/squashfs.img ]; then
+ if mount -o loop $CDMNT/LiveOS/squashfs.img $CDMNT; then
+ livesize=$(du -s -B 1M $CDMNT/LiveOS/ext3fs.img | awk {'print $1;'})
+ umount $CDMNT
+ else
+ echo "WARNING: --skipcompress or --xo was specified but the currently"
+ echo "running kernel can not mount the squashfs from the ISO file to extract"
+ echo "it. The compressed squashfs will be copied to the USB stick."
+ skipcompress=""
+ fi
+ fi
fi
free=$(df -B1M $USBDEV |tail -n 1 |awk {'print $4;'})
-if [ $(($overlaysizemb + $homesizemb + $livesize + $swapsizemb)) -gt $(($free + $tbd)) ]; then
+ tba=$(($overlaysizemb + $homesizemb + $livesize + $swapsizemb))
+if [ $tba -gt $(($free + $tbd)) ]; then
echo "Unable to fit live image + overlay on available space on USB stick"
- echo "Size of live image: $livesize"
- [ "$overlaysizemb" -gt 0 ] && echo "Overlay size: $overlaysizemb"
- [ "$homesizemb" -gt 0 ] && echo "Home overlay size: $homesizemb"
- [ "$swapsizemb" -gt 0 ] && echo "Home overlay size: $swapsizemb"
- echo "Available space: $(($free + $tbd))"
+ echo "+ Size of live image: $livesize"
+ [ "$overlaysizemb" -gt 0 ] && echo "+ Overlay size: $overlaysizemb"
+ [ "$homesizemb" -gt 0 ] && echo "+ Home overlay size: $homesizemb"
+ [ "$swapsizemb" -gt 0 ] && echo "+ Swap overlay size: $swapsizemb"
+ echo "---------------------------"
+ echo "= Requested: $tba"
+ echo "- Available: $(($free + $tbd))"
+ echo "---------------------------"
+ echo "= To fit, free or decrease requested size total by: $(($tba - $free + $tbd))"
exitclean
fi
@@ -500,7 +518,7 @@ if [ -z "$skipcopy" ];then
[ ! -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
+ mount -o loop $CDMNT/LiveOS/squashfs.img $CDMNT || exitclean
cp $CDMNT/LiveOS/ext3fs.img $USBMNT/$LIVEOS/ext3fs.img || (umount $CDMNT ; exitclean)
umount $CDMNT
elif [ -f $CDMNT/LiveOS/squashfs.img ]; then
@@ -533,7 +551,7 @@ if [ "$LIVEOS" != "LiveOS" ]; then sed -i -e "s;liveimg;liveimg live_dir=$LIVEOS
if [ "$overlaysizemb" -gt 0 ]; then
echo "Initializing persistent overlay file"
- OVERFILE="overlay-$( /lib/udev/vol_id -l $USBDEV )-$( /lib/udev/vol_id -u $USBDEV )"
+ OVERFILE="overlay-$( /sbin/blkid -s LABEL -o value $USBDEV )-$( /sbin/blkid -s UUID -o value $USBDEV )"
if [ "$USBFS" = "vfat" ]; then
# vfat can't handle sparse files
dd if=/dev/zero of=$USBMNT/$LIVEOS/$OVERFILE count=$overlaysizemb bs=1M
@@ -673,12 +691,13 @@ if [ -z "$multi" ]; then
# and has to be run with the file system mounted
mv $USBMNT/$SYSLINUXPATH/isolinux.cfg $USBMNT/$SYSLINUXPATH/extlinux.conf
extlinux -i $USBMNT/$SYSLINUXPATH
+ chattr -i $USBMNT/$SYSLINUXPATH/extlinux.sys
cleanup
fi
else
# we need to do some more config file tweaks for multi-image mode
- sed -i -e "s;kernel vm;kernel $LIVEOS/syslinux/vm;" $USBMNT/$SYSLINUXPATH/isolinux.cfg
- sed -i -e "s;initrd i;initrd $LIVEOS/syslinux/i;" $USBMNT/$SYSLINUXPATH/isolinux.cfg
+ sed -i -e "s;kernel vm;kernel /$LIVEOS/syslinux/vm;" $USBMNT/$SYSLINUXPATH/isolinux.cfg
+ sed -i -e "s;initrd=i;initrd=/$LIVEOS/syslinux/i;" $USBMNT/$SYSLINUXPATH/isolinux.cfg
mv $USBMNT/$SYSLINUXPATH/isolinux.cfg $USBMNT/$SYSLINUXPATH/syslinux.cfg
cleanup
fi