[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