* [PATCH v2] classes: Fix alternatives and rc.d ordering
@ 2016-11-24 8:24 David Vincent
2016-11-24 9:26 ` [PATCH v3] " David Vincent
0 siblings, 1 reply; 7+ messages in thread
From: David Vincent @ 2016-11-24 8:24 UTC (permalink / raw)
To: openembedded-core; +Cc: haris.okanovic
When using an alternative as an initscript, the ordering between
update-rc.d and update-alternatives tasks during prerm and postinst
tasks must always be the following in order to work:
* prerm:
- stop daemon
- remove alternative
* postinst:
- add alternative
- start daemon
This patchset adds comments to the scripts generated by both classes and
organize the generated sections based on those comments.
[YOCTO #10433]
Signed-off-by: David Vincent <freesilicon@gmail.com>
---
meta/classes/update-alternatives.bbclass | 27 +++++++++++++++++++++------
meta/classes/update-rc.d.bbclass | 20 ++++++++++++++++++--
2 files changed, 39 insertions(+), 8 deletions(-)
diff --git a/meta/classes/update-alternatives.bbclass
b/meta/classes/update-alternatives.bbclass
index 1fdd681..bbd5a47 100644
--- a/meta/classes/update-alternatives.bbclass
+++ b/meta/classes/update-alternatives.bbclass
@@ -195,8 +195,8 @@ python populate_packages_updatealternatives () {
pkgdest = d.getVar('PKGD', True)
for pkg in (d.getVar('PACKAGES', True) or "").split():
# Create post install/removal scripts
- alt_setup_links = ""
- alt_remove_links = ""
+ alt_setup_links = "# Begin section update-alternatives\n"
+ alt_remove_links = "# Begin section update-alternatives\n"
for alt_name in (d.getVar('ALTERNATIVE_%s' % pkg, True) or "").split():
alt_link = d.getVarFlag('ALTERNATIVE_LINK_NAME',
alt_name, True)
alt_target = d.getVarFlag('ALTERNATIVE_TARGET_%s' %
pkg, alt_name, True) or d.getVarFlag('ALTERNATIVE_TARGET', alt_name,
True)
@@ -219,8 +219,11 @@ python populate_packages_updatealternatives () {
# Default to generate shell script.. eventually we may
want to change this...
alt_target = os.path.normpath(alt_target)
- alt_setup_links += '\tupdate-alternatives --install %s
%s %s %s\n' % (alt_link, alt_name, alt_target, alt_priority)
- alt_remove_links += '\tupdate-alternatives --remove %s
%s\n' % (alt_name, alt_target)
+ alt_setup_links += 'update-alternatives --install %s %s
%s %s\n' % (alt_link, alt_name, alt_target, alt_priority)
+ alt_remove_links += 'update-alternatives --remove %s
%s\n' % (alt_name, alt_target)
+
+ alt_setup_links += "# End section update-alternatives\n"
+ alt_remove_links += "# End section update-alternatives\n"
if alt_setup_links:
# RDEPENDS setup
@@ -232,12 +235,24 @@ python populate_packages_updatealternatives () {
bb.note('adding update-alternatives calls to
postinst/prerm for %s' % pkg)
bb.note('%s' % alt_setup_links)
postinst = d.getVar('pkg_postinst_%s' % pkg, True) or '#!/bin/sh\n'
- postinst += alt_setup_links
+ postinst = postinst.splitlines(True)
+ try:
+ index = postinst.index('# Begin section update-rc.d\n')
+ postinst.insert(index, alt_setup_links)
+ except ValueError:
+ postinst.append(alt_setup_links)
+ postinst = ''.join(postinst)
d.setVar('pkg_postinst_%s' % pkg, postinst)
bb.note('%s' % alt_remove_links)
prerm = d.getVar('pkg_prerm_%s' % pkg, True) or '#!/bin/sh\n'
- prerm += alt_remove_links
+ prerm = prerm.splitlines(True)
+ try:
+ index = prerm.index('# End section update-rc.d\n')
+ prerm.insert(index + 1, alt_remove_links)
+ except ValueError:
+ prerm.append(alt_remove_links)
+ prerm = ''.join(prerm)
d.setVar('pkg_prerm_%s' % pkg, prerm)
}
diff --git a/meta/classes/update-rc.d.bbclass b/meta/classes/update-rc.d.bbclass
index 321924b..18df2dc 100644
--- a/meta/classes/update-rc.d.bbclass
+++ b/meta/classes/update-rc.d.bbclass
@@ -26,6 +26,7 @@ fi
}
updatercd_postinst() {
+# Begin section update-rc.d
if type update-rc.d >/dev/null 2>/dev/null; then
if [ -n "$D" ]; then
OPT="-r $D"
@@ -34,12 +35,15 @@ if type update-rc.d >/dev/null 2>/dev/null; then
fi
update-rc.d $OPT ${INITSCRIPT_NAME} ${INITSCRIPT_PARAMS}
fi
+# End section update-rc.d
}
updatercd_prerm() {
+# Begin section update-rc.d
if [ -z "$D" -a -x "${INIT_D_DIR}/${INITSCRIPT_NAME}" ]; then
${INIT_D_DIR}/${INITSCRIPT_NAME} stop || :
fi
+# End section update-rc.d
}
updatercd_postrm() {
@@ -102,13 +106,25 @@ python populate_packages_updatercd () {
postinst = d.getVar('pkg_postinst_%s' % pkg, True)
if not postinst:
postinst = '#!/bin/sh\n'
- postinst += localdata.getVar('updatercd_postinst', True)
+ postinst = postinst.splitlines(True)
+ try:
+ index = postinst.index('# End section update-alternatives\n')
+ postinst.insert(index + 1,
localdata.getVar('updatercd_postinst', True))
+ except ValueError:
+ postinst.append(localdata.getVar('updatercd_postinst', True))
+ postinst = ''.join(postinst)
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)
+ prerm = prerm.splitlines(True)
+ try:
+ index = prerm.index('# Begin section update-alternatives\n')
+ prerm.insert(index, localdata.getVar('updatercd_prerm', True))
+ except ValueError:
+ prerm.append(localdata.getVar('updatercd_prerm', True))
+ prerm = ''.join(prerm)
d.setVar('pkg_prerm_%s' % pkg, prerm)
postrm = d.getVar('pkg_postrm_%s' % pkg, True)
--
2.10.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3] classes: Fix alternatives and rc.d ordering
2016-11-24 8:24 [PATCH v2] classes: Fix alternatives and rc.d ordering David Vincent
@ 2016-11-24 9:26 ` David Vincent
2016-11-24 10:25 ` Markus Lehtonen
2016-11-28 16:11 ` [PATCH v4] " David Vincent
0 siblings, 2 replies; 7+ messages in thread
From: David Vincent @ 2016-11-24 9:26 UTC (permalink / raw)
To: openembedded-core, haris.okanovic, markus.lehtonen
When using an alternative as an initscript, the ordering between
update-rc.d and update-alternatives tasks during prerm and postinst
tasks must always be the following in order to work:
* prerm:
- stop daemon
- remove alternative
* postinst:
- add alternative
- start daemon
This patchset adds comments to the scripts generated by both classes and
organize the generated sections based on those comments.
[YOCTO #10433]
Signed-off-by: David Vincent <freesilicon@gmail.com>
---
meta/classes/update-alternatives.bbclass | 27 +++++++++++++++++++++------
meta/classes/update-rc.d.bbclass | 20 ++++++++++++++++++--
2 files changed, 39 insertions(+), 8 deletions(-)
diff --git a/meta/classes/update-alternatives.bbclass b/meta/classes/update-alternatives.bbclass
index 1fdd681..bbd5a47 100644
--- a/meta/classes/update-alternatives.bbclass
+++ b/meta/classes/update-alternatives.bbclass
@@ -195,8 +195,8 @@ python populate_packages_updatealternatives () {
pkgdest = d.getVar('PKGD', True)
for pkg in (d.getVar('PACKAGES', True) or "").split():
# Create post install/removal scripts
- alt_setup_links = ""
- alt_remove_links = ""
+ alt_setup_links = "# Begin section update-alternatives\n"
+ alt_remove_links = "# Begin section update-alternatives\n"
for alt_name in (d.getVar('ALTERNATIVE_%s' % pkg, True) or "").split():
alt_link = d.getVarFlag('ALTERNATIVE_LINK_NAME', alt_name, True)
alt_target = d.getVarFlag('ALTERNATIVE_TARGET_%s' % pkg, alt_name, True) or d.getVarFlag('ALTERNATIVE_TARGET', alt_name, True)
@@ -219,8 +219,11 @@ python populate_packages_updatealternatives () {
# Default to generate shell script.. eventually we may want to change this...
alt_target = os.path.normpath(alt_target)
- alt_setup_links += '\tupdate-alternatives --install %s %s %s %s\n' % (alt_link, alt_name, alt_target, alt_priority)
- alt_remove_links += '\tupdate-alternatives --remove %s %s\n' % (alt_name, alt_target)
+ alt_setup_links += 'update-alternatives --install %s %s %s %s\n' % (alt_link, alt_name, alt_target, alt_priority)
+ alt_remove_links += 'update-alternatives --remove %s %s\n' % (alt_name, alt_target)
+
+ alt_setup_links += "# End section update-alternatives\n"
+ alt_remove_links += "# End section update-alternatives\n"
if alt_setup_links:
# RDEPENDS setup
@@ -232,12 +235,24 @@ python populate_packages_updatealternatives () {
bb.note('adding update-alternatives calls to postinst/prerm for %s' % pkg)
bb.note('%s' % alt_setup_links)
postinst = d.getVar('pkg_postinst_%s' % pkg, True) or '#!/bin/sh\n'
- postinst += alt_setup_links
+ postinst = postinst.splitlines(True)
+ try:
+ index = postinst.index('# Begin section update-rc.d\n')
+ postinst.insert(index, alt_setup_links)
+ except ValueError:
+ postinst.append(alt_setup_links)
+ postinst = ''.join(postinst)
d.setVar('pkg_postinst_%s' % pkg, postinst)
bb.note('%s' % alt_remove_links)
prerm = d.getVar('pkg_prerm_%s' % pkg, True) or '#!/bin/sh\n'
- prerm += alt_remove_links
+ prerm = prerm.splitlines(True)
+ try:
+ index = prerm.index('# End section update-rc.d\n')
+ prerm.insert(index + 1, alt_remove_links)
+ except ValueError:
+ prerm.append(alt_remove_links)
+ prerm = ''.join(prerm)
d.setVar('pkg_prerm_%s' % pkg, prerm)
}
diff --git a/meta/classes/update-rc.d.bbclass b/meta/classes/update-rc.d.bbclass
index 321924b..18df2dc 100644
--- a/meta/classes/update-rc.d.bbclass
+++ b/meta/classes/update-rc.d.bbclass
@@ -26,6 +26,7 @@ fi
}
updatercd_postinst() {
+# Begin section update-rc.d
if type update-rc.d >/dev/null 2>/dev/null; then
if [ -n "$D" ]; then
OPT="-r $D"
@@ -34,12 +35,15 @@ if type update-rc.d >/dev/null 2>/dev/null; then
fi
update-rc.d $OPT ${INITSCRIPT_NAME} ${INITSCRIPT_PARAMS}
fi
+# End section update-rc.d
}
updatercd_prerm() {
+# Begin section update-rc.d
if [ -z "$D" -a -x "${INIT_D_DIR}/${INITSCRIPT_NAME}" ]; then
${INIT_D_DIR}/${INITSCRIPT_NAME} stop || :
fi
+# End section update-rc.d
}
updatercd_postrm() {
@@ -102,13 +106,25 @@ python populate_packages_updatercd () {
postinst = d.getVar('pkg_postinst_%s' % pkg, True)
if not postinst:
postinst = '#!/bin/sh\n'
- postinst += localdata.getVar('updatercd_postinst', True)
+ postinst = postinst.splitlines(True)
+ try:
+ index = postinst.index('# End section update-alternatives\n')
+ postinst.insert(index + 1, localdata.getVar('updatercd_postinst', True))
+ except ValueError:
+ postinst.append(localdata.getVar('updatercd_postinst', True))
+ postinst = ''.join(postinst)
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)
+ prerm = prerm.splitlines(True)
+ try:
+ index = prerm.index('# Begin section update-alternatives\n')
+ prerm.insert(index, localdata.getVar('updatercd_prerm', True))
+ except ValueError:
+ prerm.append(localdata.getVar('updatercd_prerm', True))
+ prerm = ''.join(prerm)
d.setVar('pkg_prerm_%s' % pkg, prerm)
postrm = d.getVar('pkg_postrm_%s' % pkg, True)
--
2.10.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v3] classes: Fix alternatives and rc.d ordering
2016-11-24 9:26 ` [PATCH v3] " David Vincent
@ 2016-11-24 10:25 ` Markus Lehtonen
2016-11-28 16:11 ` [PATCH v4] " David Vincent
1 sibling, 0 replies; 7+ messages in thread
From: Markus Lehtonen @ 2016-11-24 10:25 UTC (permalink / raw)
To: David Vincent, openembedded-core, haris.okanovic
On Thu, 2016-11-24 at 10:26 +0100, David Vincent wrote:
> When using an alternative as an initscript, the ordering between
> update-rc.d and update-alternatives tasks during prerm and postinst
> tasks must always be the following in order to work:
> * prerm:
> - stop daemon
> - remove alternative
>
> * postinst:
> - add alternative
> - start daemon
>
> This patchset adds comments to the scripts generated by both classes and
> organize the generated sections based on those comments.
>
> [YOCTO #10433]
I also commented this in the bug, but after playing with these a bit I'm
not convinced that init scripts should be managed by update-alternatives.
First, I don't see much reasoning why two syslog services should be
installed in parallel. Also, no other package or distro use this kind of
construction, AFAIK. So I'd avoid complication of the bbclasses for the
purpose of one package only.
If we really want to make these install in parallel I think we should just
name the files differently.
Thanks,
Markus
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v4] classes: Fix alternatives and rc.d ordering
2016-11-24 9:26 ` [PATCH v3] " David Vincent
2016-11-24 10:25 ` Markus Lehtonen
@ 2016-11-28 16:11 ` David Vincent
2016-11-28 16:11 ` [PATCH] " David Vincent
1 sibling, 1 reply; 7+ messages in thread
From: David Vincent @ 2016-11-28 16:11 UTC (permalink / raw)
To: openembedded-core, haris.okanovic, markus.lehtonen
Changes since v3:
* Count the number of lines produced by update-alternatives to detect if
lines were inserted. Failing to do so introduced bugs in native
packages (e.g. binutils-cross-canadian-arm)
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] classes: Fix alternatives and rc.d ordering
2016-11-28 16:11 ` [PATCH v4] " David Vincent
@ 2016-11-28 16:11 ` David Vincent
2016-12-12 16:01 ` [PATCH v5] " David Vincent
0 siblings, 1 reply; 7+ messages in thread
From: David Vincent @ 2016-11-28 16:11 UTC (permalink / raw)
To: openembedded-core, haris.okanovic, markus.lehtonen
When using an alternative as an initscript, the ordering between
update-rc.d and update-alternatives tasks during prerm and postinst
tasks must always be the following in order to work:
* prerm:
- stop daemon
- remove alternative
* postinst:
- add alternative
- start daemon
This patchset adds comments to the scripts generated by both classes and
organize the generated sections based on those comments.
[YOCTO #10433]
Signed-off-by: David Vincent <freesilicon@gmail.com>
---
meta/classes/update-alternatives.bbclass | 29 ++++++++++++++++++++++-------
meta/classes/update-rc.d.bbclass | 20 ++++++++++++++++++--
2 files changed, 40 insertions(+), 9 deletions(-)
diff --git a/meta/classes/update-alternatives.bbclass b/meta/classes/update-alternatives.bbclass
index 1fdd681..65929e5 100644
--- a/meta/classes/update-alternatives.bbclass
+++ b/meta/classes/update-alternatives.bbclass
@@ -195,8 +195,8 @@ python populate_packages_updatealternatives () {
pkgdest = d.getVar('PKGD', True)
for pkg in (d.getVar('PACKAGES', True) or "").split():
# Create post install/removal scripts
- alt_setup_links = ""
- alt_remove_links = ""
+ alt_setup_links = "# Begin section update-alternatives\n"
+ alt_remove_links = "# Begin section update-alternatives\n"
for alt_name in (d.getVar('ALTERNATIVE_%s' % pkg, True) or "").split():
alt_link = d.getVarFlag('ALTERNATIVE_LINK_NAME', alt_name, True)
alt_target = d.getVarFlag('ALTERNATIVE_TARGET_%s' % pkg, alt_name, True) or d.getVarFlag('ALTERNATIVE_TARGET', alt_name, True)
@@ -219,10 +219,13 @@ python populate_packages_updatealternatives () {
# Default to generate shell script.. eventually we may want to change this...
alt_target = os.path.normpath(alt_target)
- alt_setup_links += '\tupdate-alternatives --install %s %s %s %s\n' % (alt_link, alt_name, alt_target, alt_priority)
- alt_remove_links += '\tupdate-alternatives --remove %s %s\n' % (alt_name, alt_target)
+ alt_setup_links += 'update-alternatives --install %s %s %s %s\n' % (alt_link, alt_name, alt_target, alt_priority)
+ alt_remove_links += 'update-alternatives --remove %s %s\n' % (alt_name, alt_target)
- if alt_setup_links:
+ alt_setup_links += "# End section update-alternatives\n"
+ alt_remove_links += "# End section update-alternatives\n"
+
+ if len(alt_setup_links.splitlines()) > 2:
# RDEPENDS setup
provider = d.getVar('VIRTUAL-RUNTIME_update-alternatives', True)
if provider:
@@ -232,12 +235,24 @@ python populate_packages_updatealternatives () {
bb.note('adding update-alternatives calls to postinst/prerm for %s' % pkg)
bb.note('%s' % alt_setup_links)
postinst = d.getVar('pkg_postinst_%s' % pkg, True) or '#!/bin/sh\n'
- postinst += alt_setup_links
+ postinst = postinst.splitlines(True)
+ try:
+ index = postinst.index('# Begin section update-rc.d\n')
+ postinst.insert(index, alt_setup_links)
+ except ValueError:
+ postinst.append(alt_setup_links)
+ postinst = ''.join(postinst)
d.setVar('pkg_postinst_%s' % pkg, postinst)
bb.note('%s' % alt_remove_links)
prerm = d.getVar('pkg_prerm_%s' % pkg, True) or '#!/bin/sh\n'
- prerm += alt_remove_links
+ prerm = prerm.splitlines(True)
+ try:
+ index = prerm.index('# End section update-rc.d\n')
+ prerm.insert(index + 1, alt_remove_links)
+ except ValueError:
+ prerm.append(alt_remove_links)
+ prerm = ''.join(prerm)
d.setVar('pkg_prerm_%s' % pkg, prerm)
}
diff --git a/meta/classes/update-rc.d.bbclass b/meta/classes/update-rc.d.bbclass
index 321924b..18df2dc 100644
--- a/meta/classes/update-rc.d.bbclass
+++ b/meta/classes/update-rc.d.bbclass
@@ -26,6 +26,7 @@ fi
}
updatercd_postinst() {
+# Begin section update-rc.d
if type update-rc.d >/dev/null 2>/dev/null; then
if [ -n "$D" ]; then
OPT="-r $D"
@@ -34,12 +35,15 @@ if type update-rc.d >/dev/null 2>/dev/null; then
fi
update-rc.d $OPT ${INITSCRIPT_NAME} ${INITSCRIPT_PARAMS}
fi
+# End section update-rc.d
}
updatercd_prerm() {
+# Begin section update-rc.d
if [ -z "$D" -a -x "${INIT_D_DIR}/${INITSCRIPT_NAME}" ]; then
${INIT_D_DIR}/${INITSCRIPT_NAME} stop || :
fi
+# End section update-rc.d
}
updatercd_postrm() {
@@ -102,13 +106,25 @@ python populate_packages_updatercd () {
postinst = d.getVar('pkg_postinst_%s' % pkg, True)
if not postinst:
postinst = '#!/bin/sh\n'
- postinst += localdata.getVar('updatercd_postinst', True)
+ postinst = postinst.splitlines(True)
+ try:
+ index = postinst.index('# End section update-alternatives\n')
+ postinst.insert(index + 1, localdata.getVar('updatercd_postinst', True))
+ except ValueError:
+ postinst.append(localdata.getVar('updatercd_postinst', True))
+ postinst = ''.join(postinst)
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)
+ prerm = prerm.splitlines(True)
+ try:
+ index = prerm.index('# Begin section update-alternatives\n')
+ prerm.insert(index, localdata.getVar('updatercd_prerm', True))
+ except ValueError:
+ prerm.append(localdata.getVar('updatercd_prerm', True))
+ prerm = ''.join(prerm)
d.setVar('pkg_prerm_%s' % pkg, prerm)
postrm = d.getVar('pkg_postrm_%s' % pkg, True)
--
2.10.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v5] classes: Fix alternatives and rc.d ordering
2016-11-28 16:11 ` [PATCH] " David Vincent
@ 2016-12-12 16:01 ` David Vincent
2016-12-20 9:47 ` [PATCH v6] " David Vincent
0 siblings, 1 reply; 7+ messages in thread
From: David Vincent @ 2016-12-12 16:01 UTC (permalink / raw)
To: openembedded-core, haris.okanovic, markus.lehtonen
When using an alternative as an initscript, the ordering between
update-rc.d and update-alternatives tasks during prerm and postinst
tasks must always be the following in order to work:
* prerm:
- stop daemon
- remove alternative
* postinst:
- add alternative
- start daemon
This patchset adds comments to the scripts generated by both classes and
organize the generated sections based on those comments.
[YOCTO #10433]
Signed-off-by: David Vincent <freesilicon@gmail.com>
---
meta/classes/update-alternatives.bbclass | 29 ++++++++++++++++++++++-------
meta/classes/update-rc.d.bbclass | 20 ++++++++++++++++++--
2 files changed, 40 insertions(+), 9 deletions(-)
diff --git a/meta/classes/update-alternatives.bbclass b/meta/classes/update-alternatives.bbclass
index 1fdd681315..65929e5555 100644
--- a/meta/classes/update-alternatives.bbclass
+++ b/meta/classes/update-alternatives.bbclass
@@ -195,8 +195,8 @@ python populate_packages_updatealternatives () {
pkgdest = d.getVar('PKGD', True)
for pkg in (d.getVar('PACKAGES', True) or "").split():
# Create post install/removal scripts
- alt_setup_links = ""
- alt_remove_links = ""
+ alt_setup_links = "# Begin section update-alternatives\n"
+ alt_remove_links = "# Begin section update-alternatives\n"
for alt_name in (d.getVar('ALTERNATIVE_%s' % pkg, True) or "").split():
alt_link = d.getVarFlag('ALTERNATIVE_LINK_NAME', alt_name, True)
alt_target = d.getVarFlag('ALTERNATIVE_TARGET_%s' % pkg, alt_name, True) or d.getVarFlag('ALTERNATIVE_TARGET', alt_name, True)
@@ -219,10 +219,13 @@ python populate_packages_updatealternatives () {
# Default to generate shell script.. eventually we may want to change this...
alt_target = os.path.normpath(alt_target)
- alt_setup_links += '\tupdate-alternatives --install %s %s %s %s\n' % (alt_link, alt_name, alt_target, alt_priority)
- alt_remove_links += '\tupdate-alternatives --remove %s %s\n' % (alt_name, alt_target)
+ alt_setup_links += 'update-alternatives --install %s %s %s %s\n' % (alt_link, alt_name, alt_target, alt_priority)
+ alt_remove_links += 'update-alternatives --remove %s %s\n' % (alt_name, alt_target)
- if alt_setup_links:
+ alt_setup_links += "# End section update-alternatives\n"
+ alt_remove_links += "# End section update-alternatives\n"
+
+ if len(alt_setup_links.splitlines()) > 2:
# RDEPENDS setup
provider = d.getVar('VIRTUAL-RUNTIME_update-alternatives', True)
if provider:
@@ -232,12 +235,24 @@ python populate_packages_updatealternatives () {
bb.note('adding update-alternatives calls to postinst/prerm for %s' % pkg)
bb.note('%s' % alt_setup_links)
postinst = d.getVar('pkg_postinst_%s' % pkg, True) or '#!/bin/sh\n'
- postinst += alt_setup_links
+ postinst = postinst.splitlines(True)
+ try:
+ index = postinst.index('# Begin section update-rc.d\n')
+ postinst.insert(index, alt_setup_links)
+ except ValueError:
+ postinst.append(alt_setup_links)
+ postinst = ''.join(postinst)
d.setVar('pkg_postinst_%s' % pkg, postinst)
bb.note('%s' % alt_remove_links)
prerm = d.getVar('pkg_prerm_%s' % pkg, True) or '#!/bin/sh\n'
- prerm += alt_remove_links
+ prerm = prerm.splitlines(True)
+ try:
+ index = prerm.index('# End section update-rc.d\n')
+ prerm.insert(index + 1, alt_remove_links)
+ except ValueError:
+ prerm.append(alt_remove_links)
+ prerm = ''.join(prerm)
d.setVar('pkg_prerm_%s' % pkg, prerm)
}
diff --git a/meta/classes/update-rc.d.bbclass b/meta/classes/update-rc.d.bbclass
index 2c3ef9edd1..530de87270 100644
--- a/meta/classes/update-rc.d.bbclass
+++ b/meta/classes/update-rc.d.bbclass
@@ -35,6 +35,7 @@ fi
}
updatercd_postinst() {
+# Begin section update-rc.d
if ${@use_updatercd(d)} && type update-rc.d >/dev/null 2>/dev/null; then
if [ -n "$D" ]; then
OPT="-r $D"
@@ -43,12 +44,15 @@ if ${@use_updatercd(d)} && type update-rc.d >/dev/null 2>/dev/null; then
fi
update-rc.d $OPT ${INITSCRIPT_NAME} ${INITSCRIPT_PARAMS}
fi
+# End section update-rc.d
}
updatercd_prerm() {
+# Begin section update-rc.d
if ${@use_updatercd(d)} && [ -z "$D" -a -x "${INIT_D_DIR}/${INITSCRIPT_NAME}" ]; then
${INIT_D_DIR}/${INITSCRIPT_NAME} stop || :
fi
+# End section update-rc.d
}
updatercd_postrm() {
@@ -111,13 +115,25 @@ python populate_packages_updatercd () {
postinst = d.getVar('pkg_postinst_%s' % pkg, True)
if not postinst:
postinst = '#!/bin/sh\n'
- postinst += localdata.getVar('updatercd_postinst', True)
+ postinst = postinst.splitlines(True)
+ try:
+ index = postinst.index('# End section update-alternatives\n')
+ postinst.insert(index + 1, localdata.getVar('updatercd_postinst', True))
+ except ValueError:
+ postinst.append(localdata.getVar('updatercd_postinst', True))
+ postinst = ''.join(postinst)
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)
+ prerm = prerm.splitlines(True)
+ try:
+ index = prerm.index('# Begin section update-alternatives\n')
+ prerm.insert(index, localdata.getVar('updatercd_prerm', True))
+ except ValueError:
+ prerm.append(localdata.getVar('updatercd_prerm', True))
+ prerm = ''.join(prerm)
d.setVar('pkg_prerm_%s' % pkg, prerm)
postrm = d.getVar('pkg_postrm_%s' % pkg, True)
--
2.11.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v6] classes: Fix alternatives and rc.d ordering
2016-12-12 16:01 ` [PATCH v5] " David Vincent
@ 2016-12-20 9:47 ` David Vincent
0 siblings, 0 replies; 7+ messages in thread
From: David Vincent @ 2016-12-20 9:47 UTC (permalink / raw)
To: openembedded-core, haris.okanovic, markus.lehtonen
When using an alternative as an initscript, the ordering between
update-rc.d and update-alternatives tasks during prerm and postinst
tasks must always be the following in order to work:
* prerm:
- stop daemon
- remove alternative
* postinst:
- add alternative
- start daemon
This patchset adds comments to the scripts generated by both classes and
organize the generated sections based on those comments.
[YOCTO #10433]
Changes since v5:
- Remove boolean in d.getVar() calls
Signed-off-by: David Vincent <freesilicon@gmail.com>
---
meta/classes/update-alternatives.bbclass | 29 ++++++++++++++++++++++-------
meta/classes/update-rc.d.bbclass | 20 ++++++++++++++++++--
2 files changed, 40 insertions(+), 9 deletions(-)
diff --git a/meta/classes/update-alternatives.bbclass b/meta/classes/update-alternatives.bbclass
index 0460bf0241..a90ef19e45 100644
--- a/meta/classes/update-alternatives.bbclass
+++ b/meta/classes/update-alternatives.bbclass
@@ -195,8 +195,8 @@ python populate_packages_updatealternatives () {
pkgdest = d.getVar('PKGD')
for pkg in (d.getVar('PACKAGES') or "").split():
# Create post install/removal scripts
- alt_setup_links = ""
- alt_remove_links = ""
+ alt_setup_links = "# Begin section update-alternatives\n"
+ alt_remove_links = "# Begin section update-alternatives\n"
for alt_name in (d.getVar('ALTERNATIVE_%s' % pkg) or "").split():
alt_link = d.getVarFlag('ALTERNATIVE_LINK_NAME', alt_name)
alt_target = d.getVarFlag('ALTERNATIVE_TARGET_%s' % pkg, alt_name) or d.getVarFlag('ALTERNATIVE_TARGET', alt_name)
@@ -219,10 +219,13 @@ python populate_packages_updatealternatives () {
# Default to generate shell script.. eventually we may want to change this...
alt_target = os.path.normpath(alt_target)
- alt_setup_links += '\tupdate-alternatives --install %s %s %s %s\n' % (alt_link, alt_name, alt_target, alt_priority)
- alt_remove_links += '\tupdate-alternatives --remove %s %s\n' % (alt_name, alt_target)
+ alt_setup_links += 'update-alternatives --install %s %s %s %s\n' % (alt_link, alt_name, alt_target, alt_priority)
+ alt_remove_links += 'update-alternatives --remove %s %s\n' % (alt_name, alt_target)
- if alt_setup_links:
+ alt_setup_links += "# End section update-alternatives\n"
+ alt_remove_links += "# End section update-alternatives\n"
+
+ if len(alt_setup_links.splitlines()) > 2:
# RDEPENDS setup
provider = d.getVar('VIRTUAL-RUNTIME_update-alternatives')
if provider:
@@ -232,12 +235,24 @@ python populate_packages_updatealternatives () {
bb.note('adding update-alternatives calls to postinst/prerm for %s' % pkg)
bb.note('%s' % alt_setup_links)
postinst = d.getVar('pkg_postinst_%s' % pkg) or '#!/bin/sh\n'
- postinst += alt_setup_links
+ postinst = postinst.splitlines(True)
+ try:
+ index = postinst.index('# Begin section update-rc.d\n')
+ postinst.insert(index, alt_setup_links)
+ except ValueError:
+ postinst.append(alt_setup_links)
+ postinst = ''.join(postinst)
d.setVar('pkg_postinst_%s' % pkg, postinst)
bb.note('%s' % alt_remove_links)
prerm = d.getVar('pkg_prerm_%s' % pkg) or '#!/bin/sh\n'
- prerm += alt_remove_links
+ prerm = prerm.splitlines(True)
+ try:
+ index = prerm.index('# End section update-rc.d\n')
+ prerm.insert(index + 1, alt_remove_links)
+ except ValueError:
+ prerm.append(alt_remove_links)
+ prerm = ''.join(prerm)
d.setVar('pkg_prerm_%s' % pkg, prerm)
}
diff --git a/meta/classes/update-rc.d.bbclass b/meta/classes/update-rc.d.bbclass
index 2746c360fe..9d3a7bc0c7 100644
--- a/meta/classes/update-rc.d.bbclass
+++ b/meta/classes/update-rc.d.bbclass
@@ -35,6 +35,7 @@ fi
}
updatercd_postinst() {
+# Begin section update-rc.d
if ${@use_updatercd(d)} && type update-rc.d >/dev/null 2>/dev/null; then
if [ -n "$D" ]; then
OPT="-r $D"
@@ -43,12 +44,15 @@ if ${@use_updatercd(d)} && type update-rc.d >/dev/null 2>/dev/null; then
fi
update-rc.d $OPT ${INITSCRIPT_NAME} ${INITSCRIPT_PARAMS}
fi
+# End section update-rc.d
}
updatercd_prerm() {
+# Begin section update-rc.d
if ${@use_updatercd(d)} && [ -z "$D" -a -x "${INIT_D_DIR}/${INITSCRIPT_NAME}" ]; then
${INIT_D_DIR}/${INITSCRIPT_NAME} stop || :
fi
+# End section update-rc.d
}
updatercd_postrm() {
@@ -111,13 +115,25 @@ python populate_packages_updatercd () {
postinst = d.getVar('pkg_postinst_%s' % pkg)
if not postinst:
postinst = '#!/bin/sh\n'
- postinst += localdata.getVar('updatercd_postinst')
+ postinst = postinst.splitlines(True)
+ try:
+ index = postinst.index('# End section update-alternatives\n')
+ postinst.insert(index + 1, localdata.getVar('updatercd_postinst'))
+ except ValueError:
+ postinst.append(localdata.getVar('updatercd_postinst'))
+ postinst = ''.join(postinst)
d.setVar('pkg_postinst_%s' % pkg, postinst)
prerm = d.getVar('pkg_prerm_%s' % pkg)
if not prerm:
prerm = '#!/bin/sh\n'
- prerm += localdata.getVar('updatercd_prerm')
+ prerm = prerm.splitlines(True)
+ try:
+ index = prerm.index('# Begin section update-alternatives\n')
+ prerm.insert(index, localdata.getVar('updatercd_prerm'))
+ except ValueError:
+ prerm.append(localdata.getVar('updatercd_prerm'))
+ prerm = ''.join(prerm)
d.setVar('pkg_prerm_%s' % pkg, prerm)
postrm = d.getVar('pkg_postrm_%s' % pkg)
--
2.11.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-12-20 9:48 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-11-24 8:24 [PATCH v2] classes: Fix alternatives and rc.d ordering David Vincent
2016-11-24 9:26 ` [PATCH v3] " David Vincent
2016-11-24 10:25 ` Markus Lehtonen
2016-11-28 16:11 ` [PATCH v4] " David Vincent
2016-11-28 16:11 ` [PATCH] " David Vincent
2016-12-12 16:01 ` [PATCH v5] " David Vincent
2016-12-20 9:47 ` [PATCH v6] " David Vincent
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox