OpenVPN 3 Python-Fehler: fléck d'Instrument an net de System-Python
En Traceback nennt den Interpreter, dee Frontend ausgefouert huet, an net de Service, deem den Tunnel gehéiert. Vergläich déi zwou, ier s du eppes systemwäit ëmleeets.
En Traceback erschéngt, wann eng VPN-Verwaltungscommande start, an den éischten Instinkt geet dorop, en anert Python z'installéieren oder de System-Default soss wouhin ze riichten. Dee Instinkt vermëscht zwou Runtimes, déi näischt mateneen ze dinn hunn. Eng gehéiert zum Betribssystem an sengen a Package gepackten Instrumenter; déi aner gehéiert zu engem Projet, deen s du baues. D'éischt z'änneren, fir déi zweet z'erfëllen, ass de Wee, wéi en funktionéierende Desktop säi Pakemanager verléiert.
De Verglach, deen et wäert ass, ass tëschent der Komponent, déi tatsächlech versot huet, an der Runtime, déi s du dierfst änneren. Si sinn bal ni dat selwecht Objet.
Zwee Python-Froen, déi wéi eng ausgesinn
Déi éischt Fro ass: wéi en Interpreter huet de Programm ausgefouert, deen den Traceback gedréckt huet? Déi zweet ass: wéi en Interpreter soll mäi Projet benotzen? An engem Terminal gesinn se identesch aus, well op béid mat python3 geäntwert gëtt, an si hunn ënnerschiddlech Besëtzer, ënnerschiddlech Upgrade-Weeër an ënnerschiddlech Blastradien.
En Systeminstrument ass un den Interpreter gebonnen, deen seng Distributioun matgeliwwert huet, zesumme mat de kompiléierte Moduler, déi géint d'ABI vun deem Interpreter gebaut goufen. E Projet ass un dat Ëmfeld gebonnen, dat s du fir hien ulees. De System-Default ze verréckelen ännert dat éischt fir all Instrument op der Maschinn op eemol; en Ëmfeld uleeën ännert dat zweet fir een eenzegen Dossier.
Nëmmen eng vun deenen Aktiounen ass an enger Minutt zréckzemaachen. Et ass net déi éischt.
Wéi eng Komponent den Fehler hierbruecht huet
Lies déi éischt Zeil vum Traceback an den ausféierbare Fichier, deen en hierbruecht huet, ier s du eppes anescht lies. De Kommandozeilen-Frontend, dee privilegiéierte Service an d'API-Bindungen sinn eenzel Deeler, an nëmmen e puer dovun sinn iwwerhaapt Python.
command -v openvpn3
head -n 1 "$(command -v openvpn3)"
dpkg -S "$(command -v openvpn3)" 2>/dev/null
systemctl status openvpn3-service-client --no-pagerDéi éischt Zeil vun engem Skript nennt den Interpreter, deen en benotze wäert, an dat ass den Interpreter, vun deem den Traceback koum. D'Pak-Ufro seet dir, wiem de Fichier gehéiert, wat entscheet, wien en dierf änneren. De Service-Status äntwert op eng komplett aner Fro: ob dee privilegiéierte Backend leeft, deen tatsächlech Sessiounen opmécht.
E Modul-Importfehler, eng Oflehnung vun der D-Bus-Aktivatioun an eng verworf Authentifikatioun sinn dräi verschidde Staden. En Importfehler geschitt, ier iergendeng Sessioun existéiert, also fixéiert keng Quantitéit VPN-Konfiguratioun en, an e funktionéierende Service fixéiert en och net. D'Noriicht an eng vun deenen dräi Stade ze setzen ass den eigentlechen éischte Schrëtt.
Wat en Ëmfeld vun engem Projet ka fixéieren an wat net
En Ëmfeld vun engem Projet léist e Projetproblem: déi genau Bibliothéiksversiounen, déi eng Applikatioun brauch, isoléiert vun allem aneren. Dat ass wierklech nëtzlech, an et ass dat richtegt Instrument, wann de Programm, deen versot, en Skript ass, deen dir gehéiert.
uv run --python 3.11 app.py
python3 -c 'import openvpn3; print(openvpn3.__file__)'Déi zweet Commande weist, wéi eng Kopie vun de Bindungen en eenzegen Interpreter gesäit, an dat ass de séiersten Wee, e fehlende Pak vun engem iwwerschate Pak z'ënnerscheeden. Féier se mam Interpreter aus, deen de Skript, deen versot, benotzt, an net mat engem aneren, deen zoufälleg funktionéiert.
Wat en Ëmfeld vun engem Projet net ka maachen, ass e Frontend ze reparéieren, dee vun der Distributioun a Package gepackt gouf. D'Ofhängegkeete vun deem Programm goufe fir den Interpreter gebaut, deen de Pakemanager ausgewielt huet, an en dobannen am Ëmfeld vun dengem Projet auszeféieren entweder versot oder produzéiert eng Mëschung, déi keen ënnerstëtzt. Duercherneen Weeër mat enger Ëmfeldvariabel anzebauen ass dee selwechte Feeler mat extra Schrëtt: s du hues geännert, wat d'Instrument lued, ouni ze änneren, géint wat et getest gouf. Dee Tausch gesäit genee sou laang wéi eng Korrektur aus, wéi et dauert, bis den nächsten Import kënnt.
Firwat de Systeminterpreter ëmzeleeën eng Falle ass
Den Default-Interpreter z'änneren ass attraktiv, well et schéngt, den Traceback mat enger eenzeger Commande ze fixéieren. Et brécht awer och d'Unnam, op déi all a Package gepackt Python-Instrument um Host gebaut gouf, an d'Feeler kommen méi spéit an op onzusammenhängende Plazen.
Alternativ-Auswielmechanismen goufe entworf, fir tëschent gläichwäertegen Implementatiounen ze wiesselen, net fir eng méi nei Sprooch ënnert méi al kompiléierte Moduler z'installéieren. Kompiléiert Extensiounen si fir eng spezifesch ABI gebaut, also kann e Modul, deen gëschter importéiert gouf, haut net méi lueden, ouni dass en eenzegen Pak geläscht gouf.
Et gëtt och eng Nummfalle an den Affer, déi d'Leit fannen. D'python-Commande ouni Versioun huet net eng universell Bedeitung tëschent Distributiounen an Ëmfelder, an se als fixe Synonym fir eng bestëmmte Majorversioun ze behandelen produzéiert Korrekturen, déi nëmmen op der Maschinn funktionéieren, wou se geschriwwe goufen. Lies d'Politik vum System, dee virun dir steet, amplaz vun där aus dem Blogpost.
Getrennte Akzeptanzprüfunge
Um Enn gehéieren zwou Prüfungen, an eng bestoen seet näischt iwwer déi aner. Déi éischt ass, datt d'ënnerstëtzte Client-Commande mam Interpreter funktionéiert, fir deen se a Package gepackt gouf. Déi zweet ass, datt dee privilegiéierte Service eng Sessioun opmécht an den Tunnel Verkéier dréit.
openvpn3 sessions-list
openvpn3-service-client --help 2>/dev/null | head -n 3
ip -4 addr show tun0Hal deng eng eege Wee op d'Maschinn, während s du schaffs, besonnesch wann d'VPN deng eenzeg administrativ Zougang dréit. Eng Ännerung um Systeminterpreter ass genee déi Zort Ännerung, déi deen Zougang hallef duerch ka ewechhuelen.
Wann de Feeler en fehlende Modul fir en Systeminstrument ass, ass d'Korrektur eng Pakoperatioun iwwer dee ënnerstëtzte Workflow. Wann de Feeler e Versiounskonflikt an dengem eegene Projet ass, ass d'Korrektur en Ëmfeld. Tëschent deenen zwou auszewielen ass déi ganz Entscheedung, an se gëtt vun deem Programm decidéiert, deen den Traceback gedréckt huet.