Hello, I just submitted a patch inside the bitbake fetcher to display all the missing checksum at once instead of only one.
For the moment, I have no better solution, let's see what bitbake folks tell us about that. On Fri, 31 Mar 2023 at 07:32, Frederic Martinsons via lists.openembedded.org <frederic.martinsons=gmail....@lists.openembedded.org> wrote: > Hello, > > The multiple Cargo.lock seems totally valid, a project can have multiple > binaries provided (which is the case for Solana cli suite) so I'll submit a > new v6 of my series to reflect that, I just have to ignored specify dirs > like .git (no use to walk inside it) or .pc (can contains a patched > Cargo.lock that would be redundant and syntaxically invalid ) > > I'll also override the crate names with their version for all the crates > found. > > For the chicken and eggs issue, I need to think more of it (maybe make > bitbake print the list of all missing checksum would be enough) and, in > order to not delay this series, I'll submit a separate bitbake patch if I > manage to find something suitable. > > Many thanks for the comments Martin. > > Le jeu. 30 mars 2023, 23:15, Martin Jansa <martin.ja...@gmail.com> a > écrit : > >> I've added the updated .inc files to meta-webosose fork if it's easier to >> see there: >> >> https://github.com/shr-project/meta-webosose/commits/master-2023-03-30 >> (top 2 commits) >> >> this checksum mismatch is also the reason for that ugly exception as >> explained in top commit, it's race-condition between sugar.do_unpack and >> solana-cli.do_fetch where sugar has right arrayvec 0.7.2 with right >> checksum in do_unpack, while solana-cli renames it to _bad-checksum_ >> suffix, because solana-cli looks for checksum of arrayvec 0.7.1. >> >> I've tried to manually add name= param to verify this, but there are too >> many :), so I'll update the bbclass to always add name with version even if >> it doesn't see duplicated crates (and then this can be improved if multiple >> Cargo.lock files really need to be supported). >> >> I honestly don't know, I've was only working on these solana recipes for >> short time and wanted to offer them more as strange example. >> >> Cheers, >> >> On Thu, Mar 30, 2023 at 10:22 PM Martin Jansa via lists.openembedded.org >> <Martin.Jansa=gmail....@lists.openembedded.org> wrote: >> >>> On Thu, Mar 30, 2023 at 10:07 PM Frédéric Martinsons < >>> frederic.martins...@gmail.com> wrote: >>> >>>> By the way, about this "chickens and eggs" problem, isn't it the same >>>> for a regular recipe you just upgraded? >>>> >>> >>> I don't know, I haven't upgraded a recipe with crates yet :) >>> >>> It's just this time I was aware that the .inc file will need to be >>> refreshed and it wasn't obvious at first that easiest way to avoid do_fetch >>> issue blocking .inc refresh is to remove all crates first by emptying .inc >>> file. >>> >>> Personnaly, when I update a recipe, I let bitbake tell me what is the >>>> new checksum expected and put it the recipe (as the error message says). >>>> >>> >>> For regular recipes with a few checksum I do the same. But it doesn't >>> scale here as you mention bellow. >>> as it reported only the first wrong checksum from MANY. >>> >>> But I'm aware this is not exactly the same, since a cargo based recipe >>>> could contain a ton of crate:// uri and if you apply this method, you have >>>> to copy the new checksum one by one, bitbake error after another... >>>> >>>> Don't know how to make this better and I plead guilty for not >>>> mentioning that in a dedicated commit message. >>>> >>> >>> Better late than never, you can include it in v6 of this patch (I have >>> read the git log of the .bbclass before going to refresh the .inc files, so >>> others might notice it there as well). >>> >>> Of course, if someone come up with a smoothier way of doing this, I'll >>>> make a new patch. >>>> >>> >>> I think I found what the other issue with arrayvec create was: >>> >>> meta-webos/recipes-upstreamable/solana/solana-crates.inc: crate:// >>> crates.io/arrayvec/0.7.2 \ >>> meta-webos/recipes-upstreamable/solana/solana-crates.inc:SRC_URI[arrayvec.sha256sum] >>> = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" >>> meta-webos/recipes-upstreamable/solana/solana-crates.inc: crate:// >>> crates.io/arrayvec/0.7.1 \ >>> meta-webos/recipes-upstreamable/solana/solana-crates.inc:SRC_URI[arrayvec.sha256sum] >>> = "be4dc07131ffa69b8072d35f5007352af944213cde02545e2103680baed38fcd" >>> meta-webos/recipes-upstreamable/sugar/sugar-crates.inc: crate:// >>> crates.io/arrayvec/0.7.2 \ >>> meta-webos/recipes-upstreamable/sugar/sugar-crates.inc:SRC_URI[arrayvec.sha256sum] >>> = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" >>> >>> So different Cargo.lock files included in the same ${S} have different >>> version, but in this case it didn't set different name parameter, probably >>> because different Cargo.lock files are processed separately? >>> >>> Thanks >>> >>> Le jeu. 30 mars 2023, 21:50, Frédéric Martinsons < >>>> frederic.martins...@gmail.com> a écrit : >>>> >>>>> 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 (#179468): https://lists.openembedded.org/g/openembedded-core/message/179468 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] -=-=-=-=-=-=-=-=-=-=-=-