run-postinsts: Add workaround for locking deadlock issue

When run-postinsts is installed, a service is added for system which can run
while the package is still being installed. This calls "opkg configure" and if
package management is still running, it can deadlock and error.

To work around this, call fcntl-lock on the opkg lock file and if the lock
was held, it would wait to obtain it. This wait gives the package management
time to finish the install before the configure can then take the lock and run.

Note the dependency in SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS otherwise we'd see
sstate selftest failures.

Also ensure that if the configure fails, the scripts returns an error. This
applies to opkg and dpkg.

(From OE-Core rev: 96d37df074dc1fe1578c1406235dff7e328b62b7)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2024-03-28 13:03:34 +00:00
parent 4e6a20efa9
commit 7c916d8f1b
3 changed files with 12 additions and 2 deletions

View File

@@ -87,6 +87,7 @@ SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += " \
sato-icon-theme->gtk+3 \
adwaita-icon-theme->gdk-pixbuf \
adwaita-icon-theme->gtk+3 \
run-postinsts->util-linux \
"
# Avoid adding bison-native to the sysroot without a specific

View File

@@ -81,11 +81,18 @@ remove_rcsd_link=1
if $pm_installed; then
case $pm in
"ipk")
eval opkg configure $append_log
if ! `fcntl-lock --wait 30 /run/opkg.lock true`; then
eval echo "Unable to obtain the opkg lock, deadlock?" $append_log
fi
if ! eval "opkg configure $append_log"; then
exit 1
fi
;;
"deb")
eval dpkg --configure -a $append_log
if ! eval "eval dpkg --configure -a $append_log"; then
exit 1
fi
;;
esac
else

View File

@@ -12,6 +12,8 @@ S = "${WORKDIR}"
inherit allarch systemd update-rc.d
RDEPENDS:${PN} = "util-linux-fcntl-lock"
INITSCRIPT_NAME = "run-postinsts"
INITSCRIPT_PARAMS = "start 99 S ."