apt purge odstránil VPN, ale služba sa napriek tomu spúšťa pri štarte
apt purge maže súbory balíka, nie unit, ktorý nainštaloval skript dodávateľa. Vymažte unit a jeho odkaz wants, potom zvoľte jediného vlastníka štartu.
apt purge tvrdí, že balík je preč, a predsa sa pri každom štarte znova objaví tunel. Journal ďalej rastie, trasy sa vracajú a stroj sa správa, akoby sa nič neodstránilo. Inštalátor dodávateľa môže zapisovať súbory, ktoré správca balíkov nikdy nezaznamenal, takže odinstalovať balík a odinstalovať produkt sú dve rôzne úlohy. Nasledujúci runbook oddeľuje dva záznamy a odstránenie dokončí zámerne.
Dva inštalátory, dva rôzne záznamy
Balíky Debianu vedú zoznam súborov a purge vymaže presne to, čo tento zoznam uvádza, plus konfiguráciu balíka. Shellový inštalátor alebo balík .run taký zoznam nevedie; zapisuje, kam chce, zvyčajne do /opt, /usr/local a /etc/systemd/system. Žiadna z týchto ciest sa neobjavuje v zozname súborov žiadneho balíka, takže o nich dpkg ani nevie, ani ich nehlási. Skončíte s dvoma vlastníkmi inštalácie na jednom súborovom systéme a len jeden z nich vedie účtovníctvo.
Pred vymazaním sa dpkg opýtajte na konkrétnu cestu. Cesta, ktorú odmietne, je vaša na odstránenie, a tá istá odpoveď vám povie, či by ju neskoršia aktualizácia vrátila.
dpkg -S /etc/systemd/system/acmevpn.service
systemctl list-unit-files | grep -i acmevpn
Unit a jeho odkaz wants sú oddelené súbory
Povolenie je samostatný úkon od inštalácie. Unit deklaruje vzťahy k cieľom v sekcii [Install] a systemctl enable premieňa tieto vyhlásenia na symbolické odkazy v adresári .wants/ každého cieľa. Teraz existujú dve cesty: súbor unitu a odkaz, ktorý ho vtiahne do cieľa štartu. Vymažte len súbor a odkaz ukazuje do prázdna, čo pri štarte vyvolá sťažnosť; vymažte len odkaz a unit zostane spustiteľný podľa mena. Zmiznúť musia oba.
Odstráňte ich v poradí a potom znova načítajte, aby systemd prestal držať staré definície v pamäti.
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
Čítajte FragmentPath namiesto predpokladu umiestnenia, pretože dodávateľ mohol zapisovať do /usr/lib/systemd/system alebo /lib/systemd/system, a nie do /etc. Vymazanie kópie, ktorú ste očakávali, ponechá účinnú kópiu bežať a oprava vyzerá úspešne až do ďalšieho načítania. Po skončení načítania znova vypíšte súbory unitov a potvrďte, že sa meno už neobjavuje.
Nájdite binárku, ktorá drží toto usporiadanie pri živote
Povolený unit ďalej spúšťa démona, nech si databáza balíkov myslí čokoľvek. Tento proces môže vrátiť tunel, znova pridať trasy alebo obnoviť pravidlo kill-switch a správanie vyzerá nadpozemsky, kým si usporiadanie neprezriete. Sledujte cestu ExecStart a skontrolujte, či je binárka stále tam, pretože spustiteľný súbor ponechaný pod /opt je všetko, čo usporiadanie potrebuje. Vymazanie unitu zastaví naplánovaný štart; nevymaže program.
Ku stavovým adresárom pristupujte rovnako starostlivo. Tokeny účtov, generované profily a uložené zoznamy serverov žijú pod /var/lib alebo v domovskom adresári a sú to prihlasovacie údaje, nie odhodená cache. Odstráňte ich po zastavení služby, zámerne, a poznamenajte si, čo ste vzali.
sudo ls -l /opt/acmevpn /usr/local/bin/acmevpn
sudo find /var/lib -maxdepth 2 -iname "*acme*"
systemctl is-enabled acmevpn.service
Zvoľte jedného vlastníka štartu a otestujte ho
O štart sa môžu uchádzať traja kandidáti a inštalácia všetkých troch vytvára preteky, nie dvojitú poistku. Súbor automatického spustenia na ploche beží až po prihlásení, unit systemd beží skôr, ale potrebuje klienta, ktorý funguje bez obrazovky, a položka cron @reboot sa spúšťa podľa plánu, ktorý môže byť pre sieťového klienta nesprávny. CLI dodávateľa môže navyše vyžadovať argument servera, pretože pri štarte neexistuje predchádzajúca relácia na pokračovanie. Zvoľte kandidáta, ktorý zodpovedá spôsobu autentifikácie klienta, a ostatných zahoďte.
Otestujte to reštartom stroja a pohľadom na tri nezávislé fakty: stav unitu, zoznam procesov a nové pripojenie k niečomu, čo môžete overiť. Klient, ktorý potrebuje kľúčenku alebo interaktívne prihlásenie, pri štarte zlyhá aj so správnym súborom unitu, a journal to povie, ak ho čítate namiesto len stavu služby.
Buď dajte klientovi údaj, ktorý funguje bez výzvy, alebo ho spúšťajte pri prihlásení. Oboje je obhájiteľné a ich spojenie je spôsob, ako jeden tunel získa dvoch vlastníkov, ktorí sa oň hádajú.
Zapíšte, čo má nasledujúci purge očakávať
Po každom ručnom odstránení poznamenajte dva fakty: ktorý inštalátor usporiadanie vytvoril a ktorý vlastník ho teraz spúšťa. Táto poznámka mení nasledujúci purge z prekvapenia na položku kontrolného zoznamu a prežije človeka, ktorý prácu urobil.
Uchovávajte ju vedľa konfigurácie služby, nie v osobnom adresári, a datujte ju, pretože aktualizácia dodávateľa môže obnoviť unit, ktorý ste vymazali. Porovnanie systemctl list-unit-files s touto poznámkou každých niekoľko mesiacov zachytí obnovu, kým je oprava ešte lacná.