From Fedora Project Wiki

Fedora Packaging Committee Meeting of {2007-06-05}

Present

  • JasonTibbitts (tibbs)
  • RalfCorsepius (racor)
  • RexDieter (rdieter)
  • VilleSkyttä (scop)

(No quorum this week.)

Writeups

No proposals were submitted to FESCo last week.

Votes

No proposals were voted upon this week.

Other Discussions

The following additional items were discussed; see the logs for full details.

IRC Logs

[12:02]  <tibbs> So, FPC meeting?
[12:02]  * rwmjones is here to help with ocaml
[12:02]  <rdieter> no spot,abadger today...
[12:03]  <tibbs> Yes, unfortunately we're missing some folks and I am going to have to run in and out a few times.
[12:04]  <rdieter> any comments on XChat/desktop thread? https://www.redhat.com/archives/fedora-devel-list/2007-May/msg02138.html
[12:04]  <racor> same for me, I am here, but I am on and off, and will have to leave early
[12:05]  --> scop has joined this channel (n=scop@cs181043142.pp.htv.fi).
[12:05]  <rdieter> and https://www.redhat.com/archives/fedora-devel-list/2007-May/msg01198.html
[12:05]  <rdieter> imo, Kevin had a point.
[12:06]  <rdieter> which was precisely my motivation for putting the wording into the Guidelines about  Name=, GenericName=, ...
[12:06]  <tibbs> Well, I thought the definitions of Name and GenericName were pretty clear, but it seems the desktop group doesn't agree and I'm still not sure why.
[12:07]  <rdieter> I can understand their pov, but their implementation choice of abusing the spec was bad.
[12:08]  <tibbs> So we have enough folks here to vote?  We owe the ocaml folks some consideration.
[12:08]  <rdieter> I count 3, so prolly not.
[12:08]  <rdieter> f13?
[12:08]  <tibbs> four with scop here.
[12:09]  *** rdieter sets the channel topic to "Fedora Packaging Comittee meeting - http://fedoraproject.org/wiki/Communicate/FedoraMeetingChannel".
[12:09]  <rwmjones> I'm fine with going over the packaging guidelines to see if there's anything wrong -- can spend the next week fixing them up
[12:09]  <rwmjones> http://fedoraproject.org/wiki/PackagingDrafts/OCaml
[12:10]  <rwmjones> also I have an ever-growing list of packages, here: http://tinyurl.com/2rl4w6
[12:10]  <rdieter> as long as ocaml-find-requires.sh/provides doesn't use rpm queries... :)
[12:11]  <rwmjones> yeah, I need to fix that one
[12:11]  <tibbs> I wonder what it would take to get rid if the _use_internal_dependency_generator bits and have the ocaml-find-*.sh scripts be called like the perl ones.
[12:12]  * rwmjones doesn't know how to do that
[12:13]  <tibbs> Looks like they're hardcoded in the find-provides script.  Kind of suboptimal, I guess.
[12:13]  <rdieter> tibbs: good question, not using internal_dep_generator is prolly not ideal.
[12:13]  <rwmjones> I thought that '%define _use_internal_dependency_generator 0' was necessary so that RPM would use the %define __find_provides/requires at all.  Othewise it seems to ignore them.
[12:13]  <rwmjones> s/RPM/rpmbuild/
[12:13]  <tibbs> Yes, but the point is that we should get the dependency finding hooked up by defailt, as Perl, Python and Tcl are.
[12:13]  <rdieter> rwmjones: you're right, it's just that the internal_*_generator is better at some things.
[12:13]  <scop> hm, ocaml-Modulename-MD5hash
[12:14]  <scop> looks inconsistent with other languages for which we have perl(Foo::Bar), ruby(foo) etc
[12:14]  <rwmjones> scop, you end up with requires which look like this:
[12:14]  <rwmjones> # rpm -q --requires ocaml-calendar
[12:14]  <rwmjones> rpmlib(PayloadFilesHavePrefix) <= 4.0-1
[12:14]  <rwmjones> rpmlib(CompressedFileNames) <= 3.0.4-1
[12:14]  <rwmjones> ocaml-Array-a904b798dd9665c2d3635636d293403c
[12:14]  <rwmjones> ocaml-Buffer-45f466ce46f213dae41be77dd8505f5f
[12:14]  <rwmjones> ocaml-Format-67f81fa527012cf0f70f6f6a24f07417
[12:14]  <rwmjones> ocaml-Lazy-27baa9469b2986a6ccbba3e85275ecf1
[12:14]  <rwmjones> ocaml-List-5a0e3217fc356bd18f60bff31861dfd3
[12:14]  <rwmjones> ocaml-Pervasives-71f888453b0f26895819460a72f07493
[12:14]  <rwmjones> ocaml-Str-8a11c5ef144a995903cc9e1bac5e353c
[12:14]  <rwmjones> ocaml-String-fec8292bb1a02d2c7b8b4ba7b83a7d8b
[12:14]  <rwmjones> ocaml-Unix-1876ce678cfa5a1961fac21850f71efd
[12:15]  <rwmjones> ocaml = 3.09.3-2.fc6
[12:15]  <rwmjones> note that these are necessary because OCaml has very strict module dependencies, it's not at all like dynamic languages
[12:15]  <scop> I understand the idea
[12:15]  <tibbs> I think the point is that these should be something like ocaml(module-hash).
[12:15]  <rwmjones> ok, I see - that shouldn't be a problem
[12:15]  <rwmjones> ocaml(module-hash) or ocaml(module,hash)?
[12:15]  <scop> right, that would look more like what other languages have
[12:16]  <tibbs> Is the hash akin to a version?
[12:16]  <rdieter> tibbs: looks like it, kinda sorta.
[12:16]  <rwmjones> it's a hash of the signature and some internals
[12:16]  <racor> are these cryptic strings in ocaml-XXX-... versions?
[12:16]  <tibbs> perhaps Provides: ocaml(module) = hash
[12:16]  <rdieter> tibbs: +1
[12:16]  <rwmjones> the ocaml linker uses these hashes too to decide if modules are compatible
[12:17]  <rwmjones> if we use '=' does that imply some sort of ordering? the hashes don't have an ordering
[12:17]  <tibbs> There's no ordering, but it seems that all of the dependencies are going to require strict equality.
[12:17]  <racor> rwmjones: so, are they are ids or version?
[12:17]  <rwmjones> racor, not sure I understand that question, sorry
[12:18]  <racor> your example contains strings like  ocaml-Buffer-45f466ce46f213dae41be77dd8505f5f
[12:18]  <tibbs> They encode a version, but they provide no specific ordering.
[12:18]  <rwmjones> they are MD5 hashes over the signature & internals of the module
[12:18]  <rwmjones> signature == interface
[12:18]  <racor> my question would be: is the 45f466ce46f213dae41be77dd8505f5f a version, ie. steadily increasing or an id (ie. unique but without order)
[12:18]  <scop> fwiw, see also rpm -q --provides kernel | grep -F 'kernel('
[12:18]  <rwmjones> no, they definitely don't increase
[12:19]  <rwmjones> no ordering
[12:19]  <racor> then you're in trouble ...
[12:19]  <rwmjones> scop, yes, they are just like those kernel deps
[12:19]  <racor> you said, they need to match
[12:20]  <tibbs> I don't see why there's any trouble.
[12:20]  <rdieter> these seem to be strictly virtual Requires/Provides, and not any real package, so it shouldn't matter.
[12:20]  <rdieter> but a valid concern to be aware of.
[12:20]  <rwmjones> so the module (eg. Array) is part of base ocaml in that example
[12:20]  <racor> tibbs: how would you want to upgrade from o-x-123 to o-x-abc
[12:20]  <rwmjones> # rpm -q --provides ocaml-calendar
[12:20]  <rwmjones> ocaml-Calendar-514a56b1c3e9c1e5139e81e0e2736ab8
[12:20]  <rwmjones> ocaml-Date-0b9d8d46ec722919ef4a2b4f7576d8f1
[12:20]  <rwmjones> ocaml-Period-d99e051c4c63bb80cd2586ea99584429
[12:20]  <rwmjones> ocaml-Printer-de9afc53dc6db958fdf5927dc86df9aa
[12:20]  <rwmjones> ocaml-Time-1b657b86bb0e7ba36acf02910897b2eb
[12:20]  <rwmjones> ocaml-Time_Zone-8d84727c6f398e1a8b710d8161e26479
[12:20]  <rwmjones> ocaml-calendar = 1.10-3
[12:21]  <tibbs> racor: I don't see why that is a consideration, sorry.
[12:21]  <tibbs> scop: Why do I not see those virtual kernel provides?
[12:21]  <rdieter> racor: no upgrades, just to get strict runtime dependencies satisfied.
[12:21]  <scop> tibbs, which distro version?
[12:21]  <tibbs> scop: rawhide.
[12:22]  <racor> tibbs: When using them in requires/provides you're in trouble
[12:22]  <scop> dunno, I see them on FC6
[12:22]  <tibbs> racor: I fail to see the trouble.
[12:22]  <scop> but not on F7
[12:22]  <rdieter> racor: true, it is kinda abusing Version, but I don't see the harm here.
[12:22]  <scop> weird
[12:23]  <tibbs> Ah, yes, those kernel provides follow the ocaml model precisely.
[12:23]  <tibbs> The version is even a hash of the interface.
[12:23]  <rdieter> rwmjones: as long as there is no chance of any real package ever being named, e.g., ocaml-Date, but that be avoided by using the suggested ocaml(Date) approach.
[12:24]  <racor> package X version N will provide o-X-123, package Y will require o-X-123, now package X is updated to N+1 which provides o-X-abc, o-X-123 will vanish and Requires: o-X-123 wil not be satisfied
[12:24]  <tibbs> That's precisely the issue that ocaml is facing.
[12:24]  <rwmjones> racor, yes, you can only upgrade ocaml libraries all at once
[12:24]  <rdieter> racor: we're trying to advocate using Requires/Provides: ocaml(module) = hash instead of  Requires/Provides: ocaml-module = hash
[12:25]  <rdieter> rwmjones: +1. racor,  yeah it sucks, but we're stuck with how ocaml works.
[12:25]  <racor> rdieter: I have no clue about ocaml, I want to understand which of these provides/requires are useful and which are not
[12:26]  <racor> ATM, these are not clear to me
[12:26]  <rdieter> racor: I haven't much a clue either, I'm taking rwmjones' word on it that ocaml has *very* strict runtime deps.
[12:26]  <rwmjones> racor, so a hypothetical library which needs ocaml-calendar's Calendar and Date would require precise versions of them (the ones it was compiled against)
[12:26]  <rwmjones> and the ocaml linker checks the hash of each
[12:26]  <rwmjones> when linking the whole program
[12:27]  <scop> what about toplevel or ocaml scripts?
[12:27]  <scop> they may require some "modules", but no version in particular?
[12:27]  <rwmjones> those are different, because they are compiled when they are run
[12:27]  <racor> rwmjones: My conclusion from this: ocaml(X) would be useless
[12:27]  <racor> or should be ocaml(X) = 12344
[12:27]  <racor> but then ocaml-X-12344 would be redundant
[12:28]  <rdieter> racor: the latter, exactly, that's what we've been advocating! :)
[12:28]  <rdieter> ocaml(module) = hash
[12:28]  <rwmjones> I think ocaml(X)=hash makes total sense
[12:28]  <rwmjones> & if people agree, I'll change that
[12:28]  <scop> rwmjones, so scripts etcthey might actually have use for let's say ocaml(Date) (without the hash)
[12:28]  <scop> s/etcthey/etc/
[12:28]  <rwmjones> scop, it's a good question - yes, maybe, but they still might fail if incompatible changes have been made
[12:28]  <rwmjones> anyway, there are hardly any ocaml scripts
[12:29]  <racor> rwmjones: Are these requires/provides automatically generated?
[12:29]  <rwmjones> yes, by:
[12:29]  <rwmjones> https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=239004
[12:29]  <rwmjones> the scripts attached to the ^^ bug
[12:29]  <scop> rwmjones, sure, but having it in the Provides on the right of "=" would satisfy those too
[12:29]  <rwmjones> comment 5 is the interesting one
[12:30]  <scop> my point is that if it's attached to the name of the Provides, they couldn't use it
[12:30]  <rwmjones> scop, yes
[12:31]  <rwmjones> scop, I think you're saying: a hypothetical ocaml script could require ocaml(Date) (without any hash)?  Yes, this could happen, but the script might still fail to run if changes had been made to Date - eg. if a function had a different number of arguments
[12:32]  <scop> rwmjones, of course
[12:32]  <scop> in that case there's not much else to do except to require (versioned) a main package or something
[12:32]  <tibbs> So, a different question: what's the %opt bit?
[12:33]  <tibbs> Are there fedora-supported platforms which don't have ocamlopt?
[12:33]  <scop> anyway, just thinking aloud, I think ocaml(foo) = hash is fine
[12:33]  <rwmjones> tibbs: ok, so ocamlopt is the native compiler for ocaml, but it's not been ported to all platforms that Fedora supports (eg. ppc64)
[12:33]  <rwmjones> tibbs, http://fedoraproject.org/wiki/PackagingDrafts/OCaml#head-14a9d22bff07b51f58d01bb4e79bcbe98e426a7c
[12:34]  <rwmjones> so on ppc64, we only get the bytecode compiler which is slower but still useful.  So spec files need to run on full platforms and bytecode-only platforms
[12:34]  <rdieter> cute.
[12:34]  <tibbs> I guess it beats an ExcludeArch:.
[12:35]  <rwmjones> with any luck ExcludeArch shouldn't be needed at all, because the bytecode compiler & interpreter runs everywhere
[12:36]  <rdieter> good.  update the draft, and I'll venture we would likely vote positively on this next week.
[12:37]  <rwmjones> ok, I've got 3 things then: don't call RPM recursively, ocaml(Module)=hash, look at integrating find-provides and find-requires with the internal dep generator.
[12:37]  <rdieter> that last one, don't worry too much about.
[12:38]  <rdieter> unless someone comes up with something clever in the meantime.
[12:38]  <rwmjones> thanks for your help everyone
[12:38]  <tibbs> Well, we can ask for those bits to be added.
[12:38]  <tibbs> Ideally we could get rpm to run through the find-whatever scripts in a directory.
[12:38]  <rdieter> tibbs: +1
[12:39]  <scop> comments about http://fedoraproject.org/wiki/PackagingDrafts/ScriptletSnippetsFixes ?
[12:41]  <rdieter> looks good.
[12:42]  <tibbs> Yes, that looks fine to me.
[12:43]  <rdieter> the more I think about it, since failed scriptlets pretty reliably borks rpm/database/transactions, wouldn't it make sense to push to make scriptlet failures non-fatal in rpm?
[12:44]  <scop> could very well be
[12:44]  <tibbs> I guess it would always be nice if bogus rpm bits were fixed, but I guess all we can do is hope.
[12:46]  <scop> anything else today?
[12:47]  <rdieter> nothing here.
[12:48]  <tibbs> I didn't have enough time to draft the "don't screw with the tarball more than you have to" draft.
[12:48]  <rdieter> I think that about sums it up. :)
[12:49]  <rdieter> and if you have to ask, then you're doing too much.
[12:49]  <rdieter> ok, let's call it then.