[alsa-devel] udev rules prefix

Ivailo Monev xakepa10 at gmail.com
Sat Nov 16 15:00:19 CET 2013


On 11/15/13 10:29, Takashi Iwai wrote:
> At Fri, 15 Nov 2013 13:16:41 +0000,
> Ivailo Monev wrote:
>> On 11/14/13 16:14, Takashi Iwai wrote:
>>> At Thu, 14 Nov 2013 18:49:02 +0000,
>>> Ivailo Monev wrote:
>>>> On 11/14/13 10:51, Takashi Iwai wrote:
>>>>> At Thu, 14 Nov 2013 13:24:49 +0000,
>>>>> Ivailo Monev wrote:
>>>>>> On 11/14/13 09:42, Takashi Iwai wrote:
>>>>>>> At Thu, 14 Nov 2013 12:08:47 +0000,
>>>>>>> Ivailo Monev wrote:
>>>>>>>> On 11/14/13 02:48, David Henningsson wrote:
>>>>>>>>> On 11/13/2013 09:36 PM, Ivailo wrote:
>>>>>>>>>> Hello,
>>>>>>>>>>
>>>>>>>>>> the default prefix for alsa-utils is /usr however the udev rules directory
>>>>>>>>>> is /lib/udev/rules.d thus on setups with separate partition for /usr the
>>>>>>>>>> binaries, from /usr/bin and /usr/sbin, will likely not be available during
>>>>>>>>>> the boot process and the udev rule will fail to restore the state.
>>>>>>>>>>
>>>>>>>>>> I suggest that the udev rules directory follows the prefix or append /usr
>>>>>>>>>> to it to resolve this.
>>>>>>>>>>
>>>>>>>>>> Cheers!
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> ALSA merely follows what udev dictates, so I think your
>>>>>>>>> question/suggestion is better redirected on the udev (now systemd)
>>>>>>>>> mailinglist. Or potentially that of your distro.
>>>>>>>>>
>>>>>>>> Actually, you are not following what udev dictates (unless I'm missing
>>>>>>>> something).
>>>>>>>> By default, systemd (and more importantly udev) will be installed with
>>>>>>>> /usr prefix
>>>>>>>> (which is wrong in it self because it blindly assumes that /usr has been
>>>>>>>> mounted
>>>>>>>> via initrd/initramfs where separate /usr partition is in use but let's
>>>>>>>> not talk about
>>>>>>>> this here).
>>>>>>>>
>>>>>>>>
>>>>>>>> On 11/14/13 06:45, Takashi Iwai wrote:
>>>>>>>>> At Wed, 13 Nov 2013 20:36:48 +0000,
>>>>>>>>> Ivailo wrote:
>>>>>>>>>> Hello,
>>>>>>>>>>
>>>>>>>>>> the default prefix for alsa-utils is /usr however the udev rules directory
>>>>>>>>>> is /lib/udev/rules.d thus on setups with separate partition for /usr the
>>>>>>>>>> binaries, from /usr/bin and /usr/sbin, will likely not be available during
>>>>>>>>>> the boot process and the udev rule will fail to restore the state.
>>>>>>>>> Not true.  /lib must be always present at boot even if /usr isn't
>>>>>>>>> mounted.  That's the reason why /lib/udev was chosen as default in the
>>>>>>>>> past.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Takashi
>>>>>>>> You got me wrong, I know that /lib should be available on early boot
>>>>>>>> (unless it's a
>>>>>>>> symlink, like in Arch Linux) but the point is that since the alsa-utils
>>>>>>>> binaries are
>>>>>>>> installed in /usr so should be the udev rules otherwise during boot
>>>>>>>> without /usr
>>>>>>>> being mounted you will see error message about /usr/sbin/alsactl.
>>>>>>> Theoretically yes, but this has been rather less problems than
>>>>>>> creating a non-existing /usr/lib/udev in the past.  That's the very
>>>>>>> reason of hard-coded /lib/udev.  Changing the default behavior is
>>>>>>> often worse unless you really do it carefully with consideration of
>>>>>>> compatibility with old systems.
>>>>>>>
>>>>>>> So, if you want to change the default, don't hard code again.  Make
>>>>>>> configure to guess the right place.  A patch achieving it is welcome.
>>>>>>>
>>>>>>>
>>>>>>> Takashi
>>>>>> Ok, here is the patch:
>>>>>>
>>>>>>     From 74faeceb26c4730d6150e726792f6eb1f257b03e Mon Sep 17 00:00:00 2001
>>>>>> From: Ivailo Monev <xakepa10 at gmail.com>
>>>>>> Date: Thu, 14 Nov 2013 13:13:43 +0000
>>>>>> Subject: [PATCH 1/1] detect udevdir via pkg-config
>>>>>>
>>>>>> ---
>>>>>>      configure.in | 2 +-
>>>>>>      1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>>
>>>>>> diff --git a/configure.in b/configure.in
>>>>>> index 3ae3209..74b891e 100644
>>>>>> --- a/configure.in
>>>>>> +++ b/configure.in
>>>>>> @@ -121,7 +121,7 @@ AM_CONDITIONAL(USE_XMLTO, test x"$xmlto" = xyes)
>>>>>>      AC_ARG_WITH(
>>>>>>              [udev-rules-dir],
>>>>>>              AS_HELP_STRING([--with-udev-rules-dir],[Directory where to
>>>>>> install udev rules to (defaults to /lib/udev/rules.d)]),
>>>>>> -        [udevrulesdir=$withval], [udevrulesdir="/lib/udev/rules.d"])
>>>>>> +        [udevrulesdir=$withval], [udevrulesdir=$($PKG_CONFIG udev
>>>>>> --variable=udevdir)"/rules.d"])
>>>>>>      AC_SUBST(udevrulesdir)
>>>>> This pkg-config option isn't always available.  Make sure to have a
>>>>> proper fallback to /lib/udev/rules.d.  Also, update the help text,
>>>>> too.
>>>>>
>>>>>
>>>>> thanks,
>>>>>
>>>>> Takashi
>>>> I'm not an autotools guru but there is PKG_PROG_PKG_CONFIG in
>>>> configure.in which is supposed to ensure that pkg-config is installed,
>>>> right? Besides, with_systemdsystemunitdir uses almost the same
>>>> method as in my patch which I looked at before submitting it.
>>> udev.pc is no hard requirement for alsa-utils, thus there is no
>>> guarantee that "pkg-config udev" works as you expected.  If it's not
>>> installed, pkg-config doesn't complain but just gives an empty
>>> string.
>>>
>>>
>>>> Anyway, here is an updated patch that keeps things more like the
>>>> other tests in configure.in:
>>>>
>>>>    From b30824ef1682f3040d53c1495dae308f51a4f380 Mon Sep 17 00:00:00 2001
>>>> From: Ivailo Monev <xakepa10 at gmail.com>
>>>> Date: Thu, 14 Nov 2013 18:41:55 +0000
>>>> Subject: [PATCH 1/1] detect udevdir via pkg-config
>>>>
>>>> ---
>>>>     configure.in | 4 ++--
>>>>     1 file changed, 2 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/configure.in b/configure.in
>>>> index 3ae3209..e8e1e82 100644
>>>> --- a/configure.in
>>>> +++ b/configure.in
>>>> @@ -120,8 +120,8 @@ AM_CONDITIONAL(USE_XMLTO, test x"$xmlto" = xyes)
>>>>
>>>>     AC_ARG_WITH(
>>>>             [udev-rules-dir],
>>>> -        AS_HELP_STRING([--with-udev-rules-dir],[Directory where to
>>>> install udev rules to (defaults to /lib/udev/rules.d)]),
>>>> -        [udevrulesdir=$withval], [udevrulesdir="/lib/udev/rules.d"])
>>>> +        AS_HELP_STRING([--with-udev-rules-dir=DIR],[Directory where to
>>>> install udev rules to (default=auto)]),
>>>> +        [udevrulesdir="$withval"], [udevrulesdir=$($PKG_CONFIG udev
>>>> --variable=udevdir)/rules.d])
>>>>     AC_SUBST(udevrulesdir)
>>>>
>>>>     dnl Checks for header files.
>>>> -- 
>>>> 1.8.3.4
>>>>
>>>> If you are not happy with my patch you can write your own based
>>>> which uses the pkg-config approach without hesitation, I will not
>>>> get upset.
>>>>
>>>> And still, will you do something about separate /usr or not? Just
>>>> asking. As stated before, this patch will not solve it but replace
>>>> the path hard coding with a flexible method.
>>> It's matter distributors decide.  The default value is just some
>>> value that might work.  Users and distros must read the document and
>>> give the proper configure options.
>>>
>>>
>>> Takashi
>> Sorry for the late reply.
>>
>> So, I get that there is a variation from distribution to distribution.
>> But what if udevrulesdir respects the default prefix
>> (AC_PREFIX_DEFAULT)? That way, the issue in my first email will
>> be solved. Will a patch for it be accepted?
> It'd break the previously working behavior.
>
> Simply fallback to the old value (/lib/udev/) when pkg-config gives an
> empty string.  That should suffice for both cases.
>
>
> Takashi
 From 8bfe323092f08e8326dddbb6c15029845556f468 Mon Sep 17 00:00:00 2001
From: Ivailo Monev <xakepa10 at gmail.com>
Date: Fri, 15 Nov 2013 14:05:02 +0000
Subject: [PATCH] detect udevdir via pkg-config, fallback to 
/lib/udev/rules.d

Signed-off-by: Ivailo Monev <xakepa10 at gmail.com>
---
  configure.in | 10 ++++++++--
  1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/configure.in b/configure.in
index 3ae3209..60da1fa 100644
--- a/configure.in
+++ b/configure.in
@@ -120,8 +120,14 @@ AM_CONDITIONAL(USE_XMLTO, test x"$xmlto" = xyes)

  AC_ARG_WITH(
          [udev-rules-dir],
-        AS_HELP_STRING([--with-udev-rules-dir],[Directory where to 
install udev rules to (defaults to /lib/udev/rules.d)]),
-        [udevrulesdir=$withval], [udevrulesdir="/lib/udev/rules.d"])
+        AS_HELP_STRING([--with-udev-rules-dir=DIR],[Directory where to 
install udev rules to (default=auto)]),
+        [udevrulesdir="$withval"],
+        [udevdir=$($PKG_CONFIG udev --variable=udevdir)
+        if test "x$udevdir" = "x"; then
+            udevrulesdir="/lib/udev/rules.d"
+        else
+            udevrulesdir="$udevdir/rules.d"
+        fi])
  AC_SUBST(udevrulesdir)

  dnl Checks for header files.
-- 
1.8.3.4

Cheers!


More information about the Alsa-devel mailing list