OpenVPN 3 Python катасы: тутумдук Python эмес, куралды оңдоңуз
Traceback фронтендди иштеткен интерпретаторду атайт, туннелди ээлеген кызматты эмес. Бир нерсени тутум боюнча кайра багыттаардан мурун экөөнү салыштырыңыз.
VPN башкаруу буйругу башталганда Traceback пайда болот, ал эми биринчи түйшүк башка Python орнотууга же тутумдук демейкини башка жакка багыттоого алып барат. Ал түйшүк бири-бирине эч кандай тиешеси жок эки аткаруу чөйрөсүн аралаштырат. Бири операциялык тутумга жана анын пакеттелген куралдарына таандык; экинчиси сиз куруп жаткан кандайдыр бир долбоорго таандык. Экинчисин канааттандыруу үчүн биринчисин өзгөртүү — иштеп жаткан десктоптун пакет менеджеринен ажыроо жолу.
Салыштырууга татыктуу нерсе — чындыгында иштебей калган компонент менен сизге өзгөртүүгө укугуңуз бар аткаруу чөйрөсүнүн ортосундагы айырма. Алар дээрлик эч качан бир объект эмес.
Бирдей көрүнгөн эки Python суроосу
Биринчи суроо: Traceback чыгарган программаны кайсы интерпретатор иштетти? Экинчиси: менин долбоорум кайсы интерпретаторду колдонушу керек? Терминалда экөө тең бирдей көрүнөт, анткени экөөнө тең python3 терип жооп берилет, бирок алардын ээлери, жаңыртуу жолдору жана таасир радиусу башкача.
Тутумдук курал дистрибутив менен келген интерпретаторго жана ошол интерпретатордун ABI'не каршы курулган компиляцияланган модулдарга байланган. Долбоор сиз ага түзгөн кандайдыр бир чөйрөгө байланган. Тутумдук демейкини жылдыруу биринчисин машинадагы бардык курал үчүн бир эле учурда өзгөртөт; чөйрө түзүү экинчисин бир гана каталог үчүн өзгөртөт.
Ошол аракеттердин бир гана бир мүнөттө кайтарылышы мүмкүн. Ал биринчиси эмес.
Кайсы компонент катаны пайда кылды
Башка эч нерсени окуудан мурун Traceback'тин биринчи сабын жана аны пайда кылган аткарылуучу файлды окуңуз. Буйрук сабынын фронтенди, артыкчылыктуу кызмат жана API байланыштары өзүнчө бөлүктөр, жана алардын кээ бирлери гана 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Скрипттин биринчи сабы ал колдоно турган интерпретаторду атайт, жана Traceback ошол интерпретатордон келген. Пакет суроосу файл кимге таандык экенин айтат, бул аны ким өзгөртө аларын аныктайт. Кызматтын абалы такыр башка суроого жооп берет: сессияларды чындыгында ачкан артыкчылыктуу бэкенд иштеп жатабы.
Модулду импорттоо катасы, D-Bus активдештирүүдөн баш тартуу жана четке кагылган эсептик маалыматтар — бул үч башка баскыч. Импорттоо катасы кандайдыр бир сессия пайда болоорго чейин болот, андыктан VPN конфигурациясынын канчалык көп болушу аны оңдобойт, иштеп турган кызмат да аны оңдобойт. Билдирүүнү ошол үч баскычтын бирине жаткыруу — чыныгы биринчи кадам.
Долбоордун чөйрөсү эмнени оңдой алат, эмнени оңдой албайт
Долбоордун чөйрөсү долбоордун маселесин чечет: бир колдонмого керек болгон так китепкана версияларын калган нерселерден обочолоп сунуштайт. Бул чын эле пайдалуу, жана иштебей жаткан программа сиздин скриптиңиз болсо, туура курал.
uv run --python 3.11 app.py
python3 -c 'import openvpn3; print(openvpn3.__file__)'Экинчи буйрук белгиленген интерпретатор байланыштардын кайсы көчүрмөсүн көрө аларын көрсөтөт, бул жок пакетти көлөкөлөнгөн пакеттен ажыратуунун эң тез жолу. Аны иштебей жаткан скрипт колдонгон интерпретатор менен иштетиңиз, кокустан иштеп калган башка интерпретатор менен эмес.
Долбоордун чөйрөсү кыла албаган нерсе — дистрибутив пакеттеген фронтендди оңдоо. Ал программанын көз карандылыктары пакет менеджери тандаган интерпретатор үчүн курулган, жана аны долбоордун чөйрөсүнүн ичинде иштетүү же иштебей калат, же эч ким колдобогон аралашманы пайда кылат. Ага чөйрө өзгөрмөсү аркылуу жолдорду киргизүү — кошумча кадамдар менен жасалган ошол эле ката: курал жүктөгөн нерсени өзгөрттүңүз, бирок ал эмнеге каршы сыналганын өзгөрткөн жоксуз. Бул алмашуу кийинки импортко туш болгонго чейин гана оңдоого окшош.
Тутумдук интерпретаторду кайра багыттоо эмнеге тузак
Демейки интерпретаторду өзгөртүү жагымдуу, анткени ал Traceback'ти бир буйрук менен оңдогондой көрүнөт. Ал ошондой эле хосттогу ар бир пакеттелген Python куралы негизделген божомолду бузат, жана бузулуулар кийин жана байланышсыз жерлерде пайда болот.
Альтернатива тандоо механизмдери барабар ишке ашыруулардын ортосунда которулуу үчүн түзүлгөн, эски компиляцияланган модулдардын астына жаңыраак тилди орнотуу үчүн эмес. Компиляцияланган кеңейтүүлөр белгилүү ABI үчүн курулат, андыктан кечээ импорттолгон модул бүгүн бир да пакет алынып салынбай эле жүктөлбөй калышы мүмкүн.
Адамдар тапкан кеңештерде атоо тузагы да бар. Версиясыз python буйругу дистрибутивдер жана чөйрөлөр боюнча бир универсалдуу мааниге ээ эмес, жана аны белгилүү бир негизги версиянын туруктуу синоними катары кароо жазылган машинада гана иштеген оңдоолорду берет. Блог жазуусундагы саясатты эмес, алдыңыздагы тутумдун саясатын окуңуз.
Бөлөк кабыл алуу сынактары
Аягында эки сынак болушу керек, жана бирөөнөн өтүү экинчиси жөнүндө эч нерсе айтпайт. Биринчиси — колдоого алынган клиент буйругу ал пакеттелген интерпретатор менен иштейт. Экинчиси — артыкчылыктуу кызмат сессия ачат жана туннель трафикти ташыйт.
openvpn3 sessions-list
openvpn3-service-client --help 2>/dev/null | head -n 3
ip -4 addr show tun0Иштеп жатканда машинага кирүүнүн көз карандысыз жолун сактаңыз, өзгөчө VPN сиздин жалгыз административдик кирүүңүздү алып жүрсө. Тутумдук интерпретаторду өзгөртүү — ошол кирүүнү жарым жолдо жоготууга алып келиши мүмкүн болгон оңдоп-түзөөнүн дал өзү.
Эгер иштебей калуу тутумдук курал үчүн модулдун жоктугу болсо, оңдоо — колдоого алынган иш агымы аркылуу пакет операциясы. Эгер иштебей калуу өз долбооруңуздагы версиялар кагылышы болсо, оңдоо — чөйрө. Ошол экөөнүн ортосунда тандоо — бүт чечим, жана ал Traceback'ти кайсы программа чыгарганы менен аныкталат.