Trag pogreške pojavljuje se kada se pokrene naredba za upravljanje VPN-om, a prvi je nagon instalirati drugi Python ili usmjeriti sistemsku zadanu vrijednost negdje drugdje. Taj nagon miješa dva izvršna okruženja koja nemaju ništa zajedničko. Jedno pripada operacijskom sustavu i njegovim pakiranim alatima; drugo pripada bilo kojem projektu koji gradite. Mijenjanje prvoga da bi se zadovoljilo drugo jest način na koji radna površina izgubi svoj upravitelj paketa.

Usporedba koju vrijedi napraviti jest između komponente koja je doista zakazala i izvršnog okruženja koje smijete mijenjati. Gotovo nikada nisu isti objekt.

Dva pitanja o Pythonu koja izgledaju kao jedno

Prvo je pitanje: koji je tumač pokrenuo program koji je ispisao trag pogreške? Drugo je: koji tumač moj projekt treba koristiti? U terminalu izgledaju jednako jer se na oba odgovara upisivanjem python3, a imaju različite vlasnike, različite putove nadogradnje i različit radijus djelovanja.

Sistemski je alat vezan uz tumač s kojim je isporučena njegova distribucija, zajedno s prevedenim modulima izgrađenima prema ABI-ju toga tumača. Projekt je vezan uz koje god okruženje za njega stvorite. Premještanje sistemske zadane vrijednosti mijenja prvo za svaki alat na stroju odjednom; stvaranje okruženja mijenja drugo za jedan direktorij.

Samo je jedna od tih radnji povratna u roku od minute. To nije prva.

Koja je komponenta proizvela pogrešku

Pročitajte prvi redak traga pogreške i izvršnu datoteku koja ga je proizvela prije nego što pročitate bilo što drugo. Frontend naredbenog retka, privilegirani servis i API veze odvojeni su dijelovi, i samo su neki od njih uopće Python.

command -v openvpn3
head -n 1 "$(command -v openvpn3)"
dpkg -S "$(command -v openvpn3)" 2>/dev/null
systemctl status openvpn3-service-client --no-pager

Prvi redak skripte imenuje tumač koji će koristiti, i upravo iz tog tumača dolazi trag pogreške. Upit za paket govori vam kome datoteka pripada, što odlučuje kome je dopušteno mijenjati ju. Status servisa odgovara na posve drugo pitanje: radi li privilegirani pozadinski dio koji doista uspostavlja sesije.

Pogreška pri uvozu modula, odbijanje aktivacije putem D-Busa i odbijena vjerodajnica tri su različite faze. Pogreška pri uvozu događa se prije nego što ikakva sesija postoji, pa je nikakva VPN konfiguracija neće popraviti, a ni ispravan servis je neće popraviti. Razvrstavanje poruke u jednu od te tri faze pravi je prvi korak.

Što projektno okruženje može popraviti, a što ne

Projektno okruženje rješava problem projekta: točne verzije biblioteka koje jedna aplikacija treba, izolirane od svega ostaloga. To je uistinu korisno i to je pravi alat kada je program koji je zakazao skripta koja je vaša.

uv run --python 3.11 app.py
python3 -c 'import openvpn3; print(openvpn3.__file__)'

Druga naredba pokazuje koju kopiju veza određeni tumač vidi, što je najbrži način da razlikujete nedostajući paket od zasjenjenoga. Pokrenite je tumačem koji rabi skripta koja je zakazala, a ne drugim koji slučajno radi.

Ono što projektno okruženje ne može jest popraviti frontend koji je pakirala distribucija. Ovisnosti toga programa izgrađene su za tumač koji je odabrao upravitelj paketa, a njegovo pokretanje unutar okruženja vašeg projekta ili ne uspijeva ili daje smjesu koju nitko ne podržava. Ubacivanje putanja u njega varijablom okruženja ista je pogreška s dodatnim koracima: promijenili ste što alat učitava, a niste promijenili prema čemu je testiran. Ta razmjena izgleda kao popravak točno onoliko dugo koliko treba da naletite na sljedeći uvoz.

Zašto je preusmjeravanje sistemskog tumača zamka

Promjena zadanog tumača primamljiva je jer se čini da popravlja trag pogreške jednom naredbom. Ona također ruši pretpostavku na kojoj je izgrađen svaki pakirani Python alat na računalu, a kvarovi se pojavljuju kasnije i na nepovezanim mjestima.

Mehanizmi odabira alternative osmišljeni su za prebacivanje među jednakovrijednim implementacijama, a ne za instalaciju novijeg jezika pod starijim prevedenim modulima. Prevedena proširenja grade se za određeni ABI, pa modul koji je jučer uvezen danas može ostati neučitan, a da nije uklonjen ni jedan paket.

U savjetu koji ljudi nađu postoji i zamka s nazivom. Naredba python bez verzije nema jedno univerzalno značenje kroz distribucije i okruženja, a tretiranje kao čvrstog sinonima za određenu glavnu verziju daje popravke koji rade samo na stroju na kojem su napisani. Čitajte politiku sustava pred sobom, a ne onu iz članka na blogu.

Odvojeni prijamni testovi

Na kraju trebaju biti dva testa, a prolazak jednoga ne govori ništa o drugome. Prvi je da podržana naredba klijenta radi s tumačem za koji je pakirana. Drugi je da privilegirani servis uspostavi sesiju i da tunel prenosi promet.

openvpn3 sessions-list
openvpn3-service-client --help 2>/dev/null | head -n 3
ip -4 addr show tun0

Održavajte neovisan put do stroja dok radite, osobito ako VPN nosi vaš jedini administrativni pristup. Promjena sistemskog tumača upravo je vrsta zahvata koja taj pristup može ukloniti na pola puta.

Ako je kvar nedostajući modul za sistemski alat, ispravak je operacija paketa kroz podržani radni tijek. Ako je kvar sukob verzija u vašem vlastitom projektu, ispravak je okruženje. Odabir između toga dvoga cijela je odluka, i određuje ga to koji je program ispisao trag pogreške.

Povezani članci