diff options
author | Andreas Oberritter <obi@opendreambox.org> | 2014-08-26 01:59:03 +0200 |
---|---|---|
committer | Andreas Oberritter <obi@opendreambox.org> | 2018-05-07 23:25:22 +0200 |
commit | 0723b81ddba6bbe132930645011bedc7460b9d4f (patch) | |
tree | 4b36dccccf326608d0e84a68997cd3a771aa2478 | |
parent | dc1d16945d726eac0285f5cc03a62aed79942e69 (diff) | |
download | openembedded-core-contrib-0723b81ddba6bbe132930645011bedc7460b9d4f.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 | 30 | ||||
-rw-r--r-- | meta/lib/oe/rootfs.py | 2 |
3 files changed, 32 insertions, 6 deletions
diff --git a/meta/classes/rootfs_deb.bbclass b/meta/classes/rootfs_deb.bbclass index 99843d6be6..8af3b9bc94 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 f792476fc2..c5fa3f7e3b 100644 --- a/meta/lib/oe/package_manager.py +++ b/meta/lib/oe/package_manager.py @@ -1508,6 +1508,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 930f865c0a..14cc0124ff 100644 --- a/meta/lib/oe/rootfs.py +++ b/meta/lib/oe/rootfs.py @@ -658,6 +658,8 @@ class DpkgRootfs(DpkgOpkgRootfs): self.pm.update() + self.pm.handle_bad_recommendations() + if self.progress_reporter: self.progress_reporter.next_stage() |