[oe-commits] Laurentiu Palcu : run-postinsts: make it generic

git at git.openembedded.org git at git.openembedded.org
Wed Jun 12 12:19:44 UTC 2013


Module: openembedded-core.git
Branch: master-next
Commit: 0222e6740ee4670bbf42d246ab3ecad415ffcdee
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=0222e6740ee4670bbf42d246ab3ecad415ffcdee

Author: Laurentiu Palcu <laurentiu.palcu at intel.com>
Date:   Thu May 23 11:03:56 2013 +0300

run-postinsts: make it generic

This recipe is used only when the package manager is not deployed on
target and there still are delayed postinstalls that need to be run on
target. At the moment, run-postinsts is targeted to dpkg/opkg. RPM uses another
recipe, called rpm-postinsts which, in turn, is used even when the rpm
package is deployed.

This patch intends to make run-postinsts generic and deprecate
rpm-postinsts. Here's why:
 * when opkg/dpkg are not deplyed, the meta-data files are useless.
   Hence, the awk script is not needed. The postinstall files are already
   saved in /etc/(deb|ipk)-postinsts directory and we can use the same
   procedure as in rpm's case;

Also, the recipe is moved out from meta/recipes-devel/dpkg to
meta/recipes-devel/run-postinsts.

Signed-off-by: Laurentiu Palcu <laurentiu.palcu at intel.com>
Signed-off-by: Saul Wold <sgw at linux.intel.com>

---

 .../dpkg/run-postinsts/run-postinsts               |   36 ---------------
 .../dpkg/run-postinsts/run-postinsts.awk           |   30 ------------
 .../run-postinsts/run-postinsts/run-postinsts      |   47 ++++++++++++++++++++
 .../{dpkg => run-postinsts}/run-postinsts_1.0.bb   |    7 +--
 4 files changed, 50 insertions(+), 70 deletions(-)

diff --git a/meta/recipes-devtools/dpkg/run-postinsts/run-postinsts b/meta/recipes-devtools/dpkg/run-postinsts/run-postinsts
deleted file mode 100755
index 5f6442c..0000000
--- a/meta/recipes-devtools/dpkg/run-postinsts/run-postinsts
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2007 Openedhand Ltd.
-#
-# Author: Richard Purdie <rpurdie at openedhand.com>
-#
-
-PKGSYSTEM=/var/lib/dpkg
-
-if [ ! -e $PKGSYSTEM/status ]; then
-  if [ -e /var/lib/opkg/status ]; then
-    PKGSYSTEM=/var/lib/opkg
-  else
-    echo "No package system found"
-    exit 1
-  fi
-fi
-
-STAMP=$PKGSYSTEM/postinsts-done
-STATFILE=$PKGSYSTEM/status
-STATFILE2=$PKGSYSTEM/status2
-
-if [ -e $STAMP ]; then
-  exit 0
-fi
-
-awk -f /usr/share/run-postinsts/run-postinsts.awk $STATFILE > $STATFILE2
-if [ $? = 0 ]; then
-  mv $STATFILE2 $STATFILE
-  touch $STAMP
-  exit 0
-else
-  rm -f $STATFILE2
-  rm -f $STAMP
-  exit 1
-fi
diff --git a/meta/recipes-devtools/dpkg/run-postinsts/run-postinsts.awk b/meta/recipes-devtools/dpkg/run-postinsts/run-postinsts.awk
deleted file mode 100644
index cbc8d1a..0000000
--- a/meta/recipes-devtools/dpkg/run-postinsts/run-postinsts.awk
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Copyright 2007 Openedhand Ltd.
-#
-# Author: Richard Purdie <rpurdie at openedhand.com>
-#
-# Rather hacky proof of concept
-#
-
-BEGIN {
-  rc=system("test -d /var/lib/dpkg/info/")
-  if (rc==0)
-    pkgdir="/var/lib/dpkg/info"
-  else
-    pkgdir="/var/lib/opkg/info"
-  package=""
-}
-/Package:.*/ {
-  package = substr($0, 10)
-}
-/Status:.*unpacked.*/ {
-  print "Configuring: " package > "/dev/stderr"
-  ret = system(pkgdir "/" package ".postinst 1>&2")
-  if (ret == 0)
-    $0 = gensub("unpacked", "installed", 1)
-  else
-    print "Postinstall failed for " package > "/dev/stderr"
-}
-{
-  print $0
-}
diff --git a/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts b/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts
new file mode 100755
index 0000000..2593066
--- /dev/null
+++ b/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts
@@ -0,0 +1,47 @@
+#!/bin/sh
+#
+# Copyright 2007 Openedhand Ltd.
+#
+# Author: Richard Purdie <rpurdie at openedhand.com>
+#
+
+# The following script will run all the scriptlets found in #SYSCONFDIR#/deb-postinsts or
+# #SYSCONFDIR#/ipk-postinsts
+
+pi_dir=""
+for pm in rpm deb ipk; do
+	if [ -d "#SYSCONFDIR#/${pm}-postinsts" ]; then
+		pi_dir=#SYSCONFDIR#/${pm}-postinsts
+		break
+	fi
+done
+
+[ -z "$pi_dir" ] && exit 0
+
+[ -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..."
+	if [ -x $i ]; then
+		if [ "$POSTINST_LOGGING" = "1" ]; then
+			sh -c $i >>$LOGFILE 2&>1
+		else
+			sh -c $i
+		fi
+		rm $i
+	else
+		echo "ERROR: postinst $i failed."
+		remove_pi_dir=0
+	fi
+done
+
+# since all postinstalls executed successfully, remove the postinstalls directory
+# and the rcS.d link
+if [ $remove_pi_dir = 1 ]; then
+	rm -rf $pi_dir
+	if [ -n "`which update-rc.d`" ]; then
+		update-rc.d -f run-postinsts remove
+	fi
+fi
diff --git a/meta/recipes-devtools/dpkg/run-postinsts_1.0.bb b/meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb
similarity index 68%
rename from meta/recipes-devtools/dpkg/run-postinsts_1.0.bb
rename to meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb
index 4c9b2fd..5dd1709 100644
--- a/meta/recipes-devtools/dpkg/run-postinsts_1.0.bb
+++ b/meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb
@@ -1,11 +1,11 @@
-DESCRIPTION = "Run postinstall scripts on device using awk"
+DESCRIPTION = "Run postinstall scripts on device"
 SECTION = "devel"
 PR = "r9"
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58 \
                     file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
 
-SRC_URI = "file://run-postinsts file://run-postinsts.awk"
+SRC_URI = "file://run-postinsts"
 
 INITSCRIPT_NAME = "run-postinsts"
 INITSCRIPT_PARAMS = "start 98 S ."
@@ -24,6 +24,5 @@ do_install() {
 	install -d ${D}${sysconfdir}/init.d/
 	install -m 0755 ${WORKDIR}/run-postinsts ${D}${sysconfdir}/init.d/
 
-	install -d ${D}${datadir}/${BPN}/
-	install -m 0644 ${WORKDIR}/run-postinsts.awk ${D}${datadir}/${BPN}/
+	sed -i -e 's:#SYSCONFDIR#:${sysconfdir}:g' ${D}${sysconfdir}/init.d/run-postinsts
 }



More information about the Openembedded-commits mailing list