macOS-এ OpenConnect: প্যাকেজ, রিলিজ আর্কাইভ বা git ক্লোন
Homebrew একটি বাইনারি ও একটি নেটওয়ার্ক স্ক্রিপ্ট দেয়; সোর্স ট্রি আপনি সেগুলো তৈরি ও চালানোর আগে কোনোটিই দেয় না। আপনার সংযোগ কোনটি ব্যবহার করছে তা জানুন।
Mac-এ OpenConnect ক্লায়েন্ট পাওয়ার তিনটি পথ আছে, আর তারা ডিস্কে ভিন্ন জিনিস রেখে যায়। Homebrew ফর্মুলা একটি কম্পাইল করা বাইনারি এবং রুট ও DNS কনফিগার করে এমন নেটওয়ার্ক স্ক্রিপ্ট ইনস্টল করে। রিলিজ আর্কাইভ আপনাকে জেনারেট করা বিল্ড সিস্টেমসহ সোর্স দেয়। git চেকআউট আপনাকে তা ছাড়াই সোর্স দেয়। ভুলটি বেছে নেওয়া এ কারণেই মানুষ টিউটোরিয়ালের কয়েক মিনিট পরেই configure না পাওয়ার সমস্যায় পড়ে।
একই নামের নিচে দুটি ভিন্ন মেশিন
প্যাকেজের পথটি একটি কমান্ড, আর যাদের কাজ সংযোগ করা, ডেভেলপ করা নয়, তাদের জন্য এটিই সঠিক ডিফল্ট।
brew install openconnect
এটি কী ইনস্টল করে তা কমান্ডটির চেয়ে বেশি গুরুত্বপূর্ণ। আপনি ক্লায়েন্ট বাইনারি পান, আর পান vpnc-script, যা ক্লায়েন্ট ইন্টারফেস, রুট ও রিজলভার প্রোগ্রাম করতে ডাকে। দুটি জোড়ায় কাজ করে: বাইনারি TLS সেশন শেষ করে এবং ফলস্বরূপ ইন্টারফেস স্ক্রিপ্টকে দেয়, আর স্ক্রিপ্ট হলো সেই অংশ যা জানে এই অপারেটিং সিস্টেম তার নেটওয়ার্ক কীভাবে বদলাতে চায়।
এই বিভাজন এক শ্রেণির বিভ্রান্তিকর রিপোর্ট ব্যাখ্যা করে। যে ক্লায়েন্ট সংযোগ করে, সফলতার কথা জানায় এবং তারপর ট্রাফিক ভুল পথে পাঠায়, তার সমস্যা সাধারণত স্ক্রিপ্টে, টানেলে নয়, আর ফর্মুলা পুনরায় ইনস্টল করলে ঠিক হয় শুধু এ কারণেই যে স্ক্রিপ্টও পুনরায় ইনস্টল হয়। ফর্মুলার বর্তমান macOS ও CPU আর্কিটেকচার সমর্থন যাচাই করুন তার উপর পরিকল্পনা করার আগে; যে Mac শেল নিখুঁতভাবে চালায়, তার জন্যও হয়তো বর্তমান কোনো প্যাকেজ এখনো তৈরি হয়নি।
সোর্সের পথ আসলে কী করে
রিলিজ আর্কাইভ জেনারেট করা বিল্ড সিস্টেমসহ আসে, তাই চেনা ./configure শুরু থেকেই থাকে। git চেকআউটে থাকে না, কারণ জেনারেট করা ফাইলগুলো বিল্ডের ফল, প্রজেক্ট যেগুলো সংরক্ষণ করে তা নয়। ./autogen.sh কেন আর্কাইভে নয়, চেকআউটের নির্দেশাবলিতে দেখা যায়, এর সম্পূর্ণ কারণ এটাই।
./autogen.sh
./configure
make
make install
প্রতিটি লাইন নির্দিষ্ট কিছু করে, আর কোনটি ব্যর্থ হয়েছে জানলে অনেক অনুমান বাঁচে। autogen ধাপটি configure তৈরি করতে autotools চালায়। configure ধাপটি ক্লায়েন্টের প্রয়োজনীয় কম্পাইলার, লাইব্রেরি ও হেডার যাচাই করে, তারপর যা পেয়েছে তা প্রতিফলিত makefile লেখে। make ধাপটি কম্পাইল করে। install ধাপটি ফলাফল আপনার পথের কোথাও কপি করে।
সেই শেষ লাইনেই পরামর্শ সাধারণত ভুল পথে যায়। ইনস্টলেশন বিল্ড কাজ করেছে তার প্রমাণ নয়, আর যেকোনো ডাউনলোড ফোল্ডারে উচ্চতর বিশেষাধিকার নিয়ে চালানো এমন ফাইল ছড়ানোর ভালো উপায় যা আপনি পরে মনে রাখবেন না। কোনো লাইব্রেরি না থাকায় configure ব্যর্থ হলে কাজের আউটপুট হলো এটি ছাপানো প্রথম ত্রুটিটি, লগের শেষ বিশ লাইন নয়।
সেশন ও নেটওয়ার্ক কনফিগারেশন আলাদা
এই পার্থক্যই ঠিক করে সংযোগটি সত্যিই ট্রাফিক বহন করে কি না। TLS সেশন প্রতিষ্ঠা ক্লায়েন্টের পাশে একটি ইন্টারফেস দেয়। রুট, ঠিকানা ও DNS রিজলভার প্রয়োগ নেটওয়ার্ক স্ক্রিপ্টের মাধ্যমে করা দ্বিতীয় ধাপ, আর স্ক্রিপ্ট ছাড়া বাইনারি তৈরি করা বিল্ডের অর্ধেক ক্লায়েন্ট থাকে।
একই বিচ্ছেদ ব্যাখ্যা করে কেন একই ক্লায়েন্ট থাকা দুটি মেশিন ভিন্নভাবে আচরণ করে: স্ক্রিপ্ট সিস্টেমের নেটওয়ার্ক কনফিগারেশন দেখে, আর সেই কনফিগারেশনে যা কিছু একটি রুট দাবি করেছে তা অন্তর্ভুক্ত। কোনো স্প্লিট টানেল ট্রাফিক অপ্রত্যাশিত জায়গায় পাঠালে টানেল তার কাজ করছে এবং রাউটিং সিদ্ধান্তই পরীক্ষা করার বিষয়।
তাই ডিবাগ করার সময় জিজ্ঞাসা করুন কোন স্তরটি ব্যর্থ হয়েছে। যে সেশন কখনো প্রতিষ্ঠিত হয় না তা প্রোটোকল, সার্টিফিকেট বা শংসাপত্র। যে সেশন প্রতিষ্ঠিত হয় কিন্তু কিছুই পাঠায় না তা ইন্টারফেস ও স্ক্রিপ্ট। যে ইনস্টল করা ক্লায়েন্ট একটি নেটওয়ার্ক থেকে কাজ করে অন্যটি থেকে করে না তা হলো পৌঁছানোযোগ্যতা, যা কোনো পরিমাণ পুনর্নির্মাণে বদলায় না।
আপনি কোন বাইনারি চালাচ্ছেন তা জানুন
হাতে ইনস্টল করা বিল্ড ও প্যাকেজ করা বাইনারি সুখে সহাবস্থান করতে পারে, আর কোনটি চলবে তা নির্ভর করে আপনার পথের উপর, আপনার উদ্দেশ্যের উপর নয়। কাউকে ভার্সন নম্বর জানানোর আগে এটি জেনে নিন।
which -a openconnect
openconnect --version
brew list --versions openconnect
প্রথম কমান্ড আপনার শেল যে সব কপি দেখতে পায় সেগুলো যে ক্রমে চেষ্টা করবে সেই ক্রমে তালিকা করে। দ্বিতীয়টি বলে কোনটি উত্তর দিয়েছে। যখন তা আপনার প্রত্যাশার সঙ্গে মেলে না, আপনি পুরনো পরীক্ষার কোনো বিল্ড চালাচ্ছেন, আর কোনো কনফিগারেশন পরিবর্তন তা সরাবে না।
ক্লায়েন্ট ইনস্টল করা গেটওয়ে অনুমোদন নয়
কাজ করা বাইনারি কোনো ডিপ্লয়মেন্টকে সামঞ্জস্যপূর্ণ করে না। গেটওয়ের প্রোটোকল, তার প্রমাণীকরণ প্রবাহ এবং কোনো ম্যানেজড-ডিভাইস শর্ত এটি যাদের মালিক তাদের সঙ্গে নিশ্চিত করুন, কারণ এগুলো নীতি ও অ্যাপ্লিকেশন স্তরের তথ্য যা বিল্ড দিতে পারে না।
প্রজেক্টের বিল্ড নির্দেশাবলি autotools ক্রম ও নেটওয়ার্ক স্ক্রিপ্টের শর্ত আরও বিস্তারিতভাবে কভার করে, আর আপনার macOS রিলিজের চেয়ে পুরনো কোনো ব্লগ পোস্ট নয়, এগুলোই অনুসরণ করার রেফারেন্স। লক্ষ্য যদি শুধু সংযোগ করা হয়, প্যাকেজ নিন, স্ক্রিপ্ট রাখুন, আর কম্পাইলারকে বাদ দিন।