اوبنٹو 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 ٹائپ کریں اور آپ کو مطلوبہ معلومات مل جائے گی۔

Image

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 وغیرہ فراہم کی ہیں۔

ایک بار جب امیج کامیابی سے بوٹ ہو جائے، تو آپ کو اپنے ٹرمینل پر لاگ ان اسکرین مل جائے گی۔

Image

ڈیفالٹ کے طور پر، روٹ فائل سسٹم پارٹیشن کا سائز 2 GB تک محدود ہے۔ پارٹیشن کا سائز درج ذیل کمانڈ سے بڑھایا جا سکتا ہے۔

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