Skip to contentSkip to conversation

build initramfs: bad path in inst_rules when --local

DISCUSSION John Reiser 2 participants 2 messages Sep 17, 2011 – Sep 22, 2011 1 message not in the archive

lore
Share & tools
lore
#0 lore raw

When dracut-013 --local, then inst_rules tests for a pathname such as

     [[ -f /etc/udev/rules.d//ext4/dracut/modules.d/10i18n/10-console.rules ]]

which obviously is bogus: there are two "root" there: /etc and /ext4 [The "/ext4/dracut" is where my --local versions live.] Such a path never can exist, so something is wrong with the intent.

Analysis:
modules.d/10i18n/module-setup.sh: install_base() calls

        inst_rules ${moddir}/10-console.rules

Note no underscore '_' in "${moddir}".

moddir is a global variable that is set by dracut:

     for moddir in "$dracutbasedir/modules.d"/[0-9][0-9]*; do
When --local, then dracutbasedir is set in dracut:
    dracutbasedir="$(readlink -f ${0%/*})"

Based on both of these, then inst_rules() in dracut-functions does:

    for _rule in "$@"; do
        <<snip>>
        for r in /lib/udev/rules.d /etc/udev/rules.d; do
            if [[ -f $r/$_rule ]]; then
which leads to testing a pathname such as
     [[ -f /etc/udev/rules.d//ext4/dracut/modules.d/10i18n/10-console.rules ]]

A message that is not in the archive (sent off-list or not yet received): 4E73E5BB.90208-Po6cBsTGB2ZWk0Htik3J/[email protected]

#2 lore raw
Quoted 16 lines · John Reiser

When dracut-013 --local, then inst_rules tests for a pathname such as

     [[ -f /etc/udev/rules.d//ext4/dracut/modules.d/10i18n/10-console.rules ]]

which obviously is bogus: there are two "root" there: /etc and /ext4 [The "/ext4/dracut" is where my --local versions live.] Such a path never can exist, so something is wrong with the intent.

Analysis:
modules.d/10i18n/module-setup.sh: install_base() calls

        inst_rules ${moddir}/10-console.rules

Note no underscore '_' in "${moddir}".

moddir is a global variable that is set by dracut:

     for moddir in "$dracutbasedir/modules.d"/[0-9][0-9]*; do
When --local, then dracutbasedir is set in dracut:
    dracutbasedir="$(readlink -f ${0%/*})"
Quoted 8 lines

Based on both of these, then inst_rules() in dracut-functions does:

    for _rule in "$@"; do
        <<snip>>
        for r in /lib/udev/rules.d /etc/udev/rules.d; do
            if [[ -f $r/$_rule ]]; then
which leads to testing a pathname such as
     [[ -f /etc/udev/rules.d//ext4/dracut/modules.d/10i18n/10-console.rules ]]

http://git.surfsite.org/?p=dracut.git;a=commitdiff;h=76f5fa549c483a7a38e4757578480096b94615ac