Nextflow+Singularity: такого файла или каталога нет, даже если файл существует

Я пытаюсь запустить этот конвейер, который реализован с помощью Nextflow и использует контейнер Docker. К сожалению, я не могу использовать Docker, поскольку он не совместим с HPC (без sudo), поэтому я использую Singularity вместо Docker. Однако кажется, что пути установлены неправильно, так как я получаю эту ошибку:

Error executing process > 'truncate_input_headers'

Caused by:
  Process `truncate_input_headers` terminated with an error exit status (1)

Command executed:

  truncate_header.lua < phased.1_scaffolds_FINAL.fasta > truncated.fasta

Command exit status:
  1

Command output:
  (empty)

Command error:
  .command.sh: line 2: phased.1_scaffolds_FINAL.fasta: No such file or directory

Work dir:
  /work/project/ladsie_002/work/77/1854982bdacdd60fbe447554ab153b

Tip: you can replicate the issue by changing to the process work dir and entering the command `bash .command.run`


Однако, когда я смотрю на путь, файл действительно существует:

$ ll /work/project/ladsie_002/work/77/1854982bdacdd60fbe447554ab153b
total 1
lrwxrwxrwx 1 bbrink users 76 30. Aug 13:44 phased.1_scaffolds_FINAL.fasta -> /work/project/ladsie_002/companion/input/pleo/phased.1_scaffolds_FINAL.fasta

Это мой конфиг:

env {
    GT_RETAINIDS = "yes"
    AUGUSTUS_CONFIG_PATH = "/opt/data/augustus"
    FILTER_SHORT_PARTIALS_RULE = "/opt/data/filters/filter_short_partials.lua"
    PFAM = "/opt/pfam/Pfam-A.hmm"
    PFAM2GO = "/opt/data/pfam2go/pfam2go.txt"
    RATT_CONFIG = "/opt/RATT/RATT.config_euk_NoPseudo_SpliceSite"
}

params.GO_OBO = "/opt/go.obo"
params.NCRNA_MODELS = "/opt/data/cm/rnas.cm"
params.CIRCOS_CONFIG_FILE = "/opt/data/circos/circos.debian.conf"
params.CIRCOS_BIN_CONFIG_FILE = "/opt/data/circos/circos.bin.debian.conf"
params.SPECFILE = "/opt/data/speck/output_check.lua"
params.AUGUSTUS_EXTRINSIC_CFG = "/opt/data/augustus/extrinsic.cfg"

process {
    container = 'sangerpathogens/companion:latest'
}

singularity {
    enabled = true
//    autoMounts = true
}

executor {
    name = 'local'
    queueSize = 2
    pollInterval = '3sec'
}

Я пытался найти решение для этого, единственное, что я смог найти, это autoMounts = true опция (закомментирована выше), из-за которой конвейер даже не находит свои собственные скрипты lua при включении:

Error executing process > 'truncate_input_headers'

Caused by:
  Process `truncate_input_headers` terminated with an error exit status (127)

Command executed:

  truncate_header.lua < phased.1_scaffolds_FINAL.fasta > truncated.fasta

Command exit status:
  127

Command output:
  (empty)

Command error:
  .command.sh: line 2: truncate_header.lua: command not found

Work dir:
  /work/project/ladsie_002/work/95/f03b31ed18a84f331b83cad0232bd5

Tip: you can try to figure out what's wrong by changing to the process work dir and showing the script file named `.command.sh`

Edit1: я последовал совету tsnowlan и добавил --debug к singularity.engineOptions. Однако рассматриваемый путь кажется смонтированным:

Error executing process > 'truncate_input_headers'

Caused by:
  Process `truncate_input_headers` terminated with an error exit status (1)

Command executed:

  truncate_header.lua < phased.1_scaffolds_FINAL.fasta > truncated.fasta

Command exit status:
  1

Command output:
  (empty)

Command error:
  DEBUG   [U=1038,P=29509]   mountGeneric()                Mounting tmpfs to /var/singularity/mnt/session
  DEBUG   [U=1038,P=29509]   mountImage()                  Mounting loop device /dev/loop0 to /var/singularity/mnt/session/rootfs
  DEBUG   [U=1038,P=29509]   mountGeneric()                Mounting overlay to /var/singularity/mnt/session/final
  DEBUG   [U=1038,P=29509]   setPropagationMount()         Set RPC mount propagation flag to SLAVE
  VERBOSE [U=1038,P=29509]   Passwd()                      Checking for template passwd file: /var/singularity/mnt/session/rootfs/etc/passwd
  VERBOSE [U=1038,P=29509]   Passwd()                      Creating passwd content
  VERBOSE [U=1038,P=29509]   Passwd()                      Creating template passwd file and appending user data: /var/singularity/mnt/session/rootfs/etc/passwd
  DEBUG   [U=1038,P=29509]   addIdentityMount()            Adding /etc/passwd to mount list
  VERBOSE [U=1038,P=29509]   addIdentityMount()            Default mount: /etc/passwd:/etc/passwd
  VERBOSE [U=1038,P=29509]   Group()                       Checking for template group file: /var/singularity/mnt/session/rootfs/etc/group
  VERBOSE [U=1038,P=29509]   Group()                       Creating group content
  DEBUG   [U=1038,P=29509]   addIdentityMount()            Adding /etc/group to mount list
  VERBOSE [U=1038,P=29509]   addIdentityMount()            Default mount: /etc/group:/etc/group
  DEBUG   [U=1038,P=29509]   mountGeneric()                Remounting /var/singularity/mnt/session/final
  DEBUG   [U=1038,P=29509]   mountGeneric()                Mounting /dev to /var/singularity/mnt/session/final/dev
  DEBUG   [U=1038,P=29509]   mountGeneric()                Mounting /etc/localtime to /var/singularity/mnt/session/final/usr/share/zoneinfo/UTC
  DEBUG   [U=1038,P=29509]   mountGeneric()                Mounting /etc/hosts to /var/singularity/mnt/session/final/etc/hosts
  DEBUG   [U=1038,P=29509]   mountGeneric()                Mounting /etc/singularity/actions to /var/singularity/mnt/session/final/.singularity.d/actions
  DEBUG   [U=1038,P=29509]   mountGeneric()                Remounting /var/singularity/mnt/session/final/.singularity.d/actions
  DEBUG   [U=1038,P=29509]   mountGeneric()                Mounting /proc to /var/singularity/mnt/session/final/proc
  DEBUG   [U=1038,P=29509]   mountGeneric()                Remounting /var/singularity/mnt/session/final/proc
  DEBUG   [U=1038,P=29509]   mountGeneric()                Mounting sysfs to /var/singularity/mnt/session/final/sys
  DEBUG   [U=1038,P=29509]   mountGeneric()                Mounting /home/bbrink to /var/singularity/mnt/session/home/bbrink
  DEBUG   [U=1038,P=29509]   mountGeneric()                Remounting /var/singularity/mnt/session/home/bbrink
  DEBUG   [U=1038,P=29509]   mountGeneric()                Mounting /var/singularity/mnt/session/home/bbrink to /var/singularity/mnt/session/final/home/bbrink
  DEBUG   [U=1038,P=29509]   mountGeneric()                Remounting /var/singularity/mnt/session/final/home/bbrink
  DEBUG   [U=1038,P=29509]   mountGeneric()                Mounting /tmp to /var/singularity/mnt/session/final/tmp
  DEBUG   [U=1038,P=29509]   mountGeneric()                Remounting /var/singularity/mnt/session/final/tmp
  DEBUG   [U=1038,P=29509]   mountGeneric()                Mounting /var/tmp to /var/singularity/mnt/session/final/var/tmp
  DEBUG   [U=1038,P=29509]   mountGeneric()                Remounting /var/singularity/mnt/session/final/var/tmp
  DEBUG   [U=1038,P=29509]   mountGeneric()                Mounting /work/project/ladsie_002/work/de/74a8bbd8bd11ad1524800fb7e71556 to /var/singularity/mnt/session/final/work/project/ladsie_002/work/de/74a8bbd8bd11ad1524800fb7e71556
  DEBUG   [U=1038,P=29509]   mountGeneric()                Remounting /var/singularity/mnt/session/final/work/project/ladsie_002/work/de/74a8bbd8bd11ad1524800fb7e71556
  DEBUG   [U=1038,P=29509]   mountGeneric()                Mounting /var/singularity/mnt/session/etc/resolv.conf to /var/singularity/mnt/session/final/etc/resolv.conf
  DEBUG   [U=1038,P=29509]   mountGeneric()                Mounting /var/singularity/mnt/session/etc/passwd to /var/singularity/mnt/session/final/etc/passwd
  DEBUG   [U=1038,P=29509]   mountGeneric()                Mounting /var/singularity/mnt/session/etc/group to /var/singularity/mnt/session/final/etc/group
  DEBUG   [U=1038,P=29509]   create()                      Chroot into /var/singularity/mnt/session/final
  DEBUG   [U=0,P=29543]      Chroot()                      Change current directory to /var/singularity/mnt/session/final
  DEBUG   [U=0,P=29543]      Chroot()                      Hold reference to host / directory
  DEBUG   [U=0,P=29543]      Chroot()                      Called pivot_root on /var/singularity/mnt/session/final
  DEBUG   [U=0,P=29543]      Chroot()                      Change current directory to host / directory
  DEBUG   [U=0,P=29543]      Chroot()                      Apply slave mount propagation for host / directory
  DEBUG   [U=0,P=29543]      Chroot()                      Called unmount(/, syscall.MNT_DETACH)
  DEBUG   [U=0,P=29543]      Chroot()                      Changing directory to / to avoid getpwd issues
  DEBUG   [U=1038,P=29509]   create()                      Chdir into / to avoid errors
  VERBOSE [U=1038,P=29542]   startup()                     Execute stage 2
  DEBUG   [U=1038,P=29542]   Stage()                       Entering stage 2
  DEBUG   [U=1038,P=29509]   PostStartProcess()            Post start process
  .command.sh: line 2: phased.1_scaffolds_FINAL.fasta: No such file or directory
  DEBUG   [U=1038,P=29509]   CleanupContainer()            Cleanup container
  DEBUG   [U=1038,P=29509]   Master()                      Child exited with exit status 1

Work dir:
  /work/project/ladsie_002/work/de/74a8bbd8bd11ad1524800fb7e71556

Edit2: я исправил ошибочную точку монтирования, что привело к другой ошибке:

gt: error: could not execute script ...rk/project/ladsie_002/companion/bin/gff3_to_embl.lua:74: bad argument #1 to 'lines' (/opt/go.obo: Permission denied)

Я предполагаю, что разрешения внутри контейнера установлены неправильно.

3 ответа

Решение

Как упоминал pditommaso, вам необходимо убедиться, что среда внутри изображения сингулярности настроена правильно. Вы можете сделать это либо через%environment блок в файле определения Singularity или экспорт SINGULARITY_$VARNAMEв среде хоста. например,SINGULARITY_PERL5LIB=/opt/ORTHOMCLV1.4/:/opt/RATT/:/opt/ABACAS2/:$PERL5LIB в env блок конфигурации nextflow для установки PERL5LIB переменная внутри контейнера.

Также вероятно, что вам нужно будет указать расположение данных для монтирования в контейнер в singularity.runOptions. Специфика там зависит от того, какую версию Singularity вы используете, и от того, включена ли в ядре хост-ОС OverlayFS.

Редактировать 1: привязка / установка

Основная форма -B /host/path:/image/path. Если/image/path не существует в образе сингулярности и OverlayFS не включен в ядре ОС, вы получите сообщение об ошибке: WARNING: Skipping user bind, non existent bind point (directory/file) in container: '/image/path'. гдеdirectory/file это то, что монтируется.

Вы можете просмотреть, что монтируется, используя --debug флаг с версией 3+, или -vv в версии 2. В следующем потоке это добавляется в singularity.engineOptions.

Имейте в виду, что любые символические ссылки в смонтированном каталоге будут повреждены, если они ссылаются на путь, который недоступен в образе сингулярности.

Если смонтированные данные содержат символические ссылки, часто есть большая вероятность, что они относятся к файлам, которые не смонтированы в контейнер и кажутся неработающими ссылками при запуске образа сингулярности.

изменить 2: права доступа к файлам

Самый простой способ построить изображение сингулярности: sudo singularity build companion.sif docker://sangerpathogens/companion:latest. Если вам нужно что-то изменить, как в случае с/opt/go.obo файл, вам нужно будет создать файл определения.

Bootstrap: docker
From: sangerpathogens/companion:latest
# note: for reproducibility, it is best to use a tag whose target won't change over time

%post
    chmod 644 /opt/go.obo

Если требуются другие изменения, они вносятся в %postблок. В отличие от Docker, Singularity не использует слои для каждой команды для создания образа, поэтому вам не нужно беспокоиться о связыванииsome_command && some_other_command && so_on && etc.

Это исправление поможет при отсутствии скрипта truncate_headers.lua.

https://github.com/sanger-pathogens/companion/issues/93

Singulary может неправильно преобразовать контейнер Docker, определенный пользовательской средой. Убедитесь, что изображение Singularity определяетPATHи другие переменные, как определено в Dockerfile проекта https://github.com/sanger-pathogens/companion/blob/master/Dockerfile

Другие вопросы по тегам