[alsa-devel] udev rules prefix

Ivailo Monev xakepa10 at gmail.com
Thu Nov 14 19:49:02 CET 2013


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.

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.

Cheers!


More information about the Alsa-devel mailing list