Ubuntu 18.04 डेस्कटॉप पर CentOS armhfp VM सेटअप करें
कुछ समय पहले, मुझे अपने एक प्रोजेक्ट के लिए अपने Ubuntu 18.04 डेस्कटॉप पर CentOS armhfp वर्चुअल मशीन सेटअप करने का मौका मिला। हालाँकि मैं अपना टेस्टिंग करने का कोई और तरीका चुन सकता था जिसमें ARM इमेज को एक SD कार्ड पर फ्लैश करना और बोर्ड पर बूट करना शामिल था, लेकिन मैंने QEMU पर काम करना पसंद किया। इसका कारण यह है कि Cubietruck या Raspberry Pi जैसे बोर्डों का टेस्टिंग समय लेने वाला है। अगर किसी तरह हम इमेज खराब कर देते हैं, तो हमें वही प्रक्रियाएँ फिर से दोहरानी पड़ेंगी जैसे SD कार्ड निकालना, सही OS इमेज के साथ दोबारा फ्लैश करना और, pkg/update/ को बूट/टेस्ट करना, U-boot सेटिंग्स बदलना, आदि।
QEMU एक ओपन-सोर्स मशीन एमुलेटर या वर्चुअलाइज़र है जो किसी भी आर्किटेक्चर के ऑपरेटिंग सिस्टम को चलाने में सक्षम है। Ubuntu या CentOS जैसे बेस OS में QEMU वातावरण सेटअप करना काफी सीधा है।
पूर्वापेक्षाएँ
Ubuntu 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 (आपकी_इमेज_का_पथ)
उपरोक्त कमांड चलाने से आपके सिस्टम में लूप डिवाइस बनेंगे। आप mount कमांड का उपयोग करके विशेष लूप डिवाइस को mnt पर माउंट कर सकते हैं और इमेज से आवश्यक फाइलें कॉपी कर सकते हैं।
sudo mount /dev/mapper/loop21p2 /mnt/
एक बार आपके बदलाव हो जाने के बाद, आपको mnt को अनमाउंट करना होगा और लूप्स को डिलीट करना होगा।
sudo umount /mnt/
sudo kpart -dv (इमेज_का_पथ)
mount कमांड का उपयोग करना:
इमेज में पार्टीशन के स्टार्ट और एंड सेक्टर प्राप्त करने के लिए parted कमांड का उपयोग करें।
sudo parted (इमेज_का_पथ)
उपरोक्त कमांड चलाने पर parted यूटिलिटी खुलेगी। Unit टाइप करें और एंटर दबाएं। विकल्प b दर्ज करें। एक बार हो जाने पर, print टाइप करें और आपको आवश्यक जानकारी मिल जाएगी।

mnt पर आवश्यक पार्टीशन माउंट करने के लिए इस जानकारी का उपयोग करें। यहाँ मैं पहले पार्टीशन को mnt पर माउंट कर रहा हूँ।
sudo mount -o loop,offset=4194304 (इमेज_पथ) /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=(इमेज_फ़ाइल_पथ),format=raw,if=none,id=d1 \
-device ide-hd,drive=d1 -net user,hostfwd=tcp::10022-:22 -net nic
यहाँ मैंने VM को 2GB RAM प्रदान की है और इमेज बूट करने के लिए आवश्यक अन्य जानकारी जैसे kernel, initrd आदि प्रदान किए हैं।
एक बार इमेज सफलतापूर्वक बूट हो जाने पर, आपको अपने टर्मिनल पर लॉगिन स्क्रीन मिल जाएगी।

डिफ़ॉल्ट रूप से, रूट फाइल सिस्टम पार्टीशन का आकार 2 GB तक सीमित है। पार्टीशन का आकार निम्नलिखित कमांड द्वारा बढ़ाया जा सकता है।
[root@host ~]# /usr/bin/rootfs-expand