المقدمة
يوضح هذا المستند كيفية إنشاء تطبيقات 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، ثم حدد علامة التبويب السجلات كما هو موضح في الصورة: