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-ты қай бағдарлама шығарғанымен анықталады.