المحتويات

المقدمة

المتطلبات الأساسية

Windows/ Mac Intel/ Linux

قائمة على تقنية MAC ARM - M1/M2/M3

إجراء إنشاء بيئة البناء باستخدام المتشرد

ملخص الإجراءات

إجراء إنشاء تطبيق IOx مخصص

نشر تطبيق IOx

استكشاف الأخطاء وإصلاحها

المقدمة

يوضح هذا المستند كيفية إنشاء تطبيقات IOx باستخدام Vagrant و Virtualbox ونشرها في واجهة المستخدم الرسومية (GUI) الخاصة بالمدير المحلي ل IOx.

المتطلبات الأساسية

Windows/ Mac Intel/ Linux

- مشية

- المتشرد

- برنامج Virtualbox

قائمة على تقنية MAC ARM - M1/M2/M3

- مشية

- المتشرد

- VMWare Fusion

- البرنامج المساعد للأجهزة المكتبية المتشردة

للتنزيل:

- المتشرد

- مربع ظاهري

إجراء إنشاء بيئة البناء باستخدام المتشرد

ملخص الإجراءات

- يقوم تكوين Vagrantfile بإعداد بيئة VM استنادا إلى بنية الجهاز المضيف الخاص به.

- إنه يقوم بتكوين الجهاز الافتراضي لاستخدام إما Fusion من VMware أو VirtualBox، وفقا للبنية الأساسية

- فهو يوفر الجهاز الظاهري (VM) البرمجيات والأدوات الضرورية، بما في ذلك QEMU (QUICK EMUlator) و Docker وiXclient.

- تقوم عملية التكوين تلقائيا بإنشاء نموذج تطبيق iperf لأجهزة النظام الأساسي AMD64 المستهدفة من Cisco.

الخطوة 1. قم بنسخ مستودع Github في نظامك المحلي:

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

بدلا من ذلك، انسخ محتويات حاوية التكوين والصقها في Vagrantfile". يقوم هذا بإنشاء ملف باسم "Vagrantfile" في النظام المحلي:

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

الخطوة 2. تأكد من عدم التعليق على بند "تصدير الإصدار="5:24.0.9-1~ubuntu.22.04~jammy" ومن أنه يتم التعليق على جميع بيانات التصدير الأخرى. يتوافق هذا مع إصدار "محرك الإرساء" الذي ترغب في تثبيته في هذه البيئة المتشردة:

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

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

الخطوة 3. ابدأ بيئة المتشرد باستخدام الأمر المتشرد up في الدليل حيث يقيم Vagrantfile وراقب بناء ناجح لتطبيق iPerf IOx لملف AMD64 tar:

vagrant up

إجراء إنشاء تطبيق IOx مخصص

يوضح هذا القسم كيفية إنشاء تطبيق IOx مخصص باستخدام بيئة المتشرد.

ملاحظة: الدليل "/Vagrant" في الجهاز الظاهري والدليل الذي يحتوي على "Vagrantfile" في النظام المضيف متزامنان.

كما هو موضح في الصورة، يتم إنشاء ملف new.js داخل الجهاز الظاهري (VM) ويمكن الوصول إليه أيضا على النظام المضيف:

الخطوة 1. قم بنسخ تطبيق عينة إلى نفس المجلد حيث يوجد Vagrantfile". في هذا المثال يتم إستخدام تطبيق iox-multiarch-nginx-nyancat-sample":

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

الخطوة 2. SSH إلى آلة المتشرد:

vagrant ssh

الخطوة 3. إنشاء التطبيق:

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

chmod +x build

sh ./build

بعد اكتمال عملية الإنشاء، أصبح لديك الآن تطبيقا IOx جاهزين للنشر ("ioX-AMD64-nginx-nyancat-sample.tar.gz" ل AMD64 و"ioX-arm64-nginx-nyancat-sample.tar.gz" للأنظمة الأساسية المستهدفة):

نشر تطبيق IOx

الخطوة 1. الوصول إلى IR1101 باستخدام واجهة الويب:

الخطوة 2. أستخدم حساب الامتياز 15:

الخطوة 3. في تسجيل دخول "الإدارة المحلية ل IOx"، أستخدم الحساب نفسه للمتابعة كما هو موضح في الصورة:

الخطوة 4. انقر فوق إضافة جديد، وحدد اسما لتطبيق IOx، واختر الحزمة.tar الذي تم إنشاؤه في الخطوة 3 من إجراء إعداد بيئة الإنشاء باستخدام قسم المتشرد، كما هو موضح في الصورة:

الخطوة 5. بمجرد تحميل الحزمة، قم بتنشيطها كما هو موضح في الصورة:

الخطوة 6. في علامة التبويب موارد، افتح إعداد الواجهة لتحديد IP الثابت الذي تريد تعيينه للتطبيق كما هو موضح في الصورة:

الخطوة 7. انقر فوق موافق، ثم تنشيط. بمجرد اكتمال العملية، قم بالانتقال للخلف إلى صفحة الإدارة المحلية الرئيسية (زر تطبيقات في القائمة العليا)، ثم قم بتشغيل التطبيق كما هو موضح في الصورة:

بعد تنفيذ هذه الخطوات، يكون التطبيق الخاص بك جاهزا للتشغيل.

استكشاف الأخطاء وإصلاحها

لاستكشاف أخطاء التكوين وإصلاحها، تحقق من ملف السجل الذي تقوم بإنشائه في البرنامج النصي Python باستخدام مدير محلي. انتقل إلى التطبيقات، وانقر فوق إدارة في تطبيق iox_web، ثم حدد علامة التبويب السجلات كما هو موضح في الصورة: