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

Stéphane Graber stgraber at ubuntu.com
Wed Jan 2 18:49:51 UTC 2013


On 01/02/2013 12:57 PM, Stéphane Graber wrote:
> 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.

Turns out that not all kill implementations allow "-s SIG<name>", some
instead required "-s <name>". As far as I can tell, all implementations
support the latter, so I pushed a change to use that instead.

> 
> 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/ef2a57ee/attachment.pgp>


More information about the lxc-devel mailing list