diff --git a/containers/freesurfer.context/freesurfer.Dockerfile b/containers/freesurfer.context/freesurfer.Dockerfile new file mode 100644 index 0000000..b3eab9c --- /dev/null +++ b/containers/freesurfer.context/freesurfer.Dockerfile @@ -0,0 +1,54 @@ +# docker build for distributing a base fs 7.2.0 container + +FROM freesurfer-base as freesurfer + +ARG FREESURFER_VERSION +ENV FREESURFER_VERSION=${FREESURFER_VERSION:-${FREESURFER_VERSION}} + +ENV DEBIAN_FRONTEND=noninteractive + +# shell settings +WORKDIR / + +# install utils +RUN apt-get -y update +RUN apt-get -y install bc perl tar tcsh wget vim-common + +RUN apt-get -y install language-pack-en libx11-dev gettext xterm x11-apps csh xorg-dev libncurses5 libgl1 libegl1 xorg xserver-xorg-video-intel libglu1-mesa libjpeg62 libopengl0 libwayland-cursor0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-render0 libxcb-util1 libxcb-xinerama0 libxcb-xinput0 libxcb-xkb1 libxkbcommon-x11-0 libxkbcommon0 + +RUN echo ${FREESURFER_VERSION} + +# install fs +ADD freesurfer_ubuntu22-${FREESURFER_VERSION}_amd64.deb / +## RUN wget https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/${FREESURFER_VERSION}/freesurfer_ubuntu22-${FREESURFER_VERSION}_amd64.deb && \ +RUN dpkg -i freesurfer_ubuntu22-${FREESURFER_VERSION}_amd64.deb && \ + rm freesurfer_ubuntu22-${FREESURFER_VERSION}_amd64.deb + +# setup fs env +ENV OS Linux +ENV PATH /usr/local/freesurfer/${FREESURFER_VERSION}/bin:/usr/local/freesurfer/${FREESURFER_VERSION}/fsfast/bin:/usr/local/freesurfer/${FREESURFER_VERSION}/tktools:/usr/local/freesurfer/${FREESURFER_VERSION}/mni/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH +ENV FREESURFER_HOME /usr/local/freesurfer/${FREESURFER_VERSION} +ENV FREESURFER /usr/local/freesurfer/${FREESURFER_VERSION} +ENV SUBJECTS_DIR /usr/local/freesurfer/${FREESURFER_VERSION}/subjects +ENV LOCAL_DIR /usr/local/freesurfer/${FREESURFER_VERSION}/local +ENV FSFAST_HOME /usr/local/freesurfer/${FREESURFER_VERSION}/fsfast +ENV FMRI_ANALYSIS_DIR /usr/local/freesurfer/${FREESURFER_VERSION}/fsfast +ENV FUNCTIONALS_DIR /usr/local/freesurfer/${FREESURFER_VERSION}/sessions + +# set default fs options +ENV FS_OVERRIDE 0 +ENV FIX_VERTEX_AREA "" +ENV FSF_OUTPUT_FORMAT nii.gz + +# mni env requirements +ENV MINC_BIN_DIR /usr/local/freesurfer/${FREESURFER_VERSION}/mni/bin +ENV MINC_LIB_DIR /usr/local/freesurfer/${FREESURFER_VERSION}/mni/lib +ENV MNI_DIR /usr/local/freesurfer/${FREESURFER_VERSION}/mni +ENV MNI_DATAPATH /usr/local/freesurfer/${FREESURFER_VERSION}/mni/data +ENV MNI_PERL5LIB /usr/local/freesurfer/${FREESURFER_VERSION}/mni/share/perl5 +ENV PERL5LIB /usr/local/freesurfer/${FREESURFER_VERSION}/mni/share/perl5 + +ENV FS_LICENSE='/license.txt' + +RUN ( [ -f "VERSION" ] || touch VERSION ) && \ + echo "freesurfer => ${FREESURFER_VERSION}\n" >> VERSION \ No newline at end of file diff --git a/docker-bake.hcl b/docker-bake.hcl index 6f52c1a..2289997 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -116,6 +116,13 @@ variable "SCILUS_TAG" { variable "FLOWS_TAG" { } +variable "FREESURFER_TAG" { +} + +variable "FREESURFER_VERSION" { + default = "7.4.1" +} + # ============================================================================== # UTILITY FUNCTIONS # ============================================================================== @@ -149,6 +156,10 @@ group "dmriqcpy" { targets = ["dmriqcpy", "dmriqcpy-test"] } +group "freesurfer" { + targets = ["scilus-freesurfer"] +} + # ============================================================================== # TEST TARGETS # ============================================================================== @@ -308,6 +319,19 @@ target "scilus-fsl" { output = ["type=docker"] } +target "scilus-freesurfer" { + inherits = ["freesurfer"] + contexts = { + freesurfer-base = "target:scilus" + } + cache-from = [ + "type=registry,ref=${dockerhub-user-pull}/build-cache:scilus", + "type=registry,ref=scilus/build-cache:scilus" + ] + tags = notequal("", SCILUS_TAG) ? stamp_tag("scilus/scilus-freesurfer:${SCILUS_TAG}", timestamp()) : ["scilus-freesurfer:local"] + output = ["type=docker"] +} + target "scilus-mrtrix" { inherits = ["mrtrix"] contexts = { @@ -413,6 +437,23 @@ target "fsl" { output = ["type=cacheonly"] } +target "freesurfer" { + dockerfile = "freesurfer.Dockerfile" + context = "./containers/freesurfer.context" + target = "freesurfer" + contexts = { + freesurfer-base = "docker-image://${base-install-image}" + } + args = { + FREESURFER_VERSION = "${freesurfer-version}" + } + cache-from = [ + "type=registry,ref=${dockerhub-user-pull}/build-cache:freesurfer", + "type=registry,ref=scilus/build-cache:freesurfer" + ] + output = ["type=cacheonly"] +} + target "mrtrix" { dockerfile = "mrtrix.Dockerfile" context = "./containers" diff --git a/versioning.hcl b/versioning.hcl index ca4e619..e563b83 100644 --- a/versioning.hcl +++ b/versioning.hcl @@ -4,11 +4,12 @@ base-install-image="nvidia/cuda:11.7.1-runtime-ubuntu22.04" base-build-image="ubuntu:jammy-20230301" dmriqcpy-version="0.1.7" -scilpy-version="1.6.0" +scilpy-version="2.0.2" ants-version="2.4.3" cmake-version="3.16.3" fsl-version="6.0.6" +freesurfer-version="7.4.1" mrtrix-version="3.0.4" mesa-version="22.0.5" vtk-version="9.2.6"