OpenVPN 3 Pythoni viga: paranda tööriist, mitte süsteemi Python
Traceback nimetab interpretaatorit, mis käivitas frontendi, mitte teenust, millele tunnel kuulub. Võrdle neid kahte enne, kui midagi süsteemiüleselt ümber suunad.
Traceback ilmub, kui VPN-i halduskäsk käivitub, ja esimene tung on paigaldada teine Python või suunata süsteemi vaikeväärtus mujale. See tung segab kokku kaks käituskeskkonda, millel pole teineteisega midagi pistmist. Üks kuulub operatsioonisüsteemile ja selle pakendatud tööriistadele; teine kuulub ükskõik millisele projektile, mida ehitad. Esimese muutmine teise rahuldamiseks on viis, kuidas töötav töölaud kaotab oma paketihalduri.
Võrdlus, mida tasub teha, on selle vahel, milline komponent tegelikult ebaõnnestus, ja selle käituskeskkonna vahel, mida sul on õigus muuta. Need ei ole peaaegu kunagi sama objekt.
Kaks Pythoni küsimust, mis näivad ühena
Esimene küsimus on: milline interpretaator käivitas programmi, mis tracebacki välja trükkis? Teine on: millist interpretaatorit peaks minu projekt kasutama? Terminalis näevad need identsed välja, sest mõlemale vastatakse python3 sisestades, ning neil on erinevad omanikud, erinevad uuendusteed ja erinev mõjuraadius.
Süsteemi tööriist on seotud interpretaatoriga, millega selle distributsioon tarniti, koos selle interpretaatori ABI vastu ehitatud kompileeritud moodulitega. Projekt on seotud keskkonnaga, mille sa selle jaoks lood. Süsteemi vaikeväärtuse liigutamine muudab esimest korraga iga tööriista jaoks masinas; keskkonna loomine muudab teist ühe kataloogi jaoks.
Ainult üks neist toimingutest on minuti jooksul tagasipööratav. See ei ole esimene.
Milline komponent vea tekitas
Loe tracebacki esimest rida ja seda käivitanud käivitatavat faili enne, kui loed midagi muud. Käsurea frontend, privilegeeritud teenus ja API-sidemed on eraldi tükid ning ainult mõned neist on üldse 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
Skripti esimene rida nimetab interpretaatori, mida see kasutab, ja just sellest interpretaatorist traceback tuli. Paketipäring ütleb sulle, kellele fail kuulub, mis otsustab, kes tohib seda muuta. Teenuse olek vastab hoopis teisele küsimusele: kas privilegeeritud taustaprogramm, mis sessioone tegelikult loob, töötab.
Mooduli impordiviga, D-Busi aktiveerimisest keeldumine ja tagasilükatud mandaat on kolm erinevat etappi. Impordiviga tekib enne, kui ükski sessioon olemas on, nii et ükski VPN-i seadistus seda ei paranda ja töötav teenus ei paranda seda samuti. Sõnumi paigutamine ühte neist kolmest etapist on tegelik esimene samm.
Mida projektikeskkond parandada saab ja mida mitte
Projektikeskkond lahendab projekti probleemi: täpsed teegiversioonid, mida üks rakendus vajab, isoleeritult kõigest muust. See on tõesti kasulik ja see on õige tööriist, kui ebaõnnestuv programm on sinu enda skript.
uv run --python 3.11 app.py
python3 -c 'import openvpn3; print(openvpn3.__file__)'
Teine käsk näitab, millist sidemete koopiat antud interpretaator näeb, mis on kiireim viis eristada puuduvat paketti varjatud paketist. Käivita see interpretaatoriga, mida ebaõnnestuv skript kasutab, mitte teisega, mis juhtumisi töötab.
Mida projektikeskkond teha ei saa, on parandada distributsiooni pakendatud frontendi. Selle programmi sõltuvused ehitati interpretaatori jaoks, mille paketihaldur valis, ja selle käivitamine sinu projekti keskkonnas kas ebaõnnestub või annab segu, mida keegi ei toeta. Radade süstimine sinna keskkonnamuutuja abil on sama viga lisasammudega: sa muutsid, mida tööriist laadib, muutmata seda, mille vastu seda testiti. See vahetus näeb välja nagu parandus täpselt nii kaua, kui kulub järgmise impordini jõudmiseks.
Miks süsteemi interpretaatori ümbersuunamine on lõks
Vaikeinterpretaatori muutmine on ahvatlev, sest see näib parandavat tracebacki ühe käsuga. See lõhub ka eelduse, millele iga pakendatud Pythoni tööriist hostis on ehitatud, ja tõrked ilmuvad hiljem ning seostamata kohtades.
Alternatiivide valiku mehhanismid loodi samaväärsete teostuste vahel lülitamiseks, mitte uuema keele paigaldamiseks vanemate kompileeritud moodulite alla. Kompileeritud laiendused ehitatakse kindla ABI jaoks, nii et eile imporditud moodul võib täna laadimata jääda, ilma et ühtki paketti oleks eemaldatud.
Nõuandes, mille inimesed leiavad, on ka nimega seotud lõks. Versioonita käsk python ei oma ühtset universaalset tähendust distributsioonide ja keskkondade lõikes ning selle käsitlemine kindla põhiversiooni fikseeritud sünonüümina annab parandusi, mis töötavad ainult masinas, kus need kirjutati. Loe selle süsteemi poliitikat, mis on sinu ees, mitte seda, mis on blogipostituses.
Eraldi vastuvõtutestid
Lõpuks peaks olema kaks testi ja ühe läbimine ei ütle teise kohta midagi. Esimene on see, et toetatud kliendikäsk töötab interpretaatoriga, mille jaoks see pakendati. Teine on see, et privilegeeritud teenus loob sessiooni ja tunnel edastab liiklust.
openvpn3 sessions-list
openvpn3-service-client --help 2>/dev/null | head -n 3
ip -4 addr show tun0
Hoia töötamise ajal masinasse sõltumatu tee, eriti kui VPN kannab sinu ainsat haldusjuurdepääsu. Muudatus süsteemi interpretaatoris on täpselt selline redigeerimine, mis võib selle juurdepääsu poolelt teelt eemaldada.
Kui tõrge on süsteemi tööriista jaoks puuduv moodul, on parandus paketitoiming toetatud töövoo kaudu. Kui tõrge on versioonikonflikt sinu enda projektis, on parandus keskkond. Valik nende kahe vahel on kogu otsus ja selle määrab see, milline programm tracebacki välja trükkis.