[OE-core] [PATCH] mkefidisk: Create interactive menu for the script

Bottazzini, Bruno bruno.bottazzini at intel.com
Tue Sep 8 16:53:32 UTC 2015


On Tue, 2015-09-08 at 08:15 -0700, Saul Wold wrote:
> On 09/04/2015 03:19 PM, Bruno Bottazzini wrote:
> > If it is passed only the image parameter, it will show some interactive
> > options to help to conclude the script.
> >
> > With this patch it will detect devices available in the machine, asking
> > to choose what it is wanted to be flashed.
> >
> > it will suggest the target device. If it is a SD card the suggestion
> > is /dev/mmcblk0. If it is a pendrive it will suggest to use /dev/sda.
> >
> > Signed-off-by: Bruno Bottazzini <bruno.bottazzini at intel.com>
> > ---
> >   scripts/contrib/mkefidisk.sh | 63 ++++++++++++++++++++++++++++++++++++++++----
> >   1 file changed, 58 insertions(+), 5 deletions(-)
> >
> > diff --git a/scripts/contrib/mkefidisk.sh b/scripts/contrib/mkefidisk.sh
> > index 55f72b0..66e0e58 100755
> > --- a/scripts/contrib/mkefidisk.sh
> > +++ b/scripts/contrib/mkefidisk.sh
> > @@ -152,8 +152,55 @@ unmount() {
> >   # Parse and validate arguments
> >   #
> >   if [ $# -lt 3 ] || [ $# -gt 4 ]; then
> > -	usage
> > -	exit 1
> > +    if [ $# -eq 1 ]; then
> > +        AVAILABLE_DISK=`lsblk | grep "disk" | cut -f 1 -d " "`
> > +        X=0
> > +        for disk in `echo $AVAILABLE_DISK`; do
> > +            mounted=`blkid -o list | grep "/dev/$disk" | grep "not mounted"`
> Is there any way to not call blkid multiple time (ie save the output and 
> use it once?

Unfortunately no, both outputs are different.

> 
> 
> Are the lsblk and blkid commands guaranteed to be installed on most 
> machines?

I double checked it before sending this patch and the answer was yes.

> 
> Also this seems to have matched my root disk, which again concerns me, I 
> am still not convinced that a selection system like this is safe.

This is odd. My output shows only unmounted disks.

> 
> > +            if [ -n "$mounted" ]; then
> > +                UNMOUNTED_AVAILABLES="$UNMOUNTED_AVAILABLES /dev/$disk\n"
> 
> I think the \n is not needed here, what shell are you using, with Bash I 
> get the following output:
> 
> 0 - /dev/sda
> 1 - /dev/sdb
> 2 - /dev/mmcblk0
> Choose unmounted device number: 1

This output is strange mine shows only (without sda and sdb which i do
have them also, but mounted):
        contrib > ./mkefidisk.sh image
        0 - /dev/mmcblk0
        Choose unmounted device number:

Are you sure you have updated the script with the changes? What distro
are you using?

> 
> Choose a name of the device that will be boot from
> Recommended name is: /dev/sda\n
> Is target device okay? [y/N]: y
> 
> Usage: mkefidisk.sh [-v] DEVICE HDDIMG TARGET_DEVICE
>         -v: Verbose debug
>         DEVICE: The device to write the image to, e.g. /dev/sdh
>         HDDIMG: The hddimg file to generate the efi disk from
>         TARGET_DEVICE: The device the target will boot from, e.g. 
> /dev/mmcblk0
> Device /dev/sdb\n cannot be found
> 
> Note the \n above in the choose a name and then the trailing \n here 
> with the device not being found.

You are right I am removing \n. Strangely here it works perfectly:
        0 - /dev/sdc
        1 - /dev/mmcblk0
        Choose unmounted device number: 1
        
        Choose a name of the device that will be boot from
        Recommended name is: /dev/mmcblk0
        Is target device okay? [y/N]: y


> 
> 
> 
> > +                info "$X - /dev/$disk"
> > +                X=`expr $X + 1`
> > +            fi
> > +        done
> > +        if [ $X -eq 0 ]; then
> > +            die "No unmounted device found."
> > +        fi
> > +        read -p "Choose unmounted device number: " DISK_NUMBER
> > +        X=0
> > +        for line in `echo $UNMOUNTED_AVAILABLES`; do
> > +            if [ $DISK_NUMBER -eq $X ]; then
> > +                DISK_TO_BE_FLASHED=$line
> > +                break
> > +            else
> > +                X=`expr $X + 1`
> > +            fi
> > +        done
> > +        if [ -z "$DISK_TO_BE_FLASHED" ]; then
> > +            die "Option \"$DISK_NUMBER\" is invalid. Choose a valid option"
> > +        else
> > +            if [ -z `echo $DISK_TO_BE_FLASHED | grep "mmc"` ]; then
> > +                TARGET_TO_BE_BOOT="/dev/sda"
> > +            else
> > +                TARGET_TO_BE_BOOT="/dev/mmcblk0"
> > +            fi
> > +        fi
> > +        echo ""
> > +        echo "Choose a name of the device that will be boot from"
> > +        echo -n "Recommended name is: "
> > +        info "$TARGET_TO_BE_BOOT\n"
> 
> You are still outputting the \n here

Removed too

Thank you a lot,

Bruno

> 
> > +        read -p "Is target device okay? [y/N]: " RESPONSE
> > +        if [ "$RESPONSE" != "y" ]; then
> > +            read -p "Choose target device name: " TARGET_TO_BE_BOOT
> > +        fi
> > +        echo ""
> > +        if [ -z "$TARGET_TO_BE_BOOT" ]; then
> > +            die "Error: choose a valid target name"
> > +        fi
> > +    else
> > +        usage
> > +	    exit 1
> > +    fi
> >   fi
> >
> >   if [ "$1" = "-v" ]; then
> > @@ -162,9 +209,15 @@ if [ "$1" = "-v" ]; then
> >   	shift
> >   fi
> >
> > -DEVICE=$1
> > -HDDIMG=$2
> > -TARGET_DEVICE=$3
> > +if [ -z "$AVAILABLE_DISK" ]; then
> > +    DEVICE=$1
> > +    HDDIMG=$2
> > +    TARGET_DEVICE=$3
> > +else
> > +    DEVICE=$DISK_TO_BE_FLASHED
> > +    HDDIMG=$1
> > +    TARGET_DEVICE=$TARGET_TO_BE_BOOT
> > +fi
> >
> This change I like, if done with checking for 2 parameter (image and 
> disk to flash, the 3 paramter can be determined as you have with best 
> guess of /dev/sda if it's an sd and mmc if it's a /dev/mmc flash device.
> 
> Sau!
> 
> 
> >   LINK=$(readlink $DEVICE)
> >   if [ $? -eq 0 ]; then
> >





More information about the Openembedded-core mailing list