commit: 216e962ae494e8291b667665007d045788b3e391 Author: Sam James <sam <AT> gentoo <DOT> org> AuthorDate: Thu Oct 28 04:40:09 2021 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Thu Oct 28 04:52:32 2021 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=216e962a
Binpkg.py: check for inconsistent PROVIDES/image when unpacking binpkg This is part of a series of fixes for the linked bug (failure to preserve libraries in some situations). When unpacking a binpkg to be installed, we should check for the existence of PROVIDES if we're installing any dynamic libraries. If PROVIDES does not exist in that case, this suggests that e.g. scanelf malfunctioned or some corruption occurred. Bug: https://bugs.gentoo.org/811462 Signed-off-by: Sam James <sam <AT> gentoo.org> lib/_emerge/Binpkg.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/_emerge/Binpkg.py b/lib/_emerge/Binpkg.py index c7dde69bd..001283611 100644 --- a/lib/_emerge/Binpkg.py +++ b/lib/_emerge/Binpkg.py @@ -2,7 +2,6 @@ # Distributed under the terms of the GNU General Public License v2 import functools - import _emerge.emergelog from _emerge.EbuildPhase import EbuildPhase from _emerge.BinpkgFetcher import BinpkgFetcher @@ -13,8 +12,10 @@ from _emerge.EbuildMerge import EbuildMerge from _emerge.EbuildBuildDir import EbuildBuildDir from _emerge.SpawnProcess import SpawnProcess from portage.eapi import eapi_exports_replace_vars +from portage.output import colorize from portage.util import ensure_dirs from portage.util._async.AsyncTaskFuture import AsyncTaskFuture +from portage.util._dyn_libs.dyn_libs import check_dyn_libs_inconsistent import portage from portage import os from portage import shutil @@ -425,6 +426,18 @@ class Binpkg(CompositeTask): self._async_unlock_builddir(returncode=self.returncode) return + # Before anything else, let's do an integrity check. + (provides,) = self._bintree.dbapi.aux_get(self.pkg.cpv, ["PROVIDES"]) + if check_dyn_libs_inconsistent(self.settings["D"], provides): + self._writemsg_level( + colorize( + "BAD", + "!!! Error! Installing dynamic libraries (.so) with blank PROVIDES!", + ), + noiselevel=-1, + level=logging.ERROR, + ) + try: with io.open( _unicode_encode(