Docker 18.09 or later is required. A single Dockerfile is used to build all images thanks to the BuildKit feature of Docker build.
For GUI operation the xhost command should be available in the system. This is available in almost distributions as either the xhost package or with xhost in the package name. e.g xhost in Ubuntu, xorg-xhost in Arch.
In order to be able to access the USB hardware on the host the udev rules must be properly set for your user (or system wide) on the host. The udev-rules folder contains these rules and a script to install them to be run with sudo install.sh.
Because SDRangel uses OpenGL this can make it possibly more difficult to run it properly on some hosts and operating systems. In any case it is assumed that the rendering takes place on the hardware of the host running Docker. For example running with a NVidia graphics card will require to build and run a linux_nvidia version of the base image.
As an indication it takes ~36mn to build the vanilla image on a laptop with core i7-5700HQ at 2.7 GHz. Note that this also depends on the speed of your network connection as many packages are being downloaded from the Ubuntu archive and also repositories cloned from Github.
When building images it is important that the image is built by the user that will also start the container. This is because the UID of the user on the host and the container should match.
- Use the
build_vanilla.shscript to produce thesdrangel/vanilla:latestimage.latestis the default but can be user defined with-toption. You would normally use the SDRangel version - Use the
run.shscript with options-g -f vanillaor just-gto run the image
- Use the
build_linux_nvidia.shscript to produce thesdrangel/nvidia:latestimage.latestis the default but can be user defined with-toption. - Use the
run.shscript with options-g -f nvidiato run the image
Initially the build script will download the NVidia driver version corresponding to your system and copy it to NVIDIA-DRIVER.run in the sdrangel folder of the cloned repository (this folder). It will skip this step if NVIDIA-DRIVER.run is already present thus whenever there is a driver upgrade in your system you will have to delete this NVIDIA-DRIVER.run file so that the newer driver is fetched by the build script.
You may also proceed manually for example to build an image for a system with a different driver version than the building host:
Download the driver appropriate to your system using the browser:
- First find out the driver currently in use in your system:
glewinfo | grep Runningto make sure the NVidia card is active (on multi GPU systems)glxinfo | grep -i nvidia. It should display a line likeOpenGL core profile version string: 4.6.0 NVIDIA 410.104. In this example the version is410.104.
- Download the driver installer corresponding to this version from this archive
- Copy it to
NVIDIA-DRIVER.runin thesdrangelfolder of the cloned repository (this folder).
Alternatively you can get the driver directly knowing its version. Example:
- cd to
sdrangel-docker\sdrangel wget http://us.download.nvidia.com/XFree86/Linux-x86_64/440.100/NVIDIA-Linux-x86_64-440.100.run- then
cp NVIDIA-Linux-x86_64-440.100.run NVIDIA-DRIVER.run
- Use the
build_server.shscript to produce thesdrangel/server16:latestimage.latestis the default but can be user defined with-toption. - Use the
run.shscript with options-f server16to run the image
- Use the
build_server.sh -s 24script to produce thesdrangel/server24:latestimage.latestis the default but can be user defined with-toption. - Use the
run.shscript with options-f server24to run the image
The build commands can control from which branch you are cloning the source of SDRangel. You can also give a different tag version than the default.
-bspecifies which branch you are checking out in the clone (default ismaster).-cspecifies an arbitrary commit label. This is to force a fresh clone of the SDRangel repository. If that label changes from the one previously used then the clone layer in the build cache is refreshed.- By default this is the current timestamp so each time the build is run a new cache is built
- You can specify the commit SHA1 so that a fresh copy will be taken only if a new commit took place
-Tspecifies the git tag or commit to checkout. It defaults to the branch name thus defaults to the HEAD of branch.-tspecifies the Docker tag version image (defaultlatest). You would normally use a tag relative to the git repository for example the tag name for tagged commits or the commit hash.-jspecifies the number of CPU cores used in the make commands (same as the -j option of make). Default is the number of CPU cores available.-fspecify an alternate Dockerfile to the defaultDockerfileused for GUI flavor onx86-64architecture.-nbuild with the--no-cacheoption thus rebuilding the image completely from the start.
In addition the build_server.sh lets you specify the number of Rx bits. The image tag version is suffixed by the number of bits e.g. server16
-xtells to use 24 bit samples for Rx (default is 16)-ffor server variants this can bearmv8.ubuntu.Dockerfileforarmv8orarch64ARM architectures (ex: RPi3 or 4).armv8.alpine.Dockerfileis experimental and has issues compiling LimeSuite. To build an ARM image from a x86-64 system you need to install the qemu-user-static package on Ubuntu host, or equivalent.
-grun a GUI flavor (use with-f vanilla(default) or-f nvidia). Without this option it is expected to run a server flavor (-f server16or-f server24)-Huse the host network. The address of the interface is specified as the argument Ex:-H 192.168.0.1. This configuration is useful if you want to use UDP multicast since multicast is not supported in Docker networks-fimage flavor. Can be any of:vanilla: default. Non specific GUI flavornvidia: GUI flavor specific to Nvidia graphics cardsserver16: Server flavor with 16 bits sample size (I or Q) for the Rx samplesserver24: Server flavor with 24 bits sample size for he Rx samples (effectively 32 bits)
-timage tag. This is normally the SDRangel version number but is effectively the Docker image tag (what appears after the colon:in thedocker imagescommand output)-ccontainer name. Use this to give the container a name. By default this issdrangel-wFFTW wisdom file name in the~/.config/sdrangeldirectory. By default this isfftw-wisdom
You may specify extra options for port mapping between the host and the container:
-aspecifies the host port linked to the SDRangel REST API port-uspecifies an UDP port on the host linked to the same port in the container. This is ignored when host network is used (-Hoption) You may have several of these. UDP port mapping is used for Remote Input plugin operation
To speed up FFT plan allocations you can put a FFTW wisdom file in the ~/.config/sdrangel directory. The fftwisdom image in the fftwisdom section can be used to produce a compatible FFTW wisdom file. The name of the file can be specified with the -w option (see above).
./run.sh -g -c sdrangel -u 9090:9090startssdrangel/vanilla:latest./run.sh -g -c sdrangel -u 9090:9090 -w fftw-wisdom-k4startssdrangel/vanilla:latestusing~/.config/sdrangel/fftw-wisdom-k4FFTW wisdom file./run.sh -g -f nvidia -t v4.10.4 -c sdrangel -u 9090:9090startssdrangel/nvidia:v4.10.4./run.sh -f server16 -t 38df0a6 -c sdrangel -u 9090:9090startssdrangel/server16:38df0a6
When the program terminates it will drop to a shell in the container. This leaves the user with the opportunity to inspect the container from inside (ssh connection is also available) or restart the program with the restart.sh script found in the home directory of the sdr user (default location).
To speed up starting time you have to create a so called FFT Wisdom file. This is critical for small armv8 machines like the Raspberry Pi. The typical command to execute is: fftwf-wisdom -v -n -o ~/.config/sdrangel/fftw-wisdom 128 256 512 1024 2048 4096 b128 b256 b512 b1024 b2048 b4096
If you intend to use audio you have to install pulseaudio on the host and restart it. This is needed even if you are planning to use only remote audio via UDP. Note that you need to keep a session open for your user. You may do this simply with the tmux utility (available in most distributions) with this command: tmux new -s sdrangel -d that creates a session and detaches it immediately.