apt purge seier at pakken er borte, og likevel kjem det opp ein tunnel ved kvar oppstart. Journalen veks vidare, rutene kjem tilbake, og maskinen oppfører seg som om ingenting er fjerna. Eit installasjonsprogram frå ein leverandør kan skrive filer som pakkehandsamaren aldri registrerte, så å avinstallere ein pakke og å avinstallere eit produkt er to ulike jobbar. Runbooken nedanfor skil dei to registra og fullfører fjerninga med vilje.

To installasjonsprogram, to ulike registre

Debian-pakkar held ei filliste, og ein purge slettar nøyaktig det lista nemner, pluss pakkekonfigurasjonen. Eit skallinstallasjonsprogram eller eit .run-bunt held inga slik liste; det skriv der det vil, vanlegvis i /opt, /usr/local og /etc/systemd/system. Ingen av desse stiane står i fillista til nokon pakke, så dpkg kjenner dei ikkje og melder dei ikkje. Du endar med to installasjonseigarar på eitt filsystem, og berre éin av dei fører rekneskap.

Spør dpkg om den konkrete stien før du slettar han. Ein sti som det fråskriv seg, er din å fjerne, og det same svaret fortel om ei seinare oppgradering ville lagt han tilbake.

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

Ei eining og wants-lenka hennar er separate filer

Aktivering er ei handling for seg, skild frå installasjon. Eininga erklærer målrelasjonar i [Install]-delen, og systemctl enable gjer desse erklæringane om til symbolske lenkjer i .wants/-mappa til kvart mål. No finst det to stiar: einingafila og lenkja som dreg henne inn i eit oppstartsmål. Slettar du berre fila, peikar lenkja på ingenting, noko som gir ei klage ved oppstart; slettar du berre lenkja, blir eininga verande startbar ved namn. Begge må bort.

Fjern dei i rekkjefølgje og last inn på nytt etterpå, slik at systemd sluttar å halde dei gamle definisjonane i minnet.

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

Les FragmentPath i staden for å anta plasseringa, sidan ein leverandør kan ha skrive til /usr/lib/systemd/system eller /lib/systemd/system framfor /etc. Slettar du kopien du venta, køyrer den effektive vidare, og rettinga ser vellukka ut til neste innlasting. List einingafiler på nytt når innlastinga er ferdig, og stadfest at namnet ikkje lenger blir vist.

Finn binærfila som held ordninga i live

Ei aktivert eining held fram med å starte daemonen uansett kva pakkedatabasen trur. Den prosessen kan bringe tunnelen tilbake, leggje til ruter igjen eller gjenopprette ein kill-switch-regel, og åtferda verkar overnaturleg til du granskar ordninga. Følg ExecStart-stien og sjekk om binærfila framleis er der, for ei køyrbar fil som er lagd att under /opt er alt ordninga treng. Å slette eininga stoppar den planlagde starten; det slettar ikkje programmet.

Handter tilstandsmapper med same omsorg. Kontotoken, genererte profilar og hurtiglagra serverlister bur under /var/lib eller i ei heimemappe, og dei er legitimasjon, ikkje kasteleg hurtiglagring. Fjern dei når tenesta er stoppa, med vilje, og noter kva du tok.

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

Vel éin eigar av oppstarten og test han

Tre kandidatar kan gjere krav på oppstarten, og å installere alle tre gir eit kapplaup i staden for dobbel sikring. Ei automatisk startfil på skrivebordet køyrer først etter at nokon loggar inn, ei systemd-eining køyrer tidlegare men krev ein klient som verkar utan skjerm, og ei cron-@reboot-oppføring blir utløyst etter ein plan som kan vere feil for ein nettverksklient. Ein leverandør-CLI kan i tillegg krevje eit serverargument, fordi det ved oppstart ikkje finst noka tidlegare økt å halde fram. Vel kandidaten som passar til korleis klienten autentiserer, og dropp dei andre.

Test det ved å starte maskinen på nytt og sjå på tre uavhengige fakta: tilstanden til eininga, prosesslista og ei ny tilkopling til noko du kan verifisere. Ein klient som krev ein nøkkelring eller ei interaktiv innlogging, feilar ved oppstart sjølv med ei korrekt einingafil, og journalen seier det om du les han i staden for berre tenestestatusen.

Anten gi klienten ein legitimasjon som verkar utan ein førespurnad, eller start han ved innlogging i staden. Begge er forsvarlege, og å kombinere dei er korleis éin tunnel får to eigarar som slåst om han.

Skriv ned kva den neste purgen skal vente

Noter to fakta etter kvar manuell fjerning: kva installasjonsprogram som laga ordninga, og kven eigar som startar henne no. Den nota gjer den neste purgen frå ei overrasking til eit punkt på ei sjekkliste, og ho lever lengre enn personen som gjorde arbeidet.

Oppbevar henne ved sida av tenestekonfigurasjonen og ikkje i ei personleg mappe, og dater henne, fordi ei leverandøroppdatering kan gjenopprette ei eining du sletta. Å samanlikne systemctl list-unit-files med den nota kvar par månad fangar gjenopprettinga medan rettinga framleis er billeg.

Relaterte artiklar