Closed brunoriemenschneider closed 4 years ago
Hi Bruno,
I don't have experience with Sun Linux - but Ubuntu is the preferred platform for the ISMRMRD and Gadgetron developers, so things should work okay there.
Have you had success just building and installing standard ISMRMRD on either of your machines? If so, after installation - you should make sure that you have the ISMRMRD_HOME environment variable set. If ge_to_ismrmrd cannot find ISMRMRD in any of the usual places, it falls back to that variable. Once you have that set, ge_to_ismrmrd's cmake process should find your ISMRMRD installation. I have a similar setup to yours, when I don't have access to the general system, so end up with everything in my $HOME directory.
With regard to using Containers, it's just a convenient way to package up dependencies in an isolated environment. I think of as being akin to a VM, without its own hardware or independent kernel, but that's probably not entirely accurate. The link above has the information on how to build the Docker containers with ESE and Orchestra development environments included. The documentation on docker.com is very good, and between that, and web tutorials - you should be able to get an idea about the in's and out's of Docker pretty quickly. If you really want to pursue this path, I would lookup a "Hello World" Docker tutorial to get a bit of background in the mechanics and underlying infrastructure, then dive into the repo above that provides the commands for building a Docker container for your development needs.
VR
Hi,
following the steps of the readme, and apapting in CMakeLists "option(build4GE FALSE ON)" and BOOST_ROOT and HDF5_ROOT to the actual paths, on Ubuntu 18.04:
$ cmake -D CMAKE_INSTALL_PREFIX=$ISMRMRD_HOME -D HDF5_USE_STATIC_LIBRARIES=yes -D CMAKE_EXE_LINKER_FLAGS="-lpthread -lz -ldl" ..
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
STATUS, Setting up ISMRMRD build to use GE SDK HDF5 and Boost components for GE converter.
-- Found HDF5: /home/riemeb01/orchestra-sdk-1.7-1/include/recon/3p/Linux/hdf5-1.8.12_dev_linux64/lib/libhdf5.a (found version "1.8.12") found components: C
HDF5 found at: /home/riemeb01/orchestra-sdk-1.7-1/include/recon/3p/Linux/hdf5-1.8.12_dev_linux64/include
HDF5 found at: /home/riemeb01/orchestra-sdk-1.7-1/include/recon/3p/Linux/hdf5-1.8.12_dev_linux64/lib/libhdf5.a
-- Found Git: /usr/bin/git (found version "2.17.1")
-- Found Doxygen: /usr/bin/doxygen (found version "1.8.13") found components: doxygen dot
Building info application
-- Found Boost: /home/riemeb01/orchestra-sdk-1.7-1/include/recon/3p/Linux/boost_1_55_0_dev_linux64/include (found suitable version "1.55.0", minimum required is "1.43") found components: program_options
-- FFTW3 UNIX libraries: /usr/lib/x86_64-linux-gnu/libfftw3f.so
-- Found FFTW3: /usr/lib/x86_64-linux-gnu/libfftw3f.so
FFTW3 and Boost Found... building utilities
CPACK_PACKAGING_INSTALL_PREFIX: /home/riemeb01/ismrmrd
-- Found CPack generators: DEB
-- Configuring done
-- Generating done
-- Build files have been written to: /home/riemeb01/ismrmrd/build
$ make
Scanning dependencies of target ismrmrd
[ 4%] Building C object CMakeFiles/ismrmrd.dir/libsrc/ismrmrd.c.o
[ 8%] Building CXX object CMakeFiles/ismrmrd.dir/libsrc/ismrmrd.cpp.o
[ 12%] Building CXX object CMakeFiles/ismrmrd.dir/libsrc/xml.cpp.o
[ 16%] Building CXX object CMakeFiles/ismrmrd.dir/libsrc/meta.cpp.o
[ 20%] Building CXX object CMakeFiles/ismrmrd.dir/libsrc/waveform.cpp.o
[ 25%] Building C object CMakeFiles/ismrmrd.dir/libsrc/waveform.c.o
[ 29%] Building C object CMakeFiles/ismrmrd.dir/libsrc/dataset.c.o
[ 33%] Building CXX object CMakeFiles/ismrmrd.dir/libsrc/dataset.cpp.o
[ 37%] Building CXX object CMakeFiles/ismrmrd.dir/libsrc/pugixml.cpp.o
[ 41%] Linking CXX shared library libismrmrd.so
[ 41%] Built target ismrmrd
Scanning dependencies of target ismrmrd_test_xml
[ 45%] Building CXX object utilities/CMakeFiles/ismrmrd_test_xml.dir/ismrmrd_test_xml.cpp.o
[ 50%] Building CXX object utilities/CMakeFiles/ismrmrd_test_xml.dir/__/libsrc/pugixml.cpp.o
[ 54%] Linking CXX executable ismrmrd_test_xml
../libismrmrd.so.1.4.2: undefined reference to pthread_create' ../libismrmrd.so.1.4.2: undefined reference to
pthread_key_create'
../libismrmrd.so.1.4.2: undefined reference to compress2' ../libismrmrd.so.1.4.2: undefined reference to
pthreadgetspecific'
../libismrmrd.so.1.4.2: undefined reference to dlopen' ../libismrmrd.so.1.4.2: undefined reference to
inflate'
../libismrmrd.so.1.4.2: undefined reference to `inflateInit'
../libismrmrd.so.1.4.2: undefined reference to inflateEnd' ../libismrmrd.so.1.4.2: undefined reference to
pthread_once'
../libismrmrd.so.1.4.2: undefined reference to dlclose' ../libismrmrd.so.1.4.2: undefined reference to
dlerror'
../libismrmrd.so.1.4.2: undefined reference to dlsym' ../libismrmrd.so.1.4.2: undefined reference to
pthread_setspecific'
collect2: error: ld returned 1 exit status
utilities/CMakeFiles/ismrmrd_test_xml.dir/build.make:100: recipe for target 'utilities/ismrmrd_test_xml' failed
make[2]: [utilities/ismrmrd_test_xml] Error 1
CMakeFiles/Makefile2:256: recipe for target 'utilities/CMakeFiles/ismrmrd_test_xml.dir/all' failed
make[1]: [utilities/CMakeFiles/ismrmrd_test_xml.dir/all] Error 2
Makefile:151: recipe for target 'all' failed
make: *** [all] Error 2
The ismrmrd step actually works in Sun, however then in the ge_to_ismrmrd step:
$ cmake -D CMAKE_INSTALL_PREFIX=$GE_TOOLS_HOME .. -- The C compiler identification is GNU 8.1.0 -- The CXX compiler identification is GNU 8.1.0 -- Check for working C compiler: /gpfs/share/apps/gcc/8.1.0/bin/cc -- Check for working C compiler: /gpfs/share/apps/gcc/8.1.0/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /gpfs/share/apps/gcc/8.1.0/bin/c++ -- Check for working CXX compiler: /gpfs/share/apps/gcc/8.1.0/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done CMake Error at /gpfs/share/apps/cmake/3.15.3/share/cmake-3.15/Modules/FindPackageHandleStandardArgs.cmake:137 (message): Could NOT find LibXslt (missing: LIBXSLT_LIBRARIES LIBXSLT_INCLUDE_DIR) Call Stack (most recent call first): /gpfs/share/apps/cmake/3.15.3/share/cmake-3.15/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE) /gpfs/share/apps/cmake/3.15.3/share/cmake-3.15/Modules/FindLibXslt.cmake:70 (FIND_PACKAGE_HANDLE_STANDARD_ARGS) CMakeLists.txt:14 (find_package)
Manually adding "-DLIBXSLT_INCLUDE_DIR=/gpfs/share/apps/xslt/1.1.33/include/libxslt -DLIBXSLT_LIBRARIES=/gpfs/share/apps/xslt/1.1.33/lib" leads to
WARNING: Target "pfile2ismrmrd" requests linking to directory "/gpfs/share/apps/xslt/1.1.33/lib". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "pfile2ismrmrd" requests linking to directory "/gpfs/share/apps/xslt/1.1.33/lib". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "p2i-generic" requests linking to directory "/gpfs/share/apps/xslt/1.1.33/lib". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "p2i-generic" requests linking to directory "/gpfs/share/apps/xslt/1.1.33/lib". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "p2i" requests linking to directory "/gpfs/share/apps/xslt/1.1.33/lib". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "p2i" requests linking to directory "/gpfs/share/apps/xslt/1.1.33/lib". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "p2i-NIH" requests linking to directory "/gpfs/share/apps/xslt/1.1.33/lib". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "p2i-NIH" requests linking to directory "/gpfs/share/apps/xslt/1.1.33/lib". Targets may link only to libraries. CMake is dropping the item.
and thus subsequently
$ make
[ 27%] Built target p2i
[ 36%] Linking CXX executable pfile2ismrmrd
/gpfs/home/riemeb01/ismrmrd/build/install/lib/libismrmrd.so: undefined reference to std::runtime_error::runtime_error(char const*)@GLIBCXX_3.4.21' libp2i.so: undefined reference to
xsltSaveResultToString'
libp2i.so: undefined reference to xsltParseStylesheetDoc' libp2i.so: undefined reference to
xsltFreeStylesheet'
libp2i.so: undefined reference to `xsltApplyStylesheet'
collect2: error: ld returned 1 exit status
I have an idea of what docker/a container is, but have not managed to make it work. Regarding the time I invested in trying to make it work I hoped you could give some more guidance on this.
Thanks Bruno
Hi,
My apologies - from your query, it wasn't clear how familiar you were with Docker.
For the repository you linked to, the "master" branch will set up a fairly generic openSUSE container, with all of the requirements to build a generic version of ISMRMRD, and the Gadgetron. Most of the "heavy lifting" is in the "createMachine.sh" script, so it can be used on a bare metal or stand-alone VM if you choose (I've tested this on bare-metal, and verified that it works). After this machine is set up, you would still have to download, build, and install ISMRMRD and Gadgetron yourself, but most, if not all, of those changes have been checked into ISMRMRD.
To create the container with the GE tools embedded, check out the "DV26.0 ..." branch of the same repository above, then copy the rpms you would get from GE for ESE, ESE-3p, and the tgz Orchestra archive into the same directory. Make links for the generic names for those files specified in the Dockerfile for that branch (i.e. "WindRiver.arch.rpm", "ESE-current.os-arch.rpm", "ESE-current.3p.rpm") to the files you would want to use, and that should get you an openSUSE container, with all of GE's development tools installed. The Docker build commands I've used are in the README files in the respective branches of that repository, and you can tailor them as you wish.
This 2nd stage is overlaid on the base of the generic container (removes the system HDF5, as it conflicts with GE, etc). The end result is you will have 2 containers - a version with all openSUSE software only, and with requirements in place to build ISMRMRD and Gadgetron. On top of this, another "slice" of data will be overlaid, with GE's tools, and other system modifications, to build a version of ISMRMRD that can be used to build the GE converter, and the GE converter itself.
Hope this is helpful.
The errors in this post indicate that this portion of the cmake command:
CMAKE_EXE_LINKER_FLAGS="-lpthread -lz -ldl"
is not being properly processed and passed through to the make process. Are those package (pthread, libz, and libdl) installed and available on your system? This error might also be due to this:
option(build4GE FALSE ON)
I would change that to:
option(build4GE TRUE)
or leave it as is in its original state in the CMakefile, and use the below cmake command. I am not sure what the behavior "option(build4GE FALSE ON)" is - if it takes the first or last entry. But from the behavior above, it seems to take the first option.
If you have Orchestra installed and available, so therefore your environment variable "ESETOP" is set, and you have "ISMRMRD_HOME" is set, your cmake command to build ISMRMRD should be as something as simple as:
cmake -D CMAKE_INSTALL_PREFIX=$ISMRMRD_HOME -D build4GE=TRUE ..
This should set all of the necessary flags to the needed values for this.
I am not at all familiar with Sun Linux, so these are my guesses based on the above error messages. It seems that the XSLT packages added, were not installed as a library, at least not in a form that the GE converter can understand and link to.
Let's see if we can help you get things working on Ubuntu (as we understand that a little better), then we can help you debug your Sun Linux setup. Let us know how these suggestions work, or don't work, for you.
Hi,
on Ubuntu:
Just to be sure, I just reinstalled Orchestra with export SDKTOP=/path/to/orchestra-sdk-1.7-1 apt-get install gawk xutils-dev csh apt-get install gcc-4.8 g++-4.8 mkdir $SDKTOP/Examples/build cd $SDKTOP/Examples/build CC=gcc-4.8 CXX=g++-4.8 cmake -DOX_INSTALL_DIRECTORY=$SDKTOP .. make
Which runs fine. Did I forget something? There is no $ESETOP set..?
Concerning the build4GE option: I was assuming the cmake outputs tells me correct option setting (" STATUS, Setting up ISMRMRD build to use GE SDK HDF5 and Boost components for GE converter."). I also tried your suggestion, option(build4GE TRUE) actually does not set the option, -D build4GE=TRUE does though.
The packages libc6-dev, zlib1g-dev, and libpthread-stubs0-dev are installed on the system. (Should contain the necessary libraries according to https://packages.ubuntu.com/search?suite=trusty§ion=all&arch=any&keywords=libz.so&searchon=contents)
ESETOP only concerns the pulse sequence development environment. If you want to use the same machine or container for sequence development (as I do) then yes, you would need to have ESETOP set. However, since the GE to ISMRMRD converter depends only on Orchestra, you just need to have SDKTOP set.
The listed packages look fine to satisfy the various compilation requirements.
So it seems that the build on Ubuntu works. Does it? And if yes - does the built GE converter work on the provided sample data?
No, the ismrmrd make errors stay the same, nothing changed. ("runs fine" just addressed my orchestra installation)
Sequence development is not an issue, we just want to convert Scanarchives to ismrmrd
Are these errors when building ISMRMRD's unit tests? If that is the case - try disabling those. Please see ISMRMRD's CMakefile here, lines 263 - 267. Try this cmake command:
cmake -D CMAKE_INSTALL_PREFIX=$ISMRMRD_HOME -D build4GE=TRUE -D BUILD_TESTS=OFF ..
I've had trouble building ISMRMRD's unit tests with Orchestra's Boost libraries.
in comment 3:
[ 54%] Linking CXX executable ismrmrd_test_xml
linking ismrmrd_test_xml fails.
Just tried cmake -D CMAKE_INSTALL_PREFIX=$ISMRMRD_HOME -D build4GE=TRUE -D BUILD_TESTS=OFF ..
which didn't change the behavior.
In the build directory for ISMRMRD, could you please print the contents of this file:
build/utilities/CMakeFiles/ismrmrd_test_xml.dir/link.txt
In my openSUSE build container, the contents of that file are:
usr/bin/c++ -w -std=c++11 -D_GLIBCXX_USE_CXX11_ABI=0 -O3 -DNDEBUG -lpthread -lz -ldl -rdynamic CMakeFiles/ismrmrd_test_xml.dir/ismrmrd_test_xml.cpp.o CMakeFiles/ismrmrd_test_xml.dir/__/libsrc/pugixml.cpp.o -o ismrmrd_test_xml -Wl,-rpath,$HOME/my_root/src/ismrmrd/build: ../libismrmrd.so.1.4.2 $SDKTOP/Orchestra/3p/lib/libhdf5.a
/usr/bin/c++ -w -std=c++11 -D_GLIBCXX_USE_CXX11_ABI=0 -O3 -DNDEBUG -lpthread -lz -ldl -rdynamic CMakeFiles/ismrmrd_test_xml.dir/ismrmrd_test_xml.cpp.o CMakeFiles/ismrmrd_test_xml.dir/__/libsrc/pugixml.cpp.o -o ismrmrd_test_xml -Wl,-rpath,/home/riemeb01/ismrmrd/build: ../libismrmrd.so.1.4.2 /home/riemeb01/orchestra-sdk-1.7-1/include/recon/3p/Linux/hdf5-1.8.12_dev_linux64/lib/libhdf5.a
(before I manually changed the HDF5/BOOST paths in CMakeLists ll57-58 to the path you can see here I got the error
STATUS, Setting up ISMRMRD build to use GE SDK HDF5 and Boost components for GE converter. CMake Error at /usr/local/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message): Could NOT find HDF5 (missing: HDF5_LIBRARIES HDF5_INCLUDE_DIRS C) (found version "") Call Stack (most recent call first): /usr/local/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:393 (_FPHSA_FAILURE_MESSAGE) /usr/local/share/cmake-3.16/Modules/FindHDF5.cmake:929 (find_package_handle_standard_args) CMakeLists.txt:136 (find_package) )
Hi - so I did a bit more digging, and here's what I am seeing.
I downloaded the Gadgetron's Ubuntu 18.04 container from Docker Hub. I can build a generic ISMRMRD just fine
However, when I add GE's Orchestra libraries to use GE's HDF5 (by using the -D build4GE=TRUE cmake option), to build the GE converter - I can replicate the errors you are seeing above.
The symbols that cannot be found (i.e. thread_create pthread_key_create compress2 pthreadgetspecific dlopen inflate inflateInit inflateEnd pthread_once dlclose dlerror, all from above) seem to be in GE's HDF5 libraries, so when the compiler and linker tries to find those symbols, they can't on Ubuntu.
On openSUSE, I see those symbols in /usr/lib64/libpthread-2.26.so, /usr/lib/libdl-2.26.so, and /usr/lib64/libz.so.1.2.11 ... In Ubuntu, the equivalent libraries seem to exist in /lib/x86_64-linux-gnu/, but I have not been able to figure out why the linker has not been able to find those symbols in the Ubuntu version of the libraries.
Okay, so here's a potential solution. I've modified CMakeLists for ISMRMRD to explicitly link those missing libraries:
git diff
diff --git a/CMakeLists.txt b/CMakeLists.txt
index afe8397..c8ce787 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -53,7 +53,7 @@ if (WIN32)
elseif (build4GE)
message (STATUS, " Setting up ISMRMRD build to use GE SDK HDF5 and Boost components for GE converter.")
if(DEFINED ENV{SDKTOP})
- cmake_policy (SET CMP0074 OLD)
+ # cmake_policy (SET CMP0074 OLD)
set(HDF5_ROOT "$ENV{SDKTOP}/3p")
set(BOOST_ROOT "$ENV{SDKTOP}/3p")
else ()
@@ -224,7 +224,7 @@ set_target_properties(ismrmrd
EXPORT_NAME ISMRMRD
INTERFACE_INCLUDE_DIRECTORIES $<INSTALL_INTERFACE:include>)
-target_link_libraries(ismrmrd ${ISMRMRD_TARGET_LINK_LIBS})
+target_link_libraries(ismrmrd ${ISMRMRD_TARGET_LINK_LIBS} pthread z dl)
list(APPEND ISMRMRD_LIBRARIES ismrmrd) # Add to list of libraries to be found
list(APPEND ISMRMRD_LIBRARY_DIRS ${CMAKE_BINARY_DIR} ) # Add to list of directories to find libraries
Not sure why adding these library explicitly is needed on Ubuntu when using Orchestra's HDF5, whereas on openSUSE and Sun Linux, it doesn't seem to be.
The cmake policy commented out is also not valid for the version of cmake on Ubuntu 18.04. However, since you didn't mention that, I am guessing you caught that already.
Let me know if this lets ISMRMRD build on your Ubuntu 18.04 machine with GE's Orchestra.
Thanks so far! That worked! (Using gcc/g++ 4.8, a later version gave linker errors during ge_to_ismrm build)
Trying to convert a sample scanarchive (Step 12 of the readme) now gives me the following
pfile2ismrmrd -v -l libp2i-generic.so -p GenericConverter -x $GE_TOOLS_HOME/share/ge-tools/config/default.xsl ScanArchive_FSE.h5 PSDName: Trace|Unknown|296169086.322073920|ProgramOptionsImpl.cpp:165| Failed to open program option file with name /vobs/recon/System/Config/System.geopts. Trace|Unknown|296169086.385681920|ProgramOptionsImpl.cpp:165| Failed to open program option file with name /vobs/recon/System/Config/SystemLinuxSim.geopts. Trace|Unknown|296169088.762059920|ProgramOptionsImpl.cpp:165| Failed to open program option file with name /vobs/recon/Orchestra/Config/Orchestra.geopts. Trace|Unknown|296169088.787557920|ProgramOptionsImpl.cpp:165| Failed to open program option file with name /vobs/recon/Orchestra/Config/OrchestraLinuxSim.geopts. ControlSource|Unknown|296169117.170211920|LxControlSource.cpp:387| CalibrationUID: 0, CoilConfigUID: 238374, CoilCalibrationUID: 0 Loading plugin: libp2i-generic.so:GenericConverter /home/riemeb01/ismrmrd/ge_to_ismrmrd/src/GenericConverter.cpp: shared object loaded Loading stylesheet: /home/riemeb01/ismrmrd/ge_to_ismrmrd/share/ge-tools/config/default.xsl Applying stylesheet ArchiveStorage|Unknown|296169136.763571920|Storage.cpp:99| Created Storage ScanData_20180411_090315036 ControlSource|Unknown|296169162.921371920|LxControlSource.cpp:387| CalibrationUID: 0, CoilConfigUID: 238374, CoilCalibrationUID: 0 ArchiveStorage|Unknown|296170695.845527920|Storage.cpp:205| Finish Storage ScanData_20180411_090315036 Number of acquisitions stored in HDF5 file is 768 ArchiveStorage|Unknown|296170714.108971920|Storage.cpp:232| Close Storage ScanData_20180411_090315036 Swedished! /home/riemeb01/ismrmrd/ge_to_ismrmrd/src/GenericConverter.cpp: shared object unloaded
Did you get a file called "testdata.h5" that was approximately the size of the sample ScanArchive FSE file? From everything you posted above - it looks like the converter works.
If so - then these issues have been worked out, and we should open another thread to continue discussions on other issues. I also submitted a pull request to the main ISMRMRD repository so the fix above is more generally available. This fix also works in my openSUSE environment, so it should be worth making this available in the main ISMRMRD source tree.
Yes, testdata.h5 was created, and it is slightly lager than the Scanarchive. (It contains only header and unordered raw data so far.)
Thanks for looking into this!
Thanks for your help debugging and testing - I think this will move things in a generally good direction.
BTW - the data in the H5 file might not be ordered in a way that you may expect with GE raw data, but the data are tagged with the appropriate encoding counters to allow it to be packed into k-space appropriately and reconstructed. You can use this reconstruction chain configurator to reconstruct these data with a Gadgetron instance.
Welcome to ISMRMRD and Gadgetron!
Hi,
we have tried to compile the ge_to_ismrmrd tool on Sun Linux with different gcc (4.9, 6.3, and 8.1) and cmake (3.11 and 3.15) versions. On another system (Ubuntu 18), we did not get past errors while linking the ismrmrd package. Orchestra is 1.7. While (on Sun, step ge_to_ismrmrd) the including of libxslt could be done manually (out of the box: "missing: LIBXSLT_LIBRARIES LIBXSLT_INCLUDE_DIR"), we do not get past "Could NOT find Ismrmrd (missing: ISMRMRD_LIBRARIES)". the installation of ismrmrd with a path in my home directory was successful though (I have no sudo rights on this system).
I could find another issue where you suggest the use of docker containers. I found https://github.com/roopchansinghv/dockerImage4DevMR Can you give us a little more guidance on how to use that?
Thanks Bruno