tests/channels.scm: Test failures building on Debian i386 or armhf with libgit2-dev 1.0.1

  • Open
  • quality assurance status badge
Details
3 participants
  • Ludovic Courtès
  • Vagrant Cascadian
  • Vagrant Cascadian
Owner
unassigned
Submitted by
Vagrant Cascadian
Severity
normal
V
V
Vagrant Cascadian wrote on 23 Nov 2020 20:55
(address . bug-guix@gnu.org)
87wnybhmpq.fsf@yucca
Fun With More Debian packaging test suite failures...

Updating the build dependency to libgit2-dev >= 1.0.1 (which pulls in a
similar version to what guix is using) fixes test suite failures ... but
only on the amd64 architecture. The same tests pass Using an older
version of libgit2-dev (0.28). FWIW, this is building with guile-3.0.

The newer version of libgit2-dev introduces several test suite failures
on i386 (and armhf) architectures, but the tests work fine on
amd64. from tests/channels.log on i386:

test-name: latest-channel-instances #:validate-pull
location: /build/guix-M9TbTs/guix-1.2.0/tests/channels.scm:202
source:
+ (test-equal
+ "latest-channel-instances #:validate-pull"
+ 'descendant
+ (let/ec
+ return
+ (with-temporary-git-repository
+ directory
+ '((add "a.txt" "A")
+ (commit "first commit")
+ (add "b.scm" "#t")
+ (commit "second commit"))
+ (with-repository
+ directory
+ repository
+ (let* ((commit1 (find-commit repository "first"))
+ (commit2 (find-commit repository "second"))
+ (spec (channel
+ (url (string-append "file://" directory))
+ (name 'foo)))
+ (new (channel
+ (inherit spec)
+ (commit (oid->string (commit-id commit2)))))
+ (old (channel
+ (inherit spec)
+ (commit (oid->string (commit-id commit1))))))
+ (define (validate-pull channel current commit relation)
+ (return
+ (and (eq? channel old)
+ (string=?
+ (oid->string (commit-id commit2))
+ current)
+ (string=?
+ (oid->string (commit-id commit1))
+ commit)
+ relation)))
+ (with-store
+ store
+ (latest-channel-instances
+ store
+ (list old)
+ #:current-channels
+ (list new)
+ #:validate-pull
+ validate-pull)))))))
expected-value: descendant
actual-value: #f
actual-error:
+ (git-error
+ #<<git-error> code: -1 message: "invalid version 0 on git_proxy_options" class: 3>)
result: FAIL

test-name: channel-news, no news
location: /build/guix-M9TbTs/guix-1.2.0/tests/channels.scm:312
source:
+ (test-equal
+ "channel-news, no news"
+ '()
+ (with-temporary-git-repository
+ directory
+ '((add "a.txt" "A") (commit "the commit"))
+ (with-repository
+ directory
+ repository
+ (let ((channel
+ (channel
+ (url (string-append "file://" directory))
+ (name 'foo)))
+ (latest (reference-name->oid repository "HEAD")))
+ (channel-news-for-commit
+ channel
+ (oid->string latest))))))
expected-value: ()
actual-value: #f
actual-error:
+ (git-error
+ #<<git-error> code: -1 message: "invalid version 0 on git_proxy_options" class: 3>)
result: FAIL

test-name: latest-channel-instances, missing introduction for 'guix'
location: /build/guix-M9TbTs/guix-1.2.0/tests/channels.scm:413
source:
+ (test-assert
+ "latest-channel-instances, missing introduction for 'guix'"
+ (with-temporary-git-repository
+ directory
+ '((add "a.txt" "A")
+ (commit "first commit")
+ (add "b.scm" "#t")
+ (commit "second commit"))
+ (with-repository
+ directory
+ repository
+ (let* ((commit1 (find-commit repository "first"))
+ (commit2 (find-commit repository "second"))
+ (channel
+ (channel
+ (url (string-append "file://" directory))
+ (name 'guix))))
+ (guard (c ((formatted-message? c)
+ (->bool
+ Initialized empty Git repository in /tmp/guix-directory.82hhlD/.git/
[master (root-commit) 936aa16] first commit
1 file changed, 1 insertion(+)
create mode 100644 a.txt
[master 6c20741] second commit
1 file changed, 1 insertion(+)
create mode 100644 b.scm
gpg: keybox '/tmp/guix-directory.RpLKeD/pubring.kbx' created
gpg: /tmp/guix-directory.RpLKeD/trustdb.gpg: trustdb created
gpg: key 771F49CBFAAE072D: public key "Ed Two-Fifty <ludo+test-ecc@chbouib.org>" imported
gpg: Total number processed: 1
gpg: imported: 1
gpg: key 771F49CBFAAE072D: "Ed Two-Fifty <ludo+test-ecc@chbouib.org>" not changed
gpg: key 771F49CBFAAE072D: secret key imported
gpg: Total number processed: 1
gpg: unchanged: 1
gpg: secret keys read: 1
gpg: secret keys imported: 1
gpg: key 82240EDCAB80DA83: public key "Charlie Guix <charlie@example.org>" imported
gpg: Total number processed: 1
gpg: imported: 1
gpg: key 82240EDCAB80DA83: "Charlie Guix <charlie@example.org>" not changed
gpg: key 82240EDCAB80DA83: secret key imported
gpg: Total number processed: 1
gpg: unchanged: 1
gpg: secret keys read: 1
gpg: secret keys imported: 1
Initialized empty Git repository in /tmp/guix-directory.Zkbh5G/.git/
[master (root-commit) d174761] first commit
3 files changed, 12 insertions(+)
create mode 100644 .guix-authorizations
create mode 100644 .guix-channel
create mode 100644 signer.key
[master 9c9c798] second commit
1 file changed, 1 insertion(+)
create mode 100644 random
(string-contains
+ (formatted-message-string c)
+ "introduction"))))
+ (with-store
+ store
+ (latest-channel-instances store (list channel))
+ #f))))))
actual-value: #f
actual-error:
+ (git-error
+ #<<git-error> code: -1 message: "invalid version 0 on git_proxy_options" class: 3>)
result: FAIL


live well,
vagrant
-----BEGIN PGP SIGNATURE-----

iHQEARYKAB0WIQRlgHNhO/zFx+LkXUXcUY/If5cWqgUCX7wTwQAKCRDcUY/If5cW
qgJmAQClXqkc++GMThy0NzVI/RsMYykjn5ItJRMH9oWzM4nE3QD2Io1SQOuJiojG
SPd/lPwKWLDIzlZWIclP/eFlQyjMDw==
=V81c
-----END PGP SIGNATURE-----

L
L
Ludovic Courtès wrote on 26 Nov 2020 22:45
(name . Vagrant Cascadian)(address . vagrant@reproducible-builds.org)(address . 44827@debbugs.gnu.org)
877dq723nn.fsf@gnu.org
Hi,

Vagrant Cascadian <vagrant@reproducible-builds.org> skribis:

Toggle quote (5 lines)
> Updating the build dependency to libgit2-dev >= 1.0.1 (which pulls in a
> similar version to what guix is using) fixes test suite failures ... but
> only on the amd64 architecture. The same tests pass Using an older
> version of libgit2-dev (0.28). FWIW, this is building with guile-3.0.

[...]

Toggle quote (4 lines)
> actual-error:
> + (git-error
> + #<<git-error> code: -1 message: "invalid version 0 on git_proxy_options" class: 3>)

This error is the sign of an ABI mismatch issue between Guile-Git and
libgit2 (like Guile-Git assuming a wrong layout for one of the C structs
exposed by libgit2).

Which version of Guile-Git are you using? Do its tests pass?

In particular, Guile-Git 0.4.0 has this thing compile-time check to make
sure it matches the ABI of the underlying libgit2 version (0.28 or 1.0):


So if you change libgit2 versions, you need to rebuild Guile-Git.

HTH,
Ludo’.
V
V
Vagrant Cascadian wrote on 27 Nov 2020 08:22
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 44827@debbugs.gnu.org)
87eekfgt73.fsf@yucca
On 2020-11-26, Ludovic Courtès wrote:
Toggle quote (19 lines)
> Vagrant Cascadian <vagrant@reproducible-builds.org> skribis:
>
>> Updating the build dependency to libgit2-dev >= 1.0.1 (which pulls in a
>> similar version to what guix is using) fixes test suite failures ... but
>> only on the amd64 architecture. The same tests pass Using an older
>> version of libgit2-dev (0.28). FWIW, this is building with guile-3.0.
>
> [...]
>
>> actual-error:
>> + (git-error
>> + #<<git-error> code: -1 message: "invalid version 0 on git_proxy_options" class: 3>)
>
> This error is the sign of an ABI mismatch issue between Guile-Git and
> libgit2 (like Guile-Git assuming a wrong layout for one of the C structs
> exposed by libgit2).
>
> Which version of Guile-Git are you using? Do its tests pass?

0.4.0, tests passed when built against libgit2 0.28...


Toggle quote (7 lines)
> In particular, Guile-Git 0.4.0 has this thing compile-time check to make
> sure it matches the ABI of the underlying libgit2 version (0.28 or 1.0):
>
> https://gitlab.com/guile-git/guile-git/-/commit/2b4d077c6f55648f42af31ae783ca4d8c1c5f1de
>
> So if you change libgit2 versions, you need to rebuild Guile-Git.

Oh, this will be fun to keep track of in debian... :/ :)

Yeah, the guile-git was built with the older 0.28 version of libgit2-dev
(although also with all the architectures).

Interestingly enough, guix pull completely fails with the older
libgit2-dev version installed, but installing the new version it works
fine.

I'll build a newer guile-git version and force it to use the newer
libgit2-dev package, and see if that fixes the issues.

Then I'll have to come up with complicated versioned dependencies to
ensure it keeps working in Debian and it becomes detectable when it
needs to be rebuilt...


live well,
vagrant
-----BEGIN PGP SIGNATURE-----

iHUEARYKAB0WIQRlgHNhO/zFx+LkXUXcUY/If5cWqgUCX8CpMAAKCRDcUY/If5cW
qp6VAP4qsJ2/hrqJW5SeLTde69ZeEKiaLUJzTrsjDItC59hFTwEA2X3hsv1n20Gg
O3qlYmbuwBSCAguNaB35LA21xf3JDgg=
=RbGO
-----END PGP SIGNATURE-----

L
L
Ludovic Courtès wrote on 27 Nov 2020 11:02
(name . Vagrant Cascadian)(address . vagrant@debian.org)(address . 44827@debbugs.gnu.org)
87ft4vw20h.fsf@gnu.org
Hi,

Vagrant Cascadian <vagrant@debian.org> skribis:

Toggle quote (2 lines)
> On 2020-11-26, Ludovic Courtès wrote:

[...]

Toggle quote (9 lines)
>> In particular, Guile-Git 0.4.0 has this thing compile-time check to make
>> sure it matches the ABI of the underlying libgit2 version (0.28 or 1.0):
>>
>> https://gitlab.com/guile-git/guile-git/-/commit/2b4d077c6f55648f42af31ae783ca4d8c1c5f1de
>>
>> So if you change libgit2 versions, you need to rebuild Guile-Git.
>
> Oh, this will be fun to keep track of in debian... :/ :)

Note that the problem is the same for packages written in C since it’s
an ABI change in libgit2. (Except that in C perhaps you get a SONAME
mismatch at load time rather than an error at run time…)

Toggle quote (14 lines)
> Yeah, the guile-git was built with the older 0.28 version of libgit2-dev
> (although also with all the architectures).
>
> Interestingly enough, guix pull completely fails with the older
> libgit2-dev version installed, but installing the new version it works
> fine.
>
> I'll build a newer guile-git version and force it to use the newer
> libgit2-dev package, and see if that fixes the issues.
>
> Then I'll have to come up with complicated versioned dependencies to
> ensure it keeps working in Debian and it becomes detectable when it
> needs to be rebuilt...

Heheh. Let me know how it goes!

Thanks,
Ludo’.
V
V
Vagrant Cascadian wrote on 27 Nov 2020 23:20
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 44827@debbugs.gnu.org)
871rgeh26b.fsf@yucca
On 2020-11-27, Ludovic Courtès wrote:
Toggle quote (32 lines)
> Vagrant Cascadian <vagrant@debian.org> skribis:
>> On 2020-11-26, Ludovic Courtès wrote:

>>> In particular, Guile-Git 0.4.0 has this thing compile-time check to make
>>> sure it matches the ABI of the underlying libgit2 version (0.28 or 1.0):
>>>
>>> https://gitlab.com/guile-git/guile-git/-/commit/2b4d077c6f55648f42af31ae783ca4d8c1c5f1de
>>>
>>> So if you change libgit2 versions, you need to rebuild Guile-Git.
>>
>> Oh, this will be fun to keep track of in debian... :/ :)
>
> Note that the problem is the same for packages written in C since it’s
> an ABI change in libgit2. (Except that in C perhaps you get a SONAME
> mismatch at load time rather than an error at run time…)
>
>> Yeah, the guile-git was built with the older 0.28 version of libgit2-dev
>> (although also with all the architectures).
>>
>> Interestingly enough, guix pull completely fails with the older
>> libgit2-dev version installed, but installing the new version it works
>> fine.
>>
>> I'll build a newer guile-git version and force it to use the newer
>> libgit2-dev package, and see if that fixes the issues.
>>
>> Then I'll have to come up with complicated versioned dependencies to
>> ensure it keeps working in Debian and it becomes detectable when it
>> needs to be rebuilt...
>
> Heheh. Let me know how it goes!

Rebuilding guile-git against the newer libgit2 seems to resolve the
issues; the test suites passed on amd64, armhf, i386 (the only platforms
currently buildable on Debian).


live well,
vagrant
-----BEGIN PGP SIGNATURE-----

iHUEARYKAB0WIQRlgHNhO/zFx+LkXUXcUY/If5cWqgUCX8F7vAAKCRDcUY/If5cW
qkfQAP9juCfdG0XGqxLcO3L1C6H/gp/KhJ2zl7j3DYSUPKHiCwEA7JCxB9bP5FNO
5lJZd6WkNH/17i6XyMXBb7w988E2Mws=
=tJWL
-----END PGP SIGNATURE-----

?