Ubuntu Packages

Here I try to list all of the installed ubuntu packages and give an explanation of why they are included. Lot's of these packages are installed into the ROOT official docker container and so I have copied them into this image. I have looked into their purpose by a combination of googling the package name and looking at ROOT's reason for them.

In the Dockerfile, most packages are added when they are needed for the rest of the build. Adding packages before they are needed means the container needs to be rebuilt starting from the point you add them, so it is a good habit to avoid doing so. There is a helper script installed in the container install-ubuntu-packages that can be called directly in the Dockerfile with a list of packages to install.

If you want to add additional packages that aren't necessary for building ldmx-sw, its dependencies, or the container environment use the install command at the end of the Dockerfile.

Python Packages

If you are looking to add python packages, prefer adding them to the python packages file rather than installing them from the ubuntu repositories.

Extracting Package List from Dockerfile

We have settled into a relatively simple syntax for the packages in the Dockerfile and thus I've been able to write an awk script that can parse the Dockerfile and list the packages we install from the ubuntu repositories.

BEGIN { in_install=0; } { # check if this line is in an install command if (in_install && NF > 0) { # print out all entires on line except the line continuation backslash for (i=1; i <= NF; i++) { if ($i != "\\") { print $i; } } } # update for next lines if we are opening an install command or closing if ($0 ~ /^RUN install-ubuntu-packages.*$/) { in_install=1; } else if (NF == 0 || $1 == "RUN" && $2 != "install-ubuntu-packages") { in_install=0; } }

which is stored in docs/src and can be run like

awk -f docs/src/get-ubuntu-packages.awk Dockerfile
PackageReason
binutilsAdding PPA and linking libraries
cmakeConfiguration of build system
gccGNU C Compiler
g++GNU C++ Compiler
gfortranGNU Fortran Compiler
localesConfiguration of TPython and other python packages
makeBuilding system for dependencies and ldmx-sw
wgetDownload source files for dependencies and ldmx-sw Conditions
python3-devROOT TPython and ldmx-sw configuration system
python3-numpyROOT TPython requires numpy and downstream analysis packages
python3-pipDownloading more python packages
python3-tkmatplotlib requires python-tk for some plotting
rsyncnecessary to build Pythia8
fonts-freefont-ttffonts for plots with ROOT
libafterimage-devROOT GUI needs these for common shapes
libfftw3-devDiscrete fourier transform in ROOT
libfreetype6-devfonts for plots with ROOT
libftgl-devRendering fonts in OpenGL
libgif-devSaving plots as GIFs
libgl1-mesa-devMesaGL allowing 3D rendering using OpenGL
libgl2ps-devConvert OpenGL image to PostScript file
libglew-devGLEW library for helping use OpenGL
libglu-devOpenGL Utility Library
libjpeg-devSaving plots as JPEGs
liblz4-devData compression in ROOT serialization
liblzma-devData compression in ROOT serialization
libpng-devSaving plots as PNGs
libx11-devlow-level window management (ROOT GUI)
libxext-devlow-level window management (ROOT GUI)
libxft-devlow-level window management (ROOT GUI)
libxml2-devXML reading and writing
libxmu-devlow-level window management (ROOT GUI)
libxpm-devlow-level window management (ROOT GUI)
libz-devData compression in ROOT serialization
libzstd-devData compression in ROOT serialization
nlohmann-json3-devJSON reading/writing in ROOT and ldmx-sw
srm-ifce-devsrm-ifce client side access of distributed storage within ROOT
libgsl-devGNU Scientific Library for numerical calculations in ROOT MathMore (needed for GENIE)
liblog4cpp5-devC++ Logging Library used in GENIE
ca-certificatesInstalling certificates to trust within container
clang-formatC++ Code Formatting for ldmx-sw
libboost-all-devC++ Utilities for Acts and ldmx-sw
libssl-devSecurely interact with other computers and encrypt files
clangC++ Alternative Compiler for ldmx-sw
clang-tidyC++ Static Analyzer for ldmx-sw
clang-toolsAdditional development tools for ldmx-sw
cmake-curses-guiGUI for inspecting CMake configuration
gdbGNU DeBugger for ldmx-sw development
libasan8Address sanitization for ldmx-sw
lldalternative linker for ldmx-sw