Introduzione
In questo documento viene descritto come creare applicazioni IOx utilizzando Vagrant e Virtualbox e distribuirle nell'interfaccia grafica di IOx Local Manager.
Prerequisiti
Windows/ MAC Intel/ Linux
Basato su ARM MAC - M1/M2/M3
- Git
- Vagante
- VMWare Fusion
- plugin vagrant-vmware-desktop
Per scaricare:
Procedura per impostare l'ambiente di creazione utilizzando Vagrant
Riepilogo delle azioni
- La configurazione del file vagrante consente di configurare un ambiente VM in base all'architettura del computer host.
- Configura la VM per l'utilizzo di VMware Fusion o VirtualBox, a seconda dell'architettura
- Fornisce alla VM il software e gli strumenti necessari, tra cui QEMU (Quick EMUlator), Docker e ioxclient.
- La configurazione crea automaticamente un'applicazione iperf di esempio per i dispositivi della piattaforma Cisco di destinazione amd64.
Passaggio 1. Duplicare il repository Github nel sistema locale:
git clone https://github.com/suryasundarraj/cisco-iox-app-build.git
In alternativa, copiare e incollare il contenuto dell'enclosure di configurazione in "Vagrantfile". In questo modo viene creato un file con il nome "Vagrantfile" nel sistema locale:
# -*- 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
Passaggio 2. Assicurarsi che la riga "export VER="5:24.0.9-1~ubuntu.22.04~jammy" non contenga commenti e che tutte le altre istruzioni di esportazione contengano commenti. Corrisponde alla versione del Docker Engine che si desidera installare in questo ambiente Vagrant:
cisco@cisco-virtual-machine:~/Desktop/ioxappbuild$ cat Vagrantfile | grep 'export' | grep -v '#'
export VER="5:24.0.9-1~ubuntu.22.04~jammy"
Passaggio 3. Avviare l'ambiente Vagrant con il comando vagrant up nella directory in cui si trova il file Vagrant e osservare che l'applicazione IOSx iperf per il file tar amd64 è stata generata correttamente:
vagrant up
Procedura per la creazione di un'applicazione IOx personalizzata
In questa sezione viene descritto come creare un'applicazione IOx personalizzata utilizzando l'ambiente vagrant.
Nota: la directory "/vagrant" nella VM e la directory che contiene il "Vagrantfile" nel sistema host sono sincronizzate.
Come mostrato nell'immagine, il nuovo file.js viene creato all'interno della VM ed è accessibile anche sul sistema host:
Passaggio 1. Clonare un'applicazione di esempio nella stessa cartella in cui si trova "Vagrantfile". Nell'esempio viene utilizzata l'applicazione "iox-multiarch-ninx-nyancat-sample":
git clone https://github.com/etychon/iox-multiarch-nginx-nyancat-sample.git
Passaggio 2. SSH sul dispositivo vagante:
vagrant ssh
Passaggio 3. Compilare l'applicazione:
cd /vagrant/iox-multiarch-nginx-nyancat-sample/
chmod +x build
sh ./build
Al termine del processo di generazione, è possibile disporre di due applicazioni IOx pronte per l'installazione ("iox-amd64-nginx-nyancat-sample.tar.gz" per amd64 e "iox-arm64-nyancat-sample.tar.gz" per le piattaforme di destinazione):
Distribuire l'applicazione IOx
Passaggio 1. Accedere a IR1101 tramite l'interfaccia Web:
Passaggio 2. Utilizzare l'account con privilegi 15:
Passaggio 3. Nell'accesso a IOx Local Manager, utilizzare lo stesso account per continuare come mostrato nell'immagine:
Passaggio 4. Fare clic su Add New (Aggiungi nuovo), selezionare un nome per l'applicazione IOx e scegliere il file package.tar creato nel passo 3 della sezione Procedure to Set Up Build Environment Using Vagrant (Procedura di configurazione dell'ambiente di generazione tramite Vagrant), come mostrato nell'immagine:
Passaggio 5. Una volta caricato il pacchetto, attivarlo come mostrato nell'immagine:
Passaggio 6. Nella scheda Resources, aprire l'impostazione dell'interfaccia per specificare l'indirizzo IP fisso che si desidera assegnare all'app, come mostrato nell'immagine:
Passaggio 7. Fare clic su OK, quindi su Attiva. Una volta completata l'azione, tornare alla pagina principale di Gestione locale (pulsante Applicazioni nel menu superiore), quindi avviare l'applicazione come mostrato nell'immagine:
Dopo aver eseguito questi passaggi, l'applicazione è pronta per l'esecuzione.
Risoluzione dei problemi
Per risolvere i problemi relativi alla configurazione, controllare il file di log creato nello script Python utilizzando un programma di gestione locale. Passare ad Applicazioni, fare clic su Gestisci nell'applicazione iox_web, quindi selezionare la scheda Log come mostrato nell'immagine: