The following patchs add a library dependency rebuilder as a package
set, @missing-rebuild, to portage-2.2_rc6. Similar to the --library
flag in revdep-rebuild, the user can additionally emerge the set of
packages containing consumers of libraries matched by a (python)
regular expression; however, until a better solution is found, the
regexp must be passed through the LIBRARY environment variable to
enable that feature.
Known issues: I expect some false positives. I've inserted hard coded
directory/library masks for those I've found. I noticed a situation
that required a second emerge due to a provider package satisfying 3
conditions: 1) the package is installed and an updated version is
available in its slot, 2) the updated version is in the set due to a
dependency of another package (or it may contains a broken binary),
and 3) a consumer package of a library within the updated package is
emerged before the updated dependency is emerged, causing a package to
be compiled against the old library before the library version
changes. I guess that if a package is already installed, it is not
necessarily placed before its consumer packages in the merge order.
Attached are patches for pym/portage/dbapi/vartree.py,
pym/portage/sets/libs.py and /usr/share/portage/config/sets.conf.
These can also be found in the project's repository:
http://repo.or.cz/w/revdep-rebuild-reimplementation.git?a=tree;h=refs/heads/rc1;hb=refs/heads/rc1
I warmly welcome all feedback, in particular any suggestions to remove
the necessity of directory and library masks in /etc/revdep-rebuild/*,
which I've been unable to entirely avoid.
Lucian
08-08-2008, 10:10 PM
Zac Medico
missing-rebuild package set
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Lucian Poston wrote:
> The following patchs add a library dependency rebuilder as a package
> set, @missing-rebuild, to portage-2.2_rc6. Similar to the --library
> flag in revdep-rebuild, the user can additionally emerge the set of
> packages containing consumers of libraries matched by a (python)
> regular expression; however, until a better solution is found, the
> regexp must be passed through the LIBRARY environment variable to
> enable that feature.
>
> Known issues: I expect some false positives. I've inserted hard coded
> directory/library masks for those I've found. I noticed a situation
> that required a second emerge due to a provider package satisfying 3
> conditions: 1) the package is installed and an updated version is
> available in its slot, 2) the updated version is in the set due to a
> dependency of another package (or it may contains a broken binary),
> and 3) a consumer package of a library within the updated package is
> emerged before the updated dependency is emerged, causing a package to
> be compiled against the old library before the library version
> changes. I guess that if a package is already installed, it is not
> necessarily placed before its consumer packages in the merge order.
>
> Attached are patches for pym/portage/dbapi/vartree.py,
> pym/portage/sets/libs.py and /usr/share/portage/config/sets.conf.
> These can also be found in the project's repository:
> http://repo.or.cz/w/revdep-rebuild-reimplementation.git?a=tree;h=refs/heads/rc1;hb=refs/heads/rc1
Thanks, I've merged your LinkageMap changes.
Side note: I suspect that we might be able to improve efficiency in
LinkageMap path comparisons by comparing tuples of device and inode
numbers instead of using realpath. We currently use the device/inode
number approach to test identity of paths in dblink.isowner().
> I warmly welcome all feedback, in particular any suggestions to remove
> the necessity of directory and library masks in /etc/revdep-rebuild/*,
> which I've been unable to entirely avoid.
>
> Lucian
>
I haven't merged the MissingLibraryConsumerSet yet since I'd like to
see if we can improve it a bit first. I don't have any ideas right
now but hopefully we can come up with something soon.
On Fri, Aug 8, 2008 at 2:10 PM, Zac Medico <zmedico@gentoo.org> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Lucian Poston wrote:
>> The following patchs add a library dependency rebuilder as a package
>> set, @missing-rebuild, to portage-2.2_rc6. Similar to the --library
>> flag in revdep-rebuild, the user can additionally emerge the set of
>> packages containing consumers of libraries matched by a (python)
>> regular expression; however, until a better solution is found, the
>> regexp must be passed through the LIBRARY environment variable to
>> enable that feature.
>>
>> Known issues: I expect some false positives. I've inserted hard coded
>> directory/library masks for those I've found. I noticed a situation
>> that required a second emerge due to a provider package satisfying 3
>> conditions: 1) the package is installed and an updated version is
>> available in its slot, 2) the updated version is in the set due to a
>> dependency of another package (or it may contains a broken binary),
>> and 3) a consumer package of a library within the updated package is
>> emerged before the updated dependency is emerged, causing a package to
>> be compiled against the old library before the library version
>> changes. I guess that if a package is already installed, it is not
>> necessarily placed before its consumer packages in the merge order.
>>
>> Attached are patches for pym/portage/dbapi/vartree.py,
>> pym/portage/sets/libs.py and /usr/share/portage/config/sets.conf.
>> These can also be found in the project's repository:
>> http://repo.or.cz/w/revdep-rebuild-reimplementation.git?a=tree;h=refs/heads/rc1;hb=refs/heads/rc1
>
> Thanks, I've merged your LinkageMap changes.
>
> Side note: I suspect that we might be able to improve efficiency in
> LinkageMap path comparisons by comparing tuples of device and inode
> numbers instead of using realpath. We currently use the device/inode
> number approach to test identity of paths in dblink.isowner().
As it is time for gSoC 2009; I want to inquire at the status of this
code integration.
Looking at HEAD it seems there are some changes left to merge. Is
this on the roadmap?
-Alec
>
>> I warmly welcome all feedback, in particular any suggestions to remove
>> the necessity of directory and library masks in /etc/revdep-rebuild/*,
>> which I've been unable to entirely avoid.
>>
>> Lucian
>>
>
> I haven't merged the MissingLibraryConsumerSet yet since I'd like to
> see if we can improve it a bit first. I don't have any ideas right
> now but hopefully we can come up with something soon.
>
> Zac
>
>
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v2.0.9 (GNU/Linux)
>
> iEYEARECAAYFAkicxEsACgkQ/ejvha5XGaNcyACfX7oKKCbYraRk8AwckkA9Reu6
> cRkAoMa/vK5SXDTdw8+nYqpBAlUXz096
> =zskl
> -----END PGP SIGNATURE-----
>
>
02-18-2009, 08:54 PM
Zac Medico
missing-rebuild package set
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Alec Warner wrote:
>> As it is time for gSoC 2009; I want to inquire at the status of this
>> code integration.
>> Looking at HEAD it seems there are some changes left to merge. Is
>> this on the roadmap?
The hardcoded libraries/paths (used to filter "false positives")
still need to be split out into config files before I can merge it.
I'll get to that eventually but I've got lots of other more pressing
things to work on a them moment.
For preserve-libs, the main problems that are left are:
1) There is no protection against building packages which depend on
packages for which libs are still preserved [1].
2) Library preservation currently does not work for binutils
upgrades since the binutils libraries are added to the library path
via symlinks which are created by binutils-config (unlike most
packages the provide libraries, the paths of libraries to which the
symlinks point are not included directly in ld.so.conf).