Homebrew OpenVPN বাইনারি PATH-এ নয়, sbin-এ রাখে
ফর্মুলাটি OpenVPN ডেমন sbin-এর অধীনে ইনস্টল করে, যা ডিফল্ট macOS PATH-এ থাকে না। প্রিফিক্স নিশ্চিত করুন, তারপর এক ফাইলেই রেজল্যুশন ঠিক করুন।
ইনস্টল শেষ হয়, brew বলে openvpn আছে, কিন্তু শেল উত্তর দেয় command not found। বাইনারিটি সত্যিই আছে, তবে তা এমন একটি ডিরেক্টরিতে বসে আছে যা সম্পর্কে শেলকে কখনো বলা হয়নি। Homebrew ডেমন-ধরনের বাইনারিগুলোকে প্রিফিক্সের sbin ডিরেক্টরিতে লিংক করে, আর ডিফল্ট macOS PATH সাধারণত bin ডিরেক্টরি অন্তর্ভুক্ত করে, sbin নয়। কিছুই ভাঙা নেই, আর কোনো পুনঃইনস্টল এটা বদলাবে না।
যেকোনো শেল ফাইল সম্পাদনার আগে চারটি পরীক্ষা এই প্রক্রিয়াটি নিশ্চিত করে।
ফর্মুলাটি আসলে কী ইনস্টল করে
openvpn ফর্মুলাটি একটি কমান্ড-লাইন ডেমন তৈরি করে, তাই এর এক্সিকিউটেবল bin-এর বদলে sbin-এর অধীনে পড়ে। এরপর Homebrew সেই বাইনারিকে প্রিফিক্সের sbin ডিরেক্টরিতে লিংক করে, আর সেজন্যই "$(brew --prefix)/sbin/openvpn" --version কাজ করে, কিন্তু খালি ইনভোকেশন কাজ করে না। সংস্করণযুক্ত Cellar ডিরেক্টরিতেও একটি কপি থাকে, আর সেই পথটি স্টার্টআপ ফাইলে রাখলে আপগ্রেডের পরেও মেশিন পুরোনো বিল্ডে আটকে থাকে।
প্রিফিক্স সিমলিংক হলো স্থির পথ। Cellar পথ হলো ভেতরে সংস্করণ নম্বরসহ একটি বাস্তবায়ন-বিস্তারিত।
ফাইলসিস্টেমকে নয়, Homebrew-কে জিজ্ঞাসা করুন
প্যাকেজ ম্যানেজার দিয়ে শুরু করুন, কারণ সে জানে কোন ইনস্টলেশন ফর্মুলাটির মালিক: command -v brew, brew --prefix, brew list --versions openvpn, brew --prefix openvpn। শেষটি যদি কোনো পথ প্রিন্ট করে, ফর্মুলাটি উপস্থিত এবং প্রশ্নটি কেবল রেজল্যুশনের। যদি কিছুই প্রিন্ট না করে, শেল এমন একটি প্যাকেজের জন্য ভুল জায়গায় খুঁজছে যা কখনো ইনস্টল হয়নি, আর এটি ভিন্ন সমাধানের ভিন্ন সমস্যা।
এক মেশিনে দুটি Homebrew ইনস্টলেশন থাকলেই এটা সবচেয়ে বেশি গুরুত্বপূর্ণ: যে brew উত্তর দেয় সে-ই যে ইনস্টল করেছিল তা নয়।
কেন শেল sbin দেখতে পায় না
লগইন শেল সিস্টেম ডিফল্ট এবং আপনার স্টার্টআপ ফাইলগুলো যা যোগ করে তা দিয়ে PATH তৈরি করে। Homebrew bin সাধারণত যোগ হয় আর Homebrew sbin সাধারণত যোগ হয় না, তাই ডেমনগুলো ছাড়া সব কমান্ড কাজ করে। command -v openvpn কিছু ফেরত না দিলেও প্রিফিক্সযুক্ত পথ সংস্করণ ফেরত দেয়, এই দুটি কমান্ডেই পুরো রোগনির্ণয়। ডিরেক্টরিতে সত্যিই লিংকটি আছে কিনা ls -l "$(brew --prefix)/sbin/openvpn" দিয়ে নিশ্চিত করুন।
অনুপস্থিত লিংক আর অনুপস্থিত PATH এন্ট্রি ভিন্ন ত্রুটি, এবং এদের মধ্যে কেবল একটি শেল ফাইল সম্পাদনা করে ঠিক হয়।
পথটি একবারই, এক জায়গায় ঠিক করুন
বর্তমান শেলে দ্রুত পরীক্ষার জন্য eval "$(brew shellenv)" ইনস্টলেশন ভেরিয়েবলগুলো সেট করে এবং দুটি ডিরেক্টরিই সামনে বসায়। স্থায়ী ব্যবস্থার জন্য shellenv লাইনটি আপনার ব্যবহৃত লগইন মোডের জন্য শেল যে একমাত্র স্টার্টআপ ফাইল পড়ে সেখানেই রাখুন, bash ও zsh ফাইলে এক্সপোর্ট ছড়ানোর বদলে।
তারপর নতুন টার্মিনাল খুলে সংস্করণের কোয়েরিটি আবার চালান, কারণ ক্যাশ করা শেল পুরোনো PATH-ই রিপোর্ট করতে থাকে।
সেবা থেকে আবিষ্কার আলাদা রাখুন
বাইনারি খুঁজে পাওয়া VPN সেবা চালানোর সমান নয়। openvpn স্বয়ংক্রিয়ভাবে চালু করা প্রোফাইল, ক্রেডেনশিয়াল, বিশেষাধিকার ও জীবনচক্রের প্রয়োজনীয়তা যোগ করে, যা প্যাকেজ আবিষ্কার কখনো স্পর্শ করেনি। Tunnelblick নিজস্ব ইঞ্জিনও বান্ডল করে, তাই এইমাত্র প্রিন্ট করা সংস্করণের সঙ্গে অ্যাপ্লিকেশন যে সংস্করণ ব্যবহার করে তার সম্পর্ক না-ও থাকতে পারে।
কোন এক্সিকিউটেবল সংস্করণের আউটপুট দিয়েছে তা লিখে রাখুন। সেই এক লাইনই পরের বার দুটি সংস্করণে মতবিরোধ হলে এক ঘণ্টা বাঁচায়।