apt purge sê die pakket is weg, en tog kom daar by elke opstart steeds 'n tonnel op. Die joernaal bly groei, roetes kom terug, en die masjien tree op asof niks verwyder is nie. 'n Verskaffer-installeerder kan lêers skryf wat die pakketbestuurder nooit aangeteken het nie, so om 'n pakket te deïnstalleer en om 'n produk te deïnstalleer is twee verskillende take. Die draaiboek hieronder skei die twee rekords en voltooi die verwydering doelbewus.

Twee installeerders, twee verskillende rekords

Debian-pakkette hou 'n lêerlys by, en 'n purge verwyder presies wat daardie lys noem plus die pakketkonfigurasie. 'n Skripinstalleerder of 'n .run-bondel hou geen sulke lys nie; dit skryf waar dit wil, gewoonlik in /opt, /usr/local en /etc/systemd/system. Nie een van daardie paaie verskyn in enige pakketlêerlys nie, so dpkg weet niks daarvan nie en rapporteer dit ook nie. Jy eindig met twee installasie-eienaars op een lêerstelsel en net een van hulle hou boek.

Vra dpkg oor die spesifieke pad voordat jy dit uitvee. 'n Pad wat dit verwerp, is joune om te verwyder, en dieselfde antwoord sê vir jou of 'n latere opgradering dit sou terugplaas.

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

'n Eenheid en sy wants-skakel is aparte lêers

Om te aktiveer is 'n aparte daad van installasie. Die eenheid verklaar teikenverhoudings in sy [Install]-afdeling, en systemctl enable verander daardie verklarings in simboliese skakels binne elke teiken se .wants/-gids. Twee paaie bestaan nou: die eenheidslêer, en die skakel wat dit in 'n opstartteiken intrek. Vee net die lêer uit en die skakel wys op niks, wat 'n klag by die opstart lewer; vee net die skakel uit en die eenheid bly steeds by die naam beginbaar. Albei moet weg.

Verwyder hulle in volgorde en herlaai daarna, sodat systemd ophou om die ou definisies in die geheue te hou.

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

Lees FragmentPath in plaas daarvan om die ligging te aanvaar, want 'n verskaffer het dalk na /usr/lib/systemd/system of /lib/systemd/system geskryf eerder as /etc. Om die kopie te verwyder wat jy verwag het, laat die effektiewe een aan die gang, en die oplossing lyk suksesvol tot die volgende herlaai. Lys die eenheidslêers weer sodra die herlaai klaar is, en bevestig dat die naam nie meer verskyn nie.

Vind die binêre lêer wat die reëling aan die lewe hou

'n Geaktiveerde eenheid hou aan om die daemon te begin, ongeag wat die pakketdatabasis glo. Daardie proses kan die tonnel terugbring, roetes weer byvoeg of 'n kill-switch-reël herstel, en die gedrag lyk bonatuurlik totdat jy die uitleg ondersoek. Volg die ExecStart-pad en kyk of die binêre lêer nog daar is, want 'n uitvoerbare lêer wat onder /opt gelaat is, is al wat die reëling nodig het. Om die eenheid te skrap stop die geskeduleerde begin; dit verwyder nie die program nie.

Behandel toestandgidse met dieselfde sorg. Rekeningtokens, gegenereerde profiele en gekasde bedienerlyste woon onder /var/lib of in 'n tuisgids, en dit is geloofsbriewe eerder as weggooibare kas. Verwyder hulle sodra die diens gestop is, doelbewus, en let op wat jy geneem het.

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

Kies een opstarteienaar en toets dit

Drie kandidate kan die opstart opeis, en om al drie te installeer lewer 'n wedloop eerder as gordel en bretels. 'n Lessenaar-autostart-lêer loop eers nadat iemand aangemeld het, 'n systemd-eenheid loop vroeër maar het 'n kliënt nodig wat koploos werk, en 'n cron-@reboot-inskrywing vuur op 'n skedule wat verkeerd kan wees vir 'n netwerkkliënt. 'n Verskaffer-CLI kan boonop 'n bediener-argument vereis, want by die opstart is daar geen vorige sessie om te hervat nie. Kies die kandidaat wat pas by hoe die kliënt authentiseer, en laat vaar die ander.

Toets dit deur die masjien te herbegin en na drie onafhanklike feite te kyk: die eenheidtoestand, die proseslys, en 'n nuwe verbinding na iets wat jy kan verifieer. 'n Kliënt wat 'n sleutelring of 'n interaktiewe aanmelding nodig het, misluk by die opstart selfs met 'n korrekte eenheidslêer, en die joernaal sê so as jy dit lees eerder as net die dienstatus.

Gee die kliënt óf 'n geloofsbrief wat sonder 'n prompt werk, óf begin dit eerder by aanmelding. Albei is verdedigbaar, en om hulle te kombineer is hoe een tonnel twee eienaars kry wat daaroor baklei.

Skryf neer wat die volgende purge moet verwag

Let op twee feite ná enige handmatige verwydering: watter installeerder die reëling geskep het, en watter eienaar dit nou begin. Daardie nota omskep die volgende purge van 'n verrassing in 'n kontrolelys-item, en dit leef langer as die persoon wat die werk gedoen het.

Hou dit langs die dienskonfigurasie eerder as in 'n persoonlike gids, en dateer dit, want 'n verskaffer-opdatering kan 'n eenheid herstel wat jy geskrap het. Om systemctl list-unit-files elke paar maande met daardie nota te vergelyk, vang die herstelling terwyl dit nog goedkoop is om reg te maak.

Verwante artikels