Hi Simon, Simon Tournier <zimon.touto...@gmail.com> writes:
> Discussing in #62153 [1], it is noticed that Disarchive is not working > as expected. To be fair, Oleg is experimenting with reusing some internal Disarchive code in another context. That experiment didn’t go well, and Oleg came to a good (IMO) conclusion: try the tarball code from Gash-Utils. (The longer story is that the tarball code in Disarchive is nicer, but it is specialized for the Disarchive use case. Sometime I might de-specialize it and use it in Gash-Utils, but Gash-Utils has difficult constraints due to its use during bootstrapping. We’ll see.) > scheme@(guile-user)> ,module(disarchive assemblers tarball) > scheme@(disarchive assemblers tarball)> (assemble-tarball > (disassemble-tarball "my-gnu.tar") ".") > > [...] > > $ tar tf > sha256/7a94f577d3235a5ab954f0bc56b15fbe5518c56354c4235574618f6e666f6a38 > > [...] > > gnu/build/accounts.go > tar: Unexpected EOF in archive > tar: Error is not recoverable: exiting now The ‘assemble-tarball’ procedure assumes (without checking) that it has access to a copy of its input in the “workspace” directory. Normally, it would be called from the generic ‘assemble’ procedure, which ensures this (and also checks the output). It probably just wrote all the tarball headers without the file contents, producing a corrupt tarball. Indeed, if you set up logging (using ‘%disarchive-log-port’) it prints a bunch of “Ignoring irregular file” warnings. > Well, I am not sure to understand why the name “my-gnu”. It’s just ‘(basename "my-gnu.tar" ".tar")’. The names are designed to aid a human while debugging. To my knowledge, Disarchive doesn’t use them for anything. You can use set the name by passing “--name” to the ‘disassemble’ subcommand. > And then I do not understand how to use “disarchive assemble”; I get > something like: > > Checking my-gnu digest... fail > Output is incorrect > > What do I do wrong? You need to put “gnu” in a directory by itself. First, $ mkdir base Then either $ mv gnu base/ or $ tar -C base -xf my-gnu.tar Then you can run $ disarchive assemble base spec In other words, it’s your old nemesis: https://lists.gnu.org/archive/html/guix-devel/2023-03/msg00063.html :) (I tease only because it’s confused me many times too!) -- Tim