vRAN Tools

The following open-source vRAN tools are delivered in the following container image, docker.io/starlingx/stx-centos-tools-dev:stx.7.0-v1.0.1:

To use them on the StarlingX Platform, you must launch this container image in a Kubernetes pod and exec into a shell in the container in order to execute the commands. The Kubernetes pod must run in a privileged and host context, such that the above tools provide information on resources in the host context.

The suggested yaml manifest to launch the stx-centos-tools-dev container is as follows:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: stx-centos-tools
spec:
  replicas: 1
  selector:
    matchLabels:
      app: stx-centos-tools
  template:
    metadata:
      labels:
        app: stx-centos-tools
    spec:
      containers:
      - name: stx-centos-tools
        image: docker.io/starlingx/stx-centos-tools-dev:stx.7.0-v1.0.1
        imagePullPolicy: Always
        stdin: true
        tty: true
        securityContext:
          privileged: true  # processes in privileged containers are essentially equivalent to root on the host
          capabilities:
            add: ["NET_ADMIN", "SYS_ADMIN"] # add the capabilities you need https://man7.org/linux/man-pages/man7/capabilities.7.html
          runAsUser: 0  # run as root
        volumeMounts:
        - mountPath: /tmp
          name: tmp-volume
      volumes:
      - name: tmp-volume
        hostPath:
          path: /tmp
          type: Directory
      hostIPC: true  # Use the host's network namespace https://www.man7.org/linux/man-pages/man7/network_namespaces.7.html
      hostNetwork: true  # Use the host's network namespace https://www.man7.org/linux/man-pages/man7/network_namespaces.7.html
      hostPID: true  # Use the host's pid namespace https://man7.org/linux/man-pages/man7/pid_namespaces.7.html

For example:

# Create pod
~(keystone_admin)] $ kubectl apply -f stx-centos-tools.yaml

# Get the running pods
~(keystone_admin)] $ kubectl get pods
NAME                               READY   STATUS    RESTARTS   AGE
stx-centos-tools                   1/1     Running   0          6s

Then exec into shell in container:

# Attach to pod
~(keystone_admin)] $ kubectl exec -it stx-centos-tools -- bash
[root@controller-0 /]#
[root@controller-0 /]#

Build, deploy and run non-open-source tools

The docker.io/starlingx/stx-centos-tools-dev:stx.7.0-v1.0.1 container image also contains the StarlingX development tools.

Using this container as your base image, this enables the StarlingX user to build a custom container for building and installing of custom or non-opensource tools (specifically ones requiring StarlingX load-specific kernel headers) on a StarlingX target, and then using those tools on StarlingX.

For example this can be used for running the non-opensource Intel tool, Quartzville.

Quartzville is available at https://designintools.intel.com/product_p/stlgrn108.htm, contact an Intel representative for access.

You can create and build a Docker image with Quartzville tools as follows:

Running on Kubernetes:

# Creating the Dockerfile
cat << EOF > Dockerfile
FROM docker.io/starlingx/stx-centos-tools-dev:stx.7.0-v1.0.1

USER root
WORKDIR /root
ADD ./348742_Quartzville_Tools_637987.zip /root
RUN yum install -y centos-release-scl
RUN yum install -y devtoolset-9
RUN yum install -y kernel-devel
RUN unzip /root/348742_Quartzville_Tools_637987.zip
RUN rm /root/348742_Quartzville_Tools_637987.zip
RUN chmod +x TOOLS/Linux_x64/OEM_Mfg/install
RUN chmod +x TOOLS/Linux_x64/SVTools/lanconf64e
CMD /bin/bash -c "cd TOOLS/Linux_x64/OEM_Mfg/ && scl enable devtoolset-9 ./install && sleep infinity"
EOF

# Building the image with Quartzville
sudo docker build -t stx-centos-tools-quartzville .

# Create the yml for Kubernetes; note the additional mounting of the host kernel headers from the host
cat << EOF > stx-centos-tools-quartzville.yml
apiVersion: v1
kind: Pod
metadata:
  name: stx-centos-tools-quartzville
spec:
  hostNetwork: true
  hostPID: true
  containers:
  - name: stx-centos-tools-quartzville
    image: registry.local:9001/public/stx-centos-tools-quartzville
    imagePullPolicy: Always
    stdin: true
    tty: true
    securityContext:
      privileged: true
      runAsUser: 0
      capabilities:
        add: ["NET_ADMIN", "SYS_ADMIN"]
    volumeMounts: # Mount host kernel headers in container
    - name: usrsrc
      mountPath: /usr/src/
    - name: libmodules
      mountPath: /lib/modules/
  imagePullSecrets:
    - name: regcred
  volumes:
  - name: usrsrc
    hostPath:
      path: /usr/src
  - name: libmodules
    hostPath:
      path: /lib/modules
EOF

# Create secret for local registry
kubectl create secret docker-registry regcred --docker-server=registry.local:9001 --docker-username=admin --docker-password=<admin-keystone-user-password>

# Log in local registry
sudo docker login -u admin -p <admin-keystone-user-password> registry.local:9001

# Tagging for local registry
sudo docker tag stx-centos-tools-quartzville:latest registry.local:9001/public/stx-centos-tools-quartzville:latest

# Push image to local registry
sudo docker push registry.local:9001/public/stx-centos-tools-quartzville:latest

# Create pod
kubectl apply -f stx-centos-tools-quartzville.yml

# Attach to pod
kubectl exec -it stx-centos-tools-quartzville -- scl enable devtoolset-9 /bin/bash
# < execute testing with quartzville tool >

Cleanup

After finishing executing commands on the container just run the following commands to uninstall Quartzville driver:

# Inside the container
cd TOOLS/Linux_x64/OEM_Mfg/
./install uninstall
exit

# Delete the quartzville pod
kubectl delete pods stx-centos-tools-quartzville