VPN ক্লায়েন্ট আনইনস্টল হয়েছে, তবু বুটে টানেল শুরু হয়
অপসারিত VPN ক্লায়েন্ট একটি systemd ইউনিট, সংরক্ষিত প্রোফাইল, একটি হেল্পার এবং একটি apt রিপোজিটরি রেখে যেতে পারে। অন্য কিছু মোছার আগে চারটিরই তালিকা করুন।
আপনার ডিস্ট্রো প্যাকেজটি সরিয়ে দেয়, আপনার মেনু তার এন্ট্রি হারায়, আর পরের রিবুটের পরেও টানেল উঠে আসে। একটি বাণিজ্যিক VPN ক্লায়েন্ট এমন কিছু টুকরো রেখে যায় যা প্যাকেজ ম্যানেজার কখনো ট্র্যাক করেনি, তাই পরিষ্কার অপসারণ আর পরিষ্কার মেশিন এক জিনিস নয়। সেই টুকরোগুলোর চারটি প্রায় প্রতিটি ভুতুড়ে সংযোগের কারণ: একটি ইউনিট, একটি সংযোগ প্রোফাইল, একটি বিশেষাধিকারপ্রাপ্ত হেল্পার এবং একটি ভেন্ডর রিপোজিটরি। কিছু মোছার আগে চারটিই পড়ুন, তারপর প্রতিটি তার মালিক উপাদানের মাধ্যমে সরান।
যা আনইনস্টলার কখনো লিখে রাখেনি
প্যাকেজ ম্যানেজার শুধু যে ফাইলগুলো সে লিখে রেখেছে সেগুলোই সরায়, আর কিছু নয়। ক্লায়েন্ট চলার সময় তৈরি করা সংযোগ প্রোফাইলের, ইনস্টলের পরে চালু করা ইউনিটের, বা বর্ধিত অধিকার নিয়ে চলার সময় নিজেকে নিবন্ধন করা হেল্পারের কোনো রেকর্ড তার নেই। এগুলোর প্রতিটি আলাদা সাবসিস্টেমের অন্তর্গত, এবং প্রতিটিই একটি বা একাধিক রিবুট পর্যন্ত প্যাকেজের পরে বেঁচে থাকতে পারে। ওই ফাঁকই ব্যাখ্যা করে কেন টানেল সুস্থ থাকতে পারে অথচ যে সফটওয়্যার এটি তৈরি করেছিল তা চলে গেছে।
অবশিষ্টাংশের সবসময় একজন মালিক থাকে, সেটি systemd হোক, NetworkManager হোক, রিপোজিটরি কনফিগারেশন হোক বা প্রতি-ব্যবহারকারীর অটোস্টার্ট এন্ট্রি হোক। আগে মালিককে খুঁজে বের করাই পরিষ্কারকে অর্ধ-কনফিগার করা মেশিনে পরিণত হওয়া থেকে আটকায়। ফাইল সরাসরি মোছা সাধারণত কাজ করে যতক্ষণ না মালিক সেগুলো আবার তৈরি করে, তাই নিচের কমান্ডগুলো জিজ্ঞাসা দিয়ে শুরু হয়।
চার মালিক, আগে শুধু পড়া
মোছার বদলে জিজ্ঞাসা দিয়ে শুরু করুন এবং যে সঠিক নামগুলো ফিরে আসে সেগুলো লিখে রাখুন। ভেন্ডররা প্রায়ই মেটা-প্যাকেজের পাশে একটি সংস্করণযুক্ত পেলোড পাঠায়, তাই একটি পণ্য দুই নামে দেখা দিতে পারে। যে নাম দুই তালিকাতেই দেখা যায় সেটি দুই মালিকের একক পণ্য, এবং দুজনকেই সরাতে হবে। প্রথম ব্যাচ প্যাকেজ ও ইউনিট কভার করে, যেখানে বেশিরভাগ অবশিষ্টাংশ দৃশ্যমান হয়।
dpkg -l | grep -i acmevpn
systemctl list-unit-files | grep -i acmevpn
systemctl list-units --type=service --state=running | grep -i acmevpn
দ্বিতীয় ব্যাচ সেই দুটি উপাদান কভার করে যা অপসারণের পরেও সবচেয়ে বেশি টিকে থাকে, যথা সংযোগ প্রোফাইল ও ভেন্ডর রিপোজিটরি। নামের বদলে UUID কলামটি পড়ুন, কারণ একই নাম প্রচলিত এবং মোছার কমান্ডটি শনাক্তকারীটিই আশা করে। রিপোজিটরির লাইনটি আজ না সরালেও পড়ার যোগ্য, কারণ একটি মৃত ভেন্ডর হোস্ট কয়েক মাস পরে একটি সম্পর্কহীন ইনস্টলেশন ভেঙে দিতে পারে। তালিকা দুটির কোনোটিই কিছু বদলায় না, আর প্রথমে সেগুলো চালানোর উদ্দেশ্যই তাই।
nmcli -f NAME,UUID,TYPE connection show
nmcli connection show --active
grep -ril acmevpn /etc/apt/sources.list.d/ /etc/apt/sources.list
অপসারণের পরে যে প্রক্রিয়া এখনো জীবিত তা হয় একটি সক্রিয় ইউনিট, নয়তো অন্য প্রোগ্রামের সন্তান। যে সার্ভিস আর নেই তাকে দোষারোপ করার আগে প্রক্রিয়া তালিকা ও তার অভিভাবক শৃঙ্খল পড়ুন। প্রতি-ব্যবহারকারীর অটোস্টার্ট এন্ট্রিরও একই পরিদর্শন দরকার, আর সেগুলো কেবল একটি নতুন লগইন শেলেই দেখা যায়, root সেশনে নয়।
তিনটি ক্রিয়াপদ যা বিনিময়যোগ্য নয়
থামানো বর্তমান চালানোর সমাপ্তি ঘটায়, নিষ্ক্রিয় করা বুট-সময়ের লিঙ্ক সরায়, আর মাস্কিং ইউনিটটিকে /dev/null এর দিকে নির্দেশ করে। কেবল তৃতীয়টি সকেট, টাইমার বা নির্ভরতা দিয়ে সক্রিয়করণও ব্লক করে, যা এটিকে তিনটির মধ্যে সবচেয়ে শক্তিশালী করে। মেশিনটি নিয়ে কী করবেন তা এখনো ঠিক করার সময় ক্রমটি গুরুত্বপূর্ণ। ওই সিদ্ধান্তের সময় মাস্কিংই সঠিক অবস্থা, কারণ এটি পরের বুটে চুপচাপ শুরু হওয়ার বদলে জোরে ব্যর্থ হয়।
পুনরায় ইনস্টল করার আগে আনমাস্ক করুন, নাহলে নতুন প্যাকেজ এমন এক কারণে ভাঙা দেখাবে যা কেউ লেখেনি। একই সতর্কতা প্যাকেজিং পার্থক্যের ক্ষেত্রেও প্রযোজ্য: একটি বিল্ড থামানো যায় এমন ইউনিট দেয়, আর অন্যটি কোনো সার্ভিসই রাখে না। ক্রিয়াপদ বেছে নেওয়ার আগে ঠিক করুন আপনার কোন প্যাকেজিং আছে, কারণ পরিষ্কারের পথ দুটিতে আলাদা।
ওয়াইল্ডকার্ডই ভুল প্রোফাইল মোছার উপায়
আপনি যে UUID লিখে রেখেছেন সেটি দিয়ে প্রোফাইলটি মুছুন, কখনো ওয়াইল্ডকার্ড দিয়ে নয়। keyfile ডিরেক্টরিতে মেশিনের প্রতিটি Wi-Fi ও Ethernet প্রোফাইলও থাকে, তাই বিস্তৃত মিল আপনার এখনো প্রয়োজনীয় জিনিস সরিয়ে দেয়। হাতে মোছা keyfile যে নীতির অধীন সেটিই আবার তৈরি করতে পারে, যা মোছাকে অকার্যকর দেখায়।
nmcli connection delete uuid <uuid>
প্রথমে গেটওয়ে ও পরিচয় রপ্তানি করুন যদি ওই প্রোফাইলটিই আপনার কাছে থাকা একমাত্র কপি হয়, কারণ স্থানীয় মোছা সার্ভারে কিছুই বাতিল করে না। রিপোজিটরিও একই নিয়ম মানে: একক ভেন্ডর ফাইল ও তার keyring সরান, তারপর প্যাকেজ তালিকা রিফ্রেশ করুন এবং আপনি সত্যিই যে ইনস্টলেশন চেয়েছিলেন তা আবার চেষ্টা করুন। পুরোনো তৃতীয়-পক্ষের এন্ট্রি রেখে দেওয়া একটি পুরোনো নির্ভরতা পিন করে দিতে পারে বা আদৌ উত্তর দিতে পারে না। দুটি অপসারণই ছোট, আর যেকোনোটিই আপনার রাখা কপি থেকে ফিরিয়ে আনা যায়।
রিবুটের পরে কী এখনো চলছে
বিজয় ঘোষণার আগে রিবুট করুন, তারপর অ্যাপ্লিকেশন নয়, আর্টিফ্যাক্ট খুঁজুন। একটি টানেল ইন্টারফেস, একটি পুরোনো স্প্লিট রুট এবং পুরোনো ক্লায়েন্টের রেখে যাওয়া প্রতি-লিঙ্ক DNS—প্রতিটির নিজস্ব কমান্ড দরকার। তিনটিই এমন অপসারণের পরেও টিকতে পারে যা প্রতিটি প্যাকেজ সফলভাবে সরিয়েছে।
ip link
ip route
resolvectl status
একটি নতুন লগইন শেলও খুলুন, কারণ অটোস্টার্ট এন্ট্রি কেবল সেখানেই চলে। তারপর /etc/NetworkManager/dispatcher.d/ পড়ুন এমন একটি স্ক্রিপ্টের জন্য যা ইন্টারফেসের অবস্থা বদলালেই সংযোগ তুলে আনে, যা পেছনে কোনো সার্ভিস ছাড়া টানেল ফিরে আসার ব্যাখ্যা দেয়। যদি কিছু এখনো বাইরে ডায়াল করে, উপসর্গ থামা পর্যন্ত ফাইল মোছার বদলে প্রক্রিয়াটিকে তার অভিভাবক পর্যন্ত অনুসরণ করুন। মেশিন পরিষ্কার করা আর অ্যাকাউন্ট বাতিল করা আলাদা কাজই থাকে, এবং রিবুট শান্ত দেখালে তাদের একটিই শেষ হয়।