Skip to content

Update build for ubuntu 22.04 - #937

Closed
paskino wants to merge 22 commits into
SyneRBI:masterfrom
paskino:system_hdf5
Closed

Update build for ubuntu 22.04#937
paskino wants to merge 22 commits into
SyneRBI:masterfrom
paskino:system_hdf5

Conversation

@paskino

@paskino paskino commented Feb 11, 2025

Copy link
Copy Markdown
Contributor

Defers the installation of CIL run requirements which confuse CMake.

@paskino

paskino commented Feb 11, 2025

Copy link
Copy Markdown
Contributor Author

There is an issue with Gadgetron or dcmtk and GCC? https://github.com/SyneRBI/SIRF-SuperBuild/actions/runs/13265453075/job/37031643450?pr=937

/usr/include/dcmtk/ofstd/ofstdinc.h:121:2: error: #error "Macro INCLUDE_CSTRING not supported anymore. Include <cstring> directly."
  121 | #error "Macro INCLUDE_CSTRING not supported anymore. Include <cstring> directly."

This is the error on my docker instance, potentially I haven't redirected stderr so the output seems incomplete.

#24 86.45 ninja: build stopped: subcommand failed.
#24 86.45 ninja: build stopped: subcommand failed.
#24 ERROR: process "/bin/bash -o pipefail -c BUILD_FLAGS=\"-G Ninja -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DSTIR_ENABLE_OPENMP=${STIR_ENABLE_OPENMP} -DUSE_SYSTEM_Armadillo=${USE_SYSTEM_Armadillo} -DUSE_SYSTEM_Boost=${USE_SYSTEM_Boost} -DUSE_SYSTEM_FFTW3=${USE_SYSTEM_FFTW3} -DUSE_SYSTEM_HDF5=${USE_SYSTEM_HDF5} -DUSE_ITK=${USE_ITK} -DUSE_SYSTEM_SWIG=${USE_SYSTEM_SWIG} -DUSE_NiftyPET=${USE_NiftyPET} -DBUILD_siemens_to_ismrmrd=${BUILD_siemens_to_ismrmrd} -DBUILD_pet_rd_tools=${BUILD_pet_rd_tools} -DGadgetron_USE_CUDA=${Gadgetron_USE_CUDA} -DBUILD_CIL=${BUILD_CIL}\"  EXTRA_BUILD_FLAGS=\"${EXTRA_BUILD_FLAGS}\"  bash /opt/scripts/user_sirf-ubuntu.sh  && fix-permissions /opt/SIRF-SuperBuild /opt/ccache" did not complete successfully: exit code: 1

@KrisThielemans

Copy link
Copy Markdown
Member

There is. gadgetron/gadgetron#1277. However, this shouldn't occur on ubuntu 22.04. Does it say somewhere what version of dcmtk is being used?

@paskino

paskino commented Feb 12, 2025

Copy link
Copy Markdown
Contributor Author

Good spot! My docker image says it's 24.04

(base) root@2a418c82a9b7:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.1 LTS
Release:        24.04
Codename:       noble

I suppose the base docker image has upgraded to 24.04 more or less recently without us noticying.

ARG BASE_CONTAINER=quay.io/jupyter/scipy-notebook:latest

We hit a similar issue but for a too old image with CIL.

@paskino

paskino commented Feb 12, 2025

Copy link
Copy Markdown
Contributor Author

On my docker instance with the ubuntu-22.04 base image it builds

(base) root@2035ef435116:/opt/SIRF-SuperBuild# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.4 LTS
Release:        22.04
Codename:       jammy

Comment thread Dockerfile Outdated
sed -r -i -e '/^\s*- (cil|ccpi-regulariser).*/d' /opt/scripts/requirements.yml; \
sed -r -i -e '/^\s*- (cil|ccpi-regulariser|h5py|dxchange).*/d' /opt/scripts/requirements.yml; \
else \
sed -r -i -e '/^\s*- (h5py|dxchange|cil|ccpi-regulariser|pillow|olefile|pywavelets|cil-data|tqdm|numba|zenodo_get).*/d' /opt/scripts/requirements.yml; \

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think SIRF-exercises do need numba and tqdm, zenodo_get would be useful as well

@KrisThielemans

Copy link
Copy Markdown
Member

Why did you move the python setup later on GHA? GHA is using the system python and pip. This doesn't have anything to do with conda discussions/problems on docker.

By the way, why not pin the hdf5 version (both conda and pip I guess to be the same as the system one. Then it wouldn't matter which one is picked up. For conda, I suppose we'd still need to install cxx-compiler to avoid what we saw at #935 (comment)

@paskino

paskino commented Feb 13, 2025

Copy link
Copy Markdown
Contributor Author

Let's try to install hdf5 from conda/pip of the same version of the system one to minimise incompatibilities.

Comment thread .github/workflows/c-cpp.yml Outdated
Comment on lines +165 to +178
- uses: actions/setup-python@v5
with:
python-version: '${{ steps.deps.outputs.python-version }}'
cache: pip
- name: pip install
working-directory: docker
run: PYTHON_EXECUTABLE=python3 PYTHON_INSTALL_DIR="$HOME/virtualenv" ./user_python-ubuntu.sh
- uses: hendrikmuhs/ccache-action@v1
with:
key: ${{ matrix.os }}-${{ env.COMPILER }}-${{ matrix.compiler_version }}-${{ env.BUILD_TYPE }}-${{ github.ref_name }}-${{ github.run_id }}
restore-keys: |
${{ matrix.os }}-${{ env.COMPILER }}-${{ matrix.compiler_version }}-${{ env.BUILD_TYPE }}-${{ github.ref_name }}
${{ matrix.os }}-${{ env.COMPILER }}-${{ matrix.compiler_version }}-${{ env.BUILD_TYPE }}
append-timestamp: false

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's revert this once the same version of HDF5 that is in the system is installed via pip/conda.

@KrisThielemans KrisThielemans left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems we're on a long path here...

Comment thread docker/requirements.yml Outdated
- tqdm # cil
- numba # cil
- h5py # gadgetron and CIL
- hdf5 # gadgetron and CIL

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and STIR actually

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I meant, hdf5 is needed by STIR

Comment thread CHANGES.md
Comment thread Dockerfile Outdated
COPY docker/requirements.yml /opt/scripts/
# https://jupyter-docker-stacks.readthedocs.io/en/latest/using/common.html#conda-environments
# https://github.com/TomographicImaging/CIL/blob/master/Dockerfile
# First remove the CIL run-dependencies from requirements.yml as they install hdf5 and CMake gets confused

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no longer correct comment?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not correct indeed, but it's still not passing unittests!

@paskino

paskino commented Feb 26, 2025

Copy link
Copy Markdown
Contributor Author

I tried armadillo from conda-forge but the superbuild didn't find the devel files.

Yes, as usual this is a long and painful road.

@paskino

paskino commented Feb 26, 2025

Copy link
Copy Markdown
Contributor Author

I get the following error on Gadgetron configuration. Indeed the system boost is 1.78.0.3 on Ubuntu 22.04

CMake Error at /usr/local/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find Boost: Found unsuitable version "1.74.0", but required is at
  least "1.80.0" (found /usr/include, found components: coroutine system
  date_time program_options filesystem timer context chrono)

@KrisThielemans

Copy link
Copy Markdown
Member

The Gadgetron boost error will be because you update Gadgetron (which I told you to do). Let's keep it at the original version for now to get this through and see.

@KrisThielemans

Copy link
Copy Markdown
Member

Downgrade gadgetron!
However, building with conda hdf5 fails due to UCL/STIR#1557. So, if we do this, you'll need to fix that STIR (actually, cmake!) problem, and update STIR in version_config.cmake

Note that I successfully built Gadgetron via conda packages now. Update on https://github.com/SyneRBI/SIRF/wiki/Building-SIRF-and-CIL-with-conda.

@paskino paskino changed the title defer installation of some CIL run requirements after build Update build for ubuntu 22.04 Mar 10, 2025
Comment thread docker/requirements.yml
- cxx-compiler # compiler which built hdf5 from conda-forge
- libstdcxx-ng # Gadgetron
- libgcc-ng # Gadgetron
- dcmtk # Gadgetron

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- dcmtk # Gadgetron
- dcmtk=3.6.1 # Gadgetron

seems I forgot that on the wiki

libfftw3-dev \
libhdf5-serial-dev \
hdf5-helpers \
libfftw3-dev \

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shouldn't this be in the if USE_UBUNTU_SYSTEM_LIBRARIES

pkg-config \
golang

if USE_UBUNTU_SYSTEM_LIBRARIES=1; then

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

surely missing $ here (and below)

Comment on lines 12 to 14
libxml2-dev \
libfreetype6-dev \
libxslt-dev \

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these don't seem to be required anymore.

h5utils \
jq \
hdf5-tools \
libopenblas-dev \

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should be in the USE_UBUNTU_SYSTEM_LIBRARIES

Comment on lines 15 to 17
liblapack-dev \
liblapacke-dev \
libplplot-dev \

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should be in the USE_UBUNTU_SYSTEM_LIBRARIES

@KrisThielemans

Copy link
Copy Markdown
Member

Not 100% sure what we do with this now, but surely we urgently need the diff

- ARG BASE_CONTAINER=quay.io/jupyter/scipy-notebook:ubuntu-latest
+ ARG BASE_CONTAINER=quay.io/jupyter/scipy-notebook:ubuntu-22.04

Comment thread Dockerfile
@@ -1,5 +1,5 @@
# syntax=docker/dockerfile:1
ARG BASE_CONTAINER=quay.io/jupyter/scipy-notebook:latest
ARG BASE_CONTAINER=quay.io/jupyter/scipy-notebook:ubuntu-22.04

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

required?

@KrisThielemans KrisThielemans mentioned this pull request Mar 31, 2025
3 tasks
@paskino

paskino commented Aug 12, 2025

Copy link
Copy Markdown
Contributor Author

Hash before rebase 40605c7

@paskino

paskino commented Aug 13, 2025

Copy link
Copy Markdown
Contributor Author

Currently encountering a weird error. If building with SB the build fails because of link errors with ISMRMRD.

docker build . --build-arg NUM_PARALLEL_BUILDS=1 --build-arg RUN_CTEST=0 --build-arg BUILD_CIL=ON --build-arg REMOVE_BUILD_FILES=0 --target=build

If just configuring with SB and commenting out the build line and then launching the image and executing bash within the container, ISMRMRD builds nicely.

docker run --rm -it --entrypoint bash <image_hash>

It boils down to the incomplete environment in the case of the docker run build, despite we seem to source the same environment file the environments look completely different and the docker one lacks CXXFLAGS for instance. The CMakeCache for ISMRMRD does not have any linker flags and therefore it fails.

  1. Why are the environments different?
  2. Who sets the CXXFLAGS?

Thanks @casperdcl for pair investigation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

curl linking problem for ISMRMD with system HDF5 on Ubuntu 22.04

2 participants