From 2831525699e230d36a0ad27cc63ef3b251437f82 Mon Sep 17 00:00:00 2001 From: Andreas Oberritter Date: Tue, 26 Aug 2014 01:59:03 +0200 Subject: package_manager/deb: implement BAD_RECOMMENDATIONS Signed-off-by: Andreas Oberritter --- meta/classes/rootfs_deb.bbclass | 6 ------ meta/lib/oe/package_manager.py | 30 ++++++++++++++++++++++++++++++ meta/lib/oe/rootfs.py | 2 ++ 3 files changed, 32 insertions(+), 6 deletions(-) (limited to 'meta') diff --git a/meta/classes/rootfs_deb.bbclass b/meta/classes/rootfs_deb.bbclass index ca55870fc1..5ae9fc6118 100644 --- a/meta/classes/rootfs_deb.bbclass +++ b/meta/classes/rootfs_deb.bbclass @@ -13,12 +13,6 @@ do_rootfs[lockfiles] += "${DEPLOY_DIR_DEB}/deb.lock" do_populate_sdk[lockfiles] += "${DEPLOY_DIR_DEB}/deb.lock" do_populate_sdk_ext[lockfiles] += "${DEPLOY_DIR_DEB}/deb.lock" -python rootfs_deb_bad_recommendations() { - if d.getVar("BAD_RECOMMENDATIONS"): - 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 367490fc5b..a73e054ae9 100644 --- a/meta/lib/oe/package_manager.py +++ b/meta/lib/oe/package_manager.py @@ -1774,6 +1774,36 @@ class DpkgPM(OpkgDpkgPM): return tmp_dir + 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).decode("utf-8") + except subprocess.CalledProcessError as e: + if e.returncode == 100: + # Ignore unavailable packages. + continue + 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').replace("package_", "").split() diff --git a/meta/lib/oe/rootfs.py b/meta/lib/oe/rootfs.py index da8a2db21b..2805b01264 100644 --- a/meta/lib/oe/rootfs.py +++ b/meta/lib/oe/rootfs.py @@ -640,6 +640,8 @@ class DpkgRootfs(DpkgOpkgRootfs): self.pm.update() + self.pm.handle_bad_recommendations() + if self.progress_reporter: self.progress_reporter.next_stage() -- cgit 1.2.3-korg