apt purge je uklonio VPN, ali se usluga i dalje pokreće pri podizanju
apt purge briše datoteke paketa, ne unit koji je instalirala skripta dobavljača. Obrišite unit i njegov wants link, zatim odaberite jednog vlasnika podizanja.
apt purge kaže da je paket nestao, a tunel se ipak pojavljuje pri svakom pokretanju. Journal stalno raste, rute se vraćaju, a mašina se ponaša kao da ništa nije uklonjeno. Instalater dobavljača može zapisati datoteke koje upravitelj paketa nikada nije zabilježio, pa su uklanjanje paketa i uklanjanje proizvoda različiti poslovi. Runbook u nastavku razdvaja dva zapisa i namjerno dovršava uklanjanje.
Dva instalatera, dva različita zapisa
Debian paketi drže popis datoteka, a purge briše točno ono što taj popis navodi plus konfiguraciju paketa. Shell instalater ili .run paket ne drži takav popis; piše gdje želi, obično u /opt, /usr/local i /etc/systemd/system. Nijedna od tih putanja ne pojavljuje se ni u jednom popisu datoteka paketa, pa dpkg za njih ni ne zna ni ne izvještava. Na kraju imate dva vlasnika instalacije na jednom datotečnom sustavu, a samo jedan od njih vodi knjige.
Pitajte dpkg o konkretnoj putanji prije nego je obrišete. Putanja koju odbije vaša je za uklanjanje, a isti odgovor kaže hoće li je kasnija nadogradnja vratiti.
dpkg -S /etc/systemd/system/acmevpn.service
systemctl list-unit-files | grep -i acmevpn
Unit i njegov wants link su odvojene datoteke
Omogućavanje je odvojen čin od instaliranja. Unit deklarira odnose prema ciljevima u odjeljku [Install], a systemctl enable pretvara te deklaracije u simboličke poveznice u mapi .wants/ svakog cilja. Sada postoje dvije putanje: datoteka unita i poveznica koja ga uvlači u cilj podizanja. Obrišite samo datoteku i poveznica pokazuje u prazno, što izaziva pritužbu pri podizanju; obrišite samo poveznicu i unit ostaje pokretljiv po imenu. Obje moraju otići.
Uklonite ih redom i zatim ponovno učitajte, kako systemd ne bi držao stare definicije u memoriji.
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
Čitajte FragmentPath umjesto da pretpostavljate lokaciju, jer je dobavljač možda pisao u /usr/lib/systemd/system ili /lib/systemd/system, a ne u /etc. Brisanje kopije koju ste očekivali ostavlja djelatnu kopiju da radi, a popravak izgleda uspješno do sljedećeg ponovnog učitavanja. Ponovno izlistajte datoteke unita nakon završetka učitavanja i potvrdite da se ime više ne pojavljuje.
Pronađite binarni program koji održava raspored na životu
Omogućen unit nastavlja pokretati demon bez obzira na to što baza paketa misli. Taj proces može vratiti tunel, ponovno dodati rute ili obnoviti kill-switch pravilo, a ponašanje izgleda nadnaravno dok ne pregledate raspored. Slijedite putanju ExecStart i provjerite je li binarni program još tamo, jer je izvršna datoteka ostavljena pod /opt sve što raspored treba. Brisanje unita zaustavlja zakazano pokretanje; ne briše program.
Prema mapama stanja postupajte s istom pažnjom. Tokeni računa, generirani profili i predmemorirani popisi poslužitelja žive pod /var/lib ili u matičnoj mapi, a to su vjerodajnice, a ne predmemorija za baciti. Uklonite ih nakon zaustavljanja usluge, namjerno, i zabilježite što ste uzeli.
sudo ls -l /opt/acmevpn /usr/local/bin/acmevpn
sudo find /var/lib -maxdepth 2 -iname "*acme*"
systemctl is-enabled acmevpn.service
Odaberite jednog vlasnika podizanja i testirajte ga
Tri kandidata mogu polagati pravo na podizanje, a instaliranje sva tri stvara utrku, a ne dvostruku sigurnost. Datoteka za automatsko pokretanje na radnoj površini pokreće se tek nakon prijave, systemd unit pokreće se ranije ali traži klijenta koji radi bez zaslona, a cron unos @reboot aktivira se po rasporedu koji može biti pogrešan za mrežnog klijenta. CLI dobavljača može dodatno tražiti argument poslužitelja, jer pri podizanju nema prethodne sesije za nastavak. Odaberite kandidata koji odgovara načinu na koji se klijent autentificira i odbacite ostale.
Testirajte ga ponovnim pokretanjem mašine i gledanjem tri neovisne činjenice: stanja unita, popisa procesa i nove veze prema nečemu što možete provjeriti. Klijent koji traži privjesak za ključeve ili interaktivnu prijavu pada pri podizanju čak i s ispravnom datotekom unita, a journal to kaže ako ga čitate, a ne samo status usluge.
Ili dajte klijentu vjerodajnicu koja radi bez upita, ili ga pokrenite pri prijavi. Oboje je obranjivo, a njihovo kombiniranje je način na koji jedan tunel dobiva dva vlasnika koji se za njega svađaju.
Zapišite što sljedeći purge treba očekivati
Zabilježite dvije činjenice nakon svakog ručnog uklanjanja: koji je instalater stvorio raspored i koji ga vlasnik sada pokreće. Ta bilješka pretvara sljedeći purge iz iznenađenja u stavku kontrolnog popisa i nadživljava osobu koja je obavila posao.
Čuvajte je uz konfiguraciju usluge, a ne u osobnoj mapi, i datirajte je, jer nadogradnja dobavljača može vratiti unit koji ste obrisali. Usporedba systemctl list-unit-files s tom bilješkom svakih nekoliko mjeseci uhvatit će obnovu dok je popravak još jeftin.