Giter Site home page Giter Site logo

geontech / docker-redhawk Goto Github PK

View Code? Open in Web Editor NEW
10.0 7.0 4.0 159 KB

Docker Images definitions and utility scripts for rapid development and deployment of REDHAWK SDR systems, Domains, and Devices.

License: GNU General Public License v3.0

Shell 77.73% Python 0.76% Makefile 3.89% Dockerfile 17.62%
redhawk docker-image dockerfiles

docker-redhawk's People

Contributors

bradthebuilder avatar btgoodwin avatar patcamwol avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

docker-redhawk's Issues

Plot Port Data returns a blank panel

I am using REDHAWK IDE 2.2.0 on a centos 7.2 machine, and I can't manage to display the data plot view right. I started a SigGen in Chalkborad, the Data List returns a series of numbers but when I clicked the Plot Port Data button on a out port, a blank panel pops out. Do you have idea what is wrong here?

USRP fails to launch

Certain configurations of the Ettus x310 are unable to be found when using uhd_find_devices without any arguments. If this happens then the supervisor.d/usrp.conf command line wait_for_domain uhd_find_devices && nodeBooter ... fails before ever reaching the nodeBooter command and the device manager is never launched.

Possible solutions:

  • Remove the uhd_find_devices from the supervisor command. The device manager will report if the uhd device is not able to be found and provide sufficient log messages to inform users that the device is not present. If the purpose is to ensure the fpga load is completed before starting the device manager then consider the next solution.
  • Use the environment variables to build out an argument string for the uhd_find_devices command to look for the specific device. In our particular use case we supply --usrpip <IP> --usrptype x300; if the uhd_find_devices command were passed these arguments such as uhd_find_devices --args "type=x300, addr=<IP>" then the command would successfully find our device and proceed to the nodeBooter command. This solution requires a bit more work as the argument string needs to be dynamically built based on which and how many of the four possible environment variables are used. A simpler solution that might work is including the addr argument if and only if the USRP_IP_ADDRESS variable is set, but this may not solve for all possible cases.

update these?

any chance you could get these to update to the latest version in the docker repository? maybe add a ci/cd pipeline to keep it that way?

Unavailable Docker Arguments

Issue: GPP container requires additional arguments passed to the docker run command that are unavailable in scripts/gpp.sh.

Examples:
Thread Count - GPP is unable to support new components due to max number of threads reading as "1". The non-container GPP normally has this value as 65536.
Using docker run ... --ulimit nproc=65536 ... fixes this issue.

Shared Memory - Docker containers default to a 64MB /dev/shm directory. The non-container GPP normally uses 50% of the RAM size, but containers should use only what is required for the expected application environment.
Using docker run ... --shm-size=<desired memory> ... fixes this issue.

Solution:
To prevent having to add every argument that is normally accepted by the docker run command, adding an --arg argument can offer users the ability to pass arguments through to the command. For the above two examples the gpp could be run via the following command:
./gpp start mGPP --args "--ulimit nproc=65536 --shm-size=256M"

This is possible by changing the scripts/gpp.sh file with the following diff:

--- a/scripts/gpp.sh
+++ b/scripts/gpp.sh
@@ -50,6 +50,7 @@ Usage: $0 start|stop NODE_NAME (options)
        [-g|--gpp    GPP_NAME]    GPP Device name, default is GPP_[UUID]
        [-d|--domain DOMAIN_NAME] Domain Name, default is REDHAWK_DEV
        [-o|--omni   OMNISERVER]  IP to the OmniServer (detected: ${OMNISERVER})
+       [--args <ARGS>]           Additional arguments passed to 'docker run'
        [-p|--print]              Just print resolved settings
 
 Examples:
@@ -106,6 +107,10 @@ while [[ $# -gt 0 ]]; do
                        usage
                        exit 0
                        ;;
+               --args)
+                       ARGUMENTS="${2:?Missing ARGUMENTS Argument}"
+                       shift
+                       ;;
                -p|--print)
                        JUST_PRINT=YES
                        ;;
@@ -127,6 +132,7 @@ fi
 # Enforce defaults
 GPP_NAME=${GPP_NAME:-GPP_$(uuidgen)}
 DOMAIN_NAME=${DOMAIN_NAME:-REDHAWK_DEV}
+ARGUMENTS=${ARGUMENTS:-""}
 
 if ! [ -z ${JUST_PRINT+x} ]; then
        cat <<EOF
@@ -185,6 +191,7 @@ if [[ $COMMAND == "start" ]]; then
                                -e DOMAINNAME=${DOMAIN_NAME} \
                                -e OMNISERVICEIP=${OMNISERVER} \
                                ${NETWORK_ARGS} \
+                               ${ARGUMENTS} \
                                --name ${CONTAINER_NAME} \
                                ${IMAGE_NAME} &> /dev/null

Similar changes could be done to all of the launch scripts to prevent future issues of this same nature.

Invalid USRP environment variable

Issue:
docker-redhawk/scripts/usrp.sh sets environment variable USRP_IP in the container.
-e USRP_IP=${USRP_IP:-} \

docker-redhawk/Dockerfiles/files/usrp-node-init.sh expects the environment variable USRP_IP_ADDRESS to be set in the container

	if ! [ -z ${USRP_IP_ADDRESS} ]; then
		print_option IP\: ${USRP_IP_ADDRESS}
		USRP_CONFIG_ARGS="${USRP_CONFIG_ARGS} --usrpip=${USRP_IP_ADDRESS}"
	fi

Effects:
USRP FEI does not set the target_device.ip_address variable inside the USRP node. Without this setting the FEI is unable to find the device.

Recommended solutions:

  1. Change all instances of USRP_IP in the docker-redhawk/scripts/usrp.sh file to USRP_IP_ADDRESS; or
  2. Change all instances of USRP_IP_ADDRESS in the docker-redhawk/Dockerfiles/files/usrp-node-init.sh script to USRP_IP

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.