apt purge пакет кетті дейді, бірақ әр іске қосылуда туннель қайта көтеріледі. Journal өсе береді, маршруттар қайтады, ал машина ештеңе жойылмағандай әрекет етеді. Жеткізушінің орнатушысы пакет менеджері ешқашан тіркемеген файлдарды жаза алады, сондықтан пакетті жою мен өнімді жою — екі бөлек жұмыс. Төмендегі runbook екі жазбаны ажыратып, жоюды әдейі аяқтайды.

Екі орнатушы, екі түрлі жазба

Debian пакеттері файлдар тізімін ұстайды, ал purge дәл сол тізім атаған нәрсені және пакет конфигурациясын жояды. Shell орнатушысы немесе .run бумасы мұндай тізім ұстамайды; ол қалаған жеріне жазады, әдетте /opt, /usr/local және /etc/systemd/system қалталарына. Бұл жолдардың ешқайсысы қандай да бір пакеттің файлдар тізімінде көрінбейді, сондықтан dpkg оларды білмейді де, хабарламайды да. Соңында бір файлдық жүйеде орнатудың екі иесі болады, ал олардың тек біреуі есеп жүргізеді.

Жою алдында нақты жол туралы dpkg-ден сұраңыз. Ол теріске шығарған жолды жою өзіңізге тиесілі, және сол жауап кейінгі жаңарту оны қайтара ма, соны да айтады.

dpkg -S /etc/systemd/system/acmevpn.service
systemctl list-unit-files | grep -i acmevpn

unit және оның wants сілтемесі — бөлек файлдар

Қосу — орнатудан бөлек әрекет. unit мақсат қатынастарын өзінің [Install] бөлімінде жариялайды, ал systemctl enable бұл мәлімдемелерді әр мақсаттың .wants/ қалтасында символдық сілтемелерге айналдырады. Енді екі жол бар: unit файлы және оны жүктелу мақсатына тартатын сілтеме. Тек файлды жойсаңыз, сілтеме ешқайда көрсетпейді, бұл жүктелу кезінде шағым тудырады; тек сілтемені жойсаңыз, unit атауы бойынша іске қосыла береді. Екеуі де кетуі керек.

Оларды ретімен алып тастап, содан кейін қайта жүктеңіз, systemd ескі анықтамаларды жадта ұстауды тоқтатсын.

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

Орынды болжамай, FragmentPath оқыңыз, өйткені жеткізуші /etc орнына /usr/lib/systemd/system немесе /lib/systemd/system қалтасына жазған болуы мүмкін. Күткен көшірмені жою әрекеттегі көшірмені жұмыс істеп тұрған күйде қалдырады, және түзету келесі қайта жүктеуге дейін сәтті көрінеді. Жүктеу аяқталған соң unit файлдарын қайта тізімдеп, атау енді көрінбейтінін растаңыз.

Бұл орналасуды тірі ұстап тұрған бинарды табыңыз

Қосылған unit пакет дерекқоры не деп ойласа да, демонды іске қоса береді. Бұл процесс туннельді қайта көтеруі, маршруттарды қайта қосуы немесе kill-switch ережесін қалпына келтіруі мүмкін, және орналасуды тексермейінше мінез-құлық табиғаттан тыс көрінеді. ExecStart жолымен жүріп, бинардың әлі сол жерде екенін тексеріңіз, өйткені /opt астында қалған орындалатын файл — орналасуға керектінің бәрі. unit-ті жою жоспарланған іске қосуды тоқтатады; ол бағдарламаны жоймайды.

Күй қалталарына да сол қамқорлықпен қараңыз. Тіркелгі токендері, құрылған профильдер және кэштеген сервер тізімдері /var/lib астында немесе үй қалтасында тұрады, және бұлар лақтырылатын кэш емес, тіркелгі деректері. Қызмет тоқтаған соң оларды әдейі алып тастап, не алғаныңызды жазып қойыңыз.

sudo ls -l /opt/acmevpn /usr/local/bin/acmevpn
sudo find /var/lib -maxdepth 2 -iname "*acme*"
systemctl is-enabled acmevpn.service

Жүктелудің бір иесін таңдап, оны сынаңыз

Үш үміткер жүктелуге таласа алады, ал үшеуін бірге орнату қосарлы қорғаныс емес, бәсеке тудырады. Жұмыс үстелінің автоқосылу файлы біреу кіргеннен кейін ғана істейді, systemd unit ертерек істейді, бірақ экрансыз жұмыс істейтін клиент қажет, ал cron @reboot жазбасы желілік клиент үшін қате болуы мүмкін кесте бойынша іске қосылады. Жеткізушінің CLI-і қосымша сервер аргументін талап етуі мүмкін, өйткені жүктелу кезінде жалғастыратын алдыңғы сессия жоқ. Клиенттің аутентификация тәсіліне сай үміткерді таңдап, қалғандарын тастаңыз.

Машинаны қайта жүктеп, үш тәуелсіз фактіге қарап сынаңыз: unit күйі, процесс тізімі және тексере алатын нәрсеге жаңа қосылым. Кілттер бумасы немесе интерактивті кіру қажет клиент дұрыс unit файлымен де жүктелу кезінде сәтсіздікке ұшырайды, және journal мұны айтады, егер оны оқысаңыз, тек қызмет мәртебесін емес.

Не клиентке сұраусыз жұмыс істейтін тіркелгі дерегін беріңіз, не оны кіру кезінде іске қосыңыз. Екеуі де ақталған, ал екеуін біріктіру — бір туннельдің ол үшін тартысатын екі иесі болу жолы.

Келесі purge не күтуі керектігін жазыңыз

Кез келген қолмен жоюдан кейін екі фактіні белгілеңіз: қай орнатушы бұл орналасуды жасады және қай иесі қазір оны іске қосады. Бұл жазба келесі purge-ті тосыннан бақылау тізімінің тармағына айналдырады, және ол жұмысты жасаған адамнан ұзақ өмір сүреді.

Оны жеке қалтада емес, қызмет конфигурациясының қасында ұстаңыз және күнін қойыңыз, өйткені жеткізушінің жаңартуы сіз жойған unit-ті қалпына келтіруі мүмкін. Әр бірнеше айда systemctl list-unit-files тізімін сол жазбамен салыстыру қалпына келтіруді түзету әлі арзан кезде ұстайды.

Қатысты мақалалар