[OE-core] Fetch failure for source at kernel.org
Koen Kooi
koen at beagleboard.org
Thu Sep 22 11:27:32 UTC 2011
Op 22 sep 2011, om 12:20 heeft Richard Purdie het volgende geschreven:
> On Thu, 2011-09-22 at 10:28 +0200, Koen Kooi wrote:
>> Op 22 sep. 2011, om 09:03 heeft Richard Purdie het volgende
>> geschreven:
>>> On Thu, 2011-09-22 at 08:40 +0200, Koen Kooi wrote:
>>>> Op 22 sep. 2011, om 02:26 heeft Richard Purdie het volgende
>>>> geschreven:
>>>>> On Wed, 2011-09-21 at 21:49 +0200, Koen Kooi wrote:
>>>>>> Op 21 sep. 2011, om 21:43 heeft Mark Hatle het volgende
>>>>>> geschreven:
>>>>>>
>>>>>>> On 9/21/11 2:38 PM, Philip Balister wrote:
>>>>>>>> I'm finally trying to get started with oe-core. I'm using a
>>>>>>>> setup
>>>>>>>> created with the setup-script created by Koen. Everything
>>>>>>>> looks ok until
>>>>>>>> it tried to build cpufrequtils. The recipe tries to fetch the
>>>>>>>> source
>>>>>>>> from a git repo at kernel.org. Obviously, the fetch fails.
>>>>>>>>
>>>>>>>> What is odd, in the "good old days" I would expect this
>>>>>>>> config to fall
>>>>>>>> back and use the Angstrom source mirror, but apparently this
>>>>>>>> is not the
>>>>>>>> case with oe-core.
>>>>>>>>
>>>>>>>> Is this a bug or a feature? If this is a bug, is there a plan
>>>>>>>> to fix it?
>>>>>>>> If it is a feature, how are we supposed to do builds if
>>>>>>>> servers go away?
>>>>>>>> What do we do about GPL compliance?
>>>>>>>
>>>>>>> This is a feature, as people did not want oe-core tied to a
>>>>>>> given mirror.
>>>>>>
>>>>>> This is the "OE core doesn't generate versioned git tarballs"
>>>>>> problem
>>>>>> people keep talking about. I know I can edit each and every
>>>>>> recipe to
>>>>>> add ';rebasable=true', but I'd like a global solution before
>>>>>> the GPL
>>>>>> police starts looking at the angstrom source mirrors.
>>>>>
>>>>> Is this a versioned tarball problem or just the tarballs not being
>>>>> generated at all?
>>>>
>>>> versioned tarball problem, since the source mirror won't overwrite
>>>> files with the same name, so unversioned ones are both useless and
>>>> bandwidth wasting.
>>>
>>> They seem to be working perfectly well for Yocto...
>>>
>>> They're also not bandwidth wasting
>>
>> They are, since for the kernel you need to re-upload the 300MB
>> tarball
>> to the source mirror for mirroring to work, even if there were no
>> real
>> changes but bitbake repacked it. I know that versioned tarballs
>> aren't
>> terribly efficient either, but at least they are deterministic.
>
> Well, it depends on your perspective, I was looking at this from a
> user's point of view. The server's bandwidth is nothing compared to
> the
> users pulling the data.
>
>> The angstrom source mirror checks for duplicate filenames to avoid
>> introducing checksum changes due to upstream stupidity or corrupted
>> downloads.
>
> Fair enough but you could make an exception for the git scm tarballs
> (which follow a fairly identifiable pattern).
That still opens the door for people to upload "old" tarballs with
less revs in them. No solution is perfect, though.
>>> since the fetcher is efficient and
>>> will incrementally update something that is incomplete.
>>
>> Which won't work currently since kernel.org is down.
>
> This just means there aren't appropriate git:// -> git:// mappings in
> people's mirrors files (including Yocto). If git:// -> git:// mappings
> don't work, we should fix that but they should.
You mean something like git.kernel.org/scm/torvalds/linux-2.6.git ->
github.com/torvalds/linux.git ?
>>> Anyhow, this is the first time someone has explained that the mirror
>>> tarball improvements that were made to bitbake have not done
>>> everything
>>> they desire. If you want someone on the Yocto team to look at this
>>> I'd
>>> suggest a bug report or I'll take patches to bitbake (as always).
>>
>> But you do acknowledge the problem? FWIW, I've been arguing for a
>> global method of enabled versioned tarballs since I first started
>> using oe-core (called differently back then). I know linux-yocto
>> stretches the fetcher to its limits, but I'd like this change for all
>> the recipes using a single git tree with a single srcrev.
>
> Now someone has explained the issue, yes, I can see why it is causing
> problems. I do think some of them are of people's own choosing but I'm
> trying to be flexible and not make judgement on that.
>
> So we can do something along the lines of what you after but there are
> the following considerations:
>
> a) The versioned tarballs do need to be different to what we had
> before
> in that the tarball will be of a .git directory containing the git
> metadata, not just a checkout. Why? This is so we can incrementally
> update a git repo if the user changes the source revision as one
> example. We're dealing with the git fetcher and limiting ourselves
> to a
> flat one dimension doesn't make sense.
Agreed on that. The bitbake patch I sent does at least do that :)
> b) We need to agree what order the tarballs on the server should be
> searched for. The "obvious" order would be:
>
> 1. Specific Revision X tarball
> 2. generic mirror tarball
> 3. git clone
>
> The problems come about when we have an existing git checkout which
> doesn't contain the revision we want.
There currently is a bug in the fetcher that makes it hard to use now
that kernel.org is down. The situation:
I have a recipe that pulls from git (e.g. cpufrequtils.git from
kernel.org) with SRCREV fixed to e.g. deadbeef. DL_DIR/git/
git.kernel.org.utils.cpufrequtils has revision deadbeef. When I do a -
c fetch -f it will try to do an update and fail since kernel.org is
down. I would have expected it to check the existing bare clone for
deadbeef first and not try updating if it is present.
Anyway, I agree on the search order above.
> Currently we can just update and
> assume that will bring in the revision. If we now support people doing
> rebases and other things, we now at least in theory have to:
>
> 1. See if the revision exists locally
> 2. Try pulling
> 3. If that doesn't work look for a versioned tarball
> 4. Blow away all fetcher git status from DL_DIR
> 5. Extract the tarball
Since git supports local fetches the above can be:
1) see if rev exists
2) try pulling
3) try versioned tarball
4) extract tarball into tmpdir, fetch objects into DL_DIR/git2 repo
That would stop things from being blown away. It does allow the
versioned snapshots to differ, but they will always have the rev they
were versioned with.
> My big concern with this is rather than having some general
> archictecture and standard way of doing this, the fetcher once again
> becomes a set of special case if A do B but if C do D first then do E
> but don't forget to do A if Z happens type code.
I know virtually nothing of the fetcher code, but I think treating
every tarball as a local mirror that gets fetched into DL_DIR/git2/
repodir would avoid a lot of special casing.
> So what I'm saying is I don't want the fetcher to become the
> unmaintainable mess the that the code paths in fetch1 were. I don't
> honestly know how to add a code path like the above and avoid this :(
>
> The patch on the bitbake list doesn't consider any of this
> complexity or
> the corner cases
Sadly it's the best thing I can accomplish with my python skills :( It
does solve my #1 need, which is an easy way (ls | grep) to check for
GPL compliance.
regards,
Koen
More information about the Openembedded-core
mailing list