[Ovirt-devel] create-wui-appliance.sh: useful script!

Jim Meyering meyering at redhat.com
Fri Apr 4 15:34:50 UTC 2008


Hi Perry,

Thanks for the create-wui-appliance.sh script.
It nicely eliminates several annoyingly manual steps.

Here are some small changes.  I've tested the result.
Barring objections I'll push soon.

	create-wui-appliance.sh: mostly-minor changes
	* wui-appliance/create-wui-appliance.sh: Remove unnecessary
	quotes in var=... RHS.  Remove unnecessary braces in ${VAR_NAME}/.
	Don't redirect function definition.  Use 'cat<<EOF' instead of repeated
	echo.  Add quotes around various $VAR uses, in case they contains shell
	meta-characters.  Hoist default arch and image dir definitions,
	and use them in usage.  Use bash's built-in "getopts" function.
	Accept "-h" option (for help).  Upon usage error, refer to -h,
	rather than printing full usage.

diff --git a/wui-appliance/create-wui-appliance.sh b/wui-appliance/create-wui-appliance.sh
index 0167576..4665c59 100755
--- a/wui-appliance/create-wui-appliance.sh
+++ b/wui-appliance/create-wui-appliance.sh
@@ -1,57 +1,60 @@
 #!/bin/bash

+ME=$(basename "$0")
+warn() { printf "$ME: $@\n" >&2; }
+try_h() { printf "Try \`$ME -h' for more information.\n" >&2; }
+die() { warn "$@"; try_h; exit 1; }
+
 NAME=developer
 RAM=512
-IMGNAME=${NAME}.img
+IMGNAME=$NAME.img
 IMGSIZE=6

-usage() {
-    echo "usage: $0 -i install_iso [-d image_dir] [-a x86_64|i386] [-m MAC]"
-    echo "  -i: location of installation ISO"
-    echo "  -d: directory to place virtual disk (default: /var/lib/libvirt/images)"
-    echo "  -a: architecture for the virtual machine (default: x86_64)"
-    echo "  -m: specify fixed MAC address for the primary network interface"
-    exit 1
-} >&2
-
 MAC=
 ISO=
-IMGDIR=/var/lib/libvirt/images
-ARCH=x86_64
-for i ; do
-    case $1 in
-        -i)
-            [ $# -lt 2 ] && usage
-            ISO="$2"
-            shift; shift;;
-        -d)
-            [ $# -lt 2 ] && usage
-            IMGDIR="$2"
-            shift; shift;;
-        -a)
-            [ $# -lt 2 ] && usage
-            ARCH="$2"
-            shift; shift;;
-        -m)
-            [ $# -lt 2 ] && usage
-            MAC="$2"
-            shift; shift;;
-        -?|-*)
-            usage;;
+IMGDIR_DEFAULT=/var/lib/libvirt/images
+ARCH_DEFAULT=x86_64
+
+ARCH=$ARCH_DEFAULT
+IMGDIR=$IMGDIR_DEFAULT
+
+usage() {
+    case $# in 1) warn "$1"; try_h; exit 1;; esac
+    cat <<EOF
+Usage: $ME -i install_iso [-d image_dir] [-a x86_64|i386] [-m MAC]
+  -i: location of installation ISO (required)
+  -d: directory to place virtual disk (default: $IMGDIR_DEFAULT)
+  -a: architecture for the virtual machine (default: $ARCH_DEFAULT)
+  -m: specify fixed MAC address for the primary network interface
+  -h: display this help and exit
+EOF
+}
+
+err=0 help=0
+while getopts :a:d:i:m:h c; do
+    case $c in
+        i) ISO=$OPTARG;;
+        d) IMGDIR=$OPTARG;;
+        a) ARCH=$OPTARG;;
+        m) MAC=$OPTARG;;
+        h) help=1;;
+	'?') err=1; warn "invalid option: \`-$OPTARG'";;
+	:) err=1; warn "missing argument to \`-$OPTARG' option";;
+        *) err=1; warn "internal error: \`-$OPTARG' not handled";;
     esac
 done
+test $err = 1 && { try_h; exit 1; }
+test $help = 1 && { usage; exit 0; }

-if [ -z $ISO ]; then
-    echo "Please supply the location of the OS ISO" >&2
-    usage
-fi
+test -z "$ISO" && usage "no ISO file specified"
+test -r "$ISO" || usage "missing or unreadable ISO file: \`$ISO'"

-if [[ "$ARCH" != "i386" && "$ARCH" != "x86_64" ]]; then
-    echo "Please specify a valid architecture" >&2
-    usage
-fi
+case $ARCH in
+    i386|x86_64);;
+    *) usage "invalid architecture: \`$ARCH'";;
+esac

-if [ -n $MAC ]; then
+if [ -n "$MAC" ]; then
     MAC="-m $MAC"
 fi

@@ -59,8 +62,8 @@ mkdir -p $IMGDIR

 virsh destroy $NAME > /dev/null 2>&1
 virsh undefine $NAME > /dev/null 2>&1
-virt-install -n $NAME -r $RAM -f $IMGDIR/$IMGNAME -s $IMGSIZE --vnc \
-             --accelerate -v -c $ISO --os-type=linux --arch=$ARCH \
+virt-install -n $NAME -r $RAM -f "$IMGDIR/$IMGNAME" -s $IMGSIZE --vnc \
+             --accelerate -v -c "$ISO" --os-type=linux --arch=$ARCH \
              --noreboot $MAC
 ./ovirt-mod-xml.sh
 virsh start $NAME
diff --git a/wui-appliance/ovirt-mod-xml.sh b/wui-appliance/ovirt-mod-xml.sh
old mode 100755
new mode 100644
--
1.5.5.rc3.1.gaece




More information about the ovirt-devel mailing list