You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The /lib/udev/vdev_id script included with the zfsutils package on Debian makes use of feature(s) specific to GNU awk (gawk), but the script only specifies awk generically, and the package control file does not specify awk at all. Debian defaults to nawk, which does not provide the feature(s) in question, leading to script aborts.
Environment
Debian 12.5 "bookworm"
Kernel 6.1.0-21-amd64 / 6.1.90-1 (2024-05-03)
zfsutils 2.1.11-1
mawk 1.3.4.20200120-3.1
gawk 5.2.1-2
Description
In file/lib/udev/vdev_id, in function sas_handler(), on line 321, the code invokes the asort function to sort the array a. The asort() function is a GNU extension; it is not part of the standard awk. See Gawk: Effective AWK Programming, Section 12.3.2. When this code is encountered, the awk interpreter aborts with an error, "function asort never defined".
For example, an extract from syslog, with udev_log set to debug in /etc/udev/udev.conf:
Jun 12 10:37:19 penguin (udev-worker)[3212]: dm-0: '/lib/udev/vdev_id -d dm-0'(err) 'awk: line 7: function asort never defined'
This was with the default Debian awk, mawk, installed. Installing gawk (which automatically makes it the preferred alternative) resolved this error.
The vdev_id code in question is only invoked for multipath SAS storage. Many other packages (or people) want gawk installed anyway. So one needs the particular combination of SAS + multipath + minimalist-install to encounter the bug.
Resolution
In researching this error, I found that another "assuming gawk" bug has been encountered previously. See "vdev_id.conf slot mapping fails on Debian 7", Issue #136, from 2014.
Perhaps the best thing to do here is to simply declare a dependency on gawk and move on with your lives. In 2024 it is not that heavy a requirement, especially in the land of Linux where the userland is usually heavily GNU-based.
Alternatively, if there is a strong desire to avoid GNU-isms for whatever reason, it is possible to find sort routines implemented in pure standard POSIX awk code. See https://unix.stackexchange.com/questions/609866/ for example.
The text was updated successfully, but these errors were encountered:
OsmiumBalloon
changed the title
Undeclared dependency on GNU awk in vdev_id
Undeclared dependency on GNU awk asort() in vdev_id
Jul 4, 2024
Summary
The
/lib/udev/vdev_id
script included with thezfsutils
package on Debian makes use of feature(s) specific to GNU awk (gawk
), but the script only specifiesawk
generically, and the package control file does not specifyawk
at all. Debian defaults tonawk
, which does not provide the feature(s) in question, leading to script aborts.Environment
6.1.0-21-amd64
/6.1.90-1
(2024-05-03)2.1.11-1
1.3.4.20200120-3.1
5.2.1-2
Description
In file
/lib/udev/vdev_id
, in functionsas_handler()
, on line 321, the code invokes theasort
function to sort the arraya
. Theasort()
function is a GNU extension; it is not part of the standardawk
. See Gawk: Effective AWK Programming, Section 12.3.2. When this code is encountered, the awk interpreter aborts with an error, "function asort never defined".For example, an extract from syslog, with
udev_log
set todebug
in/etc/udev/udev.conf
:This was with the default Debian awk,
mawk
, installed. Installinggawk
(which automatically makes it the preferred alternative) resolved this error.The
vdev_id
code in question is only invoked for multipath SAS storage. Many other packages (or people) wantgawk
installed anyway. So one needs the particular combination of SAS + multipath + minimalist-install to encounter the bug.Resolution
In researching this error, I found that another "assuming gawk" bug has been encountered previously. See "vdev_id.conf slot mapping fails on Debian 7", Issue #136, from 2014.
Perhaps the best thing to do here is to simply declare a dependency on
gawk
and move on with your lives. In 2024 it is not that heavy a requirement, especially in the land of Linux where the userland is usually heavily GNU-based.Alternatively, if there is a strong desire to avoid GNU-isms for whatever reason, it is possible to find sort routines implemented in pure standard POSIX
awk
code. See https://unix.stackexchange.com/questions/609866/ for example.The text was updated successfully, but these errors were encountered: