mirror of
https://git.busybox.net/buildroot.git
synced 2024-12-12 23:03:29 +08:00
82afcacb62
As reported by Thierry Bultel [1], dracut doesn't work since the version bump to version 059. Further investigation by Andreas Naumann [2] reported that the issue come from this commit d010fa0 refactor(dracut-install): fork() instead of popen(), sanitise line reading [3]. The issue come from our dracut_wrapper and how DRACUT_LDD is defined. Indeed dracut expect DRACUT_LDD=ldd or a single binary (without arguments) but we are using "prelink-rtld --root='${sysroot}'". With the change introduced by [3], our DRACUT_LDD is used directly by execlp() leading to an error: execlp(ldd, ldd, fullsrcpath, (char *)NULL); Use mktemp to generate a temporary dracut-ldd script using prelink-rtld --root='${sysroot}' ${1} execute dracut.real in a subshell to cleanup the temporary file at the end of the dracut wrapper script. Fixes: https://gitlab.com/buildroot.org/buildroot/-/jobs/6224243423 [tests.fs.test_cpio.TestCpioDracutGlibcMergedUsr] https://gitlab.com/buildroot.org/buildroot/-/jobs/6224243434 [tests.fs.test_cpio.TestCpioDracutMuslMergedUsr] https://gitlab.com/buildroot.org/buildroot/-/jobs/6224243567 [tests.fs.test_cpio.TestCpioDracutUclibcMergedUsr] https://gitlab.com/buildroot.org/buildroot/-/jobs/6224243559 [tests.fs.test_cpio.TestCpioDracutGlibc] https://gitlab.com/buildroot.org/buildroot/-/jobs/6224243504 [tests.fs.test_cpio.TestCpioDracutUclibc] https://gitlab.com/buildroot.org/buildroot/-/jobs/6224243498 [tests.fs.test_cpio.TestCpioDracutMusl] [1] http://lists.busybox.net/pipermail/buildroot/2024-February/684145.html [2] http://lists.busybox.net/pipermail/buildroot/2024-February/684503.html [3]d010fa0d7f
Fixes:145f01ded5
("package/dracut: bump to version 059") Reported-by: Thierry Bultel <thierry.bultel@linatsea.fr> Signed-off-by: Romain Naour <romain.naour@smile.fr> Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
49 lines
1.0 KiB
Bash
49 lines
1.0 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
# Find the --sysroot argument
|
|
sysroot=
|
|
next_arg=false
|
|
for arg; do
|
|
if ${next_arg}; then
|
|
next_arg=false
|
|
sysroot="${arg}"
|
|
continue # not break, in case there are more than one
|
|
fi
|
|
case "${arg}" in
|
|
(--sysroot|-r)
|
|
next_arg=true
|
|
continue
|
|
;;
|
|
(--sysroot=*)
|
|
sysroot="${arg#*=}"
|
|
continue # not break, in case there are more than one
|
|
;;
|
|
(-r?*)
|
|
sysroot="${arg#-r}"
|
|
continue # not break, in case there are more than one
|
|
;;
|
|
esac
|
|
done
|
|
if [ -z "${sysroot}" ]; then
|
|
echo "${0}: --sysroot argument must be given." 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
topdir="$(dirname "$(realpath "$(dirname "${0}")")")"
|
|
DRACUT_LDD="$(mktemp /tmp/dracut-ldd.XXXXXX)"
|
|
cat >"${DRACUT_LDD}" <<EOL
|
|
#!/bin/bash
|
|
${topdir}/sbin/prelink-rtld --root='${sysroot}' \${1}
|
|
EOL
|
|
chmod +x "${DRACUT_LDD}"
|
|
export DRACUT_LDD
|
|
export DRACUT_INSTALL="${topdir}/lib/dracut/dracut-install"
|
|
export DRACUT_LDCONFIG=/bin/true
|
|
export dracutbasedir="${topdir}/lib/dracut"
|
|
(exec "${topdir}/bin/dracut.real" "${@}")
|
|
|
|
if [ -n "${DRACUT_LDD}" ]; then
|
|
rm -f "${DRACUT_LDD}"
|
|
fi
|