ইউবুন্টু ১৮.০৪ ডেস্কটপে একটি সেন্টওএস armhfp VM সেটআপ করুন

অনেকদিন আগে নয়, আমার একটি প্রজেক্টের জন্য আমার ইউবুন্টু ১৮.০৪ ডেস্কটপে সেন্টওএস armhfp ভার্চুয়াল মেশিন সেট আপ করার সুযোগ হয়েছিল। যদিও আমি আমার টেস্টিংয়ের জন্য অন্য পথ বেছে নিতে পারতাম, যেমন ARM ইমেজটি একটি এসডি কার্ডে ফ্ল্যাশ করে বোর্ডে বুট করা, আমি QEMU-তে কাজ করতে পছন্দ করেছি। কারণ হলো কিউবিট্রাক বা রাস্পবেরি পাইয়ের মতো বোর্ডের টেস্টিং সময়সাপেক্ষ। যদি কোনোভাবে আমরা ইমেজটি নষ্ট করে ফেলি, তাহলে আমাদের আবার একই পদ্ধতি অনুসরণ করতে হবে যেমন এসডি কার্ড খুলে ফেলা, সঠিক OS ইমেজ দিয়ে রিফ্ল্যাশ করা, এবং pkg/update/ বুট/টেস্ট করা, U-boot সেটিংস পরিবর্তন করা ইত্যাদি।

QEMU একটি ওপেন-সোর্স মেশিন এমুলেটর বা ভার্চুয়ালাইজার যা যেকোনো আর্কিটেকচারের অপারেটিং সিস্টেম চালাতে সক্ষম। Ubuntu বা CentOS-এর মতো একটি বেস OS-এ QEMU পরিবেশ সেটআপ করা বেশ সহজ।

প্রাক-প্রয়োজনীয়তা

ইউবুন্টু ১৮.০৪ সিস্টেমে 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

সেন্টওএস ARM ইমেজ ডাউনলোড করুন

ARM ইমেজ ডাউনলোড বা ইমপোর্ট করুন। এখানে আমরা সেন্টওএস ARM ইমেজ ব্যবহার করছি। আপনি এটি সেন্টওএস পৃষ্ঠা থেকে ডাউনলোড করতে পারেন অথবা 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)

উপরের কমান্ডটি চালালে আপনার সিস্টেমে লুপ ডিভাইস তৈরি হবে। আপনি mount কমান্ড ব্যবহার করে নির্দিষ্ট লুপ ডিভাইসটি 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

ডিফল্টভাবে, root ফাইল সিস্টেম পার্টিশনের আকার 2 GB-এ সীমাবদ্ধ। নিম্নলিখিত কমান্ড দ্বারা পার্টিশনের আকার বাড়ানো যেতে পারে।

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