apt purge VPN-ni o'chirdi, lekin xizmat baribir yuklanishda ishga tushadi
apt purge paket fayllarini o'chiradi, sotuvchining skripti o'rnatgan unitni emas. unit va uning wants havolasini o'chiring, so'ng yuklanishning bitta egasini tanlang.
apt purge paket yo'q deb aytadi, lekin har ishga tushishda tunnel yana ko'tariladi. Journal o'sishda davom etadi, marshrutlar qaytadi va mashina hech narsa o'chirilmagandek tutadi. Sotuvchining o'rnatuvchisi paket menejeri hech qachon qayd etmagan fayllarni yozishi mumkin, shuning uchun paketni o'chirish va mahsulotni o'chirish ikki xil ish. Quyidagi runbook ikki yozuvni ajratadi va o'chirishni ataylab tugatadi.
Ikki o'rnatuvchi, ikki xil yozuv
Debian paketlari fayllar ro'yxatini saqlaydi, purge esa o'sha ro'yxat nomlagan narsani va paket konfiguratsiyasini o'chiradi. Shell o'rnatuvchisi yoki .run to'plami bunday ro'yxat saqlamaydi; istagan joyiga yozadi, odatda /opt, /usr/local va /etc/systemd/system ichiga. Bu yo'llarning hech biri biron paketning fayllar ro'yxatida ko'rinmaydi, shuning uchun dpkg ularni bilmaydi va xabar qilmaydi. Oxirida bitta fayl tizimida ikki o'rnatish egasi qoladi va ulardan faqat biri hisob yuritadi.
O'chirishdan oldin dpkgdan aniq yo'l haqida so'rang. U rad etgan yo'l sizniki o'chirish uchun, va o'sha javob keyingi yangilanish uni qaytarishini ham aytadi.
dpkg -S /etc/systemd/system/acmevpn.service
systemctl list-unit-files | grep -i acmevpn
unit va uning wants havolasi alohida fayllar
Yoqish o'rnatishdan alohida harakat. unit maqsad munosabatlarini [Install] bo'limida e'lon qiladi, systemctl enable bu e'lonlarni har bir maqsadning .wants/ papkasidagi ramziy havolalarga aylantiradi. Endi ikki yo'l bor: unit fayli va uni yuklanish maqsadiga tortadigan havola. Faqat faylni o'chirsangiz havola hech qayerga ishora qilmaydi, bu yuklanishda shikoyat keltiradi; faqat havolani o'chirsangiz unit nom bilan ishga tushadigan bo'lib qoladi. Ikkalasi ham ketishi kerak.
Ularni tartib bilan olib tashlang va keyin qayta yuklang, systemd eski ta'riflarni xotirada saqlashni to'xtatsin.
systemctl disable --now acmevpn.service
systemctl show -p FragmentPath -p ExecStart acmevpn.service
sudo rm /etc/systemd/system/acmevpn.service
sudo rm /etc/systemd/system/multi-user.target.wants/acmevpn.service
systemctl daemon-reload
Joyni taxmin qilish o'rniga FragmentPath o'qing, chunki sotuvchi /etc o'rniga /usr/lib/systemd/system yoki /lib/systemd/system ichiga yozgan bo'lishi mumkin. Kutilgan nusxani o'chirish amaldagi nusxani ishlab turishda qoldiradi va tuzatish keyingi qayta yuklashgacha muvaffaqiyatli ko'rinadi. Qayta yuklash tugagach unit fayllarini yana ro'yxatlang va nom endi ko'rinmasligini tasdiqlang.
Bu tartibni tirik tutadigan binarni toping
Yoqilgan unit paket bazasi nima deb o'ylashidan qat'i nazar demonni ishga tushirishda davom etadi. Bu jarayon tunnelni qaytarishi, marshrutlarni yana qo'shishi yoki kill-switch qoidasini tiklab qo'yishi mumkin va tartibni ko'rmaguningizcha xatti-harakat g'ayritabiiy ko'rinadi. ExecStart yo'lini kuzatib, binarning hali o'sha joyda ekanini tekshiring, chunki /opt ostida qolgan bajariladigan fayl bu tartibga kerak bo'lgan hamma narsa. unitni o'chirish rejalashtirilgan ishga tushishni to'xtatadi; u dasturni o'chirmaydi.
Holat papkalariga ham xuddi shunday ehtiyot bo'ling. Hisob tokenlari, yaratilgan profillar va keshlangan server ro'yxatlari /var/lib ostida yoki uy papkasida yashaydi va bular hisob ma'lumotlari, tashlanadigan kesh emas. Xizmat to'xtagach ularni ataylab olib tashlang va nima olganingizni yozib qo'ying.
sudo ls -l /opt/acmevpn /usr/local/bin/acmevpn
sudo find /var/lib -maxdepth 2 -iname "*acme*"
systemctl is-enabled acmevpn.service
Yuklanishning bitta egasini tanlang va sinab ko'ring
Uch nomzod yuklanishga da'vo qilishi mumkin va uchtasini ham o'rnatish ikki karra himoya emas, poyga keltiradi. Ish stolining avtomatik ishga tushish fayli kimdir kirgandan keyingina ishlaydi, systemd uniti ertaroq ishlaydi lekin ekransiz ishlaydigan klient talab qiladi, cron @reboot yozuvi esa tarmoq klienti uchun noto'g'ri bo'lishi mumkin jadval bo'yicha ishga tushadi. Sotuvchining CLI qo'shimcha server argumentini talab qilishi mumkin, chunki yuklanishda davom ettirish uchun avvalgi sessiya yo'q. Klientning autentifikatsiya usuliga mos nomzodni tanlang va qolganlarini tashlang.
Mashinani qayta yuklab va uch mustaqil faktga qarab sinang: unit holati, jarayonlar ro'yxati va tekshira oladigan narsaga yangi ulanish. Kalit halqasi yoki interaktiv kirish kerak bo'lgan klient to'g'ri unit fayli bilan ham yuklanishda muvaffaqiyatsiz bo'ladi va journal buni aytadi, faqat xizmat holatini emas, uni o'qisangiz.
Yoki klientga so'rovsiz ishlaydigan hisob ma'lumotini bering, yoki uni kirish paytida ishga tushiring. Ikkalasi ham oqlangan va ikkalasini birlashtirish bir tunnelning u uchun kurashadigan ikki egasi bo'lish yo'lidir.
Keyingi purge nimani kutishi kerakligini yozing
Har qanday qo'lda o'chirishdan keyin ikki faktni qayd eting: qaysi o'rnatuvchi bu tartibni yaratdi va endi qaysi ega uni ishga tushirmoqda. Bu yozuv keyingi purgeni kutilmagan hodisadan tekshiruv ro'yxatining bandiga aylantiradi va ishni qilgan odamdan uzoqroq yashaydi.
Uni shaxsiy papkada emas, xizmat konfiguratsiyasi yonida saqlang va sana qo'ying, chunki sotuvchi yangilanishi siz o'chirgan unitni tiklashi mumkin. Har bir necha oyda systemctl list-unit-files ni o'sha yozuv bilan solishtirish tuzatish hali arzon bo'lganda tiklanishni ushlaydi.