]> code.ossystems Code Review - openembedded-core.git/commitdiff
run-postinsts: use it for opkg/dpkg too
authorLaurentiu Palcu <laurentiu.palcu@intel.com>
Thu, 6 Mar 2014 12:15:41 +0000 (14:15 +0200)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 7 Mar 2014 15:04:36 +0000 (15:04 +0000)
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.palcu@intel.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_1.0.bb

index 11141ec71ff966a1917feaf48e70eb8fad2c1e19..08cfa9e59f9888bf30850e9d0b81139f116f503d 100755 (executable)
@@ -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
index 64f85c262df3ad3b55cacc6f47b3bb97091d04ba..e990c670c0fa7d13cfbc5638c09a4874966cefa9 100644 (file)
@@ -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
 }