GitHub Actions中无法运行samtools可执行文件问题求助
常见原因及解决办法
架构不兼容
GitHub Actions的runner有不同架构——比如Ubuntu默认是x86_64,现在macos-latest用的是ARM64的M1机器。如果你的samtools是在本地x86_64电脑上编译的,扔到ARM runner上肯定跑不起来。
排查:在workflow里加file bin/samtools,看输出的架构信息,再用uname -m看runner的架构,对比一下就清楚了。
解决:要么在对应架构的runner上编译samtools,要么直接下载对应架构的预编译包。动态链接库缺失
samtools是动态链接的二进制文件,要是它依赖的系统库找不到,系统就会报错“没有这个文件或目录”——其实是找不到依赖,不是找不到samtools本身。
排查:Linux runner用ldd bin/samtools,macOS用otool -L bin/samtools,看输出里有没有标not found的项。
解决:安装缺失的依赖包(比如Ubuntu上装libncurses5-dev libbz2-dev liblzma-dev这些),或者换静态编译的samtools版本(静态版把依赖都打包进去了)。相对路径踩坑
虽然tree和ls能找到samtools,但你执行它的时候的工作目录可能和你想的不一样。比如你在./src目录下,直接写bin/samtools就会找不到,得写../bin/samtools才行。
排查:执行前先打pwd看看当前在哪个目录。
解决:用绝对路径执行,比如${{ github.workspace }}/bin/samtools,或者先cd到bin目录再跑./samtools。
快速排查步骤
把这段加到你的test.yml里,先搞清楚问题出在哪:
- name: Debug samtools issue run: | pwd uname -m file bin/samtools ldd bin/samtools || otool -L bin/samtools
看输出结果对应上面的方法调整就行。
内容的提问来源于stack exchange,提问作者Erin Young

