# Running DUNE DAQ Release on Ubuntu **Note:** This guide is not officially supported by the DUNE DAQ Consortium. Updates may be infrequent, and compatibility is not guaranteed. **Note:** These steps have been tested with [Ubuntu 22.04 LTS](https://discourse.ubuntu.com/t/jammy-jellyfish-release-notes/24668), `docker-ce`, and `VirtualBox`. **Note:** Follow these steps on Virtual Machines, Docker containers, or natively on bare metal with root privilege. **Note:** For your convinince, [this docker image `ghcr.io/dune-daq/ubuntu:latest`](https://github.com/orgs/DUNE-DAQ/packages/container/package/ubuntu) built with [this `dockerfile`](https://github.com/DUNE-DAQ/daq-docker/blob/develop/dockerfiles/ubuntu.dockerfile) has all the system packages and modifcations in place as described by this document. ## Introduction DUNE DAQ release and its required external software stack are typically used on RHEL-derived Linux distributions like Scientific Linux 7, CentOS 7, CentOS Stream 8, and AlmaLinux 9. Here are some more details about how they are built and deployed: * [Build the external software stack](https://github.com/DUNE-DAQ/daq-release/wiki/Build-new-external-software-stack); * [Build DUNE DAQ release](https://github.com/DUNE-DAQ/daq-release/blob/develop/docs/create_release_spack.md). Although all officially supported linux server at Fermialb and CERN are RHEL-derived linux distros, often times a new developer may want to build/test/run the DAQ release on their personal/institutional Ubuntu machines. This documentation describes a few things needed on the OS side before you can run the DUNE DAQ release on Ubuntu servers. ## Required System Packages Here is the list of system packages required: ``` git python3-yaml build-essential gfortran wget tar zip rsync patch lbzip2 texinfo file keyutils libkeyutils-dev gcc-multilib g++-multilib libunwind-dev openssh-server ``` They can be installed via: ``` sudo apt update \ && sudo apt-get install -y git python3-yaml \ build-essential gfortran wget tar zip \ rsync patch lbzip2 texinfo file keyutils \ libkeyutils-dev gcc-multilib g++-multilib \ libunwind-dev openssh-server ``` `openssh-server` is not needed if you are using the DAQ release in docker containers. Note: You can skip installing `openssh-server` if you're using DAQ release in Docker containers. You will not have the ability to run `nanorc` or `DAQ integration tests`, but you can have access to the DAQ development environment and develop/build DAQ packages. ## SSH Configuration If you are using Virtual Machines, or a native installation on bare metal, you will need to configure openssh server to allow password-less ssh login. If your institution's security policy allows SSH Public Key authentication, you can do the following to set it up: ``` ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1 cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys ``` ## CVMFS Installation You can follow the instructions [here](https://cvmfs.readthedocs.io/en/latest/cpt-quickstart.html) to install cvmfs for Ubuntu. If you are using docker containers, you will need to have cvmfs available on the host machine, and then bind mount the `/cvmfs` volume to the container (`-v /cvmfs:/cvmfs:shared`. `:shared` is optional. Refer to docker documentation for more details). Alternatively, you may also use the official docker image for cvmfs client, and expose the cvmfs volume to other docker containers or the host. Instructions can also be found [here](https://cvmfs.readthedocs.io/en/latest/cpt-quickstart.html#docker-container). Briefly, here are the steps I took to install cvmfs on a Ubuntu server. ``` # 1. Install the cvmfs pacakge wget https://ecsft.cern.ch/dist/cvmfs/cvmfs-release/cvmfs-release-latest_all.deb sudo dpkg -i cvmfs-release-latest_all.deb sudo apt update sudo apt-get install cvmfs # 2. Add local configuration sudo echo "CVMFS_REPOSITORIES=dunedaq.opensciencegrid.org,dunedaq-development.opensciencegrid.org" > /etc/cvmfs/default.local sudo echo "CVMFS_CLIENT_PROFILE=single" >> /etc/cvmfs/default.local # 3. Check setup and verify access to the DUNE DAQ repos sudo cvmfs_config chksetup sudo cvmfs_config probe # 4. If step 3 failed initially, restart autofs and check again systemctl restart autofs sudo cvmfs_config probe ``` ## Create Symbolic Links to System Libraries Although we built the DAQ release and its external software stack with a minimal requirement on system packages, some of binaries do assume the availability of system libraries under `/usr/lib64`. One major difference between RHEL-derived linux distros and Ubuntu/Debian is the default location of system libraries. Ubuntu/Debian distros have the default locations as ``` # libc default configuration /usr/local/lib # Multiarch support /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/mesa ``` To ensure smooth DAQ release building and running on Ubuntu, create symbolic links for system libraries under `/usr/lib64`: ```bash # As root cd /usr/lib64 for i in $(ls /usr/lib/x86_64-linux-gnu/) do if [[ "$i" != "ld-linux"* ]]; then ln -s /usr/lib/x86_64-linux-gnu/$i . fi done ``` ## Additional Changes Required For Building DAQ Packages If you create a work area by following the `daq-buildtools` documentation, and want to build a DAQ package, there is one more change needed in the `<workarea>/sourecode/CMakeLists.txt`. You will need to tell `cmake` to search targets files under `lib64` subdirectories. You can apply the change via ``` sed -i '7 i set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS TRUE)' sourcecode/CMakeLists.txt ``` ## Summary You're ready to build and run the DAQ release on Ubuntu as you would on RHEL-derived systems. If using multiple nodes, check firewall and SELinux settings. For questions or issues, consult the Integration/Facility Working Group, Software Coordinators, or the `#np04-sysadmin` and `daq-sw-librarians` Slack channels. Keep in mind that Ubuntu is not officially supported, and these instructions may not be updated in the future.