From e679a4002ecea6d8177430d6efde2b3ef2b89d0e Mon Sep 17 00:00:00 2001 From: Julian Wiedmann Date: Wed, 13 May 2020 18:19:35 +0200 Subject: [PATCH] lsluns: try harder to find udevadm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hard-coding udevadm's location isn't robust enough - for instance, Ubuntu 20.04 moved it to /usr/bin. First see if we can reach it through $PATH, then fall back to hard-coded locations that we know about. Also when finally falling back to udevsettle, check that it exists. Otherwise we end up throwing tons of "No such file or directory" error messages at the user. Signed-off-by: Julian Wiedmann Reviewed-by: Steffen Maier Reviewed-by: Fedor Loshakov Signed-off-by: Jan Höppner --- zconf/lsluns | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/zconf/lsluns b/zconf/lsluns index bfe48f1..7144c78 100755 --- a/zconf/lsluns +++ b/zconf/lsluns @@ -24,13 +24,22 @@ my $wlun = "0xc101000000000000"; my $lun0 = "0x0000000000000000"; my $sg_dir = "/sys/class/scsi_generic"; my $udevsettle_call; -my $udevadm = "/sbin/udevadm"; -if (! -e $udevadm) { - $udevsettle_call = "/sbin/udevsettle"; +# See if we can find udevadm through $PATH: +if (!system("udevadm --version > /dev/null 2>&1")) { + $udevsettle_call = "udevadm settle"; +# Search udevadm in well-known locations: +} elsif (-e "/sbin/udevadm") { + $udevsettle_call = "/sbin/udevadm settle"; +} elsif (-e "/usr/bin/udevadm") { + $udevsettle_call = "/usr/bin/udevadm settle"; +# Fall back to udevsettle: +} elsif (-e "/sbin/udevsettle") { + $udevsettle_call = "/sbin/udevsettle"; } else { - $udevsettle_call = "$udevadm settle"; + $udevsettle_call = ""; + print "Failed to find any candidate for udevsettle.\n"; } # read the first line of a sysfs-entry and compare it to a given string -- 2.26.2