kornelski / cargo-deb

Make Debian packages directly from Rust/Cargo projects
https://lib.rs/cargo-deb
MIT License
432 stars 52 forks source link

Error "malformed-deb-archive newer compressed control.tar.xz" from Lintian on Ubuntu Xenial with cargo-deb > 1.28.0. #12

Closed ximon18 closed 2 years ago

ximon18 commented 2 years ago

See: https://github.com/NLnetLabs/krill/runs/4803140070?check_suite_focus=true#step:13:28

This used to work with cargo-deb 1.28.0.

I tried using --fast to disable XZ compression but that didn't help.

What did help was compiling with --no-default-features to disable the lzma feature.

As there are no release notes that I'm aware of for cargo-deb I tried looking through the diff of tag 1.34.2 to tag 1.28.0 and I see a couple of references to LZMA and XZ but I haven't however tried divide and conquer to find out exactly which release since 1.28.0 introduced the problem.

However with the default features disabled cargo-deb now takes almost twice as long, roughly 15 minutes instead of 8 minutes for my build on GH Actions.

kornelski commented 2 years ago

I've added --system-xz switch that replaces our xz2 library with xz command-line. Does this help?

ximon18 commented 2 years ago

Thanks @kornelski, I'm not working today, I'll test it as soon as I can and get back to you.

ximon18 commented 2 years ago

Hi @kornelski,

Unfortunately that doesn't seem to help. I updated our GitHub Actions workflow to install cargo-deb 1.35.0 and to use the --system-xz argument and Lintian still reports the error when running on Ubuntu Xenial.

Ximon

kornelski commented 2 years ago

Good, at least it's not caused by the compression library :)

ximon18 commented 2 years ago

Update: The work around of compiling without the lzma feature no longer works due to issue #43.

ximon18 commented 2 years ago

With 1.34.2 I can compile without lzma support AND the Lintian checks pass on Xenial.

With 1.36.0 I can compile without lzma support but the resulting package the Lintian checks fail on Xenial.

With >1.36.0 I can't compile without default features (i.e. without lzma support) (due to #43) and so the Lintian checks fail on Xenial.

I haven't tested >1.34.2 && < 1.36.0.

ximon18 commented 2 years ago

With >1.36.0 I can't compile without default features (i.e. without lzma support) (due to https://github.com/kornelski/cargo-deb/issues/43) and so the Lintian checks fail on Xenial.

The compilation issue was resolved in the 1.38.3 release with the fix of https://github.com/kornelski/cargo-deb/issues/43, but then I'm left with the issue that compiling without default features no longer solves the malformed-deb-archive error reported by Lintian on Xenial, i.e. I have the situation now that:

E.g. see this failure on Xenial when using cargo-deb 1.38.3 which succeeds when using cargo-deb 1.34.2.

kornelski commented 2 years ago

Does Xenial support XZ-compressed control files at all?

e4764b61

ximon18 commented 2 years ago

I don't know. What I do know is that disabling the lzma feature makes it work up until cargo-deb 1.34.2 but not later, and when I tried --system-xz a while ago (see above) that had no effect.

kornelski commented 2 years ago

I've googled, and there are plenty of bugs about Ubuntu not supporting LZMA in 16 and 18. So it seems the problem isn't in the lzma compressor, but the fact that an Ubuntu from 3 LTSes ego can't support dpkg format from the future.

ximon18 commented 2 years ago

So, I'm confused. Disabling the lzma feature used to solve the problem. Was it then the case that that actually disabled something else than, or as well as, LZMA support, and this other thing is where the problem arises?

kornelski commented 2 years ago

The Cargo feature disables built-in Rust LZMA support, but in the meantime cargo-deb got a fallback to shell out to the xz command, so it always supports LZMA if the host operating system is able to compress LZMA.

ximon18 commented 2 years ago

@kornelski: I tried using commit ec4e003 and that worked!

ximon18 commented 2 years ago

@kornelski: Will you make a release containing the ec4e003 fix?