aboutsummaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorAndreas Oberritter <obi@opendreambox.org>2014-08-26 01:59:03 +0200
committerAndreas Oberritter <obi@opendreambox.org>2017-06-26 22:57:11 +0200
commit28407a519dbecc22ad81444da2a47b66a3a2f919 (patch)
tree2553fda60539e32875bd851fec803c8f40e7d2ef /meta
parent1347d9f6b45a7e19f3b99a3ff581445d723c37ae (diff)
downloadopenembedded-core-contrib-28407a519dbecc22ad81444da2a47b66a3a2f919.tar.gz
package_manager/deb: implement BAD_RECOMMENDATIONS
Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
Diffstat (limited to 'meta')
-rw-r--r--meta/classes/rootfs_deb.bbclass6
-rw-r--r--meta/lib/oe/package_manager.py26
-rw-r--r--meta/lib/oe/rootfs.py2
3 files changed, 28 insertions, 6 deletions
diff --git a/meta/classes/rootfs_deb.bbclass b/meta/classes/rootfs_deb.bbclass
index f79fca608e..18d0b83b1b 100644
--- a/meta/classes/rootfs_deb.bbclass
+++ b/meta/classes/rootfs_deb.bbclass
@@ -13,12 +13,6 @@ do_rootfs[vardeps] += "PACKAGE_FEED_URIS"
do_rootfs[lockfiles] += "${DEPLOY_DIR_DEB}/deb.lock"
do_populate_sdk[lockfiles] += "${DEPLOY_DIR_DEB}/deb.lock"
-python rootfs_deb_bad_recommendations() {
- if d.getVar("BAD_RECOMMENDATIONS", True):
- bb.warn("Debian package install does not support BAD_RECOMMENDATIONS")
-}
-do_rootfs[prefuncs] += "rootfs_deb_bad_recommendations"
-
DEB_POSTPROCESS_COMMANDS = ""
opkglibdir = "${localstatedir}/lib/opkg"
diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py
index 3733bd7ff7..eef25491d9 100644
--- a/meta/lib/oe/package_manager.py
+++ b/meta/lib/oe/package_manager.py
@@ -1966,6 +1966,32 @@ class DpkgPM(PackageManager):
def list_installed(self):
return DpkgPkgsList(self.d, self.target_rootfs).list_pkgs()
+ def handle_bad_recommendations(self):
+ bad_recommendations = (self.d.getVar("BAD_RECOMMENDATIONS", True) or "").strip()
+ if not bad_recommendations:
+ return
+
+ status_file = self.target_rootfs + "/var/lib/dpkg/status"
+
+ with open(status_file + ".tmp", "w") as status:
+ for pkg in bad_recommendations.split():
+ pkg_info = ('apt-cache', 'show', pkg)
+
+ try:
+ output = subprocess.check_output(pkg_info, stderr=subprocess.STDOUT)
+ except subprocess.CalledProcessError as e:
+ bb.fatal("Cannot get package info. Command '%s' "
+ "returned %d:\n%s" % (' '.join(pkg_info), e.returncode, e.output))
+
+ for line in output.splitlines():
+ if not line:
+ status.write("Status: hold ok not-installed\n\n")
+ break
+
+ if line.startswith(' ') or line.split(': ', 1)[0] not in ('Filename', 'Size', 'MD5sum', 'MSDOS-Filename'):
+ status.write(line + "\n")
+
+ os.rename(status_file + ".tmp", status_file)
def generate_index_files(d):
classes = d.getVar('PACKAGE_CLASSES', True).replace("package_", "").split()
diff --git a/meta/lib/oe/rootfs.py b/meta/lib/oe/rootfs.py
index 19eef900ae..9c3e30a2d8 100644
--- a/meta/lib/oe/rootfs.py
+++ b/meta/lib/oe/rootfs.py
@@ -652,6 +652,8 @@ class DpkgRootfs(DpkgOpkgRootfs):
self.pm.update()
+ self.pm.handle_bad_recommendations()
+
for pkg_type in self.install_order:
if pkg_type in pkgs_to_install:
self.pm.install(pkgs_to_install[pkg_type],