diff options
author | Andreas Oberritter <obi@opendreambox.org> | 2014-08-26 01:59:03 +0200 |
---|---|---|
committer | Andreas Oberritter <obi@opendreambox.org> | 2017-10-17 04:38:26 +0200 |
commit | 306cf48f7ebd5336b70a80d7e6a340bb52184ab9 (patch) | |
tree | 5156f60d302feb380f8e136626b174b2217105d1 | |
parent | bd3945871bf5d5e62d6aca466499869121ce440c (diff) | |
download | openembedded-core-contrib-306cf48f7ebd5336b70a80d7e6a340bb52184ab9.tar.gz |
package_manager/deb: implement BAD_RECOMMENDATIONS
Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
-rw-r--r-- | meta/classes/rootfs_deb.bbclass | 6 | ||||
-rw-r--r-- | meta/lib/oe/package_manager.py | 26 | ||||
-rw-r--r-- | meta/lib/oe/rootfs.py | 2 |
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], |