اوبنٹو 18.04 ڈیسک ٹاپ پر CentOS armhfp ورچوئل مشین سیٹ اپ کریں
کچھ عرصہ پہلے، مجھے اپنے ایک پروجیکٹ کے لیے اپنے اوبنٹو 18.04 ڈیسک ٹاپ پر CentOS armhfp ورچوئل مشین سیٹ اپ کرنے کا موقع ملا۔ اگرچہ میں اپنے ٹیسٹنگ کے لیے کوئی اور طریقہ اختیار کر سکتا تھا جس میں ARM امیج کو SD کارڈ پر فلش کرنا اور بورڈ پر بوٹ کرنا شامل تھا، لیکن میں نے QEMU پر کام کرنے کو ترجیح دی۔ وجہ یہ ہے کہ Cubietruck یا Raspberry Pi جیسے بورڈز کی ٹیسٹنگ وقت طلب ہے۔ اگر کسی طرح ہم امیج خراب کر دیں، تو ہمیں دوبارہ وہی طریقہ کار اختیار کرنا پڑے گا جیسے SD کارڈ کو ہٹانا، صحیح OS امیج کے ساتھ دوبارہ فلش کرنا اور pkg/update/ کو بوٹ/ٹیسٹ کرنا، U-boot کی ترتیبات کو تبدیل کرنا، وغیرہ۔
QEMU ایک اوپن سورس مشین ایمولیٹر یا ورچوئلائزر ہے جو کسی بھی آرکیٹیکچر کے آپریٹنگ سسٹم چلانے کی صلاحیت رکھتا ہے۔ اوبنٹو یا CentOS جیسے بیس OS میں QEMU ماحول سیٹ اپ کرنا کافی سیدھا سادہ ہے۔
شرائط
اوبنٹو 18.04 سسٹم میں QEMU کو فعال کرنے کے لیے QEMU اور دیگر معاون پیکیجز انسٹال کریں۔
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
Git سے QEMU ڈاؤن لوڈ اور بنانے کے لیے:
git clone https://git.qemu.org/git/qemu.git
cd qemu
git submodule init
git submodule update --recursive
./configure
make
سسٹم میں برج نیٹ ورکنگ سیٹ اپ کریں۔ ایک برجڈ نیٹ ورک ایک ورچوئل مشین کے لیے ایک مخصوص نیٹ ورک کارڈ ہے جو گیسٹ مشینوں کو نیٹ ورک سے باہر رابطہ قائم کرنے میں مدد کرتا ہے، اور QEMU استعمال کرتے ہوئے ورچوئل مشین بنانے سے پہلے یہ سیٹ اپ ہونا ضروری ہے۔
sudo apt-get install -y bridge-utils resolvconf
برج br1 بنانے کے لیے انٹرفیس فائل میں ترمیم کریں۔ آپ اپنے برج کو سٹیٹک IP بھی تفویض کر سکتے ہیں۔
sudo nano /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
#Bridge Name #
auto br1
# Bridge Information #
iface br1 inet static
bridge_ports ens33
bridge_stp off
bridge_fd 9
# Bridge 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 پیج سے ڈاؤن لوڈ کر سکتے ہیں یا CEntOS FTP سرور سے wget/curl کر سکتے ہیں۔ آپ امیج کو براہ راست نیچے دیے گئے لنک سے ڈاؤن لوڈ کر سکتے ہیں۔
یا آپ کمانڈ لائن سے امیج 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 کو امیج بوٹ کرنے کے لیے کرنل اور initramfs فائل کی ضرورت ہوگی۔ آپ kpartx اور mount کمانڈ استعمال کرتے ہوئے امیج کو ماؤنٹ کر کے یہ فائلیں نکال سکتے ہیں۔
kpartx استعمال کرتے ہوئے:
sudo kpartx -av (path_of_your_image)
اوپر دی گئی کمانڈ چلانے سے آپ کے سسٹم میں لوپ ڈیوائسز بن جائیں گی۔ آپ ماؤنٹ کمانڈ استعمال کرتے ہوئے مخصوص لوپ ڈیوائس کو mnt پر ماؤنٹ کر سکتے ہیں اور امیج سے مطلوبہ فائلیں کاپی کر سکتے ہیں۔
sudo mount /dev/mapper/loop21p2 /mnt/
ایک بار جب آپ اپنی تبدیلیوں سے فارغ ہو جائیں، تو آپ کو mnt کو ان ماؤنٹ کرنا ہوگا اور لوپس کو ڈیلیٹ کرنا ہوگا۔
sudo umount /mnt/
sudo kpart -dv (path_of_the_image)
mount کمانڈ استعمال کرتے ہوئے:
امیج میں پارٹیشنز کے شروع اور ختم ہونے والے سیکٹر حاصل کرنے کے لیے parted کمانڈ استعمال کریں۔
sudo parted (path_of_the_image)
اوپر دی گئی کمانڈ چلانے سے parted یوٹیلیٹی کھل جائے گی۔ Unit ٹائپ کریں اور انٹر دبائیں۔ آپشن b درج کریں۔ ایک بار یہ ہو جانے کے بعد، print ٹائپ کریں اور آپ کو مطلوبہ معلومات مل جائے گی۔

mnt پر مطلوبہ پارٹیشن کو ماؤنٹ کرنے کے لیے اس معلومات کا استعمال کریں۔ یہاں میں پہلی پارٹیشن کو mnt پر ماؤنٹ کر رہا ہوں۔
sudo mount -o loop,offset=4194304 (image_path) /mnt/
چونکہ ہم نے امیج سے مطلوبہ فائلیں نکال لی ہیں، اب آپ VM ماحول چلانے کے لیے 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=(Image_file_path),format=raw,if=none,id=d1 \
-device ide-hd,drive=d1 -net user,hostfwd=tcp::10022-:22 -net nic
یہاں میں نے VM کو 2GB RAM دی ہے اور امیج کو بوٹ کرنے کے لیے درکار دیگر معلومات جیسے کرنل، initrd وغیرہ فراہم کی ہیں۔
ایک بار جب امیج کامیابی سے بوٹ ہو جائے، تو آپ کو اپنے ٹرمینل پر لاگ ان اسکرین مل جائے گی۔

ڈیفالٹ کے طور پر، روٹ فائل سسٹم پارٹیشن کا سائز 2 GB تک محدود ہے۔ پارٹیشن کا سائز درج ذیل کمانڈ سے بڑھایا جا سکتا ہے۔
[root@host ~]# /usr/bin/rootfs-expand