[lxc-devel] [PATCH] lxc-shutdown: use posix shell instead of bash

Stéphane Graber stgraber at ubuntu.com
Wed Jan 2 17:57:09 UTC 2013


On 12/27/2012 03:52 AM, Natanael Copa wrote:
> - avoid getopt --longoptions
> - use 'which' instead of 'type' to detect existance of tools
> - specify -s SIG<signame> with kill
> 
> Signed-off-by: Natanael Copa <ncopa at alpinelinux.org>

Looks good. Pushed.

Acked-by: Stéphane Graber <stgraber at ubuntu.com>

> ---
> dash didn't complain when I tested it, but it did not shut down the
> container due to busybox init uses other signals for poweroff/reboot.
> 
> The poweroff/reboot signal should probably be configurable but thats
> other issue.
> 
>  src/lxc/lxc-shutdown.in | 52 ++++++++++++++++++++++++++-----------------------
>  1 file changed, 28 insertions(+), 24 deletions(-)
> 
> diff --git a/src/lxc/lxc-shutdown.in b/src/lxc/lxc-shutdown.in
> index c0d1702..cf1d603 100644
> --- a/src/lxc/lxc-shutdown.in
> +++ b/src/lxc/lxc-shutdown.in
> @@ -1,4 +1,4 @@
> -#!/bin/bash
> +#!/bin/sh
>  
>  # (C) Copyright Canonical 2011,2012
>  
> @@ -41,30 +41,30 @@ dolxcstop()
>      exit 0
>  }
>  
> -shortoptions='hn:rwt:'
> -longoptions='help,name:,wait,reboot,timeout:'
> -
> -timeout="-1"
> -
> -getopt=$(getopt -o $shortoptions --longoptions  $longoptions -- "$@")
> -if [ $? != 0 ]; then
> +usage_err() {
> +    [ -n "$1" ] && echo "$1" >&2
>      usage
> -    exit 1;
> -fi
> +    exit 1
> +}
> +
> +optarg_check() {
> +    [ -n "$2" ] || usage_err "option '$1' requires an argument"
> +}
>  
> -eval set -- "$getopt"
> +timeout="-1"
>  
>  reboot=0
>  dowait=0
>  
> -while true; do
> -    case "$1" in
> +while [ $# -gt 0 ]; do
> +    opt="$1"
> +    shift
> +    case "$opt" in
>      -h|--help)
>          usage
> -        exit 1
>          ;;
>      -n|--name)
> -        shift
> +        optarg_check $opt "$1"
>          lxc_name=$1
>          shift
>          ;;
> @@ -77,19 +77,23 @@ while true; do
>          shift
>          ;;
>      -t|--timeout)
> -        shift
> +        optarg_check $opt "$1"
>          timeout=$1
>          dowait=1
>          shift
>          ;;
>      --)
> -        shift
>          break;;
> +    -?)
> +        usage_err "unknown option '$opt'"
> +        ;;
> +    -*)
> +        # split opts -abc into -a -b -c
> +        set -- $(echo "${opt#-}" | sed 's/\(.\)/ -\1/g') "$@"
> +        ;;
>      *)
> -        echo $1
> -        usage
> +        usage_err "unknown option '$opt'"
>          exit 1
> -        ;;
>      esac
>  done
>  
> @@ -104,8 +108,8 @@ if [ "$(id -u)" != "0" ]; then
>     exit 1
>  fi
>  
> -type lxc-info > /dev/null || { echo "lxc-info not found."; exit 1; }
> -type lxc-wait > /dev/null || { echo "lxc-wait not found."; exit 1; }
> +which lxc-info > /dev/null || { echo "lxc-info not found."; exit 1; }
> +which lxc-wait > /dev/null || { echo "lxc-wait not found."; exit 1; }
>  
>  pid=`lxc-info -n $lxc_name -p 2>/dev/null | awk '{ print $2 }'`
>  if [ "$pid" = "-1" ]; then
> @@ -114,10 +118,10 @@ if [ "$pid" = "-1" ]; then
>  fi
>  
>  if [ $reboot -eq 1 ]; then
> -    kill -INT $pid
> +    kill -s SIGINT $pid
>      exit 0
>  else
> -    kill -PWR $pid
> +    kill -s SIGPWR $pid
>  fi
>  
>  if [ $dowait -eq 0 ]; then
> 


-- 
Stéphane Graber
Ubuntu developer
http://www.ubuntu.com

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 899 bytes
Desc: OpenPGP digital signature
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20130102/55227383/attachment.pgp>


More information about the lxc-devel mailing list