Bruno Haible wrote: > Jim Meyering wrote: >> The sole failure seems to be due to mkswap failing on your system. >> However, the code that is failing redirects stderr and stdout >> to /dev/null, so there is no clue in the log. >> >> I confirmed that it works on openSUSE 11.4: >> >> $ dd if=/dev/null of=f bs=1 seek=30M && mkswap f && echo ok >> ... >> ok >> $ >> >> But I get a clue when the existing "device" has a preexisting >> partition table: >> >> $ dd if=/dev/null of=f bs=1 seek=30M \ >> && parted -s f mklabel gpt && mkswap f && echo ok >> 0+0 records in >> 0+0 records out >> 0 bytes (0 B) copied, 0.000331645 s, 0.0 kB/s >> mkswap: f: warning: don't erase bootbits sectors >> (gpt partition table detected). Use -f to force. >> Setting up swapspace version 1, size = 30716 KiB >> no label, UUID=d8af74af-b83d-487d-9160-a7d9827f2e47 >> ok >> >> Note the warning. >> I'll bet the 12.1 version of mkswap now requires --force in that case. > > Hmm, no, it still works without --force: ... > No, this patch does not fix the problem, but it gives a clue to the cause: > > $ make check -C tests TESTS=t9050-partition-table-types.sh VERBOSE=yes > ... > + echo mkswap:bsd > mkswap:bsd > + case $i in > + mkswap -f f > ./t9050-partition-table-types.sh: line 44: mkswap: command not found > + fail=1 > ... > > So, the reason was that 'mkswap' is not found in $PATH. (It's in /sbin, > which is not in $PATH of a non-root user in this distro.)
Thank you. Pesky Suse PATH. We had a similar problem in coreutils, so I'm using its solution here: >From c92748d1bedc53fe0a49ae1eead78315c99e1ec3 Mon Sep 17 00:00:00 2001 From: Jim Meyering <meyer...@redhat.com> Date: Sun, 19 Feb 2012 15:31:58 +0100 Subject: [PATCH] tests: sanitize PATH; do not discard mkswap output * tests/init.cfg (sanitize_path_): New function, from coreutils. Use it. * tests/t9050-partition-table-types.sh: Do not discard mkswap output and diagnostics. This test would fail (e.g., on OpenSUSE 12.1), when run with PATH not including /sbin. Reported by Bruno Haible. --- tests/init.cfg | 37 ++++++++++++++++++++++++++++++++++ tests/t9050-partition-table-types.sh | 2 +- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/tests/init.cfg b/tests/init.cfg index 6072acd..24b10bc 100644 --- a/tests/init.cfg +++ b/tests/init.cfg @@ -25,6 +25,41 @@ require_512_byte_sector_size_() test $sector_size_ = 512 || skip_ 'FS test with sector size != 512' } +# Having an unsearchable directory in PATH causes execve to fail with EACCES +# when applied to an unresolvable program name, contrary to the desired ENOENT. +# Avoid the problem by rewriting PATH to exclude unsearchable directories. +# Also, if PATH lacks /sbin and/or /usr/sbin, append it/them. +sanitize_path_() +{ + # FIXME: remove double quotes around $IFS when all tests use init.sh. + # They constitute a work-around for a bug in FreeBSD 8.1's /bin/sh. + local saved_IFS="$IFS" + IFS=: + set -- $PATH + IFS=$saved_IFS + + local d d1 + local colon= + local new_path= + for d in "$@"; do + test -z "$d" && d1=. || d1=$d + if ls -d "$d1/." > /dev/null 2>&1; then + new_path="$new_path$colon$d" + colon=':' + fi + done + + for d in /sbin /usr/sbin ; do + case ":$new_path:" in + *:$d:*) ;; + *) new_path="$new_path:$d" ;; + esac + done + + PATH=$new_path + export PATH +} + require_udevadm_settle_() { udevadm --help > /dev/null \ @@ -90,5 +125,7 @@ require_partitionable_loop_device_() esac } +sanitize_path_ + . "$abs_top_srcdir/tests/t-lib-helpers.sh" . "$abs_top_srcdir/tests/t-local.sh" diff --git a/tests/t9050-partition-table-types.sh b/tests/t9050-partition-table-types.sh index 563b2e8..04dc5c6 100755 --- a/tests/t9050-partition-table-types.sh +++ b/tests/t9050-partition-table-types.sh @@ -41,7 +41,7 @@ dd if=/dev/null of=f bs=1 seek=30M || framework_failure_ for i in $types; do for j in $types; do echo $i:$j - case $i in mkswap) mkswap f >/dev/null 2>&1 || fail=1;; + case $i in mkswap) mkswap f || fail=1;; *) parted -s f mklabel $i || fail=1;; esac case $j in mkswap) continue;; esac parted -s f mklabel $j || fail=1 -- 1.7.9.1.266.g24ee9