Inhalt

Einleitung

Voraussetzungen

Windows/ MAC Intel/ Linux

MAC-ARM-basiert - M1/M2/M3

Verfahren zum Einrichten einer Buildumgebung mit Vagrant

Zusammenfassung der Maßnahmen

Verfahren zum Erstellen einer benutzerdefinierten IOx-Anwendung

Bereitstellung der IOx-Anwendung

Fehlerbehebung

Einleitung

In diesem Dokument wird beschrieben, wie Sie IOx-Anwendungen mithilfe von Vagrant und VirtualBox erstellen und in der lokalen IOx-Manager-GUI bereitstellen.

Voraussetzungen

Windows/ MAC Intel/ Linux

- Git

- Vagrant

- VirtuelleBox

MAC-ARM-basiert - M1/M2/M3

- Git

- Vagrant

- VMware-Fusion

- vagrant-vmware-desktop-Plugin

Herunterladen:

- Vagrant

- VirtuelleBox

Verfahren zum Einrichten einer Buildumgebung mit Vagrant

Zusammenfassung der Maßnahmen

- Die vagrantfile-Konfiguration richtet eine VM-Umgebung basierend auf der Host-Rechnerarchitektur ein.

- Je nach Architektur wird das virtuelle System so konfiguriert, dass es entweder VMware Fusion oder VirtualBox verwendet

- Es stellt dem VM die notwendige Software und Tools zur Verfügung, darunter QEMU (Quick EMUlator) , Docker und ioxclient.

- Bei der Konfiguration wird automatisch eine iperf-Beispielanwendung für AMD64-Zielgeräte der Cisco Plattform erstellt.

Schritt 1: Klonen Sie das Github-Repository in Ihrem lokalen System:

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

Alternativ können Sie den Inhalt des Konfigurationsgehäuses kopieren und in "Vagrantfile" einfügen. Dadurch wird eine Datei mit dem Namen "Vagrantfile" im lokalen System erstellt:

# -*- 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

Schritt 2: Stellen Sie sicher, dass die Zeile "export VER="5:24.0.9-1~ubuntu.22.04~jammy" nicht kommentiert und alle anderen Exportanweisungen kommentiert sind. Dies entspricht der Docker-Engine-Version, die Sie in dieser Vagrant-Umgebung installieren möchten:

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

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

Schritt 3: Starten Sie die Vagrant-Umgebung mit dem Befehl vagrant up in dem Verzeichnis, in dem sich die Vagrantdatei befindet, und beobachten Sie eine erfolgreiche Erstellung der IOx-Anwendung iperf für amd64 tar-Datei:

vagrant up

Verfahren zum Erstellen einer benutzerdefinierten IOx-Anwendung

In diesem Abschnitt wird beschrieben, wie Sie eine benutzerdefinierte IOx-Anwendung mithilfe der vaganten Umgebung erstellen.

Hinweis: Das Verzeichnis "/vagrant" im VM und das Verzeichnis, das die "Vagrantdatei" im Host-System enthält, sind synchronisiert.

Wie im Bild gezeigt, wird die Datei new.js innerhalb des virtuellen Systems erstellt und ist auch auf dem Host-System zugänglich:

Schritt 1: Klonen Sie eine Beispielanwendung in denselben Ordner, in dem sich "Vagrantfile" befindet. In diesem Beispiel wird die Anwendung "iox-multiarch-nginx-nyancat-sample" verwendet:

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

Schritt 2: SSH in die vagante Maschine:

vagrant ssh

Schritt 3: Erstellen Sie die Anwendung:

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

chmod +x build

sh ./build

Nach Abschluss des Buildprozesses stehen Ihnen nun zwei IOx-Anwendungen zur Bereitstellung zur Verfügung ("iox-amd64-nginx-nyancat-sample.tar.gz" für amd64 und "iox-arm64-nginx-nyancat-sample.tar.gz" für Zielplattformen):

Bereitstellung der IOx-Anwendung

Schritt 1: Über die Webschnittstelle können Sie auf den IR1101 zugreifen:

Schritt 2: Verwenden Sie das Konto mit der Berechtigung 15:

Schritt 3: Verwenden Sie bei der IOx Local Manager-Anmeldung dasselbe Konto, um fortzufahren, wie im Bild gezeigt:

Schritt 4: Klicken Sie auf Add New (Neu hinzufügen), wählen Sie einen Namen für die IOx-Anwendung aus, und wählen Sie die Datei package.tar aus, die in Schritt 3 des Abschnitts Verfahren zum Einrichten einer Buildumgebung mit Vagrant erstellt wurde, wie im Bild gezeigt:

Schritt 5: Sobald das Paket hochgeladen wurde, aktivieren Sie es wie im Bild gezeigt:

Schritt 6: Öffnen Sie auf der Registerkarte Resources die Schnittstelleneinstellung, um die feste IP-Adresse anzugeben, die Sie der App wie im Bild gezeigt zuweisen möchten:

Schritt 7. Klicken Sie auf OK und dann auf Aktivieren. Wenn die Aktion abgeschlossen ist, navigieren Sie zurück zur Hauptseite für den lokalen Manager (Schaltfläche "Anwendungen" im oberen Menü), und starten Sie die Anwendung wie in der Abbildung dargestellt:

Nachdem Sie diese Schritte durchgeführt haben, kann die Anwendung ausgeführt werden.

Fehlerbehebung

Um Probleme mit Ihrer Konfiguration zu beheben, überprüfen Sie die Protokolldatei, die Sie im Python-Skript mit einem lokalen Manager erstellen. Navigieren Sie zu Anwendungen, klicken Sie in der iox_web-Anwendung auf Verwalten, und wählen Sie dann die Registerkarte Protokolle wie im Bild dargestellt aus: