systemd ExecCondition দিয়ে হোম VPN বাদ দিন
ইচ্ছাকৃত বাদ দেওয়া আর ভাঙা প্রস্তুতি কমান্ড দুটি আলাদা ফলাফল। হেল্পারটির এক্সিট কোড নির্ধারণ করুন, তারপর নেটওয়ার্ক বদলের পরীক্ষা করুন।
ল্যাপটপ আগে থেকেই ওই নেটওয়ার্কে থাকলে হোম-নেটওয়ার্ক VPN-এর করার কিছু থাকে না। প্রলুব্ধকর শর্টকাট হলো এমন একটি প্রস্তুতি কমান্ড যা অশূন্য কোডে শেষ হয়; এটি ইউনিটটিকে ব্যর্থ করে এবং প্রতিটি ড্যাশবোর্ডকে ভাঙা দেখায়। systemd-এর ঠিক এই ধরনের সিদ্ধান্তের জন্য একটি নির্দেশিকা আছে, এবং তা ইচ্ছাকৃত বাদ দেওয়াকে প্রকৃত ত্রুটি থেকে আলাদা করে। এটি ঠিকভাবে করা মূলত প্রতিটি এক্সিট কোডের অর্থ লিখে রাখার বিষয়।
ব্যর্থ পূর্বশর্ত কেন ভুল আকৃতি
ExecStartPre অশূন্য এক্সিটকে স্টার্টআপ ব্যর্থতা হিসেবে ধরে, যা সেবাটি প্রস্তুত করে এমন কমান্ডের জন্য সঠিক। এটি শর্ত হিসেবে ব্যবহার করলে একটি নীতিগত সিদ্ধান্ত ভাঙা নির্ভরতা থেকে আলাদা করা যায় না। ExecCondition আছে যাতে একটি ইউনিট ব্যর্থ হিসেবে চিহ্নিত না হয়ে শুরু করতে অস্বীকার করতে পারে।
এই পার্থক্যটি রাত তিনটায় গুরুত্বপূর্ণ, যখন কেউ এমন লাল ইউনিটের তদন্ত করতে চায় না যা ডিজাইন অনুযায়ীই আচরণ করছিল। ব্যর্থ ইউনিট ইচ্ছাকৃত ব্যর্থতাগুলোর মধ্যে আসল ত্রুটিগুলোও লুকিয়ে রাখে।
আগে এক্সিট-কোড চুক্তি লিখুন
স্ক্রিপ্টের আগে চুক্তি লিখুন। শূন্য এক্সিট মানে চালিয়ে যাওয়া, এক এক্সিট মানে বাকি স্টার্ট কমান্ডগুলো বাদ দেওয়া, আর 255 এক্সিট মানে শর্তটি নিজেই চলতে পারেনি। দুই থেকে 254-এর মধ্যে কোডগুলোরও সাধারণত বাদ দেওয়া বোঝায়, যা হেল্পার এলোমেলো ত্রুটি কোড ফেরালে ভুলে যাওয়া সহজ। নিচের drop-in হেল্পারটিকে আসল ইউনিট নামের সঙ্গে যুক্ত করে।
[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpnডিফল্ট অর্থ ধরে নেওয়ার আগে কার্যকর ইউনিটে উত্তরাধিকারসূত্রে পাওয়া SuccessExitStatus বা stop-post সেটিংস পরীক্ষা করুন। তারপর তিনটি ফলাফলের প্রতিটি ইচ্ছাকৃতভাবে পরীক্ষা করুন।
নেটওয়ার্কের ইঙ্গিত অবস্থানের প্রমাণ নয়
পৌঁছানো যায় এমন রাউটার ঠিকানা বা পরিচিত MAC সঠিক নেটওয়ার্কের ইঙ্গিত দিতে পারে, এবং কোনোটিই তা প্রমাণ করে না। অন্য নেটওয়ার্ক একই ঠিকানা ব্যবহার করতে পারে, ARP তথ্য পুরোনো হতে পারে, এবং শনাক্তকারী নকল করা যেতে পারে। প্রোবটিকে নীতির সঙ্গে সামঞ্জস্যপূর্ণ একটি অপ্টিমাইজেশন হিসেবে দেখুন, প্রমাণীকরণের ফলাফল হিসেবে নয়।
অনিশ্চয়তার অর্থ আগে থেকেই ঠিক করুন। অনিশ্চিত থাকলে VPN চালু করা এমন ক্লায়েন্টের জন্য নিরাপদ যে কেবল সংযোগই করতে পারত না; অনিশ্চিত থাকলে এটি বাদ দেওয়া নিরাপদ নয়। প্রোবটিকে সীমিত রাখুন, এবং তালিকার প্রথমটি ধরে নেওয়ার বদলে সক্রিয় ইন্টারফেস পড়ুন। যে প্রোব ঝুলে থাকে তা “না” উত্তর দেওয়া প্রোবের চেয়ে খারাপ, কারণ ইউনিটটি তার জন্য অপেক্ষা করে।
এই অনুমানগুলো ইউনিট ফাইলের পাশে লিখে রাখুন যাতে পরের ব্যক্তি জানতে পারে হেল্পারটি কী বিশ্বাস করে। স্ক্রিপ্টের শীর্ষে একটি মন্তব্য সেগুলো রাখার সবচেয়ে সস্তা জায়গা।
নেটওয়ার্কের মধ্যে স্থানান্তর সামলান
শর্তটি সেবা শুরু হওয়ার সময় চলে, এবং পরে পুনর্মূল্যায়ন করে না। ল্যাপটপ কফি শপে গেলেও বাদ দেওয়া ইউনিট বাদ দেওয়াই থাকে, আর ল্যাপটপ বাড়ি ফিরলেও চলমান টানেল চালু থাকে। নেটওয়ার্ক পরিবর্তনের জীবনচক্রকে আলাদা প্রক্রিয়ায় শুরু ও বন্ধের সিদ্ধান্তের সঙ্গে যুক্ত করুন।
systemctl cat home-vpn.serviceচারটি ক্ষেত্রে পরীক্ষা করুন: বাড়িতে স্টার্টআপ, বাইরে স্টার্টআপ, এমন প্রোব যা চলতে পারে না, এবং ইউনিট সক্রিয় থাকা অবস্থায় নেটওয়ার্কের মধ্যে স্থানান্তর। জার্নালে বাদ দেওয়ার কারণ দৃশ্যমান রাখুন যাতে ইচ্ছাকৃত সিদ্ধান্ত কখনো প্রমাণীকরণ ব্যর্থতার মতো না দেখায়। সেবা রেফারেন্স এক্সিটের অর্থ ও সর্বনিম্ন সংস্করণ নথিভুক্ত করে।