Re: perl breakage in Cooker mostly resolved
Per Øyvind Karlsen <[email protected]> Fri, 20 Jan 2012 20:29:31 +0100
| Newsgroups | gmane.linux.mandrake.cooker.devel |
|---|---|
| Message-ID | <CA+0WU1T+rt8SmO_kL2k4NSbb0BDjm_AO-V+-qgOVSpjPtrpS_g@mail.gmail.com> |
d'oh, sent using wrong address.. Den 20:29 20. januar 2012 skrev Per Øyvind Karlsen <[email protected]> følgende: > Den 19:56 20. januar 2012 skrev Jeffrey Johnson <[email protected]> følgende: >> >> On Jan 20, 2012, at 1:10 PM, Per Øyvind Karlsen wrote: >> >>> Den 06:00 20. januar 2012 skrev <[email protected]> følgende: >>>>> >>>>> "/usr/bin/perl: symbol lookup error: >>>>> /usr/lib/perl5/vendor_perl/5.12.3/x86_64-linux-thread-multi/auto/List/MoreUtils/MoreUtils.so: >>>>> undefined symbol: Perl_Gthr_key_ptr" >>>>> >>>>> Check what package the module is from -- >>>>> >>>>> [bero@localhost ~]$ rpm -qf >>>>> /usr/lib/perl5/vendor_perl/5.12.3/x86_64-linux-thread-multi/auto/List/MoreUtils/MoreUtils.so >>>>> perl-List-MoreUtils-0.320.0-1 >>>>> [bero@localhost ~]$ >>>>> >>>>> Then simply rebuild that package. >>>> >>>> >> >> … >> >>>> So, I did not follow closely how it was done in previous >>>> perl updates, but I believe it should have strict dependencies >>>> to force a single transaction, and not fall for the problem >>>> I just experienced, that was urpmi restarting before its >>>> dependencies were updated. >>> Currently perl packages gets a dependency like 'perl(abi) >= 5.12' generated, >>> but perl isn't backwards compatible for perl extensions built against >>> older versions >>> so generating strict version dependencies like 'perl(abi) = 5.12' for >>> perl extensions >>> should probably be sufficient in the future.. >>> >> >> Writing a dependency assertion that is an "open-ended range" like >> >> Requires: perl(abi) >= 5.1 >> >> is a promise (in packaging) of future compatibility that >> is an irrational (but quite pleasant) lie: >> No one knows what abi going to be in future versions of perl. > Notice that by "perl extensions" I refer to compiled, non-perl code > such as ie. URPM. >> >> Narrowing the dependency range to a single version is entirely sane. > Yes, for perl extensions. > For pure perl modules OTOH it's sane enough with the existing > dependencies generated as > perl is built with support for loading these (and it's really just the > versioned path for where the > modules are installed and what perl is built for that dictates the > version required for these, > any other breakages between version upgrades isn't something we'll be > able to easily track > through packaging). >> >> But there is another technique, already in use by the kernel and ocaml and "buildid" in >> packaging, that is even better because the functionality can be reliably automated >> and with a narrower dependency assertion that is more precise. >> >> What would be needed to use in perl to detect a deletion >> in the perl abi of the symbol "Perl_Gthr_key_ptr" is this: >> >> 1) Extract all exposed external symbols that de facto constitute perl's ABI. >> >> 2) Sort the list of symbols, and compute the digest of the list of symbols. >> Use any digest: there are few security related issues for using a digest >> for "identification" rather than for an integrity check. but use SHA-4096 >> if you are concerned, all that is needed is uniqueness. >> >> 3) Generate the dependency (like kernel/ocaml packages do) as >> Requires: perl(abi) = <put the digest in hex here> >> >> 4) Test the results, examine the consequences, filter out symbols >> and/or split the single dependency into multiple dependencies, as needed. >> >> I expect that the above technique -- because it can be automated reliably -- to >> be increasingly important for *.rpm dependencies over the next few years. > Seems overkill IMO, simple dependency on specific version series for > perl extensions > should be sufficient, while keeping what is for regular modules is sane and also > prevents breakage for pure perl module packages between version > version upgrades.. > > -- > Regards, > Per Øyvind