NCAR / container-dtc-nwp

End-to-end NWP systems in containers.
https://dtcenter.org/community-code/numerical-weather-prediction-nwp-containers
28 stars 13 forks source link

Update WPS, WRF, MET, and METviewer with latest code tags #45

Closed michelleharrold closed 2 years ago

michelleharrold commented 2 years ago

the METviewer Dockerfile does not work as-is due to the alpha versions of METcalpy abd METplotpy being removed. Suggest switching to METviewer v4.0.0, METcalpy v1.0.0 and METplotpy v1.0.0.

fossell commented 2 years ago

I replicated this error as well.

michelleharrold commented 2 years ago

MET compiles and runs successfully with v10.0.0, but it does have warnings related to shared object files. @JohnHalleyGotway -- can you take a look at this? I have these mods in feature/update_versions. Snippet of warning message below:

Configuring met-v10.0.0 and writing log file /comsoftware/met/met-v10.0.0/met/configure.log
Compiling met-v10.0.0 and writing log file /comsoftware/met/met-v10.0.0/met/make_install.log
/comsoftware/met/met-v10.0.0/met/src/basic/vx_config/config.tab.yy: warning: 1 shift/reduce conflict [-Wconflicts-sr]
/opt/rh/devtoolset-8/root/usr/libexec/gcc/x86_64-redhat-linux/8/ld: warning: libgfortran.so.3, needed by //usr/lib64/atlas/libsatlas.so.3, may conflict with libgfortran.so.5
/opt/rh/devtoolset-8/root/usr/libexec/gcc/x86_64-redhat-linux/8/ld: warning: libgfortran.so.3, needed by //usr/lib64/atlas/libsatlas.so.3, may conflict with libgfortran.so.5
/opt/rh/devtoolset-8/root/usr/libexec/gcc/x86_64-redhat-linux/8/ld: warning: libgfortran.so.3, needed by //usr/lib64/atlas/libsatlas.so.3, may conflict with libgfortran.so.5
/opt/rh/devtoolset-8/root/usr/libexec/gcc/x86_64-redhat-linux/8/ld: warning: libgfortran.so.3, needed by //usr/lib64/atlas/libsatlas.so.3, may conflict with libgfortran.so.5
/opt/rh/devtoolset-8/root/usr/libexec/gcc/x86_64-redhat-linux/8/ld: warning: libgfortran.so.3, needed by //usr/lib64/atlas/libsatlas.so.3, may conflict with libgfortran.so.5
/opt/rh/devtoolset-8/root/usr/libexec/gcc/x86_64-redhat-linux/8/ld: warning: libgfortran.so.3, needed by //usr/lib64/atlas/libsatlas.so.3, may conflict with libgfortran.so.5
/opt/rh/devtoolset-8/root/usr/libexec/gcc/x86_64-redhat-linux/8/ld: warning: libgfortran.so.3, needed by //usr/lib64/atlas/libsatlas.so.3, may conflict with libgfortran.so.5
JohnHalleyGotway commented 2 years ago

I was able to replicate these warning messages when building the MET image. Here are the shared object files that are triggering these warnings:

[comuser@32726d2bc26d met]$ ldd /usr/lib64/atlas/libsatlas.so.3 | grep gfortran
    libgfortran.so.3 => /lib64/libgfortran.so.3 (0x00007f69675af000)
michelleharrold commented 2 years ago

Thanks for confirming, John. I admit shared object files aren't my area of expertise. Do you think this stems from some incompatibility between something in our base image and something in the MET Dockerfile? MET runs successfully, but if there is a way to get past this warning what would be preferred!

JohnHalleyGotway commented 2 years ago

So the base image has both libgfortran.so.3 and libgfortran.so.5:

docker run -it --rm dtcenter/base_image /bin/bash
Starting with UID : 9999
[comuser@7b09a752a689 home]$ ls /usr/lib64/libgfortran.so*
/usr/lib64/libgfortran.so.3  /usr/lib64/libgfortran.so.3.0.0  /usr/lib64/libgfortran.so.5  /usr/lib64/libgfortran.so.5.0.0

And stepping back, so too does the common-community-container:

docker run -it --rm dtcenter/common-community-container:1.0 /bin/bash
bash-4.2$ ls /usr/lib64/libgfortran*
/usr/lib64/libgfortran.so.3  /usr/lib64/libgfortran.so.3.0.0  /usr/lib64/libgfortran.so.5  /usr/lib64/libgfortran.so.5.0.0

For comparison, checking a recent build of MET by DockerHub, it only has libgfortran.so.3:

docker run -it --rm dtcenter/met:develop /bin/bash
[root@642c112b95d1 met]# ls /usr/lib64/libgfortran*
/usr/lib64/libgfortran.so.3  /usr/lib64/libgfortran.so.3.0.0

Looking in the dtcenter/common-community-container, installing gcc adds the standard dependency of libgfortran.so.3. And installing devtoolset-8 adds the libgfortran.so.5 dependency... which leads to the linker warning from MET.

Recommend that we:

@michelleharrold how would you like me to proceed?

JohnHalleyGotway commented 2 years ago

I tried updating the MET Dockerfile to remove the default gfortran library with:

RUN yum remove -y gcc-gfortran libgfortran

That command is successful and does remove /usr/lib64/libgfortran.so.6. However, installing cairo/freetype on a subsequent line adds it back in!

--> Processing Dependency: pkgconfig(egl) for package: cairo-devel-1.15.12-4.el7.x86_64
---> Package freetype-devel.x86_64 0:2.8-14.el7_9.1 will be installed
---> Package gcc-gfortran.x86_64 0:4.8.5-44.el7 will be installed
--> Processing Dependency: libgfortran = 4.8.5-44.el7 for package: gcc-gfortran-4.8.5-44.el7.x86_64
--> Processing Dependency: libgfortran.so.3()(64bit) for package: gcc-gfortran-4.8.5-44.el7.x86_64

My advice is that we do not fix those linker warnings for MET. In order to do so, we'd need to manually compile cairo/freetype using GCC8, which seems like a waste of time. That time would be better spent seeing if we can upgrade the CCC from centos7 to centos8 hoping that would provide a more stable build environment.

michelleharrold commented 2 years ago

@JohnHalleyGotway -- thanks for diving into this. I agree with your assessment. Thanks!

fossell commented 2 years ago

@michelleharrold - Can this issue be closed now?

michelleharrold commented 2 years ago

Oh yeah, I thought I closed it, but apparently not! Thanks!