Ubuntu Touch-এ দুটি প্রশ্ন একটির মতো করে করা হয়: এই ডেস্কটপ প্যাকেজ চলবে কি, আর ফোনটি VPN পাবে কি। কনটেইনার প্রথমটির উত্তর দেয়। এর ভেতরে কিছুই দ্বিতীয়টির উত্তর দেয় না, কারণ কনটেইনারের নিজস্ব ফাইলসিস্টেম দৃষ্টিভঙ্গি আছে, আর নেটওয়ার্ক স্ট্যাক ও তার নীতি ফোনের। কোনো কর্মপ্রবাহের প্রতিশ্রুতি দেওয়ার আগে প্রতিটি অংশ কোথায় থাকে তা অনুসরণ করুন।

দুটি প্রশ্ন যা একটির মতো দেখায়

কনটেইনারের ভেতরে ডেস্কটপ অ্যাপ্লিকেশন চালানো প্যাকেজিংয়ের একটি অর্জন। ফোনের কানেকশন ম্যানেজারকে টানেল স্থাপন করতে, সাসপেন্ড জুড়ে তা ধরে রাখতে এবং তা বিচ্ছিন্ন হলে কী হবে তা ঠিক করতে পারা প্ল্যাটফর্মের কাজ। কনটেইনারের ভেতরে সম্পন্ন হওয়া ইনস্টলার কেবল প্রমাণ করে যে নির্ভরতাগুলো সেখানে সমাধান হয়েছে। ফোনে অনুমোদিত VPN প্লাগইন আছে কি না, টানেল রিবুটের পর টেকে কি না, বা কোন অ্যাপ্লিকেশন এটি ব্যবহার করে, এসবের কিছুই সে বলে না।

যেকোনো মূল্যায়নে দুটিকে আলাদা বাক্যে রাখুন। এগুলো একত্র করলে একটি ল্যাব ডেমো এমন সহায়তা-প্রতিশ্রুতি হয়ে ওঠে যা কেউ রাখতে পারে না।

কনটেইনারের সীমা আসলে কী দেয়

Libertine কনটেইনার একটি লেখনযোগ্য পরিবেশ যা এমন ফোনের ওপর স্তরিত যার বেস সিস্টেম শুধু পড়ার জন্য। এজন্যই সেখানে প্যাকেজ ইনস্টল করা আদৌ কাজ করে, আর এজন্যই বেস সিস্টেমে একই ইনস্টল কাজ করে না। এটি অ্যাপ্লিকেশন ফোরগ্রাউন্ডে চালায়, ফোনের ডিসপ্লের সঙ্গে সমন্বিত, এবং এটি স্পষ্টভাবে সার্ভার সফটওয়্যার চালানোর বা ব্যাকগ্রাউন্ডে প্রসেস জীবিত রাখার উপায় নয়। এই সীমাবদ্ধতাগুলো VPN ক্লায়েন্টের জন্য গুরুত্বপূর্ণ, যার চালু থাকার কথা।

libertine-container-manager list
libertine-container-manager info -i <container-id>
libertine-launch -i <container-id> bash

তালিকাটি দেখায় কোন কনটেইনার আছে, আর info কমান্ড ডিস্ট্রিবিউশন ও ইনস্টল অবস্থা জানায়। launch কমান্ড ভেতরে একটি শেল দেয়, যা প্যাকেজ আসলে কী ইনস্টল করেছে তা দেখার সঠিক জায়গা। কিন্তু এটি ফোনের নেটওয়ার্কিংয়ের ওপর কর্তৃত্ব দেয় না। কনটেইনারের ভেতরে থাকা কোনো বাইনারি টানেল তৈরি করতে চাইলে বিশেষাধিকারপ্রাপ্ত ইন্টারফেস দরকার, আর সেই ইন্টারফেস প্ল্যাটফর্মের, কনটেইনারের নয়।

ফোনের নেটওয়ার্ক অবস্থা কোথায় থাকে

নাম, রুট ও কানেকশন প্রোফাইল ফোনের নেটওয়ার্ক সার্ভিস পরিচালনা করে, যেকোনো কনটেইনারের বাইরে। টানেল এন্ট্রি সেখানে কেবল তখনই দেখা যায় যখন প্ল্যাটফর্ম ওই VPN ধরন সমর্থন করে এবং অপারেটর সংশ্লিষ্ট প্লাগইন ইনস্টল করেছে।

nmcli connection show
ip route get 10.42.0.10
ip -br addr show

কানেকশন তালিকাই এই ফোনে VPN প্রোফাইল আছে কি না, এই প্রশ্নের প্রামাণ্য উত্তর। আপনার টানেল ওই তালিকায় না থাকলে কনটেইনারের ভেতরের কোনো কাজই তা দেখাতে পারবে না। রুট অনুসন্ধান আরও সংকীর্ণ প্রশ্নের উত্তর দেয়: একটি গন্তব্যের জন্য এই ফোন কোন ইন্টারফেস ব্যবহার করবে। যেকোনো পরিবর্তনের পর এই যাচাইই পুনরাবৃত্তি করতে হয়, কারণ প্রোফাইল থাকতে পারে এবং তবুও তা নির্দিষ্ট অ্যাপ্লিকেশনের পথ নাও হতে পারে।

একটি কর্মপ্রবাহ শুরু থেকে শেষ পর্যন্ত পড়ুন

বাস্তব কাজটি বেছে নিন, যেমন ডেস্কটপ ক্লায়েন্ট দিয়ে একটি ব্যক্তিগত ডেটাবেসে পৌঁছানো। তারপর প্রবাহ অনুসরণ করুন: অ্যাপ্লিকেশন কনটেইনারে শুরু হয়, ফোন যে রিজলভার ব্যবহার করে তা দিয়ে হোস্টনাম সমাধান করে, সকেট খোলে, আর ফোনের রাউটিং ঠিক করে কোন ইন্টারফেস তা বহন করবে। প্রতিটি ধাপের একটি মালিক আছে। কনটেইনার অ্যাপ্লিকেশনটির মালিক, প্ল্যাটফর্ম রিজলভার ও রাউটিংয়ের, আর VPN এন্ডপয়েন্ট প্রমাণীকরণের। যেকোনো ধাপে ব্যর্থতা সেই ধাপের ব্যর্থতা, পুরো ধারণার নয়।

ব্যক্তিগত হোস্টনাম ও ব্যক্তিগত ঠিকানা আলাদাভাবে পরীক্ষা করুন। যে নাম একটি পাবলিক ঠিকানায় সমাধান হয় এবং যে ঠিকানা টানেলে রাউট হয়, এ দুটি আলাদা পর্যবেক্ষণ, আর এগুলো গুলিয়ে ফেললে এমন প্রতিবেদন তৈরি হয় যা পুনরুৎপাদন করা যায় না।

উত্তর না হলে কী লিখে রাখবেন

কখনো সৎ সিদ্ধান্ত এই যে এই ফোন, এই রিলিজে, কর্মপ্রবাহটি বহন করতে পারে না। প্রমাণসহ তা লিখে রাখুন: প্ল্যাটফর্ম কোন ধরনের কানেকশন দেয়, কোন ক্লায়েন্ট চেষ্টা করা হয়েছে, আর কোন ধাপে ব্যর্থ হয়েছে।

তারপর যে বিকল্পটি গ্রহণ করা হয়েছে তা উল্লেখ করুন: ভিন্ন ডিভাইস, ভিন্ন অ্যাক্সেস পদ্ধতি, বা ব্যক্তিগত নেটওয়ার্ক স্পর্শ না করে কনটেইনারের ভেতরেই থাকা আরও সংকীর্ণ কাজ।

পুরোনো রেসিপি পুনরুৎপাদন করতে বেস সিস্টেম আবার মাউন্ট করার বা ব্যাখ্যাহীন বিশেষাধিকার দেওয়ার প্রলোভন প্রতিহত করুন। যে ফোন বুট হয়, তা সেই ফোনের সমান নয় যার নেটওয়ার্ক নীতি নিয়ে ছয় মাস পরেও আপনি যুক্তি করতে পারেন।

সম্পর্কিত নিবন্ধ