nextest-rs/nextest

Installer doesn't work on alpine/musl

Opened this issue · 1 comments

If i use the installer script for linux (curl -LsSf https://get.nexte.st/latest/linux | tar zxf - -C ${CARGO_HOME:-~/.cargo}/bin) on an alpine docker container, i get a glibc build instead of the musl build:

To reproduce, start a docker container (in my case x86_64) with docker run --rm -it alpine and run the following commands in it:

apk add curl file tar
mkdir -p /root/.cargo/bin
curl -LsSf https://get.nexte.st/latest/linux | tar zxf - -C ${CARGO_HOME:-~/.cargo}/bin
file /root/.cargo/bin/cargo-nextest

Output:

/root/.cargo/bin/cargo-nextest: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.0.0, stripped

Running /root/.cargo/bin/cargo-nextest prints "not found".

Compared with a musl binary:

$ file /bin/tar
/bin/tar: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-x86_64.so.1, BuildID[sha1]=27564d92ae8bd019cb2e3511726a515526a95b5c, stripped

The musl binary from the releases page does work, it seems it's only the installer not checking the platform:

$ file /root/.cargo/bin/cargo-nextest
/root/.cargo/bin/cargo-nextest: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), static-pie linked, stripped

Since the statically linked musl version also works on glibc systems, would it be possible to link the musl version under https://get.nexte.st/latest/linux instead of the glibc version?

Thanks for the report!

Ah ha -- so at the moment we don't actually have an installer script -- that command just untars a binary into the right spot. I think building out an installer script would be interesting. Though I'd want to hook it up to the release metadata we serve in releases.json. This would likely mean that the installer downloads a Rust binary -- which then fetches the release metadata and selects the right version for the platform. This is similar to how rustup-init works.