run-postinsts: use it for opkg/dpkg too

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]

(From OE-Core rev: f33555f52a4ee83f0bd205cdf483045fcd0578b2)

Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Laurentiu Palcu 2014-03-06 14:15:41 +02:00 committed by Richard Purdie
parent 635c08c8c2
commit 5159ddcb62
2 changed files with 42 additions and 23 deletions

View File

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

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