brlcad
brlcad copied to clipboard
Docker debian:stable-slim (bookworm) build report
Context: I'm a long time software developer. I prefer Debian and use Docker for most of my experiments. I'm a first-time visitor to the BRL-CAD world and wanted to test it for myself. I was unable to find any packages for Debian (Bookworm) and thought I'd try my hand at compiling from source.
I came across some issues, but don't feel that I know enough about the ecosystem to start updating the wiki, even though technically I suspect I could. Instead I'm lodging this as an issue, so others with more experience might consider my feedback in a wider context.
I essentially followed the bouncing ball on the wiki and got to the point where I could compile the software inside a Docker container, using a build stage and then copy the installed files from that stage to a new container.
In doing so I discovered the following:
These dependencies appear to be superfluous, because build-essential
already pulls them in:
- libc6-dev
- make
These dependencies appear to be missing. The compilation process stops or generates an error. I didn't dig in to see if all errors were terminal or not. For example, in passing I saw other errors, like references to OpenCV
missing, but they didn't appear to stop the compilation process. I note that a big omission is git
:
- doxygen
- git
- graphviz
- libgdal-dev
- mpich
- swig
After compilation completed, I ran each of the tests. I haven't (yet) submitted my benchmarks since I don't know if they are representative. I'm doing this all inside a VMware Linux VM running on MacOS. My "Docker" machine is not using all the resources of the Mac, so these are "virtual" benchmarks, impressive, but not sure how relevant they are.
As I understand it, make test
is supposed to have "failures", but, in my opinion, that doesn't mean that the process itself should fail, since that halts the compilation during the build stage of a Docker container, which means that you cannot use it to validate the build. It's unclear from the documentation that I found which of the tests are run by make test
, since none of the other tests appeared to have any failures, which makes me think that it is a super set of all tests with bonus tests thrown in.
If you follow the instructions in the wiki, (and you resolve the missing dependencies) you end up with an installed binary in "the right" location, that passes all the tests, but won't run because none of the dependencies are installed. I was unable to discover the list of actual dependencies at this point.
It's unclear how to set the install directory to something else, like /opt
or /usr/local
and make -n install
didn't actually help provide information about what was going to be installed where, instead giving me pages of make commands, rather than install commands.
I tried using checkinstall
to "package" the compiled version, but it failed with this error:
CMake Error at src/other/ext/cmake_install.cmake:46 (file):
file INSTALL destination: /usr/brlcad/rel-7.38.1/lib is not a directory.
Interestingly, make install
worked just fine, though it was unclear what was installed and where. I took a punt and considered /usr/brlcad
the root of the installation. I don't know if any files were "installed" anywhere else.
The script ./sh/make_deb.sh
, which I discovered in /doc/README.Linux
is not mentioned in the "Compiling BRL-CAD" wiki page. It solves the issues with dependencies that are not installed on a bare system.
Apart from altering the copyright date on that script, it wasn't updated since 2014. Surprisingly it still appears to work in the current (Bookworm) version of Debian. It does put up several warnings about "Compatibility levels before 10 are depreciated (level 7 in use)"
Based on the package that the script creates, this is a list of the dependencies that are installed on a debian:stable-slim
container:
- ca-certificates
- fontconfig-config
- fonts-dejavu-core
- gdal-data
- gdal-plugins
- krb5-locales
- libaec0
- libaom3
- libarmadillo11
- libarpack2
- libblas3
- libblosc1
- libbrotli1
- libbsd0
- libcfitsio10
- libcurl3-gnutls
- libcurl4
- libdav1d6
- libde265-0
- libdeflate0
- libdrm2
- libdrm-amdgpu1
- libdrm-common
- libdrm-intel1
- libdrm-nouveau2
- libdrm-radeon1
- libedit2
- libelf1
- libexpat1
- libfontconfig1
- libfreetype6
- libfreexl1
- libfyba0
- libgdal32
- libgeos3.11.1
- libgeos-c1v5
- libgeotiff5
- libgfortran5
- libgif7
- libgl1
- libgl1-mesa-dri
- libglapi-mesa
- libglvnd0
- libglx0
- libglx-mesa0
- libgssapi-krb5-2
- libhdf4-0-alt
- libhdf5-103-1
- libhdf5-hl-100
- libheif1
- libice6
- libicu72
- libjbig0
- libjpeg62-turbo
- libjson-c5
- libk5crypto3
- libkeyutils1
- libkmlbase1
- libkmldom1
- libkmlengine1
- libkrb5-3
- libkrb5support0
- liblapack3
- liblcms2-2
- libldap-2.5-0
- libldap-common
- liblerc4
- libllvm15
- libltdl7
- libmariadb3
- libminizip1
- libnetcdf19
- libnghttp2-14
- libnspr4
- libnss3
- libnuma1
- libodbc2
- libodbcinst2
- libogdi4.1
- libopengl0
- libopenjp2-7
- libpciaccess0
- libpng16-16
- libpoppler126
- libpq5
- libproj25
- libpsl5
- libqhull-r8.0
- libquadmath0
- librtmp1
- librttopo1
- libsasl2-2
- libsasl2-modules
- libsasl2-modules-db
- libsensors5
- libsensors-config
- libsm6
- libsnappy1v5
- libspatialite7
- libsqlite3-0
- libssh2-1
- libssl3
- libsuperlu5
- libsz2
- libtiff6
- libtirpc3
- libtirpc-common
- liburiparser1
- libutempter0
- libwebp7
- libx11-6
- libx11-data
- libx11-xcb1
- libx265-199
- libxau6
- libxaw7
- libxcb1
- libxcb-dri2-0
- libxcb-dri3-0
- libxcb-glx0
- libxcb-present0
- libxcb-randr0
- libxcb-shm0
- libxcb-sync1
- libxcb-xfixes0
- libxdmcp6
- libxerces-c3.2
- libxext6
- libxfixes3
- libxft2
- libxi6
- libxinerama1
- libxml2
- libxmu6
- libxpm4
- libxrender1
- libxshmfence1
- libxt6
- libxxf86vm1
- libz3-4
- luit
- mariadb-common
- mysql-common
- openssl
- poppler-data
- proj-bin
- proj-data
- publicsuffix
- unixodbc-common
- x11-common
- xbitmaps
- xterm
At this stage I can launch both mged
and archer
and see the user interface. I haven't done anything with it, but that's for tomorrow.
If any of my feedback needs more input from me, please don't hesitate to ask. If there are things that need doing that I could or should (like updating the wiki), please let me know. I don't want to step on any toes.
Kind regards, Onno