إعداد جهاز افتراضي CentOS armhfp على Ubuntu 18.04 Desktop

منذ وقت ليس ببعيد، سنحت لي الفرصة لإعداد جهاز افتراضي CentOS armhfp على حاسوبي الشخصي الذي يعمل بنظام Ubuntu 18.04 لأحد مشاريعي. على الرغم من أنه كان بإمكاني اختيار طريقة أخرى لإجراء الاختبارات تتضمن نسخ صورة ARM على بطاقة SD وتشغيلها على اللوحة، إلا أنني فضلت العمل على QEMU. والسبب هو أن اختبار لوحات مثل Cubietruck أو Raspberry Pi يستغرق وقتًا طويلاً. إذا أفسدنا الصورة بطريقة ما، فسوف نضطر إلى اتباع نفس الإجراءات مرة أخرى مثل إزالة بطاقة SD، وإعادة نسخ صورة نظام التشغيل الصحيحة، وتشغيل/اختبار الحزم/التحديثات، وتغيير إعدادات U-boot، إلخ.

QEMU هو محاكي أو جهاز افتراضي مفتوح المصدر قادر على تشغيل أنظمة تشغيل أي بنية معمارية. إن إعداد بيئة QEMU في نظام تشغيل أساسي مثل Ubuntu أو CentOS هو أمر بسيط إلى حد كبير.

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

قم بتثبيت حزم QEMU والحزم الداعمة الأخرى لتمكين QEMU في نظام Ubuntu 18.04.

sudo apt-get update

sudo apt-get install -y qemu-kvm qemu virt-manager virt-viewer libvirt-bin

يمكنك أيضًا تنزيل QEMU من الموقع الرسمي. لتنزيل وبناء QEMU 5.0.0:

wget https://download.qemu.org/qemu-5.0.0.tar.xz
tar xvJf qemu-5.0.0.tar.xz
cd qemu-5.0.0
./configure
make

لتنزيل وبناء QEMU من git:

git clone https://git.qemu.org/git/qemu.git
cd qemu
git submodule init
git submodule update --recursive
./configure
make

قم بإعداد شبكة الجسر (bridge networking) في النظام. شبكة الجسر هي بطاقة شبكة مخصصة لجهاز افتراضي تساعد الأجهزة الضيفة على الاتصال بالشبكة الخارجية، ويجب إعداد هذا قبل إنشاء جهاز افتراضي باستخدام QEMU.

sudo apt-get install -y bridge-utils resolvconf

قم بتحرير ملف الواجهة لإنشاء جسر باسم br1. يمكنك أيضًا تعيين عنوان IP ثابت للجسر الخاص بك.

sudo nano /etc/network/interfaces
# ملف interfaces(5) المستخدم من قبل ifup(8) و ifdown(8)

auto lo

iface lo inet loopback

# اسم الجسر #
auto br1

# معلومات الجسر #
iface br1 inet static
bridge_ports ens33
bridge_stp off
bridge_fd 9
# عنوان IP للجسر #
address 192.168.1.10
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.1
dns-nameservers 8.8.8.8

تنزيل صورة CentOS ARM

قم بتنزيل أو استيراد صورة ARM. هنا نستخدم صورة CentOS ARM. يمكنك تنزيلها من صفحة CentOS أو استخدام wget/curl لتنزيلها من خادم FTP الخاص بـ CentOS. يمكنك تنزيل الصورة مباشرة من الرابط أدناه.

أو يمكنك استخدام wget لتنزيل الصورة من سطر الأوامر.

wget http://centos.zero.com.ar/centos-altarch/7.8.2003/isos/armhfp/CentOS-Userland-7-armv7hl-generic-Minimal-2003-sda.raw.xz

تشغيل QEMU

سيحتاج QEMU إلى ملفات النواة (Kernel) و initramfs لتشغيل الصورة. يمكنك استخراج هذه الملفات عن طريق تحميل الصورة باستخدام أوامر kpartx و mount.

باستخدام kpartx:
sudo kpartx -av (مسار_صورتك)

سيؤدي تشغيل الأمر أعلاه إلى إنشاء أجهزة loop في نظامك. يمكنك تحميل جهاز loop المحدد إلى /mnt باستخدام أمر mount ونسخ الملفات المطلوبة من الصورة.

sudo mount /dev/mapper/loop21p2 /mnt/

بمجرد الانتهاء من التغييرات الخاصة بك، تحتاج إلى فصل /mnt وحذف أجهزة loop.

sudo umount /mnt/
sudo kpart -dv (مسار_الصورة)
باستخدام أمر mount:

استخدم أمر parted للحصول على قطاع البداية والنهاية للأقسام في الصورة.

sudo parted (مسار_الصورة)

سيؤدي تشغيل الأمر أعلاه إلى فتح أداة parted. اكتب Unit واضغط على Enter. أدخل الخيار b. بمجرد الانتهاء، اكتب print وستحصل على المعلومات المطلوبة.

Image

استخدم هذه المعلومات لتحميل القسم المطلوب إلى /mnt. هنا أقوم بتحميل القسم الأول إلى /mnt.

sudo mount -o loop,offset=4194304 (مسار_الصورة) /mnt/

بما أننا استخرجنا الملفات المطلوبة من الصورة، يمكنك الآن استخدام أمر QEMU لتشغيل بيئة الجهاز الافتراضي.

qemu-system-arm \
-M cubieboard -m 2048 -cpu arm1176 -dtb sun4i-a10-cubieboard.dtb \
-kernel vmlinuz-4.19.113-300.el7.armv7hl \
-append "ro root=UUID=64e0ba9f-b645-4ce1-925d-e1a723a580fd rhgb quiet LANG=en_US.UTF-8" \
-initrd initramfs-4.19.113-300.el7.armv7hl.img -nographic \
-drive file=(مسار_ملف_الصورة),format=raw,if=none,id=d1 \
-device ide-hd,drive=d1 -net user,hostfwd=tcp::10022-:22 -net nic

لقد قمت هنا بتخصيص 2 جيجابايت من ذاكرة الوصول العشوائي للجهاز الافتراضي وقدمت المعلومات الأخرى المطلوبة لتشغيل الصورة مثل النواة و initrd إلخ.

بمجرد تشغيل الصورة بنجاح، ستحصل على شاشة تسجيل الدخول في طرفيتك.

Image

بشكل افتراضي، حجم قسم نظام الملفات الجذرية محدود بـ 2 جيجابايت. يمكن زيادة حجم القسم باستخدام الأمر التالي.

[root@host ~]# /usr/bin/rootfs-expand