OpenVPN 3-ren Python errorea: konpondu tresna, ez sistemako Python
Traceback batek frontend bat exekutatu zuen interpretea izendatzen du, ez tunela duen zerbitzua. Konparatu biak sistema osoan ezer birbideratu aurretik.
VPN kudeatzeko komando bat abiarazten denean traceback bat agertzen da, eta lehen bulkada beste Python bat instalatzea edo sistemaren balio lehenetsia beste toki batera bideratzea izaten da. Bulkada horrek elkarrekin zerikusirik ez duten bi exekuzio-ingurune nahasten ditu. Bata sistema eragilearena eta bere tresna paketatuena da; bestea eraikitzen ari zaren edozein proiekturena. Lehenengoa bigarrena asetzeko aldatzea da lan-mahaigain batek bere pakete-kudeatzailea galtzeko bidea.
Egitea merezi duen konparazioa benetan huts egin zuen osagaiaren eta aldatzeko eskubidea duzun exekuzio-ingurunearen artekoa da. Ia inoiz ez dira objektu bera.
Bata diruditen bi Python galdera
Lehen galdera hau da: zein interpretek exekutatu zuen traceback-a inprimatu zuen programa? Bigarrena: zein interprete erabili behar du nire proiektuak? Terminalean berdin-berdinak dirudite, biei python3 idatziz erantzuten zaielako, eta jabe desberdinak, eguneratzeko bide desberdinak eta eragin-erradio desberdinak dituzte.
Sistemako tresna bat bere banaketarekin batera heldu zen interpreterari lotuta dago, interprete horren ABIaren aurka eraikitako modulu konpilatuekin batera. Proiektu bat berarentzat sortzen duzun inguruneari lotuta dago. Sistemaren balio lehenetsia mugitzeak lehenengoa aldatzen du makinako tresna guztientzat batera; ingurune bat sortzeak bigarrena aldatzen du direktorio bakarrerako.
Ekintza horietako bakarra da minutu batean itzulgarria. Ez da lehenengoa.
Zein osagak sortu zuen errorea
Irakurri traceback-aren lehen lerroa eta hura sortu zuen exekutagarria, beste ezer irakurri aurretik. Komando-lerroko frontenda, zerbitzu pribilegiatua eta API estekak pieza bereiziak dira, eta haietako batzuk soilik dira 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
Script baten lehen lerroak erabiliko duen interpretea izendatzen du, eta interprete horretatik etorri da traceback-a. Pakete-kontsultak fitxategia nori dagokion esaten dizu, eta horrek erabakitzen du nork alda dezakeen. Zerbitzuaren egoerak erabat beste galdera bati erantzuten dio: sesioak benetan ezartzen dituen backend pribilegiatua martxan dagoen.
Modulu inportazio errore bat, D-Bus aktibazioaren ukapena eta ukatutako kredentzial bat hiru etapa desberdin dira. Inportazio errorea edozein sesio existitu baino lehen gertatzen da, beraz VPN konfigurazioak ez du konponduko, eta martxan dagoen zerbitzu batek ere ez du konponduko. Mezua hiru etapa horietako batean sailkatzea da benetako lehen urratsa.
Proiektu ingurune batek zer konpon dezakeen eta zer ez
Proiektu ingurune batek proiektu baten arazoa konpontzen du: aplikazio batek behar dituen liburutegi bertsio zehatzak, beste guztitik isolatuta. Hori benetan erabilgarria da, eta tresna egokia da huts egiten duen programa zurea den script bat denean.
uv run --python 3.11 app.py
python3 -c 'import openvpn3; print(openvpn3.__file__)'
Bigarren komandoak erakusten du interprete jakin batek estekaren zein kopia ikus dezakeen, eta hori da modurik azkarrena falta den pakete bat itzalitako batetik bereizteko. Exekutatu huts egiten duen scriptak erabiltzen duen interpretearekin, kasualitatez funtzionatzen duen beste batekin ez.
Proiektu ingurune batek egin ezin duena banaketak paketatutako frontend bat konpontzea da. Programa horren mendekotasunak pakete-kudeatzaileak aukeratu zuen interpretearentzat eraiki ziren, eta zure proiektuaren ingurunean exekutatzeak huts egiten du edo inork onartzen ez duen nahaste bat sortzen du. Ingurune-aldagai batekin bideak txertatzea akats bera da urrats gehigarriekin: tresnak zer kargatzen duen aldatu duzu, baina ez zerren aurka probatu zen. Truke horrek konponketa dirudi hurrengo inportaziora iristeko behar den denbora zehatzean.
Zergatik den tranpa sistemako interpretea birbideratzea
Interprete lehenetsia aldatzea erakargarria da traceback-a komando bakar batekin konpontzen duela ematen duelako. Hosteko Python tresna paketatu guztiak eraiki ziren ustea ere hausten du, eta hutsegiteak geroago agertzen dira, erlaziorik gabeko tokietan.
Alternatibak hautatzeko mekanismoak inplementazio baliokideen artean aldatzeko diseinatu ziren, ez hizkuntza berriago bat modulu konpilatu zaharren azpian instalatzeko. Luzapen konpilatuak ABI zehatz batentzat eraikitzen dira, beraz atzo inportatu zen modulu batek gaur kargatzeak huts egin dezake pakete bat ere kendu gabe.
Jendeak aurkitzen duen aholkuean izen-tranpa bat ere badago. Bertsiorik gabeko python komandoak ez du esanahi unibertsal bakarra banaketa eta inguruneen artean, eta bertsio nagusi zehatz baten sinonimo finkotzat hartzeak idatzi ziren makinan soilik funtzionatzen duten konponketak sortzen ditu. Irakurri zure aurrean dagoen sistemaren politika, blogeko artikulukoa ez.
Onarpen proba bereiziak
Amaieran bi proba egon behar dira, eta bata gainditzeak ez du ezer esaten besteaz. Lehena: onartutako bezero-komandoa paketatu zen interpretearekin funtzionatzen duela. Bigarrena: zerbitzu pribilegiatuak sesio bat ezartzen duela eta tunelak trafikoa eramaten duela.
openvpn3 sessions-list
openvpn3-service-client --help 2>/dev/null | head -n 3
ip -4 addr show tun0
Mantendu makinarako bide independente bat lanean ari zaren bitartean, batez ere VPNak zure administrazio-sarbide bakarra daramanean. Sistemako interprete bat aldatzea da sarbide hori erdibidean ken dezakeen editatzeko modu zehatza.
Hutsegitea sistemako tresna baten modulu faltanakoa bada, zuzenketa onartutako lan-fluxuaren bidezko pakete-eragiketa bat da. Hutsegitea zure proiektuan bertan bertsio-gatazka bada, zuzenketa ingurune bat da. Bien artean aukeratzea da erabaki osoa, eta traceback-a zein programak inprimatu zuen arabera erabakitzen da.