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.

(From OE-Core rev: 0222e6740ee4670bbf42d246ab3ecad415ffcdee)

Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Laurentiu Palcu 2013-05-23 11:03:56 +03:00 committed by Richard Purdie
parent 98ce0b727b
commit 76cd8a776b
4 changed files with 50 additions and 70 deletions

View File

@ -1,36 +0,0 @@
#!/bin/sh
#
# Copyright 2007 Openedhand Ltd.
#
# Author: Richard Purdie <rpurdie@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

View File

@ -1,30 +0,0 @@
#
# Copyright 2007 Openedhand Ltd.
#
# Author: Richard Purdie <rpurdie@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
}

View File

@ -0,0 +1,47 @@
#!/bin/sh
#
# Copyright 2007 Openedhand Ltd.
#
# Author: Richard Purdie <rpurdie@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

View File

@ -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
}