- use '[ -x /path/prog ]' instead of 'type /path/prog' - avoid getopt --longoptions - add \ at after && and || when those are at end of line - make sure condition expands to empty string if variable is empty
Signed-off-by: Natanael Copa <nc...@alpinelinux.org> --- I have tested it with 'lxc-create -t debian ...' with busybox as /bin/sh src/lxc/lxc-create.in | 70 +++++++++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 30 deletions(-) diff --git a/src/lxc/lxc-create.in b/src/lxc/lxc-create.in index 101e489..e8056e9 100644 --- a/src/lxc/lxc-create.in +++ b/src/lxc/lxc-create.in @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # # lxc: linux Container library @@ -54,16 +54,26 @@ help() { echo " $(basename $0) -t ubuntu -h" >&2 exit 0 fi - type ${templatedir}/lxc-$lxc_template 2>/dev/null - if [ $? -eq 0 ]; then + if [ -x ${templatedir}/lxc-$lxc_template ]; then echo >&2 echo "Template-specific options (TEMPLATE_OPTIONS):" >&2 ${templatedir}/lxc-$lxc_template -h fi } -shortoptions='hn:f:t:B:' -longoptions='help,name:,config:,template:,backingstore:,fstype:,dir:,lvname:,vgname:,fssize:' +usage_err() { + [ -n "$1" ] && echo "$1" >&2 + usage + exit 1 +} + +optarg_check() { + local opt="$1" optarg="$2" + if [ -z "$optarg" ]; then + usage_err "option '$opt' requires an argument" + fi +} + lxc_path=@LXCPATH@ bindir=@BINDIR@ templatedir=@LXCTEMPLATEDIR@ @@ -73,68 +83,69 @@ fssize=500M vgname=lxc custom_rootfs="" -getopt=$(getopt -o $shortoptions --longoptions $longoptions -- "$@") -if [ $? != 0 ]; then - usage - exit 1; -fi - -eval set -- "$getopt" - -while true; do - case "$1" in +while [ $# -gt 0 ]; do + local opt="$1" + shift + case "$opt" in -h|--help) help exit 1 ;; -n|--name) - shift + optarg_check $opt "$1" lxc_name=$1 shift ;; -f|--config) - shift + optarg_check $opt "$1" lxc_config=$1 shift ;; -t|--template) - shift + optarg_check $opt "$1" lxc_template=$1 shift ;; -B|--backingstore) - shift + optarg_check $opt "$1" backingstore=$1 shift ;; --dir) - shift + optarg_check $opt "$1" custom_rootfs=$1 shift ;; --lvname) - shift + optarg_check $opt "$1" lvname=$1 shift ;; --vgname) - shift + optarg_check $opt "$1" vgname=$1 shift ;; --fstype) - shift + optarg_check $opt "$1" fstype=$1 shift ;; --fssize) - shift + optarg_check $opt "$1" fssize=$1 shift ;; --) shift break;; + -?) + usage_err "unknown option '$opt'" + ;; + -*) + # split opts -abc into -a -b -c + set -- $(echo "${opt#-}" | sed 's/\(.\)/ -\1/g') "$@" + ;; *) usage exit 1 @@ -200,7 +211,7 @@ rootfs="$lxc_path/$lxc_name/rootfs" if [ "$backingstore" = "_unset" -o "$backingstore" = "btrfs" ]; then # if no backing store was given, then see if btrfs would work - if which btrfs >/dev/null 2>&1 && + if which btrfs >/dev/null 2>&1 && \ btrfs filesystem df "$lxc_path/" >/dev/null 2>&1; then backingstore="btrfs" else @@ -246,10 +257,10 @@ elif [ "$backingstore" = "btrfs" ]; then fi cleanup() { - if [ $backingstore = "lvm" ]; then + if [ "$backingstore" = "lvm" ]; then umount $rootfs lvremove -f $rootdev - elif [ $backingstore = "btrfs" ]; then + elif [ "$backingstore" = "btrfs" ]; then btrfs subvolume delete "$rootfs" fi ${bindir}/lxc-destroy -n $lxc_name @@ -299,8 +310,7 @@ if [ ! -z $lxc_template ]; then template_path=${templatedir}/lxc-$lxc_template fi - type $template_path 2>/dev/null - if [ $? -ne 0 ]; then + if ! [ -x "$template_path" ]; then echo "$(basename $0): unknown template '$lxc_template'" >&2 cleanup fi @@ -314,7 +324,7 @@ if [ ! -z $lxc_template ]; then echo "'$lxc_template' template installed" fi -if [ $backingstore = "lvm" ]; then +if [ "$backingstore" = "lvm" ]; then echo "Unmounting LVM" umount $rootfs -- 1.8.0 ------------------------------------------------------------------------------ Monitor your physical, virtual and cloud infrastructure from a single web console. Get in-depth insight into apps, servers, databases, vmware, SAP, cloud infrastructure, etc. Download 30-day Free Trial. Pricing starts from $795 for 25 servers or applications! http://p.sf.net/sfu/zoho_dev2dev_nov _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel