I converted the MRIQC Docker container to a Singularity container.
I download the OpenfMRI.org dataset d008, which is in BIDS format. The uncompressed,
top-level directory of the data looks like
$ ls ds008_R2.0.0/
CHANGES sub-02 sub-07 sub-13
dataset_description.json sub-03 sub-09 sub-14
participants.tsv sub-04 sub-10 sub-15
README sub-05 sub-11 task-conditionalstopsignal_bold.json
sub-01 sub-06 sub-12 task-stopsignal_bold.jsonI read at
http://mriqc.readthedocs.io/en/stable/docker.html that to run Docker, I would use
$ docker run -it --rm -v <bids_dir>:/data:ro -v <output_dir>:/out \
poldracklab/mriqc:latest /data /out group
I am presuming that the -v option translates to -B for Singularity, and maps a folder on the
host to a folder in the container, so I should have something like
$ singularity exec -B $HOME/bids:/data:ro -B $HOME/out:/out \
mriqc.simg mrqc <mriqs arguments>
However, it seems that the permissions inside the container are set so that an uprivileged user
cannot run mriqc.
This is output from a run with an uprivileged user:
$ singularity exec -B /home/bennet/Projects/mpeckins/MRIQC/ds008_R2.0.0:/data:ro -B $PWD/out:/out \
mriqc.simg mriqc --help
Traceback (most recent call last):
File "/usr/local/miniconda/bin/mriqc", line 6, in <module>
from pkg_resources import load_entry_point
File "<frozen importlib._bootstrap>", line 961, in _find_and_load
[ .... elided for brevity ... ]
File "/usr/local/miniconda/lib/python3.6/site-packages/setuptools-27.2.0-py3.6.egg/pkg_resources/__init__.py", line 1861, in get_metadata
PermissionError: [Errno 13] Permission denied: '/usr/local/miniconda/lib/python3.6/site-packages/.wh.conda-4.3.11-py3.6.egg-info'
$ singularity exec -B /home/bennet/Projects/mpeckins/MRIQC/ds008_R2.0.0:/data:ro -B $PWD/out:/out \
mriqc.simg ls -l /usr/local/miniconda/lib/python3.6/site-packages/.wh.conda-4.3.11-py3.6.egg-info
-rw------- 1 root root 0 Aug 30 04:23 /usr/local/miniconda/lib/python3.6/site-packages/.wh.conda-4.3.11-py3.6.egg-info
and output running with sudo:
$ sudo singularity exec -B /home/bennet/Projects/mpeckins/MRIQC/ds008_R2.0.0:/data:ro -B $PWD/out:/out \
mriqc.simg mriqc --help
usage: mriqc [-h] [--version]
[--participant_label PARTICIPANT_LABEL [PARTICIPANT_LABEL ...]]
[--session-id SESSION_ID [SESSION_ID ...]]
[--run-id RUN_ID [RUN_ID ...]] [--task-id TASK_ID [TASK_ID ...]]
[ ... elided for brevity ... ]
Is this something I should solve on my own, or is this something I should report as an issue at https://github.com/poldracklab/mriqc/?
Even as root, it seems to be having minor indigestion:
$ sudo singularity exec -B /home/bennet/Projects/mpeckins/MRIQC/ds008_R2.0.0:/data:ro -B $PWD/out:/out mriqc.simg \
mriqc /data /out participant --participant_label sub-15
2017-10-01 13:11:20,245 interface:WARNING AFNI is outdated, detected version Debian-16.2.07~dfsg.1-5~nd16.04+1 and AFNI_17.2.17 is available.
2017-10-01 13:11:20,600 interface:WARNING AFNI is outdated, detected version Debian-16.2.07~dfsg.1-5~nd16.04+1 and AFNI_17.2.17 is available.
2017-10-01 13:11:21,056 mriqc.cli:WARNING No T2w scans were found in /data
2017-10-01 13:11:21,056 mriqc.cli:WARNING Anonymized quality metrics will be submitted to MRIQC's metrics repository. Use --no-sub to disable submission.
2017-10-01 13:12:02,684 workflow:ERROR ['Node skullstrip.a0 failed to run on host brainbox.']
[ ... output elided for brevity ... ]
Am I missing something in the host's path to cause skullstripping to fail? I presume that the AFNI it is detecting is inside the container, since mine is different, as this, run from the host's prompt shows:
$ afni -version
Precompiled binary linux_openmp_64: Dec 22 2016 (Version AFNI_16.3.18)
Thanks, -- bennet