]> code.ossystems Code Review - openembedded-core.git/commitdiff
run-postinsts: for dpkg/opkg, do not rely on /etc/*-postinsts
authorStefan Agner <stefan.agner@toradex.com>
Wed, 16 May 2018 09:13:51 +0000 (11:13 +0200)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Mon, 18 Jun 2018 09:59:33 +0000 (10:59 +0100)
Start opkg/dpkg as soon as the respective package managers status
file is present, no matter whether /etc/$pm-postinsts exists. This
decouples the implicit link between postinsts scripts in /etc and
the package manager: Currently the package manager is only started
if those scripts are present, although the package manager does not
use those scripts at all! Package managers install their own set of
postinst scripts.

The behavior when using rpm packages stays the same.

Note that using the package managers capability to execute postinst
scripts is preferred for good reasons: It makes sure that the
package managers database reflects that the packages have been
completely installed and configured.

This change allows to drop installation of the postinsts scripts
when package management is present. This will be done in a separate
change.

Note: Before commit 5aae19959a44 ("rootfs.py: Change logic to
unistall packages") rootfs.py did not install /etc/$pm-postinsts
when package management is installed! The change caused YOCTO #8235
which lead to the behavior change of run-postinsts in first place.

Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts
meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts.service

index 307feb71879e21aab0a8b521fe3326558064f8f5..95eff04e17ee663cf53ba0ced54317559b1b10b2 100755 (executable)
@@ -6,7 +6,8 @@
 #
 
 # The following script will run all the scriptlets found in #SYSCONFDIR#/deb-postinsts,
-# #SYSCONFDIR#/ipk-postinsts or #SYSCONFDIR#/rpm-postinsts.
+# #SYSCONFDIR#/ipk-postinsts or #SYSCONFDIR#/rpm-postinsts or the package manager in
+# case available.
 
 # the order of this list is important, do not change!
 backend_list="rpm deb ipk"
@@ -14,27 +15,29 @@ backend_list="rpm deb ipk"
 pm_installed=false
 
 for pm in $backend_list; do
-       pi_dir="#SYSCONFDIR#/$pm-postinsts"
-
-       if [ ! -d $pi_dir ]; then
-               continue
-       fi
-
        # found the package manager, it has postinsts
        case $pm in
                "deb")
                        if [ -s "#LOCALSTATEDIR#/lib/dpkg/status" ]; then
                                pm_installed=true
+                               break
                        fi
                        ;;
 
                "ipk")
                        if [ -s "#LOCALSTATEDIR#/lib/opkg/status" ]; then
                                pm_installed=true
+                               break
                        fi
                        ;;
        esac
-       break
+
+       pi_dir="#SYSCONFDIR#/$pm-postinsts"
+
+       # found postinsts directory
+       if [ -d $pi_dir ]; then
+               break
+       fi
 done
 
 remove_rcsd_link () {
@@ -43,7 +46,7 @@ remove_rcsd_link () {
        fi
 }
 
-if ! [ -d $pi_dir ]; then
+if ! [ -d $pi_dir ] && ! $pm_installed; then
        remove_rcsd_link
        exit 0
 fi
index 1b71a1f8bef9bde85d62903937cb9c2435f281b8..d42addf510cece96b6fee1a1afb3f52f799c2f87 100644 (file)
@@ -3,7 +3,6 @@ Description=Run pending postinsts
 DefaultDependencies=no
 After=systemd-remount-fs.service systemd-tmpfiles-setup.service tmp.mount
 Before=sysinit.target
-ConditionPathExistsGlob=#SYSCONFDIR#/*-postinsts
 
 [Service]
 Type=oneshot