after the main rsync completes I get this: Performing Global Updates (Could take a couple of minutes if you have a lot of binary packages.) .='update pass' *='binary update' #='/var/db update' @='/var/db move' s='/var/db SLOT move' %='binary move' S='binary SLOT move' p='update /etc/portage/package.*' /usr/portage/profiles/updates/2Q-2023. Package basename mismatched, using jupyter-server-2.4.0Traceback (most recent call last): File "/usr/lib/python-exec/python3.10/emerge", line 59, in <module> retval = emerge_main() File "/usr/lib/python3.10/site-packages/_emerge/main.py", line 1299, in emerge_main return run_action(emerge_config) File "/usr/lib/python3.10/site-packages/_emerge/actions.py", line 3862, in run_action return action_sync(emerge_config) File "/usr/lib/python3.10/site-packages/_emerge/actions.py", line 2426, in action_sync success, msgs = syncer.auto_sync(options=options) File "/usr/lib/python3.10/site-packages/portage/emaint/modules/sync/sync.py", line 89, in auto_sync return self._sync(repos, return_messages, emaint_opts=options) File "/usr/lib/python3.10/site-packages/portage/emaint/modules/sync/sync.py", line 261, in _sync self._do_pkg_moves() File "/usr/lib/python3.10/site-packages/portage/emaint/modules/sync/sync.py", line 272, in _do_pkg_moves if self.emerge_config.opts.get("--package-moves") != "n" and _global_updates( File "/usr/lib/python3.10/site-packages/portage/_global_updates.py", line 41, in _global_updates return _do_global_updates( File "/usr/lib/python3.10/site-packages/portage/_global_updates.py", line 257, in _do_global_updates bindb.update_ents(repo_map, onUpdate=onUpdate) File "/usr/lib/python3.10/site-packages/portage/dbapi/__init__.py", line 413, in update_ents aux_update(cpv, metadata_updates) File "/usr/lib/python3.10/site-packages/portage/dbapi/bintree.py", line 295, in aux_update mybinpkg.update_metadata(mydata) File "/usr/lib/python3.10/site-packages/portage/gpkg.py", line 1155, in update_metadata raise InvalidBinaryPackageFormat( portage.exception.InvalidBinaryPackageFormat: gpkg file structure mismatch in /usr/portage/packages/dev-python/jupyter-server/jupyter-server-2.4.0-1.gpkg.tar; files: ['jupyter-server-2.4.0/gpkg-1', 'jupyter-server-2.4.0-1/metadata.tar.zst', 'jupyter-server-2.4.0/image.tar.zst', 'jupyter-server-2.4.0-1/Manifest'] I understand that if there is something wrong with a binpkg portage may ignore it or I'd even be fine with deleting it, but I feel exploding is likely the wrong way to handle it.
I hit this error with portage 3.0.45.3-r2, I removed the portage line from my package.accept_keywords file, but attempting to downgrade immediately breaks in the same way Nu ~ # emerge -1 portage -a Performing Global Updates (Could take a couple of minutes if you have a lot of binary packages.) .='update pass' *='binary update' #='/var/db update' @='/var/db move' s='/var/db SLOT move' %='binary move' S='binary SLOT move' p='update /etc/portage/package.*' /usr/portage/profiles/updates/2Q-2023. Package basename mismatched, using jupyter-server-2.4.0Traceback (most recent call last): File "/usr/lib/python-exec/python3.10/emerge", line 59, in <module> retval = emerge_main() File "/usr/lib/python3.10/site-packages/_emerge/main.py", line 1299, in emerge_main return run_action(emerge_config) File "/usr/lib/python3.10/site-packages/_emerge/actions.py", line 3418, in run_action and _global_updates( File "/usr/lib/python3.10/site-packages/portage/_global_updates.py", line 41, in _global_updates return _do_global_updates( File "/usr/lib/python3.10/site-packages/portage/_global_updates.py", line 257, in _do_global_updates bindb.update_ents(repo_map, onUpdate=onUpdate) File "/usr/lib/python3.10/site-packages/portage/dbapi/__init__.py", line 413, in update_ents aux_update(cpv, metadata_updates) File "/usr/lib/python3.10/site-packages/portage/dbapi/bintree.py", line 295, in aux_update mybinpkg.update_metadata(mydata) File "/usr/lib/python3.10/site-packages/portage/gpkg.py", line 1155, in update_metadata raise InvalidBinaryPackageFormat( portage.exception.InvalidBinaryPackageFormat: gpkg file structure mismatch in /usr/portage/packages/dev-python/jupyter-server/jupyter-server-2.4.0-1.gpkg.tar; files: ['jupyter-server-2.4.0/gpkg-1', 'jupyter-server-2.4.0-1/metadata.tar.zst', 'jupyter-server-2.4.0/image.tar.zst', 'jupyter-server-2.4.0-1/Manifest']
I agree, it shouldn't puke. I'm thinking either _do_global_updates() or _do_pkg_moves() needs to handle the InvalidBinaryPackageFormat exception. eclean-pkg & portage is being modified for cleaning invalid binpkgs already work in progress: https://github.com/gentoo/gentoolkit/pull/28 https://github.com/gentoo/portage/pull/1016
Regarding the error itself, I think this is another manifestation of bug 877271.
Yes, it should catch that and give a warning, not dead. Should be a quick fix.
_do_global_updates() could with the invalid_paths varialbe addition to bindbapi, could use the filepath to nuke it, complete the update.
ok, looks like this is the location to fix it. This is only an untested code patch to confirm a good place to make the change. diff --git a/lib/portage/dbapi/__init__.py b/lib/portage/dbapi/__init__.py index 366a6c170..9cfd7c492 100644 --- a/lib/portage/dbapi/__init__.py +++ b/lib/portage/dbapi/__init__.py @@ -410,7 +410,10 @@ class dbapi: updates_list, metadata, parent=pkg ) if metadata_updates: - aux_update(cpv, metadata_updates) + try: + aux_update(cpv, metadata_updates) + except InvalidBinaryPackageFormat: + print("!!!!!!!!!! found invalid binpkg") if onUpdate: onUpdate(maxval, i + 1) if onProgress: either print out the info properly or nuke the offending binpkg directly.
(In reply to Brian Dolbec from comment #6) > either print out the info properly or nuke the offending binpkg directly. When I hit invalid binpkgs using xpak format, portage basically told me it was ignoring them and then kept right on going with whatever I asked it to do. I'm okay with that behavior. It makes sense that eclean nukes invalid binary packages but portage just ignores them. That said, since invalid binary packages will be ignored at best, I'd be fine with portage just deleting them as well.
Created attachment 859637 [details] broken binpkg by request of dol-son
The bug has been referenced in the following commit(s): https://gitweb.gentoo.org/proj/portage.git/commit/?id=2569a1a1d889a76af80ce24a005d54269df7d2e2 commit 2569a1a1d889a76af80ce24a005d54269df7d2e2 Author: Sheng Yu <syu.os@protonmail.com> AuthorDate: 2023-04-07 04:50:49 +0000 Commit: Sam James <sam@gentoo.org> CommitDate: 2023-04-07 09:49:11 +0000 dbapi: Catch invalid binpkg error during pkgmove Bug: https://bugs.gentoo.org/877271 Bug: https://bugs.gentoo.org/903917 Bug: https://bugs.gentoo.org/903926 Signed-off-by: Sheng Yu <syu.os@protonmail.com> Closes: https://github.com/gentoo/portage/pull/1022 Signed-off-by: Sam James <sam@gentoo.org> NEWS | 3 +++ lib/portage/dbapi/__init__.py | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-)
The bug has been closed via the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=05f0b3b184011060c86787f93e16a29002bdc54a commit 05f0b3b184011060c86787f93e16a29002bdc54a Author: Sam James <sam@gentoo.org> AuthorDate: 2023-04-07 09:59:46 +0000 Commit: Sam James <sam@gentoo.org> CommitDate: 2023-04-07 09:59:55 +0000 sys-apps/portage: add 3.0.46 Closes: https://bugs.gentoo.org/861659 Closes: https://bugs.gentoo.org/877271 Closes: https://bugs.gentoo.org/898224 Closes: https://bugs.gentoo.org/899898 Closes: https://bugs.gentoo.org/902189 Closes: https://bugs.gentoo.org/903917 Closes: https://bugs.gentoo.org/903926 Signed-off-by: Sam James <sam@gentoo.org> sys-apps/portage/Manifest | 1 + sys-apps/portage/portage-3.0.46.ebuild | 285 +++++++++++++++++++++++++++++++++ 2 files changed, 286 insertions(+)