Currently, opkg/dpkg have their own postinstalls that create a
run-postinsts script which is run at first boot.

This commit prepares the run-postinsts recipe/script to be used by
opkg/dpkg when DISTRO_FEATURES includes package-management.

[YOCTO #5666]

Signed-off-by: Laurentiu Palcu <laurentiu.pa...@intel.com>
---
 .../run-postinsts/run-postinsts/run-postinsts      |   63 +++++++++++++-------
 .../run-postinsts/run-postinsts_1.0.bb             |    2 +
 2 files changed, 42 insertions(+), 23 deletions(-)

diff --git a/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts 
b/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts
index 11141ec..08cfa9e 100755
--- a/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts
+++ b/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts
@@ -8,13 +8,9 @@
 # The following script will run all the scriptlets found in 
#SYSCONFDIR#/deb-postinsts,
 # #SYSCONFDIR#/ipk-postinsts or #SYSCONFDIR#/rpm-posinsts.
 
-pi_dir=""
-for pm in rpm deb ipk; do
-       if [ -d "#SYSCONFDIR#/${pm}-postinsts" ]; then
-               pi_dir=#SYSCONFDIR#/${pm}-postinsts
-               break
-       fi
-done
+pm=#IMAGE_PKGTYPE#
+pm_installed=#PM_INSTALLED#
+pi_dir=#SYSCONFDIR#/${pm}-postinsts
 
 remove_rcsd_link () {
        if [ -n "`which update-rc.d`" ]; then
@@ -29,24 +25,45 @@ fi
 
 [ -e #SYSCONFDIR#/default/postinst ] && . #SYSCONFDIR#/default/postinst
 
-remove_pi_dir=1
-for i in `ls $pi_dir`; do
-       i=$pi_dir/$i
-       echo "Running postinst $i..."
-       [ "$POSTINST_LOGGING" = "1" ] && echo "Running postinst $i..." >> 
$LOGFILE
-       if [ -x $i ]; then
-               if [ "$POSTINST_LOGGING" = "1" ]; then
-                       sh -c $i >>$LOGFILE 2>&1
+if [ "$POSTINST_LOGGING" = "1" ]; then
+       rm -f $LOGFILE
+       append_log=">>$LOGFILE 2>&1"
+fi
+
+exec_postinst_scriptlets() {
+       for i in `ls $pi_dir`; do
+               i=$pi_dir/$i
+               echo "Running postinst $i..."
+               [ "$POSTINST_LOGGING" = "1" ] && eval echo "Running postinst 
$i..." $append_log
+               if [ -x $i ]; then
+                       eval sh -c $i $append_log
+                       rm $i
                else
-                       sh -c $i
+                       echo "ERROR: postinst $i failed."
+                       [ "$POSTINST_LOGGING" = "1" ] && eval echo "ERROR: 
postinst $i failed." $append_log
+                       remove_pi_dir=0
                fi
-               rm $i
-       else
-               echo "ERROR: postinst $i failed."
-               [ "$POSTINST_LOGGING" = "1" ] && echo "ERROR: postinst $i 
failed." >> $LOGFILE
-               remove_pi_dir=0
-       fi
-done
+       done
+}
+
+remove_pi_dir=1
+if $pm_installed; then
+       case $pm in
+               "ipk")
+                       eval opkg-cl configure $append_log
+                       ;;
+
+               "deb")
+                       eval dpkg --configure -a $append_log
+                       ;;
+
+               "rpm")
+                       exec_postinst_scriptlets
+                       ;;
+       esac
+else
+       exec_postinst_scriptlets
+fi
 
 # since all postinstalls executed successfully, remove the postinstalls 
directory
 # and the rcS.d link
diff --git a/meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb 
b/meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb
index 64f85c2..e990c67 100644
--- a/meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb
+++ b/meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb
@@ -37,6 +37,8 @@ do_install() {
        sed -i -e 's:#SYSCONFDIR#:${sysconfdir}:g' \
                -e 's:#SBINDIR#:${sbindir}:g' \
                -e 's:#BASE_BINDIR#:${base_bindir}:g' \
+               -e 's:#IMAGE_PKGTYPE#:${IMAGE_PKGTYPE}:g' \
+               -e 's:#PM_INSTALLED#:${@base_contains("IMAGE_FEATURES", 
"package-management", "true", "false", d)}:g' \
                ${D}${sbindir}/run-postinsts \
                ${D}${systemd_unitdir}/system/run-postinsts.service
 }
-- 
1.7.9.5

_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to