apt purge eemaldas VPN-i, kuid teenus käivitub siiski alglaadimisel
apt purge kustutab paketi failid, mitte tarnija skripti paigaldatud uniti. Kustutage unit ja selle wants-link, seejärel valige üks alglaadimise omanik.
apt purge ütleb, et pakett on kadunud, ja ometi tõuseb tunnel igal käivitusel uuesti. Journal kasvab edasi, marsruudid tulevad tagasi ja masin käitub nii, nagu poleks midagi eemaldatud. Tarnija paigaldaja võib kirjutada faile, mida paketihaldur kunagi ei registreerinud, seega paketi desinstallimine ja toote desinstallimine on erinevad tööd. Allolev runbook eraldab kaks kirjet ja lõpetab eemaldamise teadlikult.
Kaks paigaldajat, kaks erinevat kirjet
Debiani paketid peavad failide loendit ja purge kustutab täpselt selle, mida see loend nimetab, pluss paketi konfiguratsiooni. Shell-paigaldaja või .run pakett ei pea sellist loendit; see kirjutab kuhu tahab, tavaliselt kaustadesse /opt, /usr/local ja /etc/systemd/system. Ükski neist teedest ei esine ühegi paketi faililoendis, seega dpkg ei tea neist ega teata neist. Lõpuks on ühel failisüsteemil kaks paigalduse omanikku ja ainult üks neist peab arvet.
Küsige dpkg-lt konkreetse tee kohta enne selle kustutamist. Tee, millest see loobub, on teie eemaldada, ja sama vastus ütleb, kas hilisem uuendus tooks selle tagasi.
dpkg -S /etc/systemd/system/acmevpn.service
systemctl list-unit-files | grep -i acmevpn
Unit ja selle wants-link on eraldi failid
Lubamine on paigaldamisest eraldi toiming. Unit deklareerib sihtmärkide seosed oma jaotises [Install] ja systemctl enable muudab need deklaratsioonid sümbollinkideks iga sihtmärgi kataloogis .wants/. Nüüd on kaks teed: uniti fail ja link, mis tõmbab selle alglaadimise sihtmärki. Kustutage ainult fail ja link osutab mitte kuhugi, mis tekitab alglaadimisel kaebuse; kustutage ainult link ja unit jääb nime järgi käivitatavaks. Mõlemad peavad kaduma.
Eemaldage need järjekorras ja laadige seejärel uuesti, et systemd ei hoiaks vanu määratlusi mälus.
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
Lugege FragmentPath selle asemel, et asukohta eeldada, sest tarnija võis kirjutada kausta /usr/lib/systemd/system või /lib/systemd/system, mitte /etc. Oodatud koopia kustutamine jätab tegeliku tööle ja parandus näib õnnestuvat kuni järgmise uuestilaadimiseni. Loetlege unitite failid pärast laadimise lõppu uuesti ja kinnitage, et nimi enam ei ilmu.
Leidke binaarfail, mis hoiab korraldust elus
Lubatud unit käivitab deemonit edasi, mida iganes paketiandmebaas arvab. See protsess võib tunneli tagasi tuua, marsruudid uuesti lisada või kill-switch reegli taastada, ja käitumine tundub üleloomulik, kuni korraldust uurite. Järgige tee ExecStart ja kontrollige, kas binaarfail on veel alles, sest kausta /opt jäänud käivitatav fail on kõik, mida korraldus vajab. Uniti kustutamine peatab ajastatud käivituse; see ei kustuta programmi.
Käsitlege olekukatalooge sama hoolikalt. Konto tokenid, genereeritud profiilid ja vahemällu salvestatud serveriloendid asuvad kausta /var/lib all või kodukataloogis ja need on mandaadid, mitte äravisatav vahemälu. Eemaldage need pärast teenuse peatamist, teadlikult, ja kirjutage üles, mida ära võtsite.
sudo ls -l /opt/acmevpn /usr/local/bin/acmevpn
sudo find /var/lib -maxdepth 2 -iname "*acme*"
systemctl is-enabled acmevpn.service
Valige üks alglaadimise omanik ja testige seda
Kolm kandidaati võivad alglaadimist nõuda ja kõigi kolme paigaldamine tekitab võidujooksu, mitte topeltkaitse. Töölaua automaatne käivitusfail töötab alles pärast sisselogimist, systemd unit töötab varem, kuid vajab klienti, mis töötab ilma ekraanita, ja cron @reboot kirje käivitub ajakava järgi, mis võib võrgukliendi jaoks vale olla. Tarnija CLI võib lisaks nõuda serveri argumenti, sest alglaadimisel pole eelmist seanssi, mida jätkata. Valige kandidaat, mis sobib sellega, kuidas klient autendib, ja jätke teised kõrvale.
Testige seda masina taaskäivitamisega ja vaadake kolme sõltumatut fakti: uniti olekut, protsesside loendit ja uut ühendust millegi külge, mida saate kontrollida. Klient, mis vajab võtmehoidjat või interaktiivset sisselogimist, ebaõnnestub alglaadimisel ka korrektse uniti failiga, ja journal ütleb seda, kui loete seda, mitte ainult teenuse olekut.
Andke kliendile mandaat, mis töötab ilma küsimuseta, või käivitage see hoopis sisselogimisel. Mõlemad on põhjendatud ja nende ühendamine on see, kuidas üks tunnel saab kaks omanikku, kes selle pärast kaklevad.
Kirjutage üles, mida järgmine purge peaks ootama
Märkige kahe fakti üles pärast igasugust käsitsi eemaldamist: milline paigaldaja korralduse lõi ja milline omanik seda nüüd käivitab. See märge muudab järgmise purge üllatusest kontroll-loendi punktiks ja elab kauem kui tööd teinud inimene.
Hoidke seda teenuse konfiguratsiooni kõrval, mitte isiklikus kataloogis, ja dateerige, sest tarnija uuendus võib kustutatud uniti taastada. Kui võrrelda systemctl list-unit-files seda märget iga paari kuu tagant, tabatakse taastamine siis, kui parandamine on veel odav.