Files
poky/meta/classes/update-rc.d.bbclass
Jacob Kroon 76751a03b1 update-rc.d.bbclass: Fix host/target test in postinst
When running the postinst script I get a shell warning:

sh: argument expected

and the service is never stopped. This patch fixes the warning
message and stops the service.

Patch v2: Hans Beckérus pointed out that the patch is not correct.
          This version uses the syntax proposed by Hans. I've tested
          that the postinst script works correctly when run on the target,
          both when the init script exists and when it doesn't exist.

(From OE-Core rev: 7e23557835f756b22b95fa7a1926b5d1d21872c3)

Signed-off-by: Jacob Kroon <jacob.kroon@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-10-29 10:45:21 +00:00

118 lines
3.6 KiB
Plaintext

UPDATERCPN ?= "${PN}"
DEPENDS_append = " update-rc.d-native"
UPDATERCD = "update-rc.d"
UPDATERCD_virtclass-cross = ""
UPDATERCD_class-native = ""
UPDATERCD_class-nativesdk = ""
RRECOMMENDS_${UPDATERCPN}_append = " ${UPDATERCD}"
INITSCRIPT_PARAMS ?= "defaults"
INIT_D_DIR = "${sysconfdir}/init.d"
updatercd_postinst() {
# test if there is a previous init script there, ie, we are updating the package
# if so, we stop the service and remove it before we install from the new package
if type update-rc.d >/dev/null 2>/dev/null; then
if [ -z "$D" -a -f "${INIT_D_DIR}/${INITSCRIPT_NAME}" ]; then
${INIT_D_DIR}/${INITSCRIPT_NAME} stop
fi
if [ -n "$D" ]; then
OPT="-f -r $D"
else
OPT="-f"
fi
update-rc.d $OPT ${INITSCRIPT_NAME} remove
fi
if [ -n "$D" ]; then
OPT="-r $D"
else
OPT="-s"
fi
if type update-rc.d >/dev/null 2>/dev/null; then
update-rc.d $OPT ${INITSCRIPT_NAME} ${INITSCRIPT_PARAMS}
fi
}
updatercd_prerm() {
if test "x$D" = "x"; then
${INIT_D_DIR}/${INITSCRIPT_NAME} stop
fi
}
updatercd_postrm() {
if test "$D" != ""; then
OPT="-f -r $D"
else
OPT=""
fi
if type update-rc.d >/dev/null 2>/dev/null; then
update-rc.d $OPT ${INITSCRIPT_NAME} remove
fi
}
def update_rc_after_parse(d):
if d.getVar('INITSCRIPT_PACKAGES') == None:
if d.getVar('INITSCRIPT_NAME') == None:
raise bb.build.FuncFailed("%s inherits update-rc.d but doesn't set INITSCRIPT_NAME" % d.getVar('FILE'))
if d.getVar('INITSCRIPT_PARAMS') == None:
raise bb.build.FuncFailed("%s inherits update-rc.d but doesn't set INITSCRIPT_PARAMS" % d.getVar('FILE'))
python __anonymous() {
update_rc_after_parse(d)
}
PACKAGESPLITFUNCS_prepend = "populate_packages_updatercd "
populate_packages_updatercd[vardeps] += "updatercd_prerm updatercd_postrm updatercd_postinst"
python populate_packages_updatercd () {
def update_rcd_package(pkg):
bb.debug(1, 'adding update-rc.d calls to postinst/postrm for %s' % pkg)
"""
update_rc.d postinst is appended here because pkg_postinst may require to
execute on the target. Not doing so may cause update_rc.d postinst invoked
twice to cause unwanted warnings.
"""
localdata = bb.data.createCopy(d)
overrides = localdata.getVar("OVERRIDES", True)
localdata.setVar("OVERRIDES", "%s:%s" % (pkg, overrides))
bb.data.update_data(localdata)
postinst = d.getVar('pkg_postinst_%s' % pkg, True)
if not postinst:
postinst = '#!/bin/sh\n'
postinst += localdata.getVar('updatercd_postinst', True)
d.setVar('pkg_postinst_%s' % pkg, postinst)
prerm = d.getVar('pkg_prerm_%s' % pkg, True)
if not prerm:
prerm = '#!/bin/sh\n'
prerm += localdata.getVar('updatercd_prerm', True)
d.setVar('pkg_prerm_%s' % pkg, prerm)
postrm = d.getVar('pkg_postrm_%s' % pkg, True)
if not postrm:
postrm = '#!/bin/sh\n'
postrm += localdata.getVar('updatercd_postrm', True)
d.setVar('pkg_postrm_%s' % pkg, postrm)
# Check that this class isn't being inhibited (generally, by
# systemd.bbclass) before doing any work.
if "sysvinit" in d.getVar("DISTRO_FEATURES").split() or \
not d.getVar("INHIBIT_UPDATERCD_BBCLASS", True):
pkgs = d.getVar('INITSCRIPT_PACKAGES', True)
if pkgs == None:
pkgs = d.getVar('UPDATERCPN', True)
packages = (d.getVar('PACKAGES', True) or "").split()
if not pkgs in packages and packages != []:
pkgs = packages[0]
for pkg in pkgs.split():
update_rcd_package(pkg)
}