VPN টুলের সেটিংস: চালুর সময়ের এনভায়রনমেন্ট নাকি হুক এক্সপোর্ট?
হুক নিজের চাইল্ড প্রসেস চালু করে, আপনি আগেই খুলে রাখা শেল নয়। চালুর সময়ের এনভায়রনমেন্ট প্রাইভেট এন্ডপয়েন্টটি শুধু যে কমান্ডটির তা দরকার সেখানেই রাখে।
API এন্ডপয়েন্ট এক্সপোর্ট করা একটি VPN হুক তার চালু করা প্রসেসগুলোর এনভায়রনমেন্ট বদলায়, টানেল ওঠার সময় আগেই খোলা টার্মিনালের নয়। এই একটি পার্থক্যই বেশিরভাগ „টুলটি এখনো পাবলিক এন্ডপয়েন্টই ডাকছে“ রিপোর্ট ব্যাখ্যা করে। সেটিংস রাখার দুটি কাজ করার মতো জায়গা আছে, আর সেই বাছাই নির্ভর করে কে এটি ব্যবহার করে এবং এটি কত ঘন ঘন বদলায় তার ওপর। আরেকটি স্টার্টআপ স্ক্রিপ্ট যোগ করার আগে দুটোই তুলনা করুন।
সেটিংস থাকতে পারে এমন দুটি জায়গা
প্রথম বিকল্প কমান্ডের গায়ে একটি প্রিফিক্স: মানটি ওই একটি আহ্বানের জন্যই থাকে এবং তার সঙ্গেই মুছে যায়। দ্বিতীয় বিকল্প সংযোগ-হুকের ভেতরে একটি এক্সপোর্ট, যা ওই বিন্দুর পর হুক যত প্রসেস চালু করে তার প্রতিটিতে পৌঁছায়। এরা সিনট্যাক্সে নয়, পৌঁছানো ও আয়ুষ্কালে আলাদা, আর সেই পার্থক্যই বেশিরভাগ ব্যর্থতা ঠিক করে।
| Property | Prefix on the command | Export from the hook |
|---|---|---|
| Who receives it | That invocation only | Children the hook starts |
| Lifetime | Until the process exits | Until the hook's own session ends |
| Leakage | Scoped to one command | Applies to later commands in that session |
| Repeat cost | Every invocation | Once per connection |
| Works for an open editor | No, unless the editor is started with it | No |
সারণিটি হুককে সস্তা দেখায় এবং আসল বিল লুকায়: এটি এমন কমান্ডের জন্যও প্রাইভেট এন্ডপয়েন্ট বেছে নেয় যা কাজের সঙ্গে কোনো সম্পর্ক রাখে না। প্রতিটি সারি পছন্দ নয়, বাধ্যবাধকতা হিসেবে পড়ুন। এন্ডপয়েন্ট প্রতি কাজে বদলালে, একটি কী-স্ট্রোক খরচ হলেও নির্ভুলতায় প্রিফিক্সই জেতে।
কেন হুক আগেই খোলা শেলে পৌঁছাতে পারে না
প্রসেস ইমেজ তৈরি হওয়ার সময় এনভায়রনমেন্ট ভেরিয়েবল প্রসেসকে দেওয়া হয়। সংযোগের আগে চালু হওয়া শেল যে কপি পেয়েছিল তা ধরে রাখে, আর হুকের ভেতরে চালানো এক্সপোর্ট মেশিনের প্রতিটি প্রসেসে সম্প্রচার নয়। কেবল হুকের নিজের চাইল্ডরাই তা উত্তরাধিকার পায়। শেলের নিজের চাইল্ডরা চালু হওয়ার মুহূর্তে শেল যা ধরে আছে তা নেয়, তাই একই কমান্ড একটি টার্মিনালে কাজ করে অন্যটিতে ব্যর্থ হতে পারে।
একই কথা গ্রাফিক্যাল এডিটরের ক্ষেত্রেও। তার এক্সটেনশন হোস্ট, অন্তর্নির্মিত টার্মিনাল ও পটভূমির ল্যাঙ্গুয়েজ সার্ভার চালুর সময়েই আলাদা হয়ে নিজেদের কপি ধরে রাখে। ফোল্ডার আবার খুললে ওই চাইল্ডরা অগত্যা পুনরায় চালু হয় না, তাই আপনার যোগ করা সেটিংস পৌঁছায়ই না।
সবচেয়ে সস্তা পরীক্ষা হলো ভেরিয়েবলটি সেখান থেকে প্রিন্ট করা যেখানে ব্যর্থতা হয়, যে শেল কাজ করে সেখান থেকে নয়। ব্যর্থ প্রসেসটি যদি টানেলের আগেই চালু হয়ে থাকে, এক্সপোর্টের কোনো সুযোগই ছিল না।
প্রতি-কমান্ড রূপ, লেখা আকারে
প্রিফিক্স বাছাইটিকে যে কমান্ড ব্যবহার করে সেটির ভেতরেই দৃশ্যমান রাখে, আর কাজের মধ্যে এন্ডপয়েন্ট বদলালে এটি সহায়ক হয়:
env INTERNAL_API='https://internal-api.example.net:8443' my-work-tool
কমান্ডটি কেবল উদাহরণ: my-work-tool একটি প্লেসহোল্ডার এবং INTERNAL_API কোনো VPN স্ট্যান্ডার্ড নয়, তাই আপনি যে প্রোগ্রাম সত্যিই চালান তার নথিভুক্ত সেটিংস এবং নিজের অনুমোদিত হোস্ট বসান। একই লাইনে টোকেন বা পাসওয়ার্ড রাখবেন না, কারণ তা শেলের ইতিহাসে জমা হয়।
একই কাজের একাধিক কমান্ড থাকলে, একটি সংক্ষিপ্ত পুনরীক্ষিত মোড়ক স্ক্রিপ্ট ভেরিয়েবলগুলো সেট করে তারপর সেগুলো চালু করে। এতে একটিমাত্র সংজ্ঞা থাকে, অথচ মানটি টার্মিনালের প্রতিটি ভবিষ্যৎ কমান্ডের জন্য বৈশ্বিক হয়ে যায় না।
রিলোড করুন, রিস্টার্ট করুন, নাকি ছেড়ে দিন
আগে থেকেই চলছে এমন টুলের জন্য, তার নিজের রিলোড বা ওয়ার্কস্পেস প্রোফাইল থাকলে সেটিই বেছে নিন। না হলে কাজ সেভ করে যে কম্পোনেন্টটি সেটিংস পড়ে সেটি রিস্টার্ট করুন, যা প্রায়ই এডিটর উইন্ডো নয় বরং একটি ল্যাঙ্গুয়েজ সার্ভার। উইন্ডো রিস্টার্ট করে চাইল্ড প্রসেসগুলো পিছু নিয়েছে ধরে নেওয়াই সেই কারণ যেখানে রিলোড কাজ না করার মতো দেখায়।
সংযোগ বিচ্ছিন্ন হওয়া আলাদা সিদ্ধান্ত। বিরতি দেওয়া, বন্ধ করা বা আবার সংযুক্ত হওয়া অ্যাপ্লিকেশনের ব্যাপার, আর এন্ডপয়েন্ট ভেরিয়েবল তা নিয়ন্ত্রণ করে না। ভেরিয়েবলটিকে একটি ঠিকানা বেছে নেওয়া কনফিগারেশন হিসেবে দেখুন, পরে কোন নেটওয়ার্ক ট্রাফিক ব্যবহার করা যাবে তার নিয়ম হিসেবে নয়, তাহলে দুটি বিষয় আলাদাই থাকে।