echo > recipes-upstreamable/sugar/sugar-crates.inc

before running "bitbake -c update_crates"

seems like easiest solution to let it regenerate the .inc file (or remove
"require" and then add it back after refresh).

But there is still something strange in this solana, after refreshing the
.inc files in sugar as well as solana-*, it's failing with:

NOTE: recipe sugar-1.1.0-r0: task do_unpack: Started
ERROR: sugar-1.1.0-r0 do_unpack: Error executing a python function in
exec_func_python() autogenerated:

The stack trace of python calls that resulted in this exception/failure was:
File: 'exec_func_python() autogenerated', lineno: 2, function: <module>
     0001:
 *** 0002:base_do_unpack(d)
     0003:
File:
'/OE/lge/build/webos/mickledore/oe-core/meta/classes-global/base.bbclass',
lineno: 160, function: base_do_unpack
     0156:        return
     0157:
     0158:    try:
     0159:        fetcher = bb.fetch2.Fetch(src_uri, d)
 *** 0160:        fetcher.unpack(d.getVar('WORKDIR'))
     0161:    except bb.fetch2.BBFetchException as e:
     0162:        bb.fatal("Bitbake Fetcher Error: " + repr(e))
     0163:}
     0164:
File: '/OE/lge/build/webos/mickledore/bitbake/lib/bb/fetch2/__init__.py',
lineno: 1882, function: unpack
     1878:
     1879:            if ud.lockfile:
     1880:                lf = bb.utils.lockfile(ud.lockfile)
     1881:
 *** 1882:            ud.method.unpack(ud, root, self.d)
     1883:
     1884:            if ud.lockfile:
     1885:                bb.utils.unlockfile(lf)
     1886:
File: '/OE/lge/build/webos/mickledore/bitbake/lib/bb/fetch2/crate.py',
lineno: 84, function: unpack
     0080:        """
     0081:        Uses the crate to build the necessary paths for cargo to
utilize it
     0082:        """
     0083:        if ud.type == 'crate':
 *** 0084:            return self._crate_unpack(ud, rootdir, d)
     0085:        else:
     0086:            super(Crate, self).unpack(ud, rootdir, d)
     0087:
     0088:    def _crate_unpack(self, ud, rootdir, d):
File: '/OE/lge/build/webos/mickledore/bitbake/lib/bb/fetch2/crate.py',
lineno: 113, function: _crate_unpack
     0109:            # ensure we've got these paths made
     0110:            bb.utils.mkdirhier(cargo_bitbake)
     0111:
     0112:            # generate metadata necessary
 *** 0113:            with open(thefile, 'rb') as f:
     0114:                # get the SHA256 of the original tarball
     0115:                tarhash = hashlib.sha256(f.read()).hexdigest()
     0116:
     0117:            metadata['files'] = {}
Exception: FileNotFoundError: [Errno 2] No such file or directory:
'/OE/lge/build/webos/mickledore/downloads/arrayvec-0.7.2.crate'

ERROR: Logfile of failure stored in:
/OE/lge/build/webos/mickledore/BUILD/work/qemux86_64-webos-linux/sugar/1.1.0-r0/temp/log.do_unpack.2600442
NOTE: recipe sugar-1.1.0-r0: task do_unpack: Failed

...

NOTE: recipe solana-cli-1.14.5-r0: task do_fetch: Started
WARNING: solana-cli-1.14.5-r0 do_fetch: Checksum failure encountered with
download of crate://crates.io/arrayvec/0.7.2 - will attempt other sources
if available
ERROR: solana-cli-1.14.5-r0 do_fetch: Fetcher failure for URL: '
https://crates.io/api/v1/crates/arrayvec/0.7.2/download'. Checksum mismatch!
File: '/OE/lge/build/webos/mickledore/downloads/arrayvec-0.7.2.crate.tmp'
has sha256 checksum
'8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6' when
'be4dc07131ffa69b8072d35f5007352af944213cde02545e2103680baed38fcd' was
expected
If this change is expected (e.g. you have upgraded to a new version without
updating the checksums) then you can use these lines within the recipe:
SRC_URI[arrayvec.sha256sum] =
"8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
Otherwise you should retry the download and/or check with upstream to
determine if the file has become corrupted or otherwise unexpectedly
modified.

This is just FYI in case you can see what's going on right away, I'll
continue to debug it from my end as well.

On Thu, Mar 30, 2023 at 9:50 PM Frédéric Martinsons <
frederic.martins...@gmail.com> wrote:

> Well I see what you mean, I'll take a look at your example to try to find
> out if multiple Cargo.lock could be expected.
>
> And for your second remark, yes, there is a chicken and eggs issue for
> updating crates checksum from scratch.
> You didn't miss anything, I came across this when updating crates checksum
> that was "pristine"
>  and I only manage to execute update_crates by locally patching
> bitbake/lib/bb/fetch2/crate.py for
> recommends_checksum method to return False .
> I'm aware that is not ideal but I don't know how to make this better
> (maybe make do_update_crates
> after do_fetch instead of after do_patch ? )
>
>
> Le jeu. 30 mars 2023, 21:23, Martin Jansa <martin.ja...@gmail.com> a
> écrit :
>
>> I don't remember the exact details now, but when I was working on
>> updating solana recipes to use this
>>
>> https://github.com/webosose/meta-webosose/commit/9bdfae7988077d0211eeee79cc339d0770cd86b4
>>
>> the S was pointing to just some subdirectory and multiple Cargo.locks
>> files were parsed in other directories as well, that's why I was adding
>>
>> https://git.openembedded.org/openembedded-core/commit/meta/classes-recipe/cargo-update-recipe-crates.bbclass?id=7636a2b8080521ed2ad54b0edce47a8742a12d58
>>
>> in the end I've changed to use the root directory in S and just
>> set CARGO_SRC_DIR to right subdirectory to build.
>>
>> I don't have much experience with crates other than these solana recipes,
>> but isn't there some valid use-case for multiple Cargo.locks?
>> I assume Alex in original implementation didn't use the os.walk just to
>> make it more complicated :).
>>
>> And FWIW when trying to regenerate these .inc files with current master
>> and with:
>> $ bitbake -c update_crates solana-keygen
>> it fails with:
>> ERROR: solana-keygen-1.14.5-r0 do_fetch: No checksum specified for
>> '/OE/lge/build/webos/mickledore/downloads/Inflector-0.11.4.crate', please
>> add at least one to the recipe:
>> SRC_URI[Inflector.sha256sum] =
>> "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3"
>> ERROR: solana-keygen-1.14.5-r0 do_fetch: Bitbake Fetcher Error:
>> NoChecksumError('Missing SRC_URI checksum', '
>> https://crates.io/api/v1/crates/Inflector/0.11.4/download')
>>
>> Isn't it an chicken&egg issue now when do_fetch enforces checksums to be
>> used? Or am I just missing some of the pending changes or just using it
>> incorrectly?
>>
>>
>> On Thu, Mar 30, 2023 at 6:34 PM Alex Kiernan <alex.kier...@gmail.com>
>> wrote:
>>
>>> On Thu, Mar 30, 2023 at 4:45 PM <frederic.martins...@gmail.com> wrote:
>>> >
>>> > From: Frederic Martinsons <frederic.martins...@gmail.com>
>>> >
>>> > There is no need to do such things, Cargo.lock file
>>> > has to be at the root of CARGO_LOCK_SRC_DIR.
>>> > This avoid finding other possible Cargo.lock that
>>> > would be in subdir (for example if a patch is applied
>>> > on the recipe, we can have .pc subdir in S and a Cargo.lock
>>> > can be there)
>>> >
>>> > Signed-off-by: Frederic Martinsons <frederic.martins...@gmail.com>
>>> > ---
>>> >  .../cargo-update-recipe-crates.bbclass               | 12 ++++++++----
>>> >  1 file changed, 8 insertions(+), 4 deletions(-)
>>> >
>>> > diff --git a/meta/classes-recipe/cargo-update-recipe-crates.bbclass
>>> b/meta/classes-recipe/cargo-update-recipe-crates.bbclass
>>> > index daa363b0dd..549cfe627e 100644
>>> > --- a/meta/classes-recipe/cargo-update-recipe-crates.bbclass
>>> > +++ b/meta/classes-recipe/cargo-update-recipe-crates.bbclass
>>> > @@ -68,10 +68,14 @@ def get_crates(f):
>>> >  import os
>>> >  crates = "# Autogenerated with 'bitbake -c update_crates ${PN}'\n\n"
>>> >  found = False
>>> > -for root, dirs, files in os.walk('${CARGO_LOCK_SRC_DIR}'):
>>> > -    for file in files:
>>> > -        if file == 'Cargo.lock':
>>> > -            crates += get_crates(os.path.join(root, file))
>>> > +for file in os.listdir('${CARGO_LOCK_SRC_DIR}'):
>>> > +    if file == 'Cargo.lock':
>>> > +        try:
>>> > +            cargo_lock_path = os.path.join('${CARGO_LOCK_SRC_DIR}',
>>> file)
>>> > +            crates += get_crates(cargo_lock_path)
>>> > +        except Exception as e:
>>> > +            raise ValueError("Cannot parse '%s'" % cargo_lock_path)
>>> from e
>>> > +        else:
>>> >              found = True
>>> >  if not found:
>>> >      raise ValueError("Unable to find Cargo.lock in
>>> ${CARGO_LOCK_SRC_DIR}")
>>>
>>> Isn't this just a long-winded version of something like this
>>> (completely untested):
>>>
>>> diff --git a/meta/classes-recipe/cargo-update-recipe-crates.bbclass
>>> b/meta/classes-recipe/cargo-update-recipe-crates.bbclass
>>> index daa363b0dd65..22ddcfa5c1e3 100644
>>> --- a/meta/classes-recipe/cargo-update-recipe-crates.bbclass
>>> +++ b/meta/classes-recipe/cargo-update-recipe-crates.bbclass
>>> @@ -67,14 +67,7 @@ def get_crates(f):
>>>
>>>  import os
>>>  crates = "# Autogenerated with 'bitbake -c update_crates ${PN}'\n\n"
>>> -found = False
>>> -for root, dirs, files in os.walk('${CARGO_LOCK_SRC_DIR}'):
>>> -    for file in files:
>>> -        if file == 'Cargo.lock':
>>> -            crates += get_crates(os.path.join(root, file))
>>> -            found = True
>>> -if not found:
>>> -    raise ValueError("Unable to find Cargo.lock in
>>> ${CARGO_LOCK_SRC_DIR}")
>>> +crates += get_crates(os.path.join("${CARGO_LOCK_SRC_DIR}",
>>> "Cargo.lock"))
>>>  open("${TARGET_FILE}", 'w').write(crates)
>>>  EOF
>>>
>>> --
>>> Alex Kiernan
>>>
>>> 
>>>
>>>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#179356): 
https://lists.openembedded.org/g/openembedded-core/message/179356
Mute This Topic: https://lists.openembedded.org/mt/97953740/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to