Contenido

Introducción

Prerequisites

Windows/ MAC Intel/ Linux

Basado en MAC ARM: M1/M2/M3

Procedimiento para configurar un entorno de compilación mediante Vagrant

Resumen de acciones

Procedimiento para crear una aplicación IOx personalizada

Implementación de la aplicación IOx

Troubleshoot

Introducción

Este documento describe cómo crear aplicaciones IOx usando Vagrant y Virtualbox e implementarlas en la GUI del administrador local de IOx.

Prerequisites

Windows/ MAC Intel/ Linux

- Git

- Vagabundo

- Virtualbox

Basado en MAC ARM: M1/M2/M3

- Git

- Vagabundo

- VMWare Fusion

- complemento vagrant-vmware-desktop

Para descargar:

- Vagabundo

- VirtualBox

Procedimiento para configurar un entorno de compilación mediante Vagrant

Resumen de acciones

- La configuración de vagrantfile configura un entorno de VM basado en su arquitectura de máquina host.

- Configura la máquina virtual para utilizar VMware Fusion o VirtualBox, en función de la arquitectura

- Aprovisiona la máquina virtual con el software y las herramientas necesarias, incluidos QEMU (Quick EMUlator) , Docker y ioxclient.

- La configuración crea automáticamente una aplicación iperf de ejemplo para los dispositivos de la plataforma Cisco de destino amd64.

Paso 1. Clonar el repositorio de Github en su sistema local:

git clone https://github.com/suryasundarraj/cisco-iox-app-build.git

Como alternativa, copie y pegue el contenido del contenedor de configuración en "Vagrantfile". Esto crea un archivo con el nombre "Vagrantfile" en el sistema local:

# -*- mode: ruby -*-

# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure

# configures the configuration version (we support older styles for

# backwards compatibility). Please don't change it unless you know what

# you're doing.

Vagrant.configure('2') do |config|

arch = `arch`.strip()

if arch == 'arm64'

puts "This appears to be an ARM64 machine! ..."

config.vm.box = 'gyptazy/ubuntu22.04-arm64'

config.vm.boot_timeout = 600

config.vm.provider "vmware_fusion" do |vf|

#vf.gui = true

vf.memory = "8192"

vf.cpus = "4"

end

config.vm.define :ioxappbuild

else

puts "Assuming this to be an Intel x86 machine! ..."

config.vm.box = "bento/ubuntu-22.04"

config.vm.network "public_network", bridge: "ens192"

config.vm.boot_timeout = 600

config.vm.provider "virtualbox" do |vb|

#vb.gui = true

vb.memory = "8192"

vb.cpus = "4"

end

config.vm.define :ioxappbuild

end

config.vm.provision "shell", inline: <<-SHELL

#!/bin/bash

# apt-cache madison docker-ce

export VER="5:24.0.9-1~ubuntu.22.04~jammy"

echo "!!! installing dependencies and packages !!!"

apt-get update

apt-get install -y ca-certificates curl unzip git pcregrep

install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

chmod a+r /etc/apt/keyrings/docker.asc

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" |  tee /etc/apt/sources.list.d/docker.list > /dev/null

apt-get update

apt-get install -y qemu binfmt-support qemu-user-static

apt-get install -y docker-ce=$VER docker-ce-cli=$VER docker-ce-rootless-extras=$VER containerd.io docker-buildx-plugin docker-compose-plugin

# apt-get install -y docker.io docker-compose docker-buildx

usermod -aG docker vagrant

echo "!!! generating .ioxclientcfg.yaml file !!!"

echo 'global:' > /home/vagrant/.ioxclientcfg.yaml

echo '  version: "1.0"' >> /home/vagrant/.ioxclientcfg.yaml

echo '  active: default' >> /home/vagrant/.ioxclientcfg.yaml

echo '  debug: false' >> /home/vagrant/.ioxclientcfg.yaml

echo '  fogportalprofile:' >> /home/vagrant/.ioxclientcfg.yaml

echo '    fogpip: ""' >> /home/vagrant/.ioxclientcfg.yaml

echo '    fogpport: ""' >> /home/vagrant/.ioxclientcfg.yaml

echo '    fogpapiprefix: ""' >> /home/vagrant/.ioxclientcfg.yaml

echo '    fogpurlscheme: ""' >> /home/vagrant/.ioxclientcfg.yaml

echo '  dockerconfig:' >> /home/vagrant/.ioxclientcfg.yaml

echo '    server_uri: unix:///var/run/docker.sock' >> /home/vagrant/.ioxclientcfg.yaml

echo '    api_version: "1.22"' >> /home/vagrant/.ioxclientcfg.yaml

echo 'author:' >> /home/vagrant/.ioxclientcfg.yaml

echo '  name: |' >> /home/vagrant/.ioxclientcfg.yaml

echo '    Home' >> /home/vagrant/.ioxclientcfg.yaml

echo '  link: localhost' >> /home/vagrant/.ioxclientcfg.yaml

echo 'profiles: {default: {host_ip: 127.0.0.1, host_port: 8443, auth_keys: cm9vdDpyb290,' >> /home/vagrant/.ioxclientcfg.yaml

echo '    auth_token: "", local_repo: /software/downloads, api_prefix: /iox/api/v2/hosting/,' >> /home/vagrant/.ioxclientcfg.yaml

echo '    url_scheme: https, ssh_port: 2222, rsa_key: "", certificate: "", cpu_architecture: "",' >> /home/vagrant/.ioxclientcfg.yaml

echo '    middleware: {mw_ip: "", mw_port: "", mw_baseuri: "", mw_urlscheme: "", mw_access_token: ""},' >> /home/vagrant/.ioxclientcfg.yaml

echo '    conn_timeout: 1000, client_auth: "no", client_cert: "", client_key: ""}}' >> /home/vagrant/.ioxclientcfg.yaml

cp /home/vagrant/.ioxclientcfg.yaml /root/.ioxclientcfg.yaml

chown vagrant:vagrant /home/vagrant/.ioxclientcfg.yaml

arch=$(uname -m)

if [[ $arch == x86_64 ]]; then

# download page https://developer.cisco.com/docs/iox/iox-resource-downloads/

echo "!!! downloading and extracting ioxclient for x86_64 architecture !!!"

curl -O https://pubhub.devnetcloud.com/media/iox/docs/artifacts/ioxclient/ioxclient-v1.17.0.0/ioxclient_1.17.0.0_linux_amd64.tar.gz

tar -xvf /home/vagrant/ioxclient_1.17.0.0_linux_amd64.tar.gz

cp /home/vagrant/ioxclient_1.17.0.0_linux_amd64/ioxclient /usr/local/bin/ioxclient

rm -rv /home/vagrant/ioxclient_1.17.0.0_linux_amd64

elif  [[ $arch = aarch64 ]]; then

# download page https://developer.cisco.com/docs/iox/iox-resource-downloads/

echo "!!! downloading and extracting ioxclient for arm64 architecture !!!"

curl -O https://pubhub.devnetcloud.com/media/iox/docs/artifacts/ioxclient/ioxclient-v1.17.0.0/ioxclient_1.17.0.0_linux_arm64.tar.gz

tar -xvf /home/vagrant/ioxclient_1.17.0.0_linux_arm64.tar.gz

cp /home/vagrant/ioxclient_1.17.0.0_linux_arm64/ioxclient /usr/local/bin/ioxclient

rm -rv /home/vagrant/ioxclient_1.17.0.0_linux_arm64

fi

chown vagrant:vagrant /usr/local/bin/ioxclient

echo "!!! pulling and packaging the app for x86_64 architecture !!!"

docker pull --platform=linux/amd64 mlabbe/iperf3

ioxclient docker package mlabbe/iperf3 .

cp package.tar /vagrant/iperf3_amd64-$(echo $VER | pcregrep -o1 ':([0-9.-]+)~').tar

SHELL

end

Paso 2. Asegúrese de que la línea "export VER="5:24.0.9-1~ubuntu.22.04~jammy" no tenga comentarios y que todas las demás sentencias de exportación estén comentadas. Esto corresponde a la versión de Docker Engine que desea instalar en este entorno Vagrant:

cisco@cisco-virtual-machine:~/Desktop/ioxappbuild$ cat Vagrantfile | grep 'export' | grep -v '#'

export VER="5:24.0.9-1~ubuntu.22.04~jammy"

Paso 3. Inicie el entorno Vagrant con el comando vagrant up en el directorio donde reside el archivo Vagrant y observe una compilación exitosa de la aplicación IOSx iperf para el archivo tar amd64:

vagrant up

Procedimiento para crear una aplicación IOx personalizada

En esta sección se describe cómo crear una aplicación IOx personalizada utilizando el entorno Vagrant.

Nota: El directorio "/vagrant" en la VM y el directorio que contiene el "Vagrant file" en el sistema host están sincronizados.

Como se muestra en la imagen, el archivo new.js se crea dentro de la VM y también es accesible en el sistema host:

Paso 1. Clonar una aplicación de ejemplo en la misma carpeta en la que se encuentra "Vagrantfile". En este ejemplo, se utiliza la aplicación "iox-multiarch-nginx-nyancat-sample":

git clone https://github.com/etychon/iox-multiarch-nginx-nyancat-sample.git

Paso 2. SSH en la máquina vagabunda:

vagrant ssh

Paso 3. Genere la aplicación:

cd /vagrant/iox-multiarch-nginx-nyancat-sample/

chmod +x build

sh ./build

Una vez finalizado el proceso de creación, tendrá dos aplicaciones IOx listas para su implementación ("iox-amd64-nginx-nyancat-sample.tar.gz" para amd64 y "iox-arm64-nginx-nyancat-sample.tar.gz" para las plataformas de destino):

Implementación de la aplicación IOx

Paso 1. Acceda al IR1101 mediante la interfaz web:

Paso 2. Utilice la cuenta de privilegio 15:

Paso 3. En el inicio de sesión de IOx Local Manager, utilice la misma cuenta para continuar como se muestra en la imagen:

Paso 4. Haga clic en Add New, seleccione un nombre para la aplicación IOx y elija el package.tar que se generó en el Paso 3 de la sección Procedimiento para Configurar un Entorno de Compilación Usando Vagrant, como se muestra en la imagen:

Paso 5. Una vez cargado el paquete, actívelo como se muestra en la imagen:

Paso 6. En la pestaña Resources, abra la configuración de la interfaz para especificar la IP fija que desea asignar a la aplicación como se muestra en la imagen:

Paso 7. Haga clic en Aceptar, luego en Activar. Una vez finalizada la acción, vuelva a la página principal de Local Manager (botón Applications en el menú superior) y, a continuación, inicie la aplicación como se muestra en la imagen:

Después de realizar estos pasos, la aplicación está lista para ejecutarse.

Troubleshoot

Para resolver problemas de configuración, verifique el archivo de registro que creó en el script Python usando un administrador local. Navegue hasta Aplicaciones, haga clic en Administrar en la aplicación iox_web, luego seleccione la pestaña Registros como se muestra en la imagen: