Running Rootless Containers in Termux: Mobile DevOps Architecture
মোবাইল-অনলি ডেভলপমেন্ট ওয়ার্কফ্লোর (Mobile-only development workflow) ক্ষেত্রে সবচেয়ে বড় প্রতিবন্ধকতা হলো অ্যান্ড্রয়েডে অফিসিয়াল ডকার ডেমন (Docker Daemon) রান করতে না পারা। ডকার ইন্টারনালি লিনাক্স কার্নেলের cgroups এবং namespaces এর ওপর নির্ভর করে কাজ করে, যা রুট পারমিশন ছাড়া অ্যান্ড্রয়েড সিস্টেমে ব্লক থাকে।
কিন্তু ডেভলপমেন্ট ল্যাবে কাজ করার জন্য আমাদের প্রায়শই বিভিন্ন ডকার ইমেজ টেস্ট বা কন্টেইনারাইজড এনভায়রনমেন্ট বিল্ড করার দরকার পড়ে। এই সমস্যার একটি অত্যন্ত আধুনিক সমাধান হলো **PRoot** এবং **udocker** আর্কিটেকচার ব্যবহার করা। এটি কোনো রুট প্রিভিলেজ (No Root Access) ছাড়াই ইউজারের ইউজার-স্পেসের ভেতরে ডকার কন্টেইনার ফুল এক্সিকিউট করতে পারে। আজ আমরা এর কমপ্লিট সেটাপ গাইড দেখবো।
১. আর্কিটেকচার মেকানিজম কীভাবে কাজ করে?
udocker হলো মূলত পাইথনে লেখা একটি চমৎকার ওপেন সোর্স ফ্রেমওয়ার্ক যা ডকার ডেমনের অনুপস্থিতিতেও ডকার রিপোজিটরি (Docker Hub) থেকে ইমেজ ডাউনলোড করতে পারে। এরপর এটি সিস্টেম কল ইন্টারসেপশন মেথডের (যেমন PTRACE বা PRoot) মাধ্যমে কন্টেইনারের ভেতরের ডিরেক্টরি স্ট্রাকচারকে অ্যান্ড্রয়েডের সেফ জোনে এক্সট্র্যাক্ট করে রান করায়। অর্থাৎ, রুট ছাড়াই আপনি পাচ্ছেন ১০০% পোর্টেবল ডকার কন্টেইনার এক্সপেরিয়েন্স!
ধাপ ২: প্রয়োজনীয় ডিপেন্ডেন্সি ইনস্টল করা
টারমাক্স ওপেন করে এর কোর রিপোজিটরি আপডেট করুন এবং পাইথন ও প্রো-রুট লাইব্রেরিগুলো সেটআপ করে নিন:
pkg update && pkg install python proot curl wget git -y
ধাপ ৩: udocker স্ক্রিপ্ট ইঞ্জিন সেটআপ ও কনফিগারেশন
নিচের কমান্ডগুলোর মাধ্যমে আমরা অফিশিয়াল গিটহাব ডিরেক্টরি থেকে udocker ডাউনলোড করে সেটিকে এক্সিকিউটেবল পারমিশন দেবো:
# ১. ডিরেক্টরি তৈরি এবং ডাউনলোড করা
curl -L https://github.com/indigo-dc/udocker/releases/download/1.3.17/udocker-1.3.17.tar.gz -o udocker.tgz
tar -xvzf udocker.tgz
# ২. মূল স্ক্রিপ্ট এক্সিকিউটেবল পাথে মুভ করা
mkdir -p ~/.local/bin
mv udocker-*/udocker ~/.local/bin/
export PATH=$PATH:$HOME/.local/bin
# ৩. ইন্টারনাল ইঞ্জিন কম্পাইল করা
udocker install
ধাপ ৪: ডকার ইমেজ ফেচ এবং কন্টেইনার রান করানো
সবকিছু ঠিকঠাক সেটআপ হয়ে গেলে এবার আমরা ডকার হাব থেকে একটি অফিশিয়াল Alpine Linux বা Nginx Server ইমেজ নামিয়ে রান করিয়ে টেস্ট করবো:
# ডকার হাব থেকে ইমেজ ডাউনলোড করা
udocker pull alpine
# ডাউনলোড করা ইমেজ থেকে কন্টেইনার তৈরি করা
udocker create --name=ahyan_box alpine
# কন্টেইনারটি সাকসেসফুলি বুট বা এক্সিকিউট করা
udocker run ahyan_box cat /etc/os-release
স্ক্রিপ্টটি রান করার সাথে সাথেই আউটপুটে যদি আল্পাইন লিনাক্সের অফিশিয়াল রিলিজ ডাটা দেখতে পান, তবে বুঝবেন আপনার সিস্টেমে রুটলেস কন্টেইনার ইঞ্জিন সফলভাবে সচল হয়ে গেছে। এখন আপনি চাইলে এর ভেতর এক্সপ্রেস নোড অ্যাপ, পাইথন স্ক্রাপার বা যেকোনো ডেভলপমেন্ট কনটেইনার আইসোলেটেড ভাবে মোবাইলের ভেতরেই ডেপ্লয় ও রান করতে পারবেন।
সীমাবদ্ধতা এবং প্রো-টিপস: যেহেতু এটি রুটলেস এবং সিস্টেম কল ট্রান্সলেশনের মাধ্যমে চলে, তাই কিছু কিছু ডকার ইমেজ যা সরাসরি কার্নেল ড্রাইভার লক করতে চায় (যেমন ওপেনভিপিএন কন্টেইনার) সেগুলো এখানে রান করবে না। তবে সাধারণ ডাটাবেজ (যেমন SQLite) বা যেকোনো ওয়েব ব্যাকএন্ড মাইক্রোসার্ভিস টেস্ট করার জন্য এটি বর্তমান বিশ্বের সেরা মোবাইল ডেভঅপ্স সলিউশন।