* [PATCH 0/8] mkefidisk updates and gummiboot support
@ 2014-07-16 14:15 Darren Hart
2014-07-16 14:15 ` [PATCH 1/8] mkefidisk.sh: Use all caps for volume names Darren Hart
` (7 more replies)
0 siblings, 8 replies; 10+ messages in thread
From: Darren Hart @ 2014-07-16 14:15 UTC (permalink / raw)
To: openembedded-core
mkefidisk was in need of some improvements. This adds gummiboot support, but
also adds improved logging, output formatting, robustness, error trapping,
cleanup, and verbosity control.
The following changes since commit 03c6fd0caab0ea8dcc2e0c3ab827a287a4f36910:
ltp: use "foreign" automake strictness (2014-07-16 10:31:17 +0100)
are available in the git repository at:
git://git.yoctoproject.org/poky-contrib dvhart/mkefidisk
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=dvhart/mkefidisk
Darren Hart (8):
mkefidisk.sh: Use all caps for volume names
mkefidisk.sh: Add mount error checking
mkefidisk.sh: Add gummiboot support
mkefidisk.sh: Copy the EFI dir recursively
mkefidisk.sh: Improve logging
mkefidisk.sh: Add die() and cleanup() routines
mkefidisk.sh: Make the rootfs copy the last step
mkefidisk.sh: Reduce output and add verbose flag
scripts/contrib/mkefidisk.sh | 306 ++++++++++++++++++++++++++++---------------
1 file changed, 204 insertions(+), 102 deletions(-)
--
2.0.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/8] mkefidisk.sh: Use all caps for volume names
2014-07-16 14:15 [PATCH 0/8] mkefidisk updates and gummiboot support Darren Hart
@ 2014-07-16 14:15 ` Darren Hart
2014-07-16 14:15 ` [PATCH 2/8] mkefidisk.sh: Add mount error checking Darren Hart
` (6 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Darren Hart @ 2014-07-16 14:15 UTC (permalink / raw)
To: openembedded-core
Avoid some mkfs warnings by using all caps in the volume names.
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
---
scripts/contrib/mkefidisk.sh | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/scripts/contrib/mkefidisk.sh b/scripts/contrib/mkefidisk.sh
index 1992d6c..959307a 100755
--- a/scripts/contrib/mkefidisk.sh
+++ b/scripts/contrib/mkefidisk.sh
@@ -208,14 +208,14 @@ unmount_device
echo ""
echo "Formatting $BOOTFS as vfat..."
if [ ! "${DEVICE#/dev/loop}" = "${DEVICE}" ]; then
- mkfs.vfat -I $BOOTFS -n "efi"
+ mkfs.vfat -I $BOOTFS -n "EFI"
else
- mkfs.vfat $BOOTFS -n "efi"
+ mkfs.vfat $BOOTFS -n "EFI"
fi
echo "Formatting $ROOTFS as ext3..."
-mkfs.ext3 $ROOTFS -L "root"
+mkfs.ext3 -F $ROOTFS -L "ROOT"
echo "Formatting swap partition...($SWAP)"
mkswap $SWAP
--
2.0.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/8] mkefidisk.sh: Add mount error checking
2014-07-16 14:15 [PATCH 0/8] mkefidisk updates and gummiboot support Darren Hart
2014-07-16 14:15 ` [PATCH 1/8] mkefidisk.sh: Use all caps for volume names Darren Hart
@ 2014-07-16 14:15 ` Darren Hart
2014-07-16 14:15 ` [PATCH 3/8] mkefidisk.sh: Add gummiboot support Darren Hart
` (5 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Darren Hart @ 2014-07-16 14:15 UTC (permalink / raw)
To: openembedded-core
Provide reasonable feedabck if the mount commands fail.
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
---
scripts/contrib/mkefidisk.sh | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/scripts/contrib/mkefidisk.sh b/scripts/contrib/mkefidisk.sh
index 959307a..0d0674b 100755
--- a/scripts/contrib/mkefidisk.sh
+++ b/scripts/contrib/mkefidisk.sh
@@ -241,7 +241,11 @@ mkdir $ROOTFS_MNT
mkdir $BOOTFS_MNT
mount -o loop $HDDIMG $HDDIMG_MNT
+if [ $? -ne 0 ]; then echo "ERROR: Failed to mount $HDDIMG"; fi
+
mount -o loop $HDDIMG_MNT/rootfs.img $HDDIMG_ROOTFS_MNT
+if [ $? -ne 0 ]; then echo "ERROR: Failed to mount rootfs.img"; fi
+
mount $ROOTFS $ROOTFS_MNT
mount $BOOTFS $BOOTFS_MNT
--
2.0.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 3/8] mkefidisk.sh: Add gummiboot support
2014-07-16 14:15 [PATCH 0/8] mkefidisk updates and gummiboot support Darren Hart
2014-07-16 14:15 ` [PATCH 1/8] mkefidisk.sh: Use all caps for volume names Darren Hart
2014-07-16 14:15 ` [PATCH 2/8] mkefidisk.sh: Add mount error checking Darren Hart
@ 2014-07-16 14:15 ` Darren Hart
2014-07-17 21:44 ` Darren Hart
2014-07-16 14:16 ` [PATCH 4/8] mkefidisk.sh: Copy the EFI dir recursively Darren Hart
` (4 subsequent siblings)
7 siblings, 1 reply; 10+ messages in thread
From: Darren Hart @ 2014-07-16 14:15 UTC (permalink / raw)
To: openembedded-core
Fixes [YOCTO 6295]
Add gummiboot support for images built using:
EFI_PROVIDER="gummiboot"
Add conditional configuration for GRUB and gummiboot. Provide some
messaging about which is being performed.
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
---
scripts/contrib/mkefidisk.sh | 53 ++++++++++++++++++++++++++++++++++----------
1 file changed, 41 insertions(+), 12 deletions(-)
diff --git a/scripts/contrib/mkefidisk.sh b/scripts/contrib/mkefidisk.sh
index 0d0674b..9b13041 100755
--- a/scripts/contrib/mkefidisk.sh
+++ b/scripts/contrib/mkefidisk.sh
@@ -265,31 +265,60 @@ umount $HDDIMG_ROOTFS_MNT
echo "Preparing boot partition..."
EFIDIR="$BOOTFS_MNT/EFI/BOOT"
mkdir -p $EFIDIR
-GRUBCFG="$EFIDIR/grub.cfg"
cp $HDDIMG_MNT/vmlinuz $BOOTFS_MNT
-# Copy the efi loader and config (booti*.efi and grub.cfg)
+# Copy the efi loader and configs (booti*.efi and grub.cfg if it exists)
cp $HDDIMG_MNT/EFI/BOOT/* $EFIDIR
+# Silently ignore a missing gummiboot loader dir (we might just be a GRUB image)
+cp -r $HDDIMG_MNT/loader $BOOTFS_MNT 2> /dev/null
-# Update grub config for the installed image
-# Delete the install entry
-sed -i "/menuentry 'install'/,/^}/d" $GRUBCFG
-# Delete the initrd lines
-sed -i "/initrd /d" $GRUBCFG
-# Delete any LABEL= strings
-sed -i "s/ LABEL=[^ ]*/ /" $GRUBCFG
+# Update the boot loaders configurations for an installed image
# Remove any existing root= kernel parameters and:
# o Add a root= parameter with the target rootfs
# o Specify ro so fsck can be run during boot
# o Specify rootwait in case the target media is an asyncronous block device
# such as MMC or USB disks
# o Specify "quiet" to minimize boot time when using slow serial consoles
-sed -i "s@ root=[^ ]*@ @" $GRUBCFG
-sed -i "s@vmlinuz @vmlinuz root=$TARGET_ROOTFS ro rootwait quiet @" $GRUBCFG
+
+# Look for a GRUB installation
+GRUB_CFG="$EFIDIR/grub.cfg"
+if [ -e "$GRUB_CFG" ]; then
+ echo "Configuring GRUB"
+ # Delete the install entry
+ sed -i "/menuentry 'install'/,/^}/d" $GRUB_CFG
+ # Delete the initrd lines
+ sed -i "/initrd /d" $GRUB_CFG
+ # Delete any LABEL= strings
+ sed -i "s/ LABEL=[^ ]*/ /" $GRUB_CFG
+
+ sed -i "s@ root=[^ ]*@ @" $GRUB_CFG
+ sed -i "s@vmlinuz @vmlinuz root=$TARGET_ROOTFS ro rootwait quiet @" $GRUB_CFG
+fi
+
+# Look for a gummiboot installation
+GUMMI_ENTRIES="$BOOTFS_MNT/loader/entries"
+GUMMI_CFG="$GUMMI_ENTRIES/boot.conf"
+if [ -d "$GUMMI_ENTRIES" ]; then
+ echo "Configuring Gummiboot"
+ # remove the install target if it exists
+ rm $GUMMI_ENTRIES/install.conf &> /dev/null
+
+ if [ ! -e "$GUMMI_CFG" ]; then
+ echo "ERROR: $GUMMI_CFG not found"
+ fi
+
+ sed -i "s@ root=[^ ]*@ @" $GUMMI_CFG
+ sed -i "s@options *LABEL=boot @options LABEL=Boot root=$TARGET_ROOTFS ro rootwait quiet @" $GUMMI_CFG
+fi
+
+# Ensure we have at least one EFI bootloader configured
+if [ ! -e $GRUB_CFG ] && [ ! -e $GUMMI_CFG ]; then
+ echo "ERROR: No EFI bootloader configuration found"
+fi
umount $BOOTFS_MNT
umount $HDDIMG_MNT
rm -rf $TMPDIR
sync
-echo "Installation complete."
+echo "Installation complete"
--
2.0.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 4/8] mkefidisk.sh: Copy the EFI dir recursively
2014-07-16 14:15 [PATCH 0/8] mkefidisk updates and gummiboot support Darren Hart
` (2 preceding siblings ...)
2014-07-16 14:15 ` [PATCH 3/8] mkefidisk.sh: Add gummiboot support Darren Hart
@ 2014-07-16 14:16 ` Darren Hart
2014-07-16 14:16 ` [PATCH 5/8] mkefidisk.sh: Improve logging Darren Hart
` (3 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Darren Hart @ 2014-07-16 14:16 UTC (permalink / raw)
To: openembedded-core
Rather than only copying the EFI/BOOT dir, copy the entire EFI dir
recursively. This allows for custom configurations to be enabled
implicitly with no extra work required.
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
---
scripts/contrib/mkefidisk.sh | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/scripts/contrib/mkefidisk.sh b/scripts/contrib/mkefidisk.sh
index 9b13041..98c43f5 100755
--- a/scripts/contrib/mkefidisk.sh
+++ b/scripts/contrib/mkefidisk.sh
@@ -264,11 +264,9 @@ umount $HDDIMG_ROOTFS_MNT
echo "Preparing boot partition..."
EFIDIR="$BOOTFS_MNT/EFI/BOOT"
-mkdir -p $EFIDIR
-
cp $HDDIMG_MNT/vmlinuz $BOOTFS_MNT
# Copy the efi loader and configs (booti*.efi and grub.cfg if it exists)
-cp $HDDIMG_MNT/EFI/BOOT/* $EFIDIR
+cp -r $HDDIMG_MNT/EFI $BOOTFS_MNT
# Silently ignore a missing gummiboot loader dir (we might just be a GRUB image)
cp -r $HDDIMG_MNT/loader $BOOTFS_MNT 2> /dev/null
--
2.0.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 5/8] mkefidisk.sh: Improve logging
2014-07-16 14:15 [PATCH 0/8] mkefidisk updates and gummiboot support Darren Hart
` (3 preceding siblings ...)
2014-07-16 14:16 ` [PATCH 4/8] mkefidisk.sh: Copy the EFI dir recursively Darren Hart
@ 2014-07-16 14:16 ` Darren Hart
2014-07-16 14:16 ` [PATCH 6/8] mkefidisk.sh: Add die() and cleanup() routines Darren Hart
` (2 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Darren Hart @ 2014-07-16 14:16 UTC (permalink / raw)
To: openembedded-core
Add logging functions: error, warn, info, and success, using tput to add
color highlighting.
Use these routines throughout the script, replacing echo statements and
adding "|| error" in several places to eliminate silent failures. Add a
simple exit block which checks for issues encountered while running.
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
---
scripts/contrib/mkefidisk.sh | 92 +++++++++++++++++++++++++++++---------------
1 file changed, 60 insertions(+), 32 deletions(-)
diff --git a/scripts/contrib/mkefidisk.sh b/scripts/contrib/mkefidisk.sh
index 98c43f5..530b784 100755
--- a/scripts/contrib/mkefidisk.sh
+++ b/scripts/contrib/mkefidisk.sh
@@ -28,6 +28,29 @@ BOOT_SIZE=20
# 5% for swap
SWAP_RATIO=5
+# Logging routines
+WARNINGS=0
+ERRORS=0
+CLEAR="$(tput sgr0)"
+INFO="$(tput bold)"
+RED="$(tput setaf 1)$(tput bold)"
+GREEN="$(tput setaf 2)$(tput bold)"
+YELLOW="$(tput setaf 3)$(tput bold)"
+info() {
+ echo "${INFO}$1${CLEAR}"
+}
+error() {
+ ERRORS=$((ERRORS+1))
+ echo "${RED}$1${CLEAR}"
+}
+warn() {
+ WARNINGS=$((WARNINGS+1))
+ echo "${YELLOW}$1${CLEAR}"
+}
+success() {
+ echo "${GREEN}$1${CLEAR}"
+}
+
usage() {
echo "Usage: $(basename $0) DEVICE HDDIMG TARGET_DEVICE"
echo " DEVICE: The device to write the image to, e.g. /dev/sdh"
@@ -37,7 +60,7 @@ usage() {
image_details() {
IMG=$1
- echo "Image details"
+ info "Image details"
echo "============="
echo " image: $(stat --printf '%N\n' $IMG)"
echo " size: $(stat -L --printf '%s bytes\n' $IMG)"
@@ -50,7 +73,7 @@ device_details() {
DEV=$1
BLOCK_SIZE=512
- echo "Device details"
+ info "Device details"
echo "=============="
echo " device: $DEVICE"
if [ -f "/sys/class/block/$DEV/device/vendor" ]; then
@@ -74,14 +97,13 @@ device_details() {
unmount_device() {
grep -q $DEVICE /proc/mounts
if [ $? -eq 0 ]; then
- echo -n "$DEVICE listed in /proc/mounts, attempting to unmount..."
+ warn "$DEVICE listed in /proc/mounts, attempting to unmount..."
umount $DEVICE* 2>/dev/null
grep -q $DEVICE /proc/mounts
if [ $? -eq 0 ]; then
- echo "FAILED"
+ error "Failed to unmount $DEVICE"
exit 1
fi
- echo "OK"
fi
}
@@ -104,13 +126,13 @@ if [ $? -eq 0 ]; then
fi
if [ ! -w "$DEVICE" ]; then
- echo "ERROR: Device $DEVICE does not exist or is not writable"
+ error "Device $DEVICE does not exist or is not writable"
usage
exit 1
fi
if [ ! -e "$HDDIMG" ]; then
- echo "ERROR: HDDIMG $HDDIMG does not exist"
+ error "HDDIMG $HDDIMG does not exist"
usage
exit 1
fi
@@ -127,7 +149,7 @@ unmount_device
#
image_details $HDDIMG
device_details $(basename $DEVICE)
-echo -n "Prepare EFI image on $DEVICE [y/N]? "
+echo -n "${INFO}Prepare EFI image on $DEVICE [y/N]?${CLEAR} "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo "Image creation aborted"
@@ -208,17 +230,16 @@ unmount_device
echo ""
echo "Formatting $BOOTFS as vfat..."
if [ ! "${DEVICE#/dev/loop}" = "${DEVICE}" ]; then
- mkfs.vfat -I $BOOTFS -n "EFI"
+ mkfs.vfat -I $BOOTFS -n "EFI" || error "Failed to format $BOOTFS"
else
- mkfs.vfat $BOOTFS -n "EFI"
-
+ mkfs.vfat $BOOTFS -n "EFI" || error "Failed to format $BOOTFS"
fi
echo "Formatting $ROOTFS as ext3..."
-mkfs.ext3 -F $ROOTFS -L "ROOT"
+mkfs.ext3 -F $ROOTFS -L "ROOT" || error "Failed to format $ROOTFS"
echo "Formatting swap partition...($SWAP)"
-mkswap $SWAP
+mkswap $SWAP || error "Failed to prepare swap"
#
@@ -228,7 +249,7 @@ echo ""
echo "Mounting images and device in preparation for installation..."
TMPDIR=$(mktemp -d mkefidisk-XXX)
if [ $? -ne 0 ]; then
- echo "ERROR: Failed to create temporary mounting directory."
+ error "Failed to create temporary mounting directory."
exit 1
fi
HDDIMG_MNT=$TMPDIR/hddimg
@@ -240,17 +261,15 @@ mkdir $HDDIMG_ROOTFS_MNT
mkdir $ROOTFS_MNT
mkdir $BOOTFS_MNT
-mount -o loop $HDDIMG $HDDIMG_MNT
-if [ $? -ne 0 ]; then echo "ERROR: Failed to mount $HDDIMG"; fi
+mount -o loop $HDDIMG $HDDIMG_MNT || error "Failed to mount $HDDIMG"
-mount -o loop $HDDIMG_MNT/rootfs.img $HDDIMG_ROOTFS_MNT
-if [ $? -ne 0 ]; then echo "ERROR: Failed to mount rootfs.img"; fi
+mount -o loop $HDDIMG_MNT/rootfs.img $HDDIMG_ROOTFS_MNT || error "Failed to mount rootfs.img"
-mount $ROOTFS $ROOTFS_MNT
-mount $BOOTFS $BOOTFS_MNT
+mount $ROOTFS $ROOTFS_MNT || error "Failed to mount $ROOTFS on $ROOTFS_MNT"
+mount $BOOTFS $BOOTFS_MNT || error "Failed to mount $BOOTFS on $BOOTFS_MNT"
echo "Copying ROOTFS files..."
-cp -a $HDDIMG_ROOTFS_MNT/* $ROOTFS_MNT
+cp -a $HDDIMG_ROOTFS_MNT/* $ROOTFS_MNT || error "Root FS copy failed"
echo "$TARGET_SWAP swap swap defaults 0 0" >> $ROOTFS_MNT/etc/fstab
@@ -259,14 +278,14 @@ if [ -d $ROOTFS_MNT/etc/udev/ ] ; then
echo "$TARGET_DEVICE" >> $ROOTFS_MNT/etc/udev/mount.blacklist
fi
-umount $ROOTFS_MNT
-umount $HDDIMG_ROOTFS_MNT
+umount $ROOTFS_MNT || error "Failed to unmount $ROOTFS_MNT"
+umount $HDDIMG_ROOTFS_MNT || error "Failed to unmount $HDDIMG_ROOTFS_MNT"
echo "Preparing boot partition..."
EFIDIR="$BOOTFS_MNT/EFI/BOOT"
-cp $HDDIMG_MNT/vmlinuz $BOOTFS_MNT
+cp $HDDIMG_MNT/vmlinuz $BOOTFS_MNT || error "Failed to copy vmlinuz"
# Copy the efi loader and configs (booti*.efi and grub.cfg if it exists)
-cp -r $HDDIMG_MNT/EFI $BOOTFS_MNT
+cp -r $HDDIMG_MNT/EFI $BOOTFS_MNT || error "Failed to copy EFI dir"
# Silently ignore a missing gummiboot loader dir (we might just be a GRUB image)
cp -r $HDDIMG_MNT/loader $BOOTFS_MNT 2> /dev/null
@@ -281,7 +300,7 @@ cp -r $HDDIMG_MNT/loader $BOOTFS_MNT 2> /dev/null
# Look for a GRUB installation
GRUB_CFG="$EFIDIR/grub.cfg"
if [ -e "$GRUB_CFG" ]; then
- echo "Configuring GRUB"
+ info "Configuring GRUB"
# Delete the install entry
sed -i "/menuentry 'install'/,/^}/d" $GRUB_CFG
# Delete the initrd lines
@@ -297,7 +316,7 @@ fi
GUMMI_ENTRIES="$BOOTFS_MNT/loader/entries"
GUMMI_CFG="$GUMMI_ENTRIES/boot.conf"
if [ -d "$GUMMI_ENTRIES" ]; then
- echo "Configuring Gummiboot"
+ info "Configuring Gummiboot"
# remove the install target if it exists
rm $GUMMI_ENTRIES/install.conf &> /dev/null
@@ -311,12 +330,21 @@ fi
# Ensure we have at least one EFI bootloader configured
if [ ! -e $GRUB_CFG ] && [ ! -e $GUMMI_CFG ]; then
- echo "ERROR: No EFI bootloader configuration found"
+ error "No EFI bootloader configuration found"
fi
-umount $BOOTFS_MNT
-umount $HDDIMG_MNT
-rm -rf $TMPDIR
+umount $BOOTFS_MNT || error "Failed to unmount $BOOTFS_MNT"
+umount $HDDIMG_MNT || error "Failed to unmount $HDDIMG_MNT"
+rm -rf $TMPDIR || error "Failed to cleanup $TMPDIR"
sync
-echo "Installation complete"
+if [ $WARNINGS -ne 0 ] && [ $ERRORS -eq 0 ]; then
+ echo "${YELLOW}Installation completed with warnings${CLEAR}"
+ echo "${YELLOW}Warnings: $WARNINGS${CLEAR}"
+elif [ $ERRORS -ne 0 ]; then
+ echo "${RED}Installation encountered errors${CLEAR}"
+ echo "${RED}Errors: $ERRORS${CLEAR}"
+ echo "${YELLOW}Warnings: $WARNINGS${CLEAR}"
+else
+ success "Installation completed successfully"
+fi
--
2.0.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 6/8] mkefidisk.sh: Add die() and cleanup() routines
2014-07-16 14:15 [PATCH 0/8] mkefidisk updates and gummiboot support Darren Hart
` (4 preceding siblings ...)
2014-07-16 14:16 ` [PATCH 5/8] mkefidisk.sh: Improve logging Darren Hart
@ 2014-07-16 14:16 ` Darren Hart
2014-07-16 14:16 ` [PATCH 7/8] mkefidisk.sh: Make the rootfs copy the last step Darren Hart
2014-07-16 14:16 ` [PATCH 8/8] mkefidisk.sh: Reduce output and add verbose flag Darren Hart
7 siblings, 0 replies; 10+ messages in thread
From: Darren Hart @ 2014-07-16 14:16 UTC (permalink / raw)
To: openembedded-core
Currently the script will attempt to continue even after a fatal error.
Add a die() routine which will abort in the case of a fatal error and
call a cleanup() routine to unmount any images or devices and remove the
TMPDIR.
Move the variable assignment and directory creation earlier in the
script, making it more obvious what we need to clean up.
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
---
scripts/contrib/mkefidisk.sh | 115 +++++++++++++++++++++++++------------------
1 file changed, 68 insertions(+), 47 deletions(-)
diff --git a/scripts/contrib/mkefidisk.sh b/scripts/contrib/mkefidisk.sh
index 530b784..6cc6b78 100755
--- a/scripts/contrib/mkefidisk.sh
+++ b/scripts/contrib/mkefidisk.sh
@@ -28,6 +28,22 @@ BOOT_SIZE=20
# 5% for swap
SWAP_RATIO=5
+# Cleanup after die()
+cleanup() {
+ echo "Syncing and unmounting devices..."
+ # Unmount anything we mounted
+ unmount $ROOTFS_MNT || error "Failed to unmount $ROOTFS_MNT"
+ unmount $BOOTFS_MNT || error "Failed to unmount $BOOTFS_MNT"
+ unmount $HDDIMG_ROOTFS_MNT || error "Failed to unmount $HDDIMG_ROOTFS_MNT"
+ unmount $HDDIMG_MNT || error "Failed to unmount $HDDIMG_MNT"
+
+ # Remove the TMPDIR
+ echo "Removing temporary files..."
+ if [ -d "$TMPDIR" ]; then
+ rm -rf $TMPDIR || error "Failed to remove $TMPDIR"
+ fi
+}
+
# Logging routines
WARNINGS=0
ERRORS=0
@@ -50,6 +66,11 @@ warn() {
success() {
echo "${GREEN}$1${CLEAR}"
}
+die() {
+ error $1
+ cleanup
+ exit 1
+}
usage() {
echo "Usage: $(basename $0) DEVICE HDDIMG TARGET_DEVICE"
@@ -99,14 +120,20 @@ unmount_device() {
if [ $? -eq 0 ]; then
warn "$DEVICE listed in /proc/mounts, attempting to unmount..."
umount $DEVICE* 2>/dev/null
- grep -q $DEVICE /proc/mounts
- if [ $? -eq 0 ]; then
- error "Failed to unmount $DEVICE"
- exit 1
- fi
+ return $?
fi
+ return 0
}
+unmount() {
+ grep -q $1 /proc/mounts
+ if [ $? -eq 0 ]; then
+ echo "Unmounting $1..."
+ umount $1
+ return $?
+ fi
+ return 0
+}
#
# Parse and validate arguments
@@ -126,23 +153,24 @@ if [ $? -eq 0 ]; then
fi
if [ ! -w "$DEVICE" ]; then
- error "Device $DEVICE does not exist or is not writable"
usage
- exit 1
+ die "Device $DEVICE does not exist or is not writable"
fi
if [ ! -e "$HDDIMG" ]; then
- error "HDDIMG $HDDIMG does not exist"
usage
- exit 1
+ die "HDDIMG $HDDIMG does not exist"
fi
+#
+# Ensure the hddimg is not mounted
+#
+unmount "$HDDIMG" || die "Failed to unmount $HDDIMG"
#
# Check if any $DEVICE partitions are mounted
#
-unmount_device
-
+unmount_device || die "Failed to unmount $DEVICE"
#
# Confirm device with user
@@ -158,12 +186,26 @@ fi
#
+# Prepare the temporary working space
+#
+TMPDIR=$(mktemp -d mkefidisk-XXX) || die "Failed to create temporary mounting directory."
+HDDIMG_MNT=$TMPDIR/hddimg
+HDDIMG_ROOTFS_MNT=$TMPDIR/hddimg_rootfs
+ROOTFS_MNT=$TMPDIR/rootfs
+BOOTFS_MNT=$TMPDIR/bootfs
+mkdir $HDDIMG_MNT || die "Failed to create $HDDIMG_MNT"
+mkdir $HDDIMG_ROOTFS_MNT || die "Failed to create $HDDIMG_ROOTFS_MNT"
+mkdir $ROOTFS_MNT || die "Failed to create $ROOTFS_MNT"
+mkdir $BOOTFS_MNT || die "Failed to create $BOOTFS_MNT"
+
+
+#
# Partition $DEVICE
#
DEVICE_SIZE=$(parted $DEVICE unit mb print | grep ^Disk | cut -d" " -f 3 | sed -e "s/MB//")
# If the device size is not reported there may not be a valid label
if [ "$DEVICE_SIZE" = "" ] ; then
- parted $DEVICE mklabel msdos
+ parted $DEVICE mklabel msdos || die "Failed to create MSDOS partition table"
DEVICE_SIZE=$(parted $DEVICE unit mb print | grep ^Disk | cut -d" " -f 3 | sed -e "s/MB//")
fi
SWAP_SIZE=$((DEVICE_SIZE*SWAP_RATIO/100))
@@ -195,25 +237,25 @@ echo "Swap partition size: $SWAP_SIZE MB ($SWAP)"
echo "*****************"
echo "Deleting partition table on $DEVICE ..."
-dd if=/dev/zero of=$DEVICE bs=512 count=2
+dd if=/dev/zero of=$DEVICE bs=512 count=2 > /dev/null || die "Failed to zero beginning of $DEVICE"
# Use MSDOS by default as GPT cannot be reliably distributed in disk image form
# as it requires the backup table to be on the last block of the device, which
# of course varies from device to device.
echo "Creating new partition table (MSDOS) on $DEVICE ..."
-parted $DEVICE mklabel msdos
+parted $DEVICE mklabel msdos || die "Failed to create MSDOS partition table"
echo "Creating boot partition on $BOOTFS"
-parted $DEVICE mkpart primary 0% $BOOT_SIZE
+parted $DEVICE mkpart primary 0% $BOOT_SIZE || die "Failed to create BOOT partition"
echo "Enabling boot flag on $BOOTFS"
-parted $DEVICE set 1 boot on
+parted $DEVICE set 1 boot on || die "Failed to enable boot flag"
echo "Creating ROOTFS partition on $ROOTFS"
-parted $DEVICE mkpart primary $ROOTFS_START $ROOTFS_END
+parted $DEVICE mkpart primary $ROOTFS_START $ROOTFS_END || die "Failed to create ROOTFS partition"
echo "Creating swap partition on $SWAP"
-parted $DEVICE mkpart primary $SWAP_START 100%
+parted $DEVICE mkpart primary $SWAP_START 100% || die "Failed to create SWAP partition"
parted $DEVICE print
@@ -221,7 +263,7 @@ parted $DEVICE print
#
# Check if any $DEVICE partitions are mounted after partitioning
#
-unmount_device
+unmount_device || die "Failed to unmount $DEVICE partitions"
#
@@ -230,16 +272,16 @@ unmount_device
echo ""
echo "Formatting $BOOTFS as vfat..."
if [ ! "${DEVICE#/dev/loop}" = "${DEVICE}" ]; then
- mkfs.vfat -I $BOOTFS -n "EFI" || error "Failed to format $BOOTFS"
+ mkfs.vfat -I $BOOTFS -n "EFI" || die "Failed to format $BOOTFS"
else
- mkfs.vfat $BOOTFS -n "EFI" || error "Failed to format $BOOTFS"
+ mkfs.vfat $BOOTFS -n "EFI" || die "Failed to format $BOOTFS"
fi
echo "Formatting $ROOTFS as ext3..."
-mkfs.ext3 -F $ROOTFS -L "ROOT" || error "Failed to format $ROOTFS"
+mkfs.ext3 -F $ROOTFS -L "ROOT" || die "Failed to format $ROOTFS"
echo "Formatting swap partition...($SWAP)"
-mkswap $SWAP || error "Failed to prepare swap"
+mkswap $SWAP || die "Failed to prepare swap"
#
@@ -247,24 +289,8 @@ mkswap $SWAP || error "Failed to prepare swap"
#
echo ""
echo "Mounting images and device in preparation for installation..."
-TMPDIR=$(mktemp -d mkefidisk-XXX)
-if [ $? -ne 0 ]; then
- error "Failed to create temporary mounting directory."
- exit 1
-fi
-HDDIMG_MNT=$TMPDIR/hddimg
-HDDIMG_ROOTFS_MNT=$TMPDIR/hddimg_rootfs
-ROOTFS_MNT=$TMPDIR/rootfs
-BOOTFS_MNT=$TMPDIR/bootfs
-mkdir $HDDIMG_MNT
-mkdir $HDDIMG_ROOTFS_MNT
-mkdir $ROOTFS_MNT
-mkdir $BOOTFS_MNT
-
mount -o loop $HDDIMG $HDDIMG_MNT || error "Failed to mount $HDDIMG"
-
mount -o loop $HDDIMG_MNT/rootfs.img $HDDIMG_ROOTFS_MNT || error "Failed to mount rootfs.img"
-
mount $ROOTFS $ROOTFS_MNT || error "Failed to mount $ROOTFS on $ROOTFS_MNT"
mount $BOOTFS $BOOTFS_MNT || error "Failed to mount $BOOTFS on $BOOTFS_MNT"
@@ -278,9 +304,6 @@ if [ -d $ROOTFS_MNT/etc/udev/ ] ; then
echo "$TARGET_DEVICE" >> $ROOTFS_MNT/etc/udev/mount.blacklist
fi
-umount $ROOTFS_MNT || error "Failed to unmount $ROOTFS_MNT"
-umount $HDDIMG_ROOTFS_MNT || error "Failed to unmount $HDDIMG_ROOTFS_MNT"
-
echo "Preparing boot partition..."
EFIDIR="$BOOTFS_MNT/EFI/BOOT"
cp $HDDIMG_MNT/vmlinuz $BOOTFS_MNT || error "Failed to copy vmlinuz"
@@ -330,13 +353,11 @@ fi
# Ensure we have at least one EFI bootloader configured
if [ ! -e $GRUB_CFG ] && [ ! -e $GUMMI_CFG ]; then
- error "No EFI bootloader configuration found"
+ die "No EFI bootloader configuration found"
fi
-umount $BOOTFS_MNT || error "Failed to unmount $BOOTFS_MNT"
-umount $HDDIMG_MNT || error "Failed to unmount $HDDIMG_MNT"
-rm -rf $TMPDIR || error "Failed to cleanup $TMPDIR"
-sync
+# Call cleanup to unmount devices and images and remove the TMPDIR
+cleanup
if [ $WARNINGS -ne 0 ] && [ $ERRORS -eq 0 ]; then
echo "${YELLOW}Installation completed with warnings${CLEAR}"
--
2.0.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 7/8] mkefidisk.sh: Make the rootfs copy the last step
2014-07-16 14:15 [PATCH 0/8] mkefidisk updates and gummiboot support Darren Hart
` (5 preceding siblings ...)
2014-07-16 14:16 ` [PATCH 6/8] mkefidisk.sh: Add die() and cleanup() routines Darren Hart
@ 2014-07-16 14:16 ` Darren Hart
2014-07-16 14:16 ` [PATCH 8/8] mkefidisk.sh: Reduce output and add verbose flag Darren Hart
7 siblings, 0 replies; 10+ messages in thread
From: Darren Hart @ 2014-07-16 14:16 UTC (permalink / raw)
To: openembedded-core
Copying the rootfs is the most time intensive task. Move it last so if
we are to encounter other errors, we do so quickly and error out.
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
---
scripts/contrib/mkefidisk.sh | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/scripts/contrib/mkefidisk.sh b/scripts/contrib/mkefidisk.sh
index 6cc6b78..85e58ef 100755
--- a/scripts/contrib/mkefidisk.sh
+++ b/scripts/contrib/mkefidisk.sh
@@ -294,16 +294,6 @@ mount -o loop $HDDIMG_MNT/rootfs.img $HDDIMG_ROOTFS_MNT || error "Failed to moun
mount $ROOTFS $ROOTFS_MNT || error "Failed to mount $ROOTFS on $ROOTFS_MNT"
mount $BOOTFS $BOOTFS_MNT || error "Failed to mount $BOOTFS on $BOOTFS_MNT"
-echo "Copying ROOTFS files..."
-cp -a $HDDIMG_ROOTFS_MNT/* $ROOTFS_MNT || error "Root FS copy failed"
-
-echo "$TARGET_SWAP swap swap defaults 0 0" >> $ROOTFS_MNT/etc/fstab
-
-# We dont want udev to mount our root device while we're booting...
-if [ -d $ROOTFS_MNT/etc/udev/ ] ; then
- echo "$TARGET_DEVICE" >> $ROOTFS_MNT/etc/udev/mount.blacklist
-fi
-
echo "Preparing boot partition..."
EFIDIR="$BOOTFS_MNT/EFI/BOOT"
cp $HDDIMG_MNT/vmlinuz $BOOTFS_MNT || error "Failed to copy vmlinuz"
@@ -356,6 +346,18 @@ if [ ! -e $GRUB_CFG ] && [ ! -e $GUMMI_CFG ]; then
die "No EFI bootloader configuration found"
fi
+
+info "Copying ROOTFS files (this may take a while)"
+cp -a $HDDIMG_ROOTFS_MNT/* $ROOTFS_MNT || die "Root FS copy failed"
+
+echo "$TARGET_SWAP swap swap defaults 0 0" >> $ROOTFS_MNT/etc/fstab
+
+# We dont want udev to mount our root device while we're booting...
+if [ -d $ROOTFS_MNT/etc/udev/ ] ; then
+ echo "$TARGET_DEVICE" >> $ROOTFS_MNT/etc/udev/mount.blacklist
+fi
+
+
# Call cleanup to unmount devices and images and remove the TMPDIR
cleanup
--
2.0.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 8/8] mkefidisk.sh: Reduce output and add verbose flag
2014-07-16 14:15 [PATCH 0/8] mkefidisk updates and gummiboot support Darren Hart
` (6 preceding siblings ...)
2014-07-16 14:16 ` [PATCH 7/8] mkefidisk.sh: Make the rootfs copy the last step Darren Hart
@ 2014-07-16 14:16 ` Darren Hart
7 siblings, 0 replies; 10+ messages in thread
From: Darren Hart @ 2014-07-16 14:16 UTC (permalink / raw)
To: openembedded-core
Remove superfluous output from commands, add a -v verbose flag, and
cleanup output.
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
---
scripts/contrib/mkefidisk.sh | 114 +++++++++++++++++++++++++------------------
1 file changed, 67 insertions(+), 47 deletions(-)
diff --git a/scripts/contrib/mkefidisk.sh b/scripts/contrib/mkefidisk.sh
index 85e58ef..7ec373e 100755
--- a/scripts/contrib/mkefidisk.sh
+++ b/scripts/contrib/mkefidisk.sh
@@ -20,6 +20,10 @@
LANG=C
+# Set to 1 to enable additional output
+DEBUG=0
+OUT="/dev/null"
+
#
# Defaults
#
@@ -30,7 +34,7 @@ SWAP_RATIO=5
# Cleanup after die()
cleanup() {
- echo "Syncing and unmounting devices..."
+ debug "Syncing and unmounting devices"
# Unmount anything we mounted
unmount $ROOTFS_MNT || error "Failed to unmount $ROOTFS_MNT"
unmount $BOOTFS_MNT || error "Failed to unmount $BOOTFS_MNT"
@@ -38,7 +42,7 @@ cleanup() {
unmount $HDDIMG_MNT || error "Failed to unmount $HDDIMG_MNT"
# Remove the TMPDIR
- echo "Removing temporary files..."
+ debug "Removing temporary files"
if [ -d "$TMPDIR" ]; then
rm -rf $TMPDIR || error "Failed to remove $TMPDIR"
fi
@@ -71,9 +75,15 @@ die() {
cleanup
exit 1
}
+debug() {
+ if [ $DEBUG -eq 1 ]; then
+ echo "$1"
+ fi
+}
usage() {
- echo "Usage: $(basename $0) DEVICE HDDIMG TARGET_DEVICE"
+ echo "Usage: $(basename $0) [-v] DEVICE HDDIMG TARGET_DEVICE"
+ echo " -v: Verbose debug"
echo " DEVICE: The device to write the image to, e.g. /dev/sdh"
echo " HDDIMG: The hddimg file to generate the efi disk from"
echo " TARGET_DEVICE: The device the target will boot from, e.g. /dev/mmcblk0"
@@ -82,7 +92,6 @@ usage() {
image_details() {
IMG=$1
info "Image details"
- echo "============="
echo " image: $(stat --printf '%N\n' $IMG)"
echo " size: $(stat -L --printf '%s bytes\n' $IMG)"
echo " modified: $(stat -L --printf '%y\n' $IMG)"
@@ -95,7 +104,6 @@ device_details() {
BLOCK_SIZE=512
info "Device details"
- echo "=============="
echo " device: $DEVICE"
if [ -f "/sys/class/block/$DEV/device/vendor" ]; then
echo " vendor: $(cat /sys/class/block/$DEV/device/vendor)"
@@ -118,7 +126,7 @@ device_details() {
unmount_device() {
grep -q $DEVICE /proc/mounts
if [ $? -eq 0 ]; then
- warn "$DEVICE listed in /proc/mounts, attempting to unmount..."
+ warn "$DEVICE listed in /proc/mounts, attempting to unmount"
umount $DEVICE* 2>/dev/null
return $?
fi
@@ -128,7 +136,7 @@ unmount_device() {
unmount() {
grep -q $1 /proc/mounts
if [ $? -eq 0 ]; then
- echo "Unmounting $1..."
+ debug "Unmounting $1"
umount $1
return $?
fi
@@ -138,11 +146,17 @@ unmount() {
#
# Parse and validate arguments
#
-if [ $# -ne 3 ]; then
+if [ $# -lt 3 ] || [ $# -gt 4 ]; then
usage
exit 1
fi
+if [ "$1" = "-v" ]; then
+ DEBUG=1
+ OUT="1"
+ shift
+fi
+
DEVICE=$1
HDDIMG=$2
TARGET_DEVICE=$3
@@ -230,34 +244,39 @@ fi
TARGET_ROOTFS=$TARGET_DEVICE${TARGET_PART_PREFIX}2
TARGET_SWAP=$TARGET_DEVICE${TARGET_PART_PREFIX}3
-echo "*****************"
-echo "Boot partition size: $BOOT_SIZE MB ($BOOTFS)"
-echo "ROOTFS partition size: $ROOTFS_SIZE MB ($ROOTFS)"
-echo "Swap partition size: $SWAP_SIZE MB ($SWAP)"
-echo "*****************"
-
-echo "Deleting partition table on $DEVICE ..."
-dd if=/dev/zero of=$DEVICE bs=512 count=2 > /dev/null || die "Failed to zero beginning of $DEVICE"
+echo ""
+info "Boot partition size: $BOOT_SIZE MB ($BOOTFS)"
+info "ROOTFS partition size: $ROOTFS_SIZE MB ($ROOTFS)"
+info "Swap partition size: $SWAP_SIZE MB ($SWAP)"
+echo ""
# Use MSDOS by default as GPT cannot be reliably distributed in disk image form
# as it requires the backup table to be on the last block of the device, which
# of course varies from device to device.
-echo "Creating new partition table (MSDOS) on $DEVICE ..."
-parted $DEVICE mklabel msdos || die "Failed to create MSDOS partition table"
-echo "Creating boot partition on $BOOTFS"
-parted $DEVICE mkpart primary 0% $BOOT_SIZE || die "Failed to create BOOT partition"
+info "Partitioning installation media ($DEVICE)"
-echo "Enabling boot flag on $BOOTFS"
-parted $DEVICE set 1 boot on || die "Failed to enable boot flag"
+debug "Deleting partition table on $DEVICE"
+dd if=/dev/zero of=$DEVICE bs=512 count=2 >$OUT 2>1 || die "Failed to zero beginning of $DEVICE"
-echo "Creating ROOTFS partition on $ROOTFS"
-parted $DEVICE mkpart primary $ROOTFS_START $ROOTFS_END || die "Failed to create ROOTFS partition"
+debug "Creating new partition table (MSDOS) on $DEVICE"
+parted $DEVICE mklabel msdos >$OUT 2>1 || die "Failed to create MSDOS partition table"
-echo "Creating swap partition on $SWAP"
-parted $DEVICE mkpart primary $SWAP_START 100% || die "Failed to create SWAP partition"
+debug "Creating boot partition on $BOOTFS"
+parted $DEVICE mkpart primary 0% $BOOT_SIZE >$OUT 2>1 || die "Failed to create BOOT partition"
-parted $DEVICE print
+debug "Enabling boot flag on $BOOTFS"
+parted $DEVICE set 1 boot on >$OUT 2>1 || die "Failed to enable boot flag"
+
+debug "Creating ROOTFS partition on $ROOTFS"
+parted $DEVICE mkpart primary $ROOTFS_START $ROOTFS_END >$OUT 2>1 || die "Failed to create ROOTFS partition"
+
+debug "Creating swap partition on $SWAP"
+parted $DEVICE mkpart primary $SWAP_START 100% >$OUT 2>1 || die "Failed to create SWAP partition"
+
+if [ $DEBUG -eq 1 ]; then
+ parted $DEVICE print
+fi
#
@@ -269,38 +288,37 @@ unmount_device || die "Failed to unmount $DEVICE partitions"
#
# Format $DEVICE partitions
#
-echo ""
-echo "Formatting $BOOTFS as vfat..."
+info "Formating partitions"
+debug "Formatting $BOOTFS as vfat"
if [ ! "${DEVICE#/dev/loop}" = "${DEVICE}" ]; then
- mkfs.vfat -I $BOOTFS -n "EFI" || die "Failed to format $BOOTFS"
+ mkfs.vfat -I $BOOTFS -n "EFI" >$OUT 2>1 || die "Failed to format $BOOTFS"
else
- mkfs.vfat $BOOTFS -n "EFI" || die "Failed to format $BOOTFS"
+ mkfs.vfat $BOOTFS -n "EFI" >$OUT 2>1 || die "Failed to format $BOOTFS"
fi
-echo "Formatting $ROOTFS as ext3..."
-mkfs.ext3 -F $ROOTFS -L "ROOT" || die "Failed to format $ROOTFS"
+debug "Formatting $ROOTFS as ext3"
+mkfs.ext3 -F $ROOTFS -L "ROOT" >$OUT 2>1 || die "Failed to format $ROOTFS"
-echo "Formatting swap partition...($SWAP)"
-mkswap $SWAP || die "Failed to prepare swap"
+debug "Formatting swap partition ($SWAP)"
+mkswap $SWAP >$OUT 2>1 || die "Failed to prepare swap"
#
# Installing to $DEVICE
#
-echo ""
-echo "Mounting images and device in preparation for installation..."
-mount -o loop $HDDIMG $HDDIMG_MNT || error "Failed to mount $HDDIMG"
-mount -o loop $HDDIMG_MNT/rootfs.img $HDDIMG_ROOTFS_MNT || error "Failed to mount rootfs.img"
-mount $ROOTFS $ROOTFS_MNT || error "Failed to mount $ROOTFS on $ROOTFS_MNT"
-mount $BOOTFS $BOOTFS_MNT || error "Failed to mount $BOOTFS on $BOOTFS_MNT"
+debug "Mounting images and device in preparation for installation"
+mount -o loop $HDDIMG $HDDIMG_MNT >$OUT 2>1 || error "Failed to mount $HDDIMG"
+mount -o loop $HDDIMG_MNT/rootfs.img $HDDIMG_ROOTFS_MNT >$OUT 2>1 || error "Failed to mount rootfs.img"
+mount $ROOTFS $ROOTFS_MNT >$OUT 2>1 || error "Failed to mount $ROOTFS on $ROOTFS_MNT"
+mount $BOOTFS $BOOTFS_MNT >$OUT 2>1 || error "Failed to mount $BOOTFS on $BOOTFS_MNT"
-echo "Preparing boot partition..."
+info "Preparing boot partition"
EFIDIR="$BOOTFS_MNT/EFI/BOOT"
-cp $HDDIMG_MNT/vmlinuz $BOOTFS_MNT || error "Failed to copy vmlinuz"
+cp $HDDIMG_MNT/vmlinuz $BOOTFS_MNT >$OUT 2>1 || error "Failed to copy vmlinuz"
# Copy the efi loader and configs (booti*.efi and grub.cfg if it exists)
-cp -r $HDDIMG_MNT/EFI $BOOTFS_MNT || error "Failed to copy EFI dir"
+cp -r $HDDIMG_MNT/EFI $BOOTFS_MNT >$OUT 2>1 || error "Failed to copy EFI dir"
# Silently ignore a missing gummiboot loader dir (we might just be a GRUB image)
-cp -r $HDDIMG_MNT/loader $BOOTFS_MNT 2> /dev/null
+cp -r $HDDIMG_MNT/loader $BOOTFS_MNT >$OUT 2>1
# Update the boot loaders configurations for an installed image
# Remove any existing root= kernel parameters and:
@@ -331,7 +349,7 @@ GUMMI_CFG="$GUMMI_ENTRIES/boot.conf"
if [ -d "$GUMMI_ENTRIES" ]; then
info "Configuring Gummiboot"
# remove the install target if it exists
- rm $GUMMI_ENTRIES/install.conf &> /dev/null
+ rm $GUMMI_ENTRIES/install.conf >$OUT 2>1
if [ ! -e "$GUMMI_CFG" ]; then
echo "ERROR: $GUMMI_CFG not found"
@@ -348,7 +366,7 @@ fi
info "Copying ROOTFS files (this may take a while)"
-cp -a $HDDIMG_ROOTFS_MNT/* $ROOTFS_MNT || die "Root FS copy failed"
+cp -a $HDDIMG_ROOTFS_MNT/* $ROOTFS_MNT >$OUT 2>1 || die "Root FS copy failed"
echo "$TARGET_SWAP swap swap defaults 0 0" >> $ROOTFS_MNT/etc/fstab
@@ -361,6 +379,7 @@ fi
# Call cleanup to unmount devices and images and remove the TMPDIR
cleanup
+echo ""
if [ $WARNINGS -ne 0 ] && [ $ERRORS -eq 0 ]; then
echo "${YELLOW}Installation completed with warnings${CLEAR}"
echo "${YELLOW}Warnings: $WARNINGS${CLEAR}"
@@ -371,3 +390,4 @@ elif [ $ERRORS -ne 0 ]; then
else
success "Installation completed successfully"
fi
+echo ""
--
2.0.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 3/8] mkefidisk.sh: Add gummiboot support
2014-07-16 14:15 ` [PATCH 3/8] mkefidisk.sh: Add gummiboot support Darren Hart
@ 2014-07-17 21:44 ` Darren Hart
0 siblings, 0 replies; 10+ messages in thread
From: Darren Hart @ 2014-07-17 21:44 UTC (permalink / raw)
To: openembedded-core
On Wednesday, July 16, 2014 02:15:59 PM Darren Hart wrote:
> Fixes [YOCTO 6295]
>
> Add gummiboot support for images built using:
>
> EFI_PROVIDER="gummiboot"
>
> Add conditional configuration for GRUB and gummiboot. Provide some
> messaging about which is being performed.
>
> Signed-off-by: Darren Hart <dvhart@linux.intel.com>
> ---
> scripts/contrib/mkefidisk.sh | 53
> ++++++++++++++++++++++++++++++++++---------- 1 file changed, 41
> insertions(+), 12 deletions(-)
>
> diff --git a/scripts/contrib/mkefidisk.sh
> b/scripts/contrib/mkefidisk.sh index 0d0674b..9b13041 100755
> --- a/scripts/contrib/mkefidisk.sh
> +++ b/scripts/contrib/mkefidisk.sh
> @@ -265,31 +265,60 @@ umount $HDDIMG_ROOTFS_MNT
> echo "Preparing boot partition..."
> EFIDIR="$BOOTFS_MNT/EFI/BOOT"
> mkdir -p $EFIDIR
> -GRUBCFG="$EFIDIR/grub.cfg"
>
> cp $HDDIMG_MNT/vmlinuz $BOOTFS_MNT
> -# Copy the efi loader and config (booti*.efi and grub.cfg)
> +# Copy the efi loader and configs (booti*.efi and grub.cfg if it
> exists) cp $HDDIMG_MNT/EFI/BOOT/* $EFIDIR
> +# Silently ignore a missing gummiboot loader dir (we might just be a
> GRUB image) +cp -r $HDDIMG_MNT/loader $BOOTFS_MNT 2> /dev/null
>
> -# Update grub config for the installed image
> -# Delete the install entry
> -sed -i "/menuentry 'install'/,/^}/d" $GRUBCFG
> -# Delete the initrd lines
> -sed -i "/initrd /d" $GRUBCFG
> -# Delete any LABEL= strings
> -sed -i "s/ LABEL=[^ ]*/ /" $GRUBCFG
> +# Update the boot loaders configurations for an installed image
> # Remove any existing root= kernel parameters and:
> # o Add a root= parameter with the target rootfs
> # o Specify ro so fsck can be run during boot
> # o Specify rootwait in case the target media is an asyncronous block
> device # such as MMC or USB disks
> # o Specify "quiet" to minimize boot time when using slow serial
> consoles -sed -i "s@ root=[^ ]*@ @" $GRUBCFG
> -sed -i "s@vmlinuz @vmlinuz root=$TARGET_ROOTFS ro rootwait quiet @"
> $GRUBCFG +
> +# Look for a GRUB installation
> +GRUB_CFG="$EFIDIR/grub.cfg"
> +if [ -e "$GRUB_CFG" ]; then
> + echo "Configuring GRUB"
> + # Delete the install entry
> + sed -i "/menuentry 'install'/,/^}/d" $GRUB_CFG
> + # Delete the initrd lines
> + sed -i "/initrd /d" $GRUB_CFG
> + # Delete any LABEL= strings
> + sed -i "s/ LABEL=[^ ]*/ /" $GRUB_CFG
> +
> + sed -i "s@ root=[^ ]*@ @" $GRUB_CFG
> + sed -i "s@vmlinuz @vmlinuz root=$TARGET_ROOTFS ro rootwait quiet
@"
> $GRUB_CFG +fi
> +
> +# Look for a gummiboot installation
> +GUMMI_ENTRIES="$BOOTFS_MNT/loader/entries"
> +GUMMI_CFG="$GUMMI_ENTRIES/boot.conf"
> +if [ -d "$GUMMI_ENTRIES" ]; then
> + echo "Configuring Gummiboot"
> + # remove the install target if it exists
> + rm $GUMMI_ENTRIES/install.conf &> /dev/null
> +
> + if [ ! -e "$GUMMI_CFG" ]; then
> + echo "ERROR: $GUMMI_CFG not found"
> + fi
> +
Oops, this is missing:
+ sed -i "/initrd /d" $GUMMI_CFG
I have updated this git branch with this change.
--
Darren
> + sed -i "s@ root=[^ ]*@ @" $GUMMI_CFG
> + sed -i "s@options *LABEL=boot @options LABEL=Boot
> root=$TARGET_ROOTFS ro rootwait quiet @" $GUMMI_CFG +fi
> +
> +# Ensure we have at least one EFI bootloader configured
> +if [ ! -e $GRUB_CFG ] && [ ! -e $GUMMI_CFG ]; then
> + echo "ERROR: No EFI bootloader configuration found"
> +fi
>
> umount $BOOTFS_MNT
> umount $HDDIMG_MNT
> rm -rf $TMPDIR
> sync
>
> -echo "Installation complete."
> +echo "Installation complete"
--
Darren Hart
Intel Open Source Technology Center
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2014-07-17 21:44 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-07-16 14:15 [PATCH 0/8] mkefidisk updates and gummiboot support Darren Hart
2014-07-16 14:15 ` [PATCH 1/8] mkefidisk.sh: Use all caps for volume names Darren Hart
2014-07-16 14:15 ` [PATCH 2/8] mkefidisk.sh: Add mount error checking Darren Hart
2014-07-16 14:15 ` [PATCH 3/8] mkefidisk.sh: Add gummiboot support Darren Hart
2014-07-17 21:44 ` Darren Hart
2014-07-16 14:16 ` [PATCH 4/8] mkefidisk.sh: Copy the EFI dir recursively Darren Hart
2014-07-16 14:16 ` [PATCH 5/8] mkefidisk.sh: Improve logging Darren Hart
2014-07-16 14:16 ` [PATCH 6/8] mkefidisk.sh: Add die() and cleanup() routines Darren Hart
2014-07-16 14:16 ` [PATCH 7/8] mkefidisk.sh: Make the rootfs copy the last step Darren Hart
2014-07-16 14:16 ` [PATCH 8/8] mkefidisk.sh: Reduce output and add verbose flag Darren Hart
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.