#!/bin/bash set -eu debsrc_url="https://www.xilinx.com/content/dam/xilinx/publications/solarflare/onload/openonload/8-1-3-40/SF-122451-LS-14-OpenOnload-DEB-Release-Package.zip" debsrc_folder="onload-8.1.3.40" build_packages=( "debhelper" "devscripts" "gawk" "libcap-dev" "libpcap-dev" "python3-dev" ) build_folder="$(mktemp -d)" build_log="$build_folder/log" function log() { echo "-- $*" } function cmd() { cmd_redirect="$* 1>> \"$build_log\" 2>&1" log "Running: $*" eval "$cmd_redirect" return $? } log "Installing in $build_folder; logs available at $build_log" log log "Installing build packages:" cmd sudo apt update && \ cmd sudo apt install -y "${build_packages[@]}" log debsrc_filename="/tmp/$(basename $debsrc_url)" log "Retrieving OpenOnload sources:" cmd wget -NP /tmp "$debsrc_url" log log "Unpacking OpenOnload sources:" cmd pushd "$build_folder" && \ cmd busybox unzip "$debsrc_filename" && \ cmd tar xf ./*.tgz && \ cmd dpkg-source -x ./*.dsc log log "Building OpenOnload:" cmd pushd "$build_folder/$debsrc_folder" && \ cmd debuild -i -uc -us log install_debs=("$build_folder"/*.deb) log "Installing OpenOnload packages:" cmd sudo apt install -y "${install_debs[@]}" log log "Building OpenOnload kernel modules:" cmd sudo module-assistant --non-inter auto-install onload && \ # Not mentioned in the documentation, but: # OpenOnload installs a module named sfc.ko, which clashes with # the sfc.ko provided by the OS installation. # To deal with this, a depmod file is also installed, which should # instruct the OS to load OpenOnload's version. # However, unless depmod is re-run after installation, OpenOnload will fail # to load, citing "symbol not found" errors. sudo depmod log log "Loading OpenOnload kernel modules:" cmd sudo onload_tool reload log log "Installation complete."