Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents
maxLevel2

...

Deployment, as well as other tasks such as starting and stopping the cluster, is coordinated through a set of Ansible playbooks. (Ansible playbooks are a system used by the Ansible tool for describing the desired state of a system. In many ways they are similar to shell scripts. For more details see the Ansible documentation.) The playbooks are run by the deploy node and build node, and they execute commands on the deploy node, the master node, the build node, and in some cases on the edge nodes. Once the nodes are set up, most activity is carried out by Kubernetes. Kubernetes is configured by the playbooks and told to start or stop services on the edge nodes. These services are run in containers, and the images for these containers are stored in a local Docker registry. There are containers for the Kubernetes components themselves, plus Flannel (a component which provides networking inside the Kubernetes cluster), EdgeX Foundry services, and four custom services (sync-app and image-app and device-lora and device-camera) built using the EdgeX SDKs.

Note that the build node and the deploy node and the master node can be the same host or virtual machine.

The camera nodes are not shown in the above diagram as they are not envisioned as being connected to the network, and are not configured by the playbooks from the deploy node. See the Camera Nodes section of Installation for an example of how camera nodes may be setup. 

Pre-Installation Requirements

...

The list below shows the required software for each node type prior to beginning the installation process.

  • Build CICD node
    • Ubuntu 20.04Ansible 2.12.5
  • Build node
    • Ubuntu 20.04
  • Deploy node
    • Ubuntu 20.04
    • Ansible 2.12.5
  • Master node
    • Ubuntu 20.04
  • Edge node
    • Ubuntu 20.04
  • Camera node
    • N/A (pre-installed)

Note that Ansible 2.9.6 is installed from the regular Ubuntu repository on Ubuntu 20.04, but needs to be upgraded from the Ansible repository to support the kubernetes.core collection used by this blueprint. The setup_cicd.yml playbook can be run with Ansible 2.9.6 and will update Ansible to the required version. 

Additional Installed Software Packages 

Note that the installation process will install several more software packages through Ansible playbooks. These are listed below for reference. Packages included by default in an install of Ubuntu 20.04 server are not included. The version numbers are those that are available/installed at the time of writing by the Ansible playbooks on Ubuntu 20.04.

  • Cicd CICD node
    • make 4.2.1, build-essential 12.8, python3-pip 20.0.2, default-jre 2:1.11-72
    • Jenkins 2Jenkins 2.361332.23
  • Build node
    • make 4.2.1, build-essential 12.8, python3-pip 20.0.2, default-jre 2:1.11-72
    • Robot Framework 6.0
    • Docker (docker.io) 20.10.12
    • Go 1.16.10
  • Deploy node
    • make 4.2.1, build-essential 12.8, python3-pip 20.0.2
    • Ansible 2.12.95
    • Ansible collections community.docker, kubernetes.core, community.crypto
  • Master node
    • Docker (docker.io) 20.10.12
    • python3-pip 20.0.2
    • Python packages cryptography and kubernetes
    • mosquitto 2.0.15, mosquitto-clients 2.0.15
    • Kubernetes (kubectl, kubelet, kubeadm) 1.22.9
    • Flannel 0.17.0, flannel-cni-plugin 1.0.1 (Note: These are containers installed via Kubernetes through a config file)
  • Edge node
    • Docker (docker.io) 20.10.12
    • Kubernetes (kubelet, kubeadm) 1.22.9 (kubectl may be installed for debugging purposes)

...

Modify the hosts file in the deploy/playbook directory with the host names and IP addresses of the master, build, cicd, and edge nodes.  

all:
hosts:
children:
  deploy:
hosts:
localhost:
master:
    hosts:
sdt-master: # hostname of master node
edge_nodes:
  hosts:
jet03: # hostname of first edge node
      ip: 192.168.2.27 # IP address of first edge node
  lora_id: 1
     jet04: # hostname of second edge node
      ip: 192.168.2.29 # IP address of second edge node
    lora_id: 4
vars:
     ansible_user: edge
     ansible_ssh_private_key_file: ~/.ssh/edge

Modify the host names and ip addresses of master/build/cicd/deploy nodes in the cicd/playbook/hosts file. 

all:
build:
hosts:
localhost:
armsdt-build:
# hostname of ansible_host: erc01
build node
ansible_user: edge
ansible_ssh_private_key_file: ~/.ssh/edge
ansible_become_password: password
children:
masterip: 192.168.10.203 # IP address of build node
cicd:
hosts:
sdt-mastercicd: # hostname of mastercicd node
build:
hostsip:
192.168.10.200 # IP address of sdt-build: # hostname of build nodecicd node

Modify the host names and IP addresses of the master, build, cicd and deploy nodes in the cicd/playbook/hosts file. 

all:
hosts:
ip: 192.168.10.203 # ip address of build nodelocalhost:
arm-build:
varsansible_host: erc01
ansible_user: sdt-admin
edge
ansible_ssh_private_key_file: ~/.ssh/lfedge_build
edge
cicd:ansible_become_password: password
children:
master:
hosts:
sdt-cicdmaster: # hostname of master node
build:
hosts:
sdt-build: # hostname of cicdbuild node
ip: 192.168.10.200203 # ip address of cicdbuild node
vars:
ansible_user: sdt-admin
ansible_ssh_private_key_file: ~/.ssh/lfedge_cicdbuild
deploycicd:
hosts:
sdt-deploycicd: # hostname of deploycicd node
ip: 192.168.10.231200 # ip address of deploycicd node

In the file master.yml in the deploy/playbook/group_vars/all directory, set the master_ip value to the IP address of the master node. Note that this is required even if the master node is the same as the deploy node.

master_      vars:
ansible_user: sdt-admin
ansible_ssh_private_key_file: ~/.ssh/lfedge_cicd
deploy:
hosts:
sdt-deploy: # hostname of deploy node
ip: 192.168.2.16

Set Up the Deploy Node

10.231 # ip address of deploy node

In the file master.yml in the deploy/playbook/group_vars/all directory, set the master_ip value to the IP address of the master node. Note that this is required even if the master node is the same as the deploy node.

master_ip: 192.168.2.16

Set Up the Deploy Node

The account which runs the deploy playbooks will need to be able to use sudo to execute some commands with super-user permissions. The following command can be used (by root or another user which already has super-user permissions) to enable the use of sudo for a user:

...

  • Make sure there are entries for the cicd, build, master and edge node names in /etc/hosts
  • Install required software packages including Docker, Kubernetes, pip, and mosquitto
  • Install Python packages used by other playbooks (kubernetes and cryptography)
  • Make sure the user can run Docker commands
  • Prepare basic configuration for Docker and Kubernetes
  • Set up a user name and password for the MQTT service

...

Note, if you use an administrative account with a different name, change the variable ansible_user in the edge_nodes group in the deploy/playbook/hosts file to match the user name you are using.

In the file secret in the deploy/playbook/group_vars/edge_nodes directory, set the edge node admin user's sudo password.

The deploy node needs to log in via SSH to the edge nodes using a cryptographic key (rather than a password), so that a password does not need to be provided for every command. Run the following command on the deploy node to create a key called "edge" for the administrative user.

...

Once the key files have been created, the following command can be run from the deploy node to copy the key to build node so a password will not be required for each login. (The administrative user's password will be requested when running this command.)

ssh-copy-id -i ~/.ssh/lfedge_build.pub sdt-admin@nodename

Note, if you use an administrative account with a different name, change the variable ansible_user in the build group in the cicd/playbook/hosts file to match the user name you are using.

...

ansible-playbook -i ./hosts setup_build.yml yml --ask-become-pass

The playbook will perform the following initialization tasks:

  • Make sure there is an entry are entries for the master node and deploy node nodes in /etc/hosts
  • Install required software packages including Docker and Go and Robot Framework
  • Make sure the user can run Docker commands
  • Configure Docker, including adding the certificates to secure access to the private registry

...

Once the key files have been created, the following command can be run from the deploy node to copy the key to build node so a password will not be required for each login. (The administrative user's password will be requested when running this command.)

ssh-copy-id -i ~/.ssh/lfedge_cicd.pub sdt-admin@nodename

Note, if you use an administrative account with a different name, change the variable ansible_user in the cicd group in the cicd/playbook/hosts file to match the user name you are using.

Building the Custom Services

After the configuration of private key, the following command will prepare the cicd node for use:

ansible-playbook -i ./hosts setup_cicd.yml --ask-become-pass

The playbook will perform the following initialization tasks:

  • Make sure there is an entry for the build node in /etc/hosts
  • Install required software packages including Jenkins

Building the Custom Services

At this time, images for the four custom services, sync-app and , image-app and , device-lora and device-camera, need to be built from source and pushed to the private Docker registry. (In the future these images should be available on Docker Hub or another public registry.) Use the following playbooks from the cicd/playbook directory on the build deploy node to do so.

Note, limited by base image NVIDIA L4T CUDA which only supports arm architecture, so custom service image-app also only supports arm architecture. Other custom services support both arm64 and amd64 architecturearchitectures.

This command executed on the deploy node will build local docker images of the custom microservices:

...

The build command can take some time, depending on connection speed and the load on the deploy host, especially the compilation of cross-compiled images.

This command executed on the deploy node will push the images to the private registry:

ansible-playbook -i ./hosts push_images.yml

At time of writing this step will also create some workaround images required to enable EdgeX security features in this blueprint's Kubernetes configuration. Hopefully, these images will no longer be needed once fixes have been made upstream.

Starting the Cluster

With the base software installed and configured on the master and edge nodes, the following command executed on the deploy node will start the cluster:

...

This command only starts the master node in the Kubernetes cluster. The state of the master node can be confirmed using the kubectl get node command  command on the master node.

admin@mastersdt-admin@sdt-master:~$ kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 3d5h v1.22.9

...

ansible-playbook -i ./hosts join_cluster.yml

The kubectl get nodenodes command on the master node can be used to confirm the state of the edge nodes.

admin@mastersdt-admin@sdt-master:~$ kubectl get node
NAME STATUS ROLES AGE VERSION
jet03 Ready <none> 3d5h v1.22.9
jet04 Ready <none> 3d5h v1.22.9
master Ready control-plane,master 3d5h v1.22.9

...

Before starting EdgeX services, you need to do the fllowing following configuration first.

  • Modify the file edgex.yml in the deploy/playbook/group_vars/all directory , Set the service to be started as on and the service not to be started as off

After adding the edge nodes to the cluster, the following command will start the EdgeX services on the edge nodes:

ansible-playbook -i ./hosts edgex_start.yml

...

  • to decide which services will be started. For details, please refer to the section Enabling and Disabling Optional Services below.
  • If the custom service device-camera will be started, set the camera_ip value to the IP address of the camera node in the deploy\playbook\host_vars\jet03.yml file and the deploy\playbook\host_vars\jet04.yml file. 
  • If you are using different host names of the edge nodes, change the file name of  files in the deploy\playbook\host_vars directory, and change destination_host value in the files in the deploy\playbook\host_vars directory.

After all configurations are completed, the following command executed on the deploy node will start the EdgeX services on the edge nodes:

ansible-playbook -i ./hosts edgex_start.yml

You can confirm the status of the EdgeX microservices using the kubectl get pod command on the master node. (EdgeX micro-service containers are grouped into one Kubernetes "pod" per node.)

admin@mastersdt-admin@sdt-master:~$ kubectl get pod
NAME READY STATUS RESTARTS AGE
edgex-jet03-7f9644bb7d-gklvb 22/22 Running 18 (3d5h ago) 3d5h
edgex-jet04-749647459c-drpzb 22/22 Running 18 (3d5h ago) 3d5h

Note, during initialization of the services you may see some containers restart one or more times. This is part of the timeout and retry behavior of the services waiting for other services to complete initialization and does not indicate a problem.

Camera Nodes

Configuration of  the Camera Nodes (TODO)

These readings Consult the installation instructions for the H.View HV-500E6A hardware.

Readings received from Camera nodes should appear in the core-data database and be possible to monitor using the edgex-events-nodename channel. For example, the following command run on the master node should show the readings arriving at an edge node named "jet03":

...

Test cases for verifying the blueprint's operation are provided in the cicd/tests directory. These are Robot Framework scripts which can be executed using the robot tool. In addition, the cicd/playbook directory contains playbooks supporting setup of a Jenkins-based automated testing environment for CI/CD. For more information, consult the README.md files in those directories. 

Before using the playbook scripts in the cicd/tests directory, modify the common.resource file in the cicd/tests/ directory according to your environment. The content to be changed is the part annotated with '#' below.

*** Settings ***
Library SSHLibrary
Library String

*** Variables ***
${HOME} /home/sdt-admin # host directory of build and deploy node
${DEPLOY_HOST} sdt-deploy # hostname of deploy node
${DEPLOY_USER} sdt-admin # username of deploy node
${DEPLOY_KEY} ${HOME}/.ssh/lfedge_deploy # private key in build node to access deploy node
${DEPLOY_PWD} password
${PLAYBOOK_PATH} lf-edge/deploy/playbook # playbook path of build and deploy node
${MASTEREDGE_HOSTHOST1} sdt-masterjet03 # hostname of masteredge nodenode#1
${BUILDEDGE_HOSTHOST2} sdt-buildjet04 # hostname of buildedge nodenode#2
${BUILDEDGE_USER} sdt-adminedge # username of buildedge node
${BUILDEDGE_KEY} ${HOME}/.ssh/lfedge_buildedge # private key in builddeploy node to access buildedge node

*** Keywords ***
……
……

Note, if there is no private key(${

...

DEPLOY_

...

Note, the build node and deploy node must use the same username and playbook path. If you want to use different username or playbook path, robot framework scripts in the cicd/tests/ directory need to be modified. In addition, if there is no private key on the build or deploy host, use command ssh-keygen to create the private key, and use the command ssh-copy-KEY}) on the build node, use command ssh-keygen to create the private key, and use the command ssh-copy-id to copy the key to the destination node.(Please refer to the chapter section Preparing Edge Nodes above for detailed usage of command ssh-keygen and ssh-copy-id.)

...

Enabling and Disabling Optional Services

Three Five EdgeX micro-services can be enabled and disabled using variables in the deploy/playbook/group_vars/all/edgex.yml file. Set the variable to true to enable the micro-service the next time the edgex_start.yml playbook is run. Set the variable to false to disable that micro-service. The micro-service controlling variables are listed below:

  • device_virtual: Enable or disable the device-virtual service, provided by EdgeX Foundry, used for testing.
  • device_lora: Enable or disable the device-lora service, one of the custom services provided by this blueprint, which provides support for receiving readings and sending commands to remote sensors over LoRa low-power radio links.
  • sync_app: Enable or disable the sync-app application service, the other custom service provided by this blueprint, which provides a way to forward sensor data to other edge nodes.

Debugging Failures

...

  • device-camera: Enable or disable the device-camera service, provided by EdgeX Foundry, and modified by this blueprint, which provides support for receiving readings and sending commands to remote cameras.
  • image-app: Enable or disable the sync-app service, the other custom service provided by this blueprint, which provides support for analyzing and comparing images received from the edge nodes

Debugging Failures

Consult the sections under Troubleshooting for commands to debug failures. In particular, using the kubectl commands described in Accessing Logs, and changing the log levels of services using the configuration UI described above, which can change the logging level of running services, can be useful.

...

This blueprint stores configuration and data in the following places. When uninstalling the software, these folders and files can also be removed, if present, on the master, deploy build and edge nodes.

  • Master node:
    • ~/.lfedge
    • /opt/lfedge
    • /etc/mosquitto/conf.d/edge.conf
    • /usr/share/keyrings/kubernetes-archive-keyring.gpg
  • Edge node:
    • /opt/lfedge
    • /etc/docker/certs.d/master:5000/registry.crt
    • /usr/local/share/ca-certificates/master.crt
    • /etc/docker/daemon.json
    • /usr/share/keyrings/kubernetes-archive-keyring.gpg
  • Deploy Build node:
    • /etc/profile.d/go.sh
    • /usr/local/go
    • ~/edgexfoundry
    • /usr/local/go1.16.10.linux-amd64.tar.gz

Troubleshooting

Confirming Node and Service Status

...

Edge nodes can be added an removed by stopping the cluster and , editing the deploy/playbook/hosts file, and adding or removing host files in the deploy/palybook/host_vars directory. The master_install.yml and edge_install.yml playbooks need to be run again to update /etc/hosts and certificates on any added nodes.

...

Running setup_deploy.yml, setup_build.yml, setup_cicd.yml, master_install.yml, and edge_install.yml playbooks can be used to update software packages if necessary. Note that Kubernetes is specified to use version 1.22 to avoid problems that might arise from version instability, but it should be possible to update if so desired.

...

The custom services can be rebuilt by running the build_images.yml playbook in cicd/playbook. After successfully building a new version of a service, use push_images.yml to push the images to the private Docker registry. The source for the services is found in edgex/sync-app, edgex/image-app and , edgex/device-camera, and edgex/device-lora.

License

...

The synchronization application and LoRa , image application, device camera service and LoRa device service are linked with other Go packages/components when compiled, which are each covered by their own licenses, listed below. Other components downloaded and installed during the blueprint's installation process are covered by their own licenses.

...

MIT
PackageLicense TypeLicense URL
bitbucket.org/bertimus9/systemstatMIThttps://bitbucket.org/bertimus9/systemstat/src/master/LICENSE
github.com/armon/go-metricsURL
bitbucket.org/bertimus9/systemstatMIThttps://bitbucket.org/bertimus9/systemstat/src/0eeff89b0690/LICENSE
github.com/armon/go-metricsMIThttps://github.com/armon/go-metrics/blob/f0300d1749da/LICENSE
github.com/cenkalti/backoffMIThttps://github.com/cenkalti/backoff/blob/v2.2.1/LICENSE
github.com/diegoholiveira/jsonlogicMIThttps://github.com/diegoholiveira/jsonlogic/blob/ab7989be08b9/LICENSE
github.com/eclipse/paho.mqtt.golangBSD-3-Clausehttps://github.com/eclipse/paho.mqtt.golang/blob/v1.3.5/LICENSE
github.com/edgexfoundry/app-functions-sdk-go/v2Apache-2.0https://github.com/edgexfoundry/app-functions-sdk-go/blob/v2.1.0/LICENSE
github.com/edgexfoundry/app-functions-sdk-go/v2/internal/etmMIThttps://github.com/edgexfoundry/app-functions-sdk-go/blob/v2.1.0/internal/etm/LICENSE
github.com/edgexfoundry/go-mod-bootstrap/v2Apache-2.0https://github.com/edgexfoundry/go-mod-bootstrap/blob/v2.1.0/LICENSE
github.com/edgexfoundry/go-mod-configuration/v2Apache-2.0https://github.com/edgexfoundry/go-mod-configuration/blob/v2.1.0/LICENSE
github.com/edgexfoundry/go-mod-core-contracts/v2Apache-2.0https://github.com/edgexfoundry/go-mod-core-contracts/blob/v2.1.0/LICENSE
github.com/edgexfoundry/go-mod-messaging/v2Apache-2.0https://github.com/edgexfoundry/go-mod-messaging/blob/v2.1.0/LICENSE
github.com/edgexfoundry/go-mod-registry/v2Apache-2.0https://github.com/edgexfoundry/go-mod-registry/blob/v2.1.0/LICENSE
github.com/edgexfoundry/go-mod-secrets/v2Apache-2.0https://github.com/edgexfoundry/go-mod-secrets/blob/v2.1.0/LICENSE
github.com/fatih/colorMIThttps://github.com/fatih/color/blob/v1.9.0/LICENSE.md
github.com/fxamacker/cbor/v2MIThttps://github.com/fxamacker/cbor/blob/v2.3.0/LICENSE
github.com/go-kit/kit/logMIThttps://github.com/go-kit/kit/blob/v0.11.0/LICENSE
github.com/go-logfmt/logfmtMIThttps://github.com/go-logfmt/logfmt/blob/v0.5.0/LICENSE
github.com/go-playground/localesMIThttps://github.com/go-playground/locales/blob/v0.14.0/LICENSE
github.com/go-playground/universal-translatorMIThttps://github.com/go-playground/universal-translator/blob/v0.18.0/LICENSE
github.com/go-playground/validator/v10MIThttps://github.com/go-playground/validator/blob/v10.9.0/LICENSE
github.com/go-redis/redis/v7BSD-2-Clausehttps://github.com/go-redis/redis/blob/v7.3.0/LICENSE
github.com/gomodule/redigoApache-2.0https://github.com/gomodule/redigo/blob/v2.0.0/LICENSE
github.com/google/uuidBSD-3-Clausehttps://github.com/google/uuid/blob/v1.3.0/LICENSE
github.com/gorilla/muxBSD-3-Clausehttps://github.com/gorilla/mux/blob/v1.8.0/LICENSE
github.com/gorilla/websocketBSD-2-Clausehttps://github.com/gorilla/websocket/blob/v1.4.2/LICENSE
github.com/hashicorp/consul/apiMPL-2.0https://github.com/hashicorp/consul/blob/api/v1.9.1/api/LICENSE
github.com/hashicorp/errwrapMPL-2.0https://github.com/hashicorp/errwrap/blob/v1.0.0/LICENSE
github.com/hashicorp/go-cleanhttpMPL-2.0https://github.com/hashicorp/go-cleanhttp/blob/v0.5.1/LICENSE
github.com/hashicorp/go-hclogMIThttps://github.com/hashicorp/go-hclog/blob/v0.12.0/LICENSE
github.com/hashicorp/go-immutable-radixMPL-2.0https://github.com/hashicorp/go-immutable-radix/blob/v1.0.0/LICENSE
github.com/hashicorp/go-multierrorMPL-2.0https://github.com/hashicorp/go-multierror/blob/v1.1.1/LICENSE
github.com/hashicorp/go-rootcertsMPL-2.0https://github.com/hashicorp/go-rootcerts/blob/v1.0.2/LICENSE
github.com/hashicorp/golang-lru/simplelruMPL-2.0https://github.com/hashicorp/golang-lru/blob/v0.5.0/LICENSE
github.com/hashicorp/serf/coordinateMPL-2.0https://github.com/hashicorp/serf/blob/v0.9.5/LICENSE
github.com/leodido/go-urnMIThttps://github.com/leodido/go-urn/blob/v1.2.1/LICENSE
github.com/mattn/go-colorableMIThttps://github.com/mattn/go-colorable/blob/v0.1.6/LICENSE
github.com/mattn/go-isattyMIThttps://github.com/mattn/go-isatty/blob/v0.0.12/LICENSE
github.com/mitchellh/consulstructureMIThttps://github.com/mitchellh/consulstructure/blob/56fdc4d2da54/LICENSE
github.com/mitchellh/copystructureMIThttps://github.com/mitchellh/copystructure/blob/v1.0.0/LICENSE
github.com/mitchellh/mapstructureMIThttps://github.com/mitchellh/mapstructure/blob/v1.1.2/LICENSE
github.com/mitchellh/reflectwalkMIThttps://github.com/mitchellh/reflectwalk/blob/v1.0.0/LICENSE
github.com/pebbe/zmq4BSD-2-Clausehttps://github.com/pebbe/zmq4/blob/v1.2.7/LICENSE.txt
github.com/pelletier/go-tomlApache-2.0https://github.com/pelletier/go-toml/blob/v1.9.4/LICENSE
github.com/x448/float16MIThttps://github.com/x448/float16/blob/v0.8.4/LICENSE
golang.org/x/crypto/sha3BSD-3-Clausehttps://cs.opensource.google/go/x/crypto/+/a769d52b:LICENSE
golang.org/x/netBSD-3-Clausehttps://cs.opensource.google/go/x/net/+/a5a99cb3:LICENSE
golang.org/x/sysBSD-3-Clausehttps://cs.opensource.google/go/x/sys/+/e5e7981a:LICENSE
golang.org/x/textBSD-3-Clausehttps://cs.opensource.google/go/x/text/+/v0.3.6:LICENSE

LoRa Device Service

The LoRa device service is linked with the following packages when compiled:

PackageLicense TypeLicense URL
bitbucket.org/bertimus9/systemstatMIThttps://bitbucket.org/bertimus9/systemstat/src/master/LICENSE
github.com/armon/go-metricsMIThttps://github.com/armon/go-metrics/blob/master/LICENSE
github.com/cenkalti/backoffMIThttps://github.com/cenkalti/backoff/blob/master/LICENSE
github.com/eclipse/paho.mqtt.golangBSD-3-Clausehttps://github.com/eclipse/paho.mqtt.golang/blob/master/LICENSE
github.com/edgexfoundry/device-sdk-go/v2Apache-2.0https://github.com/edgexfoundry/device-sdk-go/blob/master/v2/LICENSE
github.com/edgexfoundry/go-mod-bootstrap/v2Apache-2.0https://github.com/edgexfoundry/go-mod-bootstrap/blob/master/v2/LICENSE
github.com/edgexfoundry/go-mod-configuration/v2Apache-2.0https://github.com/edgexfoundry/go-mod-configuration/blob/master/v2/LICENSE
github.com/edgexfoundry/go-mod-core-contracts/v2Apache-2.0https://github.com/edgexfoundry/go-mod-core-contracts/blob/master/v2/LICENSE
github.com/edgexfoundry/go-mod-messaging/v2Apache-2.0https://github.com/edgexfoundry/go-mod-messaging/blob/master/v2/LICENSE
github.com/edgexfoundry/go-mod-registry/v2Apache-2.0https://github.com/edgexfoundry/go-mod-registry/blob/master/v2/LICENSE
github.com/edgexfoundry/go-mod-secrets/v2Apache-2.0https://github.com/edgexfoundry/go-mod-secrets/blob/master/v2/LICENSE
github.com/fatih/colorMIThttps://github.com/fatih/color/blob/master/LICENSE.md
github.com/fxamacker/cbor/v2MIThttps://github.com/fxamacker/cbor/blob/master/v2/LICENSE
github.com/go-kit/kit/logMIThttps://github.com/go-kit/kit/blob/master/log/LICENSE
github.com/go-logfmt/logfmtMIThttps://github.com/go-logfmt/logfmt/blob/master/LICENSE
github.com/google/uuidBSD-3-Clausehttps://github.com/google/uuid/blob/master/LICENSE
github.com/go-playground/localesMIThttps://github.com/go-playground/locales/blob/master/LICENSE
github.com/go-playground/universal-translatorMIThttps://github.com/go-playground/universal-translator/blob/master/LICENSE
github.com/go-playground/validator/v10MIThttps://github.com/go-playground/validator/blob/master/v10/LICENSE
github.com/go-redis/redis/v7BSD-2-Clausehttps://github.com/go-redis/redis/blob/master/v7/LICENSE
github.com/gorilla/muxBSD-3-Clausehttps://github.com/gorilla/mux/blob/master/LICENSE
github.com/gorilla/websocketBSD-2-Clausehttps://github.com/gorilla/websocket/blob/master/LICENSE
github.com/hashicorp/consul/apiMPL-2.0https://github.com/hashicorp/consul/blob/master/api/LICENSE
github.com/hashicorp/errwrapMPL-2.0https://github.com/hashicorp/errwrap/blob/master/LICENSE
github.com/hashicorp/go-cleanhttpMPL-2.0https://github.com/hashicorp/go-cleanhttp/blob/master/LICENSE
github.com/hashicorp/go-hclogMIThttps://github.com/hashicorp/go-hclog/blob/master/LICENSE
github.com/hashicorp/go-immutable-radixMPL-2.0https://github.com/hashicorp/go-immutable-radix/blob/master/LICENSE
github.com/hashicorp/golang-lru/simplelruMPL-2.0https://github.com/hashicorp/golang-lru/blob/master/simplelru/LICENSE
github.com/hashicorp/go-multierrorMPL-2.0https://github.com/hashicorp/go-multierror/blob/master/LICENSE
github.com/hashicorp/go-rootcertsMPL-2.0https://github.com/hashicorp/go-rootcerts/blob/master/LICENSE
github.com/hashicorp/serf/coordinateMPL-2.0https://github.com/hashicorp/serf/blob/master/coordinate/LICENSE
github.com/leodido/go-urnMIThttps://github.com/leodido/go-urn/blob/master/LICENSE
github.com/mattn/go-colorableMIThttps://github.com/mattn/go-colorable/blob/master/LICENSE
github.com/mattn/go-isattyMIThttps://github.com/mattn/go-isatty/blob/master/LICENSE
github.com/mitchellh/consulstructureMIThttps://github.com/mitchellh/consulstructure/blob/master/LICENSE
github.com/mitchellh/copystructureMIThttps://github.com/mitchellh/copystructure/blob/master/LICENSE
github.com/mitchellh/mapstructureMIThttps://github.com/mitchellh/mapstructure/blob/master/LICENSE
github.com/mitchellh/reflectwalkMIThttps://github.com/mitchellh/reflectwalk/blob/master/LICENSE
github.com/OneOfOne/xxhashApache-2.0https://github.com/OneOfOne/xxhash/blob/master/LICENSE
github.com/pebbe/zmq4BSD-2-Clausehttps://github.com/pebbe/zmq4/blob/master/LICENSE.txt
github.com/pelletier/go-tomlApache-2.0https://github.com/pelletier/go-toml/blob/master/LICENSE
github.com/tarm/serialBSD-3-Clausehttps://github.com/tarm/serial/blob/master/LICENSE
github.com/x448/float16MIThttps://github.com/x448/float16/blob/master/LICENSE
golang.org/x/crypto/sha3BSD-3-Clausehttps://pkg.go.dev/golang.org/x/crypto/sha3?tab=licenses
golang.org/x/netBSD-3-Clausehttps://pkg.go.dev/golang.org/x/net?tab=licenses
golang.org/x/sysBSD-3-Clausehttps://pkg.go.dev/golang.org/x/sys?tab=licenses
golang.org/x/textBSD-3-Clausehttps://pkg.go.dev/golang.org/x/text?tab=licenses
gopkg.in/yaml.v3MIThttps://github.com/go-yaml/yaml/blob/v3/LICENSE

Image Application

The image application is linked with the following packages when compiled:

PackageLicense TypeLicense URL
bitbucket.org/bertimus9/systemstatMIThttps://bitbucket.org/bertimus9/systemstat/src/0eeff89b0690/LICENSE
github.com/armon/go-metricsMIThttps://github.com/armon/go-metrics/blob/f0300d1749da/LICENSE
github.com/cenkalti/backoffMIThttps://github.com/cenkalti/backoff/blob/v2.2.1/LICENSE
github.com/diegoholiveira/jsonlogicMIThttps://github.com/diegoholiveira/jsonlogic/blob/ab7989be08b9/LICENSE
github.com/eclipse/paho.mqtt.golangBSD-3-Clausehttps://github.com/eclipse/paho.mqtt.golang/blob/v1.3.5/LICENSE
github.com/edgexfoundry/app-functions-sdk-go/v2Apache-2.0https://github.com/edgexfoundry/app-functions-sdk-go/blob/v2.2.0/LICENSE
github.com/edgexfoundry/app-functions-sdk-go/v2/internal/etmMIThttps://github.com/edgexfoundry/app-functions-sdk-go/blob/v2.2.0/internal/etm/LICENSE
github.com/edgexfoundry/go-mod-bootstrap/v2Apache-2.0https://github.com/edgexfoundry/go-mod-bootstrap/blob/v2.2.0/LICENSE
github.com/edgexfoundry/go-mod-configuration/v2Apache-2.0https://github.com/edgexfoundry/go-mod-configuration/blob/v2.2.0/LICENSE
github.com/edgexfoundry/go-mod-core-contracts/v2Apache-2.0https://github.com/edgexfoundry/go-mod-core-contracts/blob/v2.2.0/LICENSE
github.com/edgexfoundry/go-mod-messaging/v2Apache-2.0https://github.com/edgexfoundry/go-mod-messaging/blob/v2.2.0/LICENSE
github.com/edgexfoundry/go-mod-registry/v2Apache-2.0https://github.com/edgexfoundry/go-mod-registry/blob/v2.2.0/LICENSE
github.com/edgexfoundry/go-mod-secrets/v2Apache-2.0https://github.com/edgexfoundry/go-mod-secrets/blob/v2.2.0/LICENSE
github.com/fatih/colorMIThttps://github.com/fatih/color/blob/v1.9.0/LICENSE.md
github.com/fxamacker/cbor/v2MIThttps://github.com/fxamacker/cbor/blob/v2.4.0/LICENSE
github.com/go-kit/logMIThttps://github.com/go-kit/log/blob/v0.2.0/LICENSE
github.com/go-logfmt/logfmtMIThttps://github.com/go-logfmt/logfmt/blob/v0.5.1/LICENSE
github.com/go-playground/localesMIThttps://github.com/go-playground/locales/blob/v0.14.0/LICENSE
github.com/go-playground/universal-translatorMIThttps://github.com/go-playground/universal-translator/blob/v0.18.0/LICENSE
github.com/go-playground/validator/v10MIThttps://github.com/go-playground/validator/blob/v10.10.1/LICENSE
github.com/go-redis/redis/v7BSD-2-Clausehttps://github.com/go-redis/redis/blob/v7.3.0/LICENSE
github.com/golang/protobufBSD-3-Clausehttps://github.com/golang/protobuf/blob/v1.5.2/LICENSE
github.com/gomodule/redigo/redisApache-2.0https://github.com/
armon
gomodule/
go-metrics
redigo/blob/
master
v1.8.8/LICENSE
github.com/
cenkalti
google/
backoffMIT
uuidBSD-3-Clausehttps://github.com/
cenkalti
google/
backoff
uuid/blob/
master
v1.3.0/LICENSE
github.com/
diegoholiveira
gorilla/
jsonlogicMIT
muxBSD-3-Clausehttps://github.com/
diegoholiveira
gorilla/
jsonlogic
mux/blob/
master
v1.8.0/LICENSE
github.com/
eclipse/paho.mqtt.golang
gorilla/websocketBSD-
3
2-Clausehttps://github.com/
eclipse/paho.mqtt.golang
gorilla/websocket/blob/
master
v1.4.2/LICENSE
github.com/
edgexfoundry/app-functions-sdk-go/v2Apache
hashicorp/consul/apiMPL-2.0https://github.com/
edgexfoundry/app-functions-sdk-go
hashicorp/consul/blob/
master/v2
api/v1.9.1/api/LICENSE
github.com/
edgexfoundry
hashicorp/
app-functions-sdk-go/v2/internal/etmMIT
errwrapMPL-2.0https://github.com/
edgexfoundry/app-functions-sdk-go
hashicorp/errwrap/blob/
master/v2/internal/etm/
v1.0.0/LICENSE
github.com/
edgexfoundry
hashicorp/go-
mod-bootstrap/v2Apache
cleanhttpMPL-2.0https://github.com/
edgexfoundry
hashicorp/go-
mod-bootstrap
cleanhttp/blob/
master/v2/
v0.5.1/LICENSE
github.com/
edgexfoundry
hashicorp/go-
mod-configuration/v2Apache-2.0
hclogMIThttps://github.com/
edgexfoundry
hashicorp/go-
mod-configuration
hclog/blob/
master/v2
v0.12.0/LICENSE
github.com/
edgexfoundry
hashicorp/go-
mod-core-contracts/v2Apache
immutable-radixMPL-2.0https://github.com/
edgexfoundry
hashicorp/go-
mod
immutable-
core-contracts
radix/blob/
master/v2
v1.0.0/LICENSE
github.com/
edgexfoundry
hashicorp/go-
mod-messaging/v2Apache
multierrorMPL-2.0https://github.com/
edgexfoundry
hashicorp/go-
mod-messaging
multierror/blob/
master/v2/
v1.1.1/LICENSE
github.com/
edgexfoundry
hashicorp/go-
mod-registry/v2Apache
rootcertsMPL-2.0https://github.com/
edgexfoundry
hashicorp/go-
mod-registry
rootcerts/blob/
master/v2
v1.0.2/LICENSE
github.com/
edgexfoundry
hashicorp/
go
golang-
mod-secrets
lru/
v2
simplelru
Apache
MPL-2.0https://github.com/
edgexfoundry
hashicorp/
go
golang-
mod-secrets
lru/blob/
master/v2
v0.5.1/LICENSE
github.com/hashicorp/
fatih/colorMIT
serf/coordinateMPL-2.0https://github.com/
fatih
hashicorp/
color
serf/blob/
master
v0.9.5/LICENSE
.md
github.com/
fxamacker/cbor/v2
leodido/go-urnMIThttps://github.com/
fxamacker
leodido/
cbor
go-urn/blob/
master/v2
v1.2.1/LICENSE
github.com/mattn/go-
kit/kit/log
colorableMIThttps://github.com/mattn/go-
kit/kit
colorable/blob/
master/log/
v0.1.6/LICENSE
github.com/mattn/go-
logfmt/logfmt
isattyMIThttps://github.com/mattn/go-
logfmt/logfmt
isatty/blob/
master
v0.0.12/LICENSE
github.com/
gomodule
mitchellh/
redigoApache-2.0
consulstructureMIThttps://github.com/
gomodule
mitchellh/
redigo
consulstructure/blob/
master
56fdc4d2da54/LICENSE
github.com/
google
mitchellh/
uuidBSD-3-Clause
copystructureMIThttps://github.com/
google
mitchellh/
uuid
copystructure/blob/
master
v1.0.0/LICENSE
github.com/
go-playground
mitchellh/
locales
mapstructureMIThttps://github.com/
go-playground
mitchellh/
locales
mapstructure/blob/
master
v1.1.2/LICENSE
github.com/
go-playground/universal-translator
mitchellh/reflectwalkMIThttps://github.com/
go-playground/universal-translator
mitchellh/reflectwalk/blob/
master
v1.0.0/LICENSE
github.com/
go-playground/validator/v10MIT
pebbe/zmq4BSD-2-Clausehttps://github.com/
go-playground
pebbe/
validator
zmq4/blob/
master/v10/LICENSE
v1.2.7/LICENSE.txt
github.com/pelletier/go-
redis/redis/v7BSD
tomlApache-2
-Clause
.0https://github.com/pelletier/go-
redis/redis
toml/blob/
master/v7/
v1.9.4/LICENSE
github.com/
gorilla
rcrowley/
mux
go-metricsBSD-
3
2-Clause-FreeBSDhttps://github.com/
gorilla
rcrowley/
mux
go-metrics/blob/
master
3113b8401b8a/LICENSE
github.com/spiffe/
gorilla
go-spiffe/
websocket
v2
BSD
Apache-2
-Clause
.0https://github.com/
gorilla
spiffe/
websocket
go-spiffe/blob
/master
/v2.0.0/v2/LICENSE
github.com/
hashicorp
x448/
consul/apiMPL-2.0
float16MIThttps://github.com/
hashicorp
x448/
consul
float16/blob/
master/api
v0.8.4/LICENSE
github.com/
hashicorp
zeebo/
errwrapMPL-2.0
errsMIThttps://github.com/
hashicorp
zeebo/
errwrap
errs/blob/
master
v1.2.2/LICENSE
github
gocv.
com
io/
hashicorp
x/
go-cleanhttp
gocv
MPL
Apache-2.0https://github.com/
hashicorp
hybridgroup/
go-cleanhttp
gocv/blob/
master
v0.31.0/LICENSE.txt
github
golang.
com
org/
hashicorp/go-hclogMIT
x/cryptoBSD-3-Clausehttps://
github.com/hashicorp/go-hclog/blob/master/LICENSEgithub.com/hashicorp/go-immutable-radixMPL-2.0https://github.com/hashicorp/go-immutable-radix/blob/master/LICENSEgithub.com/hashicorp/golang-lru/simplelruMPL-2.0https://github.com/hashicorp/golang-lru/blob/master/simplelru/LICENSEgithub.com/hashicorp/go-multierrorMPL-2.0https://github.com/hashicorp/go-multierror/blob/master/LICENSEgithub.com/hashicorp/go-rootcertsMPL
cs.opensource.google/go/x/crypto/+/v0.1.0:LICENSE
golang.org/x/netBSD-3-Clausehttps://cs.opensource.google/go/x/net/+/v0.1.0:LICENSE
golang.org/x/sys/unixBSD-3-Clausehttps://cs.opensource.google/go/x/sys/+/v0.1.0:LICENSE
golang.org/x/textBSD-3-Clausehttps://cs.opensource.google/go/x/text/+/v0.4.0:LICENSE
google.golang.org/genproto/googleapis/rpc/statusApache-2.0https://github.com/
hashicorp
googleapis/go-
rootcerts
genproto/blob/
master
37a418bb8959/LICENSE
github
google.golang.
com/hashicorp/serf/coordinateMPL
org/grpcApache-2.0https://github.com/
hashicorp
grpc/
serf
grpc-go/blob/
master/coordinate/
v1.48.0/LICENSE
github
google.golang.
com/leodido/go-urnMIT
org/protobufBSD-3-Clausehttps://github.com/
leodido
protocolbuffers/protobuf-go
-urn
/blob/
master
v1.28.1/LICENSE
github
gopkg.
com
in/
mattn
square/go-
colorableMIT
jose.v2Apache-2.0https://github.com/
mattn
square/go-
colorable
jose/blob/
master
v2.4.1/LICENSE
github
gopkg.
com
in/
mattn
square/go-
isattyMIT
jose.v2/jsonBSD-3-Clausehttps://github.com/
mattn
square/go-
isatty
jose/blob/
master
v2.4.1/json/LICENSE
github.com/mitchellh/consulstructure

Camera Device Service

The camera device service is linked with the following packages when compiled:

PackageLicense TypeLicense URL
bitbucket.org/bertimus9/systemstatMIThttps://
github
bitbucket.
com
org/
mitchellh
bertimus9/
consulstructure
systemstat/
blob/master
src/v0.5.0/LICENSE
github.com/
mitchellh
OneOfOne/
copystructureMIT
xxhashApache-2.0https://github.com/
mitchellh
OneOfOne/
copystructure
xxhash/blob/
master
v1.2.8/LICENSE
github.com/
mitchellh
armon/
mapstructure
go-metricsMIThttps://github.com/
mitchellh
armon/
mapstructure
go-metrics/blob/
master
f0300d1749da/LICENSE
github.com/
mitchellh
cenkalti/
reflectwalk
backoffMIThttps://github.com/
mitchellh
cenkalti/
reflectwalk
backoff/blob/
master
v2.2.1/LICENSE
github.com/
pebbe/zmq4BSD-2-Clause
eclipse/paho.mqtt.golangEPL-2.0https://github.com/
pebbe/zmq4
eclipse/paho.mqtt.golang/blob/
master
v1.4.1/LICENSE
.txt
github.com/
pelletier
edgexfoundry/device-camera-go
-toml
Apache-2.0https://github.com/
pelletier
edgexfoundry/device-camera-go
-toml
/blob/
master
HEAD/LICENSE
github.com
/x448/float16MIT
/edgexfoundry/device-sdk-go/v2Apache-2.0https://github.com/
x448/float16
edgexfoundry/device-sdk-go/blob/
master
v2.2.1-dev.10/LICENSE
golang
github.
org
com/
x/crypto/sha3BSD-3-Clause
edgexfoundry/go-mod-bootstrap/v2Apache-2.0https://
pkg
github.com/edgexfoundry/go
.dev/golang.org/x/crypto/sha3?tab=licensesgolang.org/x/netBSD-3-Clause
-mod-bootstrap/blob/v2.2.0/LICENSE
github.com/edgexfoundry/go-mod-configuration/v2Apache-2.0https://
pkg
github.com/edgexfoundry/go
.dev/golang.org/x/net?tab=licensesgolang.org/x/sysBSD-3-Clause
-mod-configuration/blob/v2.2.0/LICENSE
github.com/edgexfoundry/go-mod-core-contracts/v2Apache-2.0https://
pkg
github.com/edgexfoundry/go
.dev/golang.org/x/sys?tab=licensesgolang.org/x/textBSD-3-Clause
-mod-core-contracts/blob/v2.2.0/LICENSE
github.com/edgexfoundry/go-mod-messaging/v2Apache-2.0https://
pkg
github.com/edgexfoundry/go-mod-messaging/blob/v2.2.1-dev
/golang
.
org/x/text?tab=licenses

LoRa Device Service

The LoRa device service is linked with the following packages when compiled:

PackageLicense TypeLicense URLbitbucket.org/bertimus9/systemstatMIT
5/LICENSE
github.com/edgexfoundry/go-mod-registry/v2Apache-2.0https://
bitbucket
github.
org
com/
bertimus9/systemstat/src/master
edgexfoundry/go-mod-registry/blob/v2.2.0/LICENSE
github.com/
armon
edgexfoundry/go
-metricsMIT
-mod-secrets/v2Apache-2.0https://github.com/
armon
edgexfoundry/go-mod-
metrics
secrets/blob/
master
v2.2.0/LICENSE
github.com/
cenkalti
faceterteam/
backoff
onvif4goMIThttps://github.com/
cenkalti
faceterteam/
backoff
onvif4go/blob/
master
v0.4.0/LICENSE
github.com/
eclipse/paho.mqtt.golangBSD-3-Clause
fatih/colorMIThttps://github.com/
eclipse/paho.mqtt.golang
fatih/color/blob/
master
v1.9.0/LICENSE.md
github.com/
edgexfoundry/device-sdk-go
fxamacker/cbor/v2
Apache-2.0
MIThttps://github.com/
edgexfoundry/device-sdk-go
fxamacker/cbor/blob
/master
/v2.4.0/LICENSE
github.com/
edgexfoundry/
go-
mod-bootstrap
kit/
v2Apache-2.0
logMIThttps://github.com
/edgexfoundry
/go-
mod-bootstrap
kit/log/blob/
master/v2
v0.2.0/LICENSE
github.com
/edgexfoundry
/go-
mod-configuration
logfmt/
v2Apache-2.0
logfmtMIThttps://github.com
/edgexfoundry
/go-
mod-configuration
logfmt/logfmt/blob/
master/v2/
v0.5.1/LICENSE
github.com/
edgexfoundry/
go-
mod-core-contracts/v2Apache-2.0
playground/localesMIThttps://github.com
/edgexfoundry
/go-
mod-core-contracts
playground/locales/blob/
master/v2
v0.14.0/LICENSE
github.com
/edgexfoundry
/go-
mod-messaging/v2Apache-2.0
playground/universal-translatorMIThttps://github.com
/edgexfoundry
/go-
mod
playground/universal-
messaging
translator/blob/
master/v2
v0.18.0/LICENSE
github.com
/edgexfoundry
/go-
mod-registry/v2Apache-2.0
playground/validator/v10MIThttps://github.com
/edgexfoundry
/go-
mod-registry
playground/validator/blob
/master/v2
/v10.10.1/LICENSE
github.com
/edgexfoundry
/go-
mod-secrets/v2Apache-2.0
redis/redis/v7BSD-2-Clausehttps://github.com
/edgexfoundry
/go-
mod-secrets
redis/redis/blob/
master/v2
v7.3.0/LICENSE
github.com/
fatih
golang/
colorMIT
protobufBSD-3-Clausehttps://github.com/
fatih
golang/
color
protobuf/blob/
master
v1.5.2/LICENSE
.md
github.com/
fxamacker
google/
cbor/v2MIT
uuidBSD-3-Clausehttps://github.com/
fxamacker
google/
cbor
uuid/blob/
master/v2
v1.3.0/LICENSE
github.com/
go-kit/kit/logMIT
gorilla/muxBSD-3-Clausehttps://github.com/
go-kit
gorilla/
kit
mux/blob/
master/log
v1.8.0/LICENSE
github.com/gorilla/
go-logfmt/logfmtMIT
websocketBSD-2-Clausehttps://github.com/
go-logfmt
gorilla/
logfmt
websocket/blob/
master
v1.4.2/LICENSE
github.com/
google
hashicorp/consul/
uuid
api
BSD-3-Clause
MPL-2.0https://github.com/
google
hashicorp/
uuid
consul/blob
/master
/api/v1.9.1/api/LICENSE
github.com/
go-playground
hashicorp/
localesMIT
errwrapMPL-2.0https://github.com/
go-playground
hashicorp/
locales
errwrap/blob/
master
v1.0.0/LICENSE
github.com/hashicorp/go-
playground/universal-translatorMIT
cleanhttpMPL-2.0https://github.com/hashicorp/go-
playground
cleanhttp/
universal-translator/
blob/
master
v0.5.1/LICENSE
github.com/hashicorp/go-
playground/validator/v10
hclogMIThttps://github.com/hashicorp/go-
playground/validator
hclog/blob/
master/v10
v0.12.0/LICENSE
github.com/hashicorp/go
-redis/redis/v7BSD-2-Clause
-immutable-radixMPL-2.0https://github.com/hashicorp/go-immutable-
redis/redis
radix/blob/
master/v7
v1.0.0/LICENSE
github.com/
gorilla
hashicorp/
mux
go-multierror
BSD-3-Clause
MPL-2.0https://github.com/
gorilla
hashicorp/
mux
go-multierror/blob/
master
v1.1.1/LICENSE
github.com/
gorilla
hashicorp/
websocket
go-rootcerts
BSD
MPL-2
-Clause
.0https://github.com/
gorilla
hashicorp/
websocket
go-rootcerts/blob/
master
v1.0.2/LICENSE
github.com/hashicorp/
consul
golang-lru/
api
simplelruMPL-2.0https://github.com/hashicorp/
consul
golang-lru/blob/
master/api
v0.5.0/LICENSE
github.com/hashicorp/serf/
errwrap
coordinateMPL-2.0https://github.com/hashicorp/
errwrap
serf/blob/
master
v0.9.5/LICENSE
github.com/
hashicorp
leodido/go-
cleanhttpMPL-2.0
urnMIThttps://github.com/
hashicorp
leodido/go-
cleanhttp
urn/blob/
master
v1.2.1/LICENSE
github.com/
hashicorp
mattn/go-
hclog
colorableMIThttps://github.com/
hashicorp
mattn/go-
hclog
colorable/blob/
master
v0.1.6/LICENSE
github.com/
hashicorp
mattn/go-
immutable-radixMPL-2.0
isattyMIThttps://github.com/
hashicorp
mattn/go-
immutable-radix
isatty/blob/
master
v0.0.12/LICENSE
github.com/
hashicorp/golang-lru/simplelruMPL-2.0
mitchellh/consulstructureMIThttps://github.com/
hashicorp
mitchellh/
golang-lru
consulstructure/blob/
master/simplelru
56fdc4d2da54/LICENSE
github.com/
hashicorp
mitchellh/
go-multierrorMPL-2.0
copystructureMIThttps://github.com/
hashicorp
mitchellh/
go-multierror
copystructure/blob/
master
v1.0.0/LICENSE
github.com/
hashicorp
mitchellh/
go-rootcertsMPL-2.0
mapstructureMIThttps://github.com/
hashicorp
mitchellh/
go-rootcerts
mapstructure/blob/
master
v1.1.2/LICENSE
github.com/
hashicorp
mitchellh/
serf/coordinateMPL-2.0
reflectwalkMIThttps://github.com/
hashicorp
mitchellh/
serf
reflectwalk/blob/
master/coordinate/
v1.0.0/LICENSE
github.com/
leodido/go-urnMIT
pebbe/zmq4BSD-2-Clausehttps://github.com/
leodido
pebbe/
go-urn
zmq4/blob/
master
v1.2.7/LICENSE.txt
github.com/
mattn
pelletier/go-
colorableMIT
tomlApache-2.0https://github.com/
mattn
pelletier/go-
colorable
toml/blob/
master
v1.9.5/LICENSE
github.com/
mattn
rcrowley/go-
isattyMIT
metricsBSD-2-Clause-FreeBSDhttps://github.com/
mattn
rcrowley/go-
isatty
metrics/blob/
master
3113b8401b8a/LICENSE
github.com/spiffe/
mitchellh
go-spiffe/
consulstructureMIT
v2Apache-2.0https://github.com/
mitchellh
spiffe/
consulstructure
go-spiffe/blob
/master
/v2.0.0/v2/LICENSE
github.com/
mitchellh
x448/
copystructure
float16MIThttps://github.com/
mitchellh
x448/
copystructure
float16/blob/
master
v0.8.4/LICENSE
github.com/
mitchellh
zeebo/
mapstructure
errsMIThttps://github.com/
mitchellh
zeebo/
mapstructure
errs/blob/
master
v1.2.2/LICENSE
github
golang.
com
org/
mitchellh
x/
reflectwalkMIT
cryptoBSD-3-Clausehttps://
github
cs.opensource.
com
google/
mitchellh
go/
reflectwalk
x/
blob
crypto/
master
+/e495a2d5:LICENSE
github
golang.
com
org/
OneOfOne
x/
xxhash
net
Apache-2.0
BSD-3-Clausehttps://
github
cs.opensource.
com
google/
OneOfOne
go/
xxhash
x/
blob
net/
master
+/69e39bad:LICENSE
github
golang.
com
org/x/
pebbe
sync/
zmq4
semaphoreBSD-
2
3-Clausehttps://
github
cs.opensource.
com
google/
pebbe
go/
zmq4
x/
blob
sync/
master
+/036812b2:LICENSE
.txt
github
golang.
com
org/
pelletier
x/
go-tomlApache-2.0
sysBSD-3-Clausehttps://
github
cs.opensource.
com
google/
pelletier
go/
go-toml
x/
blob
sys/
master
+/3681064d:LICENSE
github
golang.
com
org/
tarm
x/
serial
textBSD-3-Clausehttps://
github
cs.opensource.
com
google/
tarm
go/
serial
x/
blob
text/
master/MIT
+/v0.3.7:LICENSE
github.com/x448/float16
google.golang.org/genproto/googleapis/rpc/statusApache-2.0https://github.com/
x448
googleapis/
float16
go-genproto/blob/
master
3a66f561d7aa/LICENSE
google.golang.org/
x/crypto/sha3BSD-3-Clause
grpcApache-2.0https://
pkg.go.dev/golang.org/x/crypto/sha3?tab=licenses
github.com/grpc/grpc-go/blob/v1.42.0/LICENSE
google.golang.org/
x/net
protobufBSD-3-Clausehttps://
pkg.go.dev/golang.org/x/net?tab=licensesgolang.org/x/sysBSD-3-Clause
github.com/protocolbuffers/protobuf-go/blob/v1.27.1/LICENSE
gopkg.in/square/go-jose.v2Apache-2.0https://
pkg
github.com/square/go
.dev/golang.org/x/sys?tab=licensesgolang.org/x/text
-jose/blob/v2.4.1/LICENSE
gopkg.in/square/go-jose.v2/jsonBSD-3-Clausehttps://
pkg
github.com/square/go
.dev/golang.org/x/text?tab=licenses
-jose/blob/v2.4.1/json/LICENSE
gopkg.in/yaml.v3MIThttps://github.com/go-yaml/yaml/blob/v3.0.1/LICENSE

References

...

  • CPS: Cyber-Physical System
  • MQTT: A lightweight, publish-subscribe network protocol designed for connecting remote devices, especially when there are bandwidth constraints. (MQTT is not an acronym.)