Source: multipath-tools
Version: 0.5.0-7
Severity: normal
Tags: patch

Hi,

The init script of multipath-tools throws this error message on wheezy
(same for jessie and unstable) when stopping the daemon:

    /etc/init.d/multipath-tools: 75: [: /sys/block/dm-1: unexpected operator
    [ ok ] Stopping multipath daemon: multipathd.

The problem start with

    root_dev=$(awk '{ if ($1 !~ /^[ \t]*#/ && $1 ~ /\// && $2 == "/") { print 
$1; }}' /etc/mtab)

This command evalutes to an empty string on my system. In consequence,
the next command

    dm_num=$(dmsetup info -c --noheadings -o minor $root_dev 2>/dev/null)

queries dmsetup for all devices instead of the root device. Then
root_dm_device contains new lines and let the directory test stumble.

Thus only query dmsetup if a root device is found. Do nothing when no
DM number can determined (instead of using the echo command as no-op).

The patch to fix the init script is attached.

-- 
Benjamin Drung
System Developer
Debian & Ubuntu Developer

ProfitBricks GmbH
Greifswalder Str. 207
D - 10405 Berlin

Email: benjamin.dr...@profitbricks.com
URL:  http://www.profitbricks.com

Sitz der Gesellschaft: Berlin.
Registergericht: Amtsgericht Charlottenburg, HRB 125506B.
Geschäftsführer: Andreas Gauger, Achim Weiss.
>From aef8d370759de29da2bdbcdf664c53757aa4d199 Mon Sep 17 00:00:00 2001
From: Benjamin Drung <benjamin.dr...@profitbricks.com>
Date: Wed, 12 Aug 2015 16:17:08 +0200
Subject: [PATCH] init: Fix stop failure when no root device is found

The init script of multipath-tools throws this error message on wheezy
(same for jessie and unstable) when stopping the daemon:

    /etc/init.d/multipath-tools: 75: [: /sys/block/dm-1: unexpected operator
    [ ok ] Stopping multipath daemon: multipathd.

The problem start with

    root_dev=$(awk '{ if ($1 !~ /^[ \t]*#/ && $1 ~ /\// && $2 == "/") { print $1; }}' /etc/mtab)

This command evalutes to an empty string on my system. In consequence,
the next command

    dm_num=$(dmsetup info -c --noheadings -o minor $root_dev 2>/dev/null)

queries dmsetup for all devices instead of the root device. Then
root_dm_device contains new lines and let the directory test stumble.

Thus only query dmsetup if a root device is found. Do nothing when no
DM number can determined (instead of using the echo command as no-op).
---
 debian/multipath-tools.init | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/debian/multipath-tools.init b/debian/multipath-tools.init
index 79449bf..77bd5e8 100755
--- a/debian/multipath-tools.init
+++ b/debian/multipath-tools.init
@@ -63,16 +63,20 @@ case "$1" in
 	;;
   stop)
 	DONT_STOP_MPATHD=0
-        root_dev=$(awk '{ if ($1 !~ /^[ \t]*#/ && $1 ~ /\// && $2 == "/") { print $1; }}' /etc/mtab)
-	dm_num=$(dmsetup info -c --noheadings -o minor $root_dev 2>/dev/null)
-	if [ $? -ne 0 ]; then
+	root_dev=$(awk '{ if ($1 !~ /^[ \t]*#/ && $1 ~ /\// && $2 == "/") { print $1; }}' /etc/mtab)
+	if [ -n "$root_dev" ]; then
+		dm_num=$(dmsetup info -c --noheadings -o minor $root_dev 2>/dev/null)
+	else
+		dm_num=
+	fi
+	if [ $? -ne 0 -o -z "$dm_num" ]; then
 		# Looks like we couldn't find a device mapper root device
 		# But we shouldn't bail out here, otherwise the stop target and the
 		# upgrade processes will break. See DBUG #674733
-		echo;
+		:
 	else
 		root_dm_device="dm-$dm_num"
-		[ -d $syspath/$root_dm_device ] && teardown_slaves $syspath/$root_dm_device
+		[ -d "$syspath/$root_dm_device" ] && teardown_slaves $syspath/$root_dm_device
 	fi
 
 	if [ x$DONT_STOP_MPATHD = x0 ]; then
-- 
2.1.4

Reply via email to