Hello community, here is the log from the commit of package dracut for openSUSE:Factory checked in at 2019-09-02 12:43:43 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/dracut (Old) and /work/SRC/openSUSE:Factory/.dracut.new.7948 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "dracut" Mon Sep 2 12:43:43 2019 rev:143 rq:726198 version:049+git108.6c9d1156 Changes: -------- --- /work/SRC/openSUSE:Factory/dracut/dracut.changes 2019-07-21 11:32:32.752795529 +0200 +++ /work/SRC/openSUSE:Factory/.dracut.new.7948/dracut.changes 2019-09-02 12:43:47.429764118 +0200 @@ -1,0 +2,9 @@ +Mon Aug 26 14:40:04 UTC 2019 - daniel.molken...@suse.com + +- Update to version 049+git108.6c9d1156: + * dracut-init.sh: Nuke unused install_kmod_with_fw function + * dracut-install: Support the compressed firmware files correctly (boo#1146769) + * dracut: let module handling function accept optional path option + * dracut.sh: Fix udevdir detection + +------------------------------------------------------------------- Old: ---- dracut-049+git104.1244eed7.obscpio dracut-049+git104.1244eed7.tar.xz New: ---- dracut-049+git108.6c9d1156.obscpio dracut-049+git108.6c9d1156.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ dracut.spec ++++++ --- /var/tmp/diff_new_pack.nM2uAG/_old 2019-09-02 12:43:48.229763974 +0200 +++ /var/tmp/diff_new_pack.nM2uAG/_new 2019-09-02 12:43:48.229763974 +0200 @@ -19,7 +19,7 @@ %define dracutlibdir %{_libexecdir}/dracut Name: dracut -Version: 049+git104.1244eed7 +Version: 049+git108.6c9d1156 Release: 0 Summary: Initramfs generator using udev License: GPL-2.0-or-later AND LGPL-2.1-or-later ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.nM2uAG/_old 2019-09-02 12:43:48.277763965 +0200 +++ /var/tmp/diff_new_pack.nM2uAG/_new 2019-09-02 12:43:48.281763964 +0200 @@ -1,4 +1,4 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/opensuse/dracut.git</param> - <param name="changesrevision">1244eed724bbf95f36a7535fe6b9ad197887960c</param></service></servicedata> \ No newline at end of file + <param name="changesrevision">6c9d1156d1d2eea7147a76d75a06a676e0de8985</param></service></servicedata> \ No newline at end of file ++++++ dracut-049+git104.1244eed7.obscpio -> dracut-049+git108.6c9d1156.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dracut-049+git104.1244eed7/dracut-init.sh new/dracut-049+git108.6c9d1156/dracut-init.sh --- old/dracut-049+git104.1244eed7/dracut-init.sh 2019-07-19 16:16:11.000000000 +0200 +++ new/dracut-049+git108.6c9d1156/dracut-init.sh 2019-08-26 16:39:23.000000000 +0200 @@ -150,6 +150,10 @@ [[ " $mods_to_load $modules_loaded " == *\ $*\ * ]] } +dracut_module_path() { + echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; } +} + if ! [[ $DRACUT_INSTALL ]]; then DRACUT_INSTALL=$(find_binary dracut-install) fi @@ -567,15 +571,16 @@ done } -# module_check <dracut module> +# module_check <dracut module> [<forced>] [<module path>] # execute the check() function of module-setup.sh of <dracut module> # or the "check" script, if module-setup.sh is not found # "check $hostonly" is called module_check() { - local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; }) + local _moddir=$3 local _ret local _forced=0 local _hostonly=$hostonly + [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1") [ $# -eq 2 ] && _forced=$2 [[ -d $_moddir ]] || return 1 if [[ ! -f $_moddir/module-setup.sh ]]; then @@ -598,14 +603,15 @@ return $_ret } -# module_check_mount <dracut module> +# module_check_mount <dracut module> [<module path>] # execute the check() function of module-setup.sh of <dracut module> # or the "check" script, if module-setup.sh is not found # "mount_needs=1 check 0" is called module_check_mount() { - local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; }) + local _moddir=$2 local _ret mount_needs=1 + [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1") [[ -d $_moddir ]] || return 1 if [[ ! -f $_moddir/module-setup.sh ]]; then # if we do not have a check script, we are unconditionally included @@ -624,12 +630,13 @@ return $_ret } -# module_depends <dracut module> +# module_depends <dracut module> [<module path>] # execute the depends() function of module-setup.sh of <dracut module> # or the "depends" script, if module-setup.sh is not found module_depends() { - local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; }) + local _moddir=$2 local _ret + [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1") [[ -d $_moddir ]] || return 1 if [[ ! -f $_moddir/module-setup.sh ]]; then # if we do not have a check script, we have no deps @@ -647,12 +654,13 @@ fi } -# module_cmdline <dracut module> +# module_cmdline <dracut module> [<module path>] # execute the cmdline() function of module-setup.sh of <dracut module> # or the "cmdline" script, if module-setup.sh is not found module_cmdline() { - local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; }) + local _moddir=$2 local _ret + [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1") [[ -d $_moddir ]] || return 1 if [[ ! -f $_moddir/module-setup.sh ]]; then [[ -x $_moddir/cmdline ]] && . "$_moddir/cmdline" @@ -668,12 +676,13 @@ fi } -# module_install <dracut module> +# module_install <dracut module> [<module path>] # execute the install() function of module-setup.sh of <dracut module> # or the "install" script, if module-setup.sh is not found module_install() { - local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; }) + local _moddir=$2 local _ret + [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1") [[ -d $_moddir ]] || return 1 if [[ ! -f $_moddir/module-setup.sh ]]; then [[ -x $_moddir/install ]] && . "$_moddir/install" @@ -689,12 +698,13 @@ fi } -# module_installkernel <dracut module> +# module_installkernel <dracut module> [<module path>] # execute the installkernel() function of module-setup.sh of <dracut module> # or the "installkernel" script, if module-setup.sh is not found module_installkernel() { - local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; }) + local _moddir=$2 local _ret + [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1") [[ -d $_moddir ]] || return 1 if [[ ! -f $_moddir/module-setup.sh ]]; then [[ -x $_moddir/installkernel ]] && . "$_moddir/installkernel" @@ -710,15 +720,16 @@ fi } -# check_mount <dracut module> +# check_mount <dracut module> [<use_as_dep>] [<module path>] # check_mount checks, if a dracut module is needed for the given # device and filesystem types in "${host_fs_types[@]}" check_mount() { local _mod=$1 - local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; }) + local _moddir=$3 local _ret local _moddep + [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1") [ "${#host_fs_types[@]}" -le 0 ] && return 1 # If we are already scheduled to be loaded, no need to check again. @@ -735,7 +746,7 @@ fi if [[ " $dracutmodules $add_dracutmodules $force_add_dracutmodules" == *\ $_mod\ * ]]; then - module_check_mount $_mod; ret=$? + module_check_mount $_mod $_moddir; ret=$? # explicit module, so also accept ret=255 [[ $ret = 0 || $ret = 255 ]] || return 1 @@ -743,14 +754,14 @@ # module not in our list if [[ $dracutmodules = all ]]; then # check, if we can and should install this module - module_check_mount $_mod || return 1 + module_check_mount $_mod $_moddir || return 1 else # skip this module return 1 fi fi - for _moddep in $(module_depends $_mod); do + for _moddep in $(module_depends $_mod $_moddir); do # handle deps as if they were manually added [[ " $dracutmodules " == *\ $_mod\ * ]] \ && [[ " $dracutmodules " != *\ $_moddep\ * ]] \ @@ -774,15 +785,17 @@ return 0 } -# check_module <dracut module> [<use_as_dep>] +# check_module <dracut module> [<use_as_dep>] [<module path>] # check if a dracut module is to be used in the initramfs process # if <use_as_dep> is set, then the process also keeps track # that the modules were checked for the dependency tracking process check_module() { local _mod=$1 - local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; }) + local _moddir=$3 local _ret local _moddep + + [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1") # If we are already scheduled to be loaded, no need to check again. [[ " $mods_to_load " == *\ $_mod\ * ]] && return 0 [[ " $mods_checked_as_dep " == *\ $_mod\ * ]] && return 1 @@ -799,9 +812,9 @@ if [[ " $dracutmodules $add_dracutmodules $force_add_dracutmodules" == *\ $_mod\ * ]]; then if [[ " $dracutmodules $force_add_dracutmodules " == *\ $_mod\ * ]]; then - module_check $_mod 1; ret=$? + module_check $_mod 1 $_moddir; ret=$? else - module_check $_mod 0; ret=$? + module_check $_mod 0 $_moddir; ret=$? fi # explicit module, so also accept ret=255 [[ $ret = 0 || $ret = 255 ]] || return 1 @@ -809,7 +822,7 @@ # module not in our list if [[ $dracutmodules = all ]]; then # check, if we can and should install this module - module_check $_mod; ret=$? + module_check $_mod 0 $_moddir; ret=$? if [[ $ret != 0 ]]; then [[ $2 ]] && return 1 [[ $ret != 255 ]] && return 1 @@ -820,7 +833,7 @@ fi fi - for _moddep in $(module_depends $_mod); do + for _moddep in $(module_depends $_mod $_moddir); do # handle deps as if they were manually added [[ " $dracutmodules " == *\ $_mod\ * ]] \ && [[ " $dracutmodules " != *\ $_moddep\ * ]] \ @@ -845,7 +858,7 @@ } # for_each_module_dir <func> -# execute "<func> <dracut module> 1" +# execute "<func> <dracut module> 1 <module path>" for_each_module_dir() { local _modcheck local _mod @@ -857,7 +870,7 @@ [[ -e $_moddir/install || -e $_moddir/installkernel || \ -e $_moddir/module-setup.sh ]] || continue _mod=${_moddir##*/}; _mod=${_mod#[0-9][0-9]} - $_func $_mod 1 + $_func $_mod 1 $_moddir done # Report any missing dracut modules, the user has specified @@ -878,77 +891,6 @@ done } -# Install a single kernel module along with any firmware it may require. -# $1 = full path to kernel module to install -install_kmod_with_fw() { - # no need to go further if the module is already installed - - [[ -e "${initdir}/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" ]] \ - && return 0 - - if [[ $omit_drivers ]]; then - local _kmod=${1##*/} - _kmod=${_kmod%.ko*} - _kmod=${_kmod/-/_} - if [[ "$_kmod" =~ $omit_drivers ]]; then - dinfo "Omitting driver $_kmod" - return 0 - fi - if [[ "${1##*/lib/modules/$kernel/}" =~ $omit_drivers ]]; then - dinfo "Omitting driver $_kmod" - return 0 - fi - fi - - if [[ $silent_omit_drivers ]]; then - local _kmod=${1##*/} - _kmod=${_kmod%.ko*} - _kmod=${_kmod/-/_} - [[ "$_kmod" =~ $silent_omit_drivers ]] && return 0 - [[ "${1##*/lib/modules/$kernel/}" =~ $silent_omit_drivers ]] && return 0 - fi - - inst_simple "$1" "/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" - ret=$? - (($ret != 0)) && return $ret - if [ "${1##*.ko}" = ".xz" ]; then - dinfo "unxz ${initdir}/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" - unxz -f "${initdir}/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" - elif [ "${1##*.ko}" = ".gz" ]; then - dinfo "gunzip ${initdir}/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" - gunzip -f "${initdir}/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" - fi - - local _modname=${1##*/} _fwdir _found _fw - _modname=${_modname%.ko*} - for _fw in $(modinfo -k $kernel -F firmware $1 2>/dev/null); do - _found='' - for _fwdir in $fw_dir; do - [[ -d $_fwdir ]] || continue - if [[ -f $_fwdir/$_fw ]]; then - inst_simple "$_fwdir/$_fw" "/lib/firmware/$_fw" - elif [[ -f $_fwdir/$_fw.xz ]]; then - inst_simple "$_fwdir/$_fw.xz" "/lib/firmware/$_fw.xz" - rm -f "${initdir}/lib/firmware/$_fw" - unxz -f "${initdir}/lib/firmware/$_fw.xz" - else - continue - fi - _found=yes - done - if [[ $_found != yes ]]; then - if ! [[ -d $(echo /sys/module/${_modname//-/_}|{ read a b; echo $a; }) ]]; then - dinfo "Possible missing firmware \"${_fw}\" for kernel module" \ - "\"${_modname}.ko\"" - else - dwarn "Possible missing firmware \"${_fw}\" for kernel module" \ - "\"${_modname}.ko\"" - fi - fi - done - return 0 -} - # Do something with all the dependencies of a kernel module. # Note that kernel modules depend on themselves using the technique we use # $1 = function to call for each dependency we find diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dracut-049+git104.1244eed7/dracut.sh new/dracut-049+git108.6c9d1156/dracut.sh --- old/dracut-049+git104.1244eed7/dracut.sh 2019-07-19 16:16:11.000000000 +0200 +++ new/dracut-049+git108.6c9d1156/dracut.sh 2019-08-26 16:39:23.000000000 +0200 @@ -1311,8 +1311,8 @@ [[ -d $udevdir ]] \ || udevdir="$(pkg-config udev --variable=udevdir 2>/dev/null)" if ! [[ -d "$udevdir" ]]; then - [[ -e /lib/udev/collect ]] && udevdir=/lib/udev - [[ -e /usr/lib/udev/collect ]] && udevdir=/usr/lib/udev + [[ -e /lib/udev/ata_id ]] && udevdir=/lib/udev + [[ -e /usr/lib/udev/ata_id ]] && udevdir=/usr/lib/udev fi [[ -d $systemdutildir ]] \ @@ -1373,7 +1373,7 @@ for moddir in "$dracutbasedir/modules.d"/[0-9][0-9]*; do _d_mod=${moddir##*/}; _d_mod=${_d_mod#[0-9][0-9]} [[ ${_mods_to_print[$_d_mod]} ]] || continue - module_cmdline "$_d_mod" + module_cmdline "$_d_mod" "$moddir" done unset moddir } @@ -1454,14 +1454,14 @@ dinfo "*** Including module: $_d_mod ***" fi if [[ $kernel_only == yes ]]; then - module_installkernel "$_d_mod" || { + module_installkernel "$_d_mod" "$moddir" || { dfatal "installkernel failed in module $_d_mod" exit 1 } else - module_install "$_d_mod" + module_install "$_d_mod" "$moddir" if [[ $no_kernel != yes ]]; then - module_installkernel "$_d_mod" || { + module_installkernel "$_d_mod" "$moddir" || { dfatal "installkernel failed in module $_d_mod" exit 1 } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dracut-049+git104.1244eed7/install/dracut-install.c new/dracut-049+git108.6c9d1156/install/dracut-install.c --- old/dracut-049+git104.1244eed7/install/dracut-install.c 2019-07-19 16:16:11.000000000 +0200 +++ new/dracut-049+git108.6c9d1156/install/dracut-install.c 2019-08-26 16:39:23.000000000 +0200 @@ -1151,6 +1151,8 @@ ret = -1; STRV_FOREACH(q, firmwaredirs) { _cleanup_free_ char *fwpath = NULL; + _cleanup_free_ char *fwpath_xz = NULL; + const char *fw; struct stat sb; int r; @@ -1160,12 +1162,21 @@ exit(EXIT_FAILURE); } + fw = fwpath; if (stat(fwpath, &sb) != 0) { - log_debug("stat(%s) != 0", fwpath); - continue; + r = asprintf(&fwpath_xz, "%s.xz", fwpath); + if (r < 0) { + log_error("Out of memory!"); + exit(EXIT_FAILURE); + } + if (stat(fwpath_xz, &sb) != 0) { + log_debug("stat(%s) != 0", fwpath); + continue; + } + fw = fwpath_xz; } - ret = dracut_install(fwpath, fwpath, false, false, true); + ret = dracut_install(fw, fw, false, false, true); if (ret == 0) log_debug("dracut_install '%s' OK", fwpath); } ++++++ dracut-049+git104.1244eed7.tar.xz -> dracut-049+git108.6c9d1156.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dracut-049+git104.1244eed7/dracut-init.sh new/dracut-049+git108.6c9d1156/dracut-init.sh --- old/dracut-049+git104.1244eed7/dracut-init.sh 2019-07-19 16:16:11.000000000 +0200 +++ new/dracut-049+git108.6c9d1156/dracut-init.sh 2019-08-26 16:39:23.000000000 +0200 @@ -150,6 +150,10 @@ [[ " $mods_to_load $modules_loaded " == *\ $*\ * ]] } +dracut_module_path() { + echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; } +} + if ! [[ $DRACUT_INSTALL ]]; then DRACUT_INSTALL=$(find_binary dracut-install) fi @@ -567,15 +571,16 @@ done } -# module_check <dracut module> +# module_check <dracut module> [<forced>] [<module path>] # execute the check() function of module-setup.sh of <dracut module> # or the "check" script, if module-setup.sh is not found # "check $hostonly" is called module_check() { - local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; }) + local _moddir=$3 local _ret local _forced=0 local _hostonly=$hostonly + [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1") [ $# -eq 2 ] && _forced=$2 [[ -d $_moddir ]] || return 1 if [[ ! -f $_moddir/module-setup.sh ]]; then @@ -598,14 +603,15 @@ return $_ret } -# module_check_mount <dracut module> +# module_check_mount <dracut module> [<module path>] # execute the check() function of module-setup.sh of <dracut module> # or the "check" script, if module-setup.sh is not found # "mount_needs=1 check 0" is called module_check_mount() { - local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; }) + local _moddir=$2 local _ret mount_needs=1 + [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1") [[ -d $_moddir ]] || return 1 if [[ ! -f $_moddir/module-setup.sh ]]; then # if we do not have a check script, we are unconditionally included @@ -624,12 +630,13 @@ return $_ret } -# module_depends <dracut module> +# module_depends <dracut module> [<module path>] # execute the depends() function of module-setup.sh of <dracut module> # or the "depends" script, if module-setup.sh is not found module_depends() { - local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; }) + local _moddir=$2 local _ret + [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1") [[ -d $_moddir ]] || return 1 if [[ ! -f $_moddir/module-setup.sh ]]; then # if we do not have a check script, we have no deps @@ -647,12 +654,13 @@ fi } -# module_cmdline <dracut module> +# module_cmdline <dracut module> [<module path>] # execute the cmdline() function of module-setup.sh of <dracut module> # or the "cmdline" script, if module-setup.sh is not found module_cmdline() { - local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; }) + local _moddir=$2 local _ret + [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1") [[ -d $_moddir ]] || return 1 if [[ ! -f $_moddir/module-setup.sh ]]; then [[ -x $_moddir/cmdline ]] && . "$_moddir/cmdline" @@ -668,12 +676,13 @@ fi } -# module_install <dracut module> +# module_install <dracut module> [<module path>] # execute the install() function of module-setup.sh of <dracut module> # or the "install" script, if module-setup.sh is not found module_install() { - local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; }) + local _moddir=$2 local _ret + [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1") [[ -d $_moddir ]] || return 1 if [[ ! -f $_moddir/module-setup.sh ]]; then [[ -x $_moddir/install ]] && . "$_moddir/install" @@ -689,12 +698,13 @@ fi } -# module_installkernel <dracut module> +# module_installkernel <dracut module> [<module path>] # execute the installkernel() function of module-setup.sh of <dracut module> # or the "installkernel" script, if module-setup.sh is not found module_installkernel() { - local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; }) + local _moddir=$2 local _ret + [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1") [[ -d $_moddir ]] || return 1 if [[ ! -f $_moddir/module-setup.sh ]]; then [[ -x $_moddir/installkernel ]] && . "$_moddir/installkernel" @@ -710,15 +720,16 @@ fi } -# check_mount <dracut module> +# check_mount <dracut module> [<use_as_dep>] [<module path>] # check_mount checks, if a dracut module is needed for the given # device and filesystem types in "${host_fs_types[@]}" check_mount() { local _mod=$1 - local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; }) + local _moddir=$3 local _ret local _moddep + [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1") [ "${#host_fs_types[@]}" -le 0 ] && return 1 # If we are already scheduled to be loaded, no need to check again. @@ -735,7 +746,7 @@ fi if [[ " $dracutmodules $add_dracutmodules $force_add_dracutmodules" == *\ $_mod\ * ]]; then - module_check_mount $_mod; ret=$? + module_check_mount $_mod $_moddir; ret=$? # explicit module, so also accept ret=255 [[ $ret = 0 || $ret = 255 ]] || return 1 @@ -743,14 +754,14 @@ # module not in our list if [[ $dracutmodules = all ]]; then # check, if we can and should install this module - module_check_mount $_mod || return 1 + module_check_mount $_mod $_moddir || return 1 else # skip this module return 1 fi fi - for _moddep in $(module_depends $_mod); do + for _moddep in $(module_depends $_mod $_moddir); do # handle deps as if they were manually added [[ " $dracutmodules " == *\ $_mod\ * ]] \ && [[ " $dracutmodules " != *\ $_moddep\ * ]] \ @@ -774,15 +785,17 @@ return 0 } -# check_module <dracut module> [<use_as_dep>] +# check_module <dracut module> [<use_as_dep>] [<module path>] # check if a dracut module is to be used in the initramfs process # if <use_as_dep> is set, then the process also keeps track # that the modules were checked for the dependency tracking process check_module() { local _mod=$1 - local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; }) + local _moddir=$3 local _ret local _moddep + + [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1") # If we are already scheduled to be loaded, no need to check again. [[ " $mods_to_load " == *\ $_mod\ * ]] && return 0 [[ " $mods_checked_as_dep " == *\ $_mod\ * ]] && return 1 @@ -799,9 +812,9 @@ if [[ " $dracutmodules $add_dracutmodules $force_add_dracutmodules" == *\ $_mod\ * ]]; then if [[ " $dracutmodules $force_add_dracutmodules " == *\ $_mod\ * ]]; then - module_check $_mod 1; ret=$? + module_check $_mod 1 $_moddir; ret=$? else - module_check $_mod 0; ret=$? + module_check $_mod 0 $_moddir; ret=$? fi # explicit module, so also accept ret=255 [[ $ret = 0 || $ret = 255 ]] || return 1 @@ -809,7 +822,7 @@ # module not in our list if [[ $dracutmodules = all ]]; then # check, if we can and should install this module - module_check $_mod; ret=$? + module_check $_mod 0 $_moddir; ret=$? if [[ $ret != 0 ]]; then [[ $2 ]] && return 1 [[ $ret != 255 ]] && return 1 @@ -820,7 +833,7 @@ fi fi - for _moddep in $(module_depends $_mod); do + for _moddep in $(module_depends $_mod $_moddir); do # handle deps as if they were manually added [[ " $dracutmodules " == *\ $_mod\ * ]] \ && [[ " $dracutmodules " != *\ $_moddep\ * ]] \ @@ -845,7 +858,7 @@ } # for_each_module_dir <func> -# execute "<func> <dracut module> 1" +# execute "<func> <dracut module> 1 <module path>" for_each_module_dir() { local _modcheck local _mod @@ -857,7 +870,7 @@ [[ -e $_moddir/install || -e $_moddir/installkernel || \ -e $_moddir/module-setup.sh ]] || continue _mod=${_moddir##*/}; _mod=${_mod#[0-9][0-9]} - $_func $_mod 1 + $_func $_mod 1 $_moddir done # Report any missing dracut modules, the user has specified @@ -878,77 +891,6 @@ done } -# Install a single kernel module along with any firmware it may require. -# $1 = full path to kernel module to install -install_kmod_with_fw() { - # no need to go further if the module is already installed - - [[ -e "${initdir}/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" ]] \ - && return 0 - - if [[ $omit_drivers ]]; then - local _kmod=${1##*/} - _kmod=${_kmod%.ko*} - _kmod=${_kmod/-/_} - if [[ "$_kmod" =~ $omit_drivers ]]; then - dinfo "Omitting driver $_kmod" - return 0 - fi - if [[ "${1##*/lib/modules/$kernel/}" =~ $omit_drivers ]]; then - dinfo "Omitting driver $_kmod" - return 0 - fi - fi - - if [[ $silent_omit_drivers ]]; then - local _kmod=${1##*/} - _kmod=${_kmod%.ko*} - _kmod=${_kmod/-/_} - [[ "$_kmod" =~ $silent_omit_drivers ]] && return 0 - [[ "${1##*/lib/modules/$kernel/}" =~ $silent_omit_drivers ]] && return 0 - fi - - inst_simple "$1" "/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" - ret=$? - (($ret != 0)) && return $ret - if [ "${1##*.ko}" = ".xz" ]; then - dinfo "unxz ${initdir}/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" - unxz -f "${initdir}/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" - elif [ "${1##*.ko}" = ".gz" ]; then - dinfo "gunzip ${initdir}/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" - gunzip -f "${initdir}/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" - fi - - local _modname=${1##*/} _fwdir _found _fw - _modname=${_modname%.ko*} - for _fw in $(modinfo -k $kernel -F firmware $1 2>/dev/null); do - _found='' - for _fwdir in $fw_dir; do - [[ -d $_fwdir ]] || continue - if [[ -f $_fwdir/$_fw ]]; then - inst_simple "$_fwdir/$_fw" "/lib/firmware/$_fw" - elif [[ -f $_fwdir/$_fw.xz ]]; then - inst_simple "$_fwdir/$_fw.xz" "/lib/firmware/$_fw.xz" - rm -f "${initdir}/lib/firmware/$_fw" - unxz -f "${initdir}/lib/firmware/$_fw.xz" - else - continue - fi - _found=yes - done - if [[ $_found != yes ]]; then - if ! [[ -d $(echo /sys/module/${_modname//-/_}|{ read a b; echo $a; }) ]]; then - dinfo "Possible missing firmware \"${_fw}\" for kernel module" \ - "\"${_modname}.ko\"" - else - dwarn "Possible missing firmware \"${_fw}\" for kernel module" \ - "\"${_modname}.ko\"" - fi - fi - done - return 0 -} - # Do something with all the dependencies of a kernel module. # Note that kernel modules depend on themselves using the technique we use # $1 = function to call for each dependency we find diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dracut-049+git104.1244eed7/dracut.sh new/dracut-049+git108.6c9d1156/dracut.sh --- old/dracut-049+git104.1244eed7/dracut.sh 2019-07-19 16:16:11.000000000 +0200 +++ new/dracut-049+git108.6c9d1156/dracut.sh 2019-08-26 16:39:23.000000000 +0200 @@ -1311,8 +1311,8 @@ [[ -d $udevdir ]] \ || udevdir="$(pkg-config udev --variable=udevdir 2>/dev/null)" if ! [[ -d "$udevdir" ]]; then - [[ -e /lib/udev/collect ]] && udevdir=/lib/udev - [[ -e /usr/lib/udev/collect ]] && udevdir=/usr/lib/udev + [[ -e /lib/udev/ata_id ]] && udevdir=/lib/udev + [[ -e /usr/lib/udev/ata_id ]] && udevdir=/usr/lib/udev fi [[ -d $systemdutildir ]] \ @@ -1373,7 +1373,7 @@ for moddir in "$dracutbasedir/modules.d"/[0-9][0-9]*; do _d_mod=${moddir##*/}; _d_mod=${_d_mod#[0-9][0-9]} [[ ${_mods_to_print[$_d_mod]} ]] || continue - module_cmdline "$_d_mod" + module_cmdline "$_d_mod" "$moddir" done unset moddir } @@ -1454,14 +1454,14 @@ dinfo "*** Including module: $_d_mod ***" fi if [[ $kernel_only == yes ]]; then - module_installkernel "$_d_mod" || { + module_installkernel "$_d_mod" "$moddir" || { dfatal "installkernel failed in module $_d_mod" exit 1 } else - module_install "$_d_mod" + module_install "$_d_mod" "$moddir" if [[ $no_kernel != yes ]]; then - module_installkernel "$_d_mod" || { + module_installkernel "$_d_mod" "$moddir" || { dfatal "installkernel failed in module $_d_mod" exit 1 } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dracut-049+git104.1244eed7/install/dracut-install.c new/dracut-049+git108.6c9d1156/install/dracut-install.c --- old/dracut-049+git104.1244eed7/install/dracut-install.c 2019-07-19 16:16:11.000000000 +0200 +++ new/dracut-049+git108.6c9d1156/install/dracut-install.c 2019-08-26 16:39:23.000000000 +0200 @@ -1151,6 +1151,8 @@ ret = -1; STRV_FOREACH(q, firmwaredirs) { _cleanup_free_ char *fwpath = NULL; + _cleanup_free_ char *fwpath_xz = NULL; + const char *fw; struct stat sb; int r; @@ -1160,12 +1162,21 @@ exit(EXIT_FAILURE); } + fw = fwpath; if (stat(fwpath, &sb) != 0) { - log_debug("stat(%s) != 0", fwpath); - continue; + r = asprintf(&fwpath_xz, "%s.xz", fwpath); + if (r < 0) { + log_error("Out of memory!"); + exit(EXIT_FAILURE); + } + if (stat(fwpath_xz, &sb) != 0) { + log_debug("stat(%s) != 0", fwpath); + continue; + } + fw = fwpath_xz; } - ret = dracut_install(fwpath, fwpath, false, false, true); + ret = dracut_install(fw, fw, false, false, true); if (ret == 0) log_debug("dracut_install '%s' OK", fwpath); } ++++++ dracut.obsinfo ++++++ --- /var/tmp/diff_new_pack.nM2uAG/_old 2019-09-02 12:43:48.709763887 +0200 +++ /var/tmp/diff_new_pack.nM2uAG/_new 2019-09-02 12:43:48.709763887 +0200 @@ -1,5 +1,5 @@ name: dracut -version: 049+git104.1244eed7 -mtime: 1563545771 -commit: 1244eed724bbf95f36a7535fe6b9ad197887960c +version: 049+git108.6c9d1156 +mtime: 1566830363 +commit: 6c9d1156d1d2eea7147a76d75a06a676e0de8985