wwood / CoverM

Read coverage calculator for metagenomics
GNU General Public License v3.0
273 stars 30 forks source link

Request -- use https://crates.io/crates/which for external command checking? #207

Open nickp60 opened 3 months ago

nickp60 commented 3 months ago

Hello! This is a bit of a strange request, but I am running into a strange error when running dockerized versions of CoverM. It is related to this somehow, I am not entirely sure why it only fails on a collaborators machine, but CoverM fails when attempting to find the Minimap2 executable using the bash -c 'which minimap2' command, which is here.

When running this manually (not via CoverM), I get the following:

docker run ghcr.io/vdblab/coverm:0.6.1  bash -c "which minimap2"
/opt/conda/bin/minimap2

So far so good. When run on my institute's HPC via singularity, I get

singularity run docker://ghcr.io/vdblab/coverm:0.6.1 bash -c "which minimap2"
INFO:    Using cached SIF image
/opt/conda/bin/minimap2

which is good as well. However, when my collaborator attempts on their cluster, they get

Illegal option --

That results in their CoverM calls failing with the following error:

[2024-03-13T18:11:22Z ERROR bird_tool_utils::external_command_checker] Could not find an available minimap2 executable.
[2024-03-13T18:11:22Z ERROR bird_tool_utils::external_command_checker] The STDERR was: "Illegal option --\n"
[2024-03-13T18:11:22Z ERROR bird_tool_utils::external_command_checker] Cannot continue without minimap2. Testing for presence with `which minimap2` failed
thread 'main' panicked at 'Failed to find installed minimap2: "Cannot continue without minimap2. Testing for presence with `which minimap2` failed"', src/external_command_checker.rs:9:10
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

We think that somehow Singularity is getting mixed up between system and container versions of which.

Would you be willing to switch to a different method of executable checking? I don't know Rust, but it looks like there is a pretty popular package for this: https://crates.io/crates/which

Thanks in advance!

microjishuai commented 3 months ago

I encountered the same "ERROR bird_tool_utils::external_command_checker] Could not find an available minimap2 executable" when running a coverM.sif container built using apptainer, even though minimap2 was successfully installed in the container.

wwood commented 3 months ago

Hi,

Thanks for the specific solution - probably a better idea anyway. I've pushed a new commit which uses the which crate.

I don't actually make that docker/apptainer - so unsure how to test - maybe you can? Thanks, ben

nickp60 commented 3 months ago

Amazing, thank you so much!! I just pushed an image with these changes, and I'll ask our collaborator if it works on their system now! @microjishuai, would you be willing to try as well?

docker run ghcr.io/vdblab/coverm:0.7.0-dev
# or
singularity run docker://ghcr.io/vdblab/coverm:0.7.0-dev