[Fedora-livecd-list] tools/livecd-iso-to-disk.sh
Brian C. Lane
bcl at fedoraproject.org
Fri Mar 11 22:55:31 UTC 2011
tools/livecd-iso-to-disk.sh | 67 ++++++++++++++++++++------------------------
1 file changed, 31 insertions(+), 36 deletions(-)
New commits:
commit f798217e9d04ce815a9ec288d3f7e88088771fd6
Author: Lubomir Rintel <lkundrak at v3.sk>
Date: Fri Mar 11 14:53:21 2011 -0800
livecd-iso-to-disk: Catch all failures
The utility used to success also in cases where catasthropic failures, such as
failure to install boot loader occured. This turns on shell options to catch
such problems and only tolerates non-zero exit values on case-by-case basis.
The utility with this change applied has received fair amount of testing
(against vfat and ext3 filesystems, with permutations of --format and --efi),
though some more testing might be useful.
(bcl: I modified the patch slightly so that luks encryption on home.img would
work with this change)
diff --git a/tools/livecd-iso-to-disk.sh b/tools/livecd-iso-to-disk.sh
index 3489d51..454b893 100755
--- a/tools/livecd-iso-to-disk.sh
+++ b/tools/livecd-iso-to-disk.sh
@@ -277,9 +277,13 @@ cleanup() {
}
exitclean() {
- echo "Cleaning up to exit..."
- cleanup
- exit 1
+ RETVAL=$?
+ if [ -d "$SRCMNT" ] || [ -d "$TGTMNT" ];
+ then
+ [ "$RETVAL" = 0 ] || echo "Cleaning up to exit..."
+ cleanup
+ fi
+ exit $RETVAL
}
isdevloop() {
@@ -398,7 +402,7 @@ checkLVM() {
dev=$1
if [ -x /sbin/pvs -a \
- "$(/sbin/pvs -o vg_name --noheadings $dev* 2>/dev/null)" ]; then
+ "$(/sbin/pvs -o vg_name --noheadings $dev* 2>/dev/null || :)" ]; then
echo "Device, $dev, contains a volume group and cannot be formated!"
echo "You can remove the volume group using vgremove."
exitclean
@@ -413,7 +417,7 @@ createGPTLayout() {
echo "WARNING: THIS WILL DESTROY ANY DATA ON $device!!!"
echo "Press Enter to continue or ctrl-c to abort"
read
- umount ${device}* &> /dev/null
+ umount ${device}* &> /dev/null || :
/sbin/parted --script $device mklabel gpt
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$//')
@@ -424,7 +428,7 @@ createGPTLayout() {
sleep 5
getpartition ${device#/dev/}
TGTDEV=${device}${partnum}
- umount $TGTDEV &> /dev/null
+ umount $TGTDEV &> /dev/null || :
/sbin/mkdosfs -n LIVE $TGTDEV
TGTLABEL="UUID=$(/sbin/blkid -s UUID -o value $TGTDEV)"
}
@@ -436,7 +440,7 @@ createMSDOSLayout() {
echo "WARNING: THIS WILL DESTROY ANY DATA ON $device!!!"
echo "Press Enter to continue or ctrl-c to abort"
read
- umount ${device}* &> /dev/null
+ 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$//')
@@ -451,7 +455,7 @@ createMSDOSLayout() {
else
TGTDEV=${device}
fi
- umount $TGTDEV &> /dev/null
+ umount $TGTDEV &> /dev/null || :
/sbin/mkdosfs -n LIVE $TGTDEV
TGTLABEL="UUID=$(/sbin/blkid -s UUID -o value $TGTDEV)"
}
@@ -463,7 +467,7 @@ createEXTFSLayout() {
echo "WARNING: THIS WILL DESTROY ANY DATA ON $device!!!"
echo "Press Enter to continue or ctrl-c to abort"
read
- umount ${device}* &> /dev/null
+ 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$//')
@@ -474,7 +478,7 @@ createEXTFSLayout() {
sleep 5
getpartition ${device#/dev/}
TGTDEV=${device}${partnum}
- umount $TGTDEV &> /dev/null
+ umount $TGTDEV &> /dev/null || :
# Check extlinux version
if extlinux -v 2>&1 | grep -q 'extlinux 3'; then
@@ -516,7 +520,7 @@ checkGPT() {
checkFilesystem() {
dev=$1
- TGTFS=$(/sbin/blkid -s TYPE -o value $dev)
+ TGTFS=$(/sbin/blkid -s TYPE -o value $dev || :)
if [ "$TGTFS" != "vfat" ] && [ "$TGTFS" != "msdos" ]; then
if [ "$TGTFS" != "ext2" ] && [ "$TGTFS" != "ext3" ] && [ "$TGTFS" != "ext4" ] && [ "$TGTFS" != "btrfs" ]; then
echo "Target filesystem must be vfat, ext[234] or btrfs"
@@ -640,6 +644,10 @@ copyFile() {
cp "$1" "$2"
}
+set -e
+set -o pipefail
+trap exitclean EXIT
+
cryptedhome=1
keephome=1
homesizemb=0
@@ -776,8 +784,7 @@ fi
if [ -z "$noverify" ]; then
# verify the image
echo "Verifying image..."
- checkisomd5 --verbose "$SRC"
- if [ $? -ne 0 ]; then
+ if ! checkisomd5 --verbose "$SRC"; then
echo "Are you SURE you want to continue?"
echo "Press Enter to continue or ctrl-c to abort"
read
@@ -876,7 +883,7 @@ if [[ live == $srctype ]]; then
targets="$TGTMNT/$SYSLINUXPATH"
[[ -n $efi ]] && targets+=" $TGTMNT/EFI/boot"
[[ -n $xo ]] && targets+=" $TGTMNT/boot/olpc.fth"
- duTable=($(du -c -B 1M $targets 2> /dev/null))
+ duTable=($(du -c -B 1M $targets 2> /dev/null || :))
((tbd += ${duTable[*]: -2:1}))
fi
@@ -908,7 +915,7 @@ if [[ live == $srctype ]]; then
sources+=" $SRCMNT/isolinux $SRCMNT/syslinux"
[[ -n $efi ]] && sources+=" $SRCMNT/EFI/boot"
[[ -n $xo ]] && sources+=" $SRCMNT/boot/olpc.fth"
- duTable=($(du -c -B 1M "$thisScriptpath" $sources 2> /dev/null))
+ duTable=($(du -c -B 1M "$thisScriptpath" $sources 2> /dev/null || :))
((livesize += ${duTable[*]: -2:1}))
fi
@@ -1052,7 +1059,8 @@ fi
if [[ live == $srctype ]]; then
# Copy this installer script.
- cp -fTp "$thisScriptpath" $TGTMNT/$LIVEOS/livecd-iso-to-disk &> /dev/null
+ cp -fT "$thisScriptpath" $TGTMNT/$LIVEOS/livecd-iso-to-disk
+ chmod +x $TGTMNT/$LIVEOS/livecd-iso-to-disk &> /dev/null || :
# When the source is an installed Live USB/SD image, restore the boot config
# file to a base state before updating.
@@ -1141,29 +1149,16 @@ if [ "$homesizemb" -gt 0 -a -z "$skipcopy" ]; then
else
dd if=/dev/null of=$TGTMNT/$LIVEOS/$HOMEFILE count=1 bs=1M seek=$homesizemb
fi
- if [ $? -gt 0 ]; then
- echo "Error creating $TGTMNT/$LIVEOS/$HOMEFILE"
- exitclean
- fi
if [ -n "$cryptedhome" ]; then
loop=$(losetup -f)
losetup $loop $TGTMNT/$LIVEOS/$HOMEFILE
- if [ $? -gt 0 ]; then
- echo "Error setting up $TGTMNT/$LIVEOS/$HOMEFILE on $loop"
- exitclean
- fi
- setupworked=1
- until [ ${setupworked} == 0 ]; do
- echo "Encrypting persistent /home"
- cryptsetup luksFormat -y -q $loop
- setupworked=$?
- done
- setupworked=1
- until [ ${setupworked} == 0 ]; do
- echo "Please enter the password again to unlock the device"
- cryptsetup luksOpen $loop EncHomeFoo
- setupworked=$?
- done
+
+ echo "Encrypting persistent /home"
+ while ! cryptsetup luksFormat -y -q $loop; do :; done;
+
+ echo "Please enter the password again to unlock the device"
+ while ! cryptsetup luksOpen $loop EncHomeFoo; do :; done;
+
mkfs.ext4 -j /dev/mapper/EncHomeFoo
tune2fs -c0 -i0 -ouser_xattr,acl /dev/mapper/EncHomeFoo
sleep 2
More information about the livecd
mailing list