OpenVPN 3 Python දෝෂය: මෙවලම අලුත්වැඩියා කරන්න, පද්ධති Python නොවේ
Traceback මගින් frontend එක ධාවනය කළ interpreter එක නම් කරයි, tunnel එක හිමි සේවාව නොවේ. පද්ධතිය පුරා යමක් වෙනස් කිරීමට පෙර දෙකම සසඳන්න.
VPN කළමනාකරණ විධානයක් ආරම්භ වන විට Traceback එකක් දිස්වේ, සහ පළමු ප්රවණතාව තවත් Python එකක් ස්ථාපනය කිරීමට හෝ පද්ධතියේ පෙරනිමිය වෙනත් තැනකට හරවා යැවීමට දුවයි. එම ප්රවණතාව එකිනෙකට කිසිදු සම්බන්ධයක් නැති runtime දෙකක් මිශ්ර කරයි. එකක් මෙහෙයුම් පද්ධතියට සහ එහි පැකේජ කළ මෙවලම්වලට අයත් වේ; අනෙක ඔබ ගොඩනඟන ඕනෑම ව්යාපෘතියකට අයත් වේ. දෙවැන්න තෘප්තිමත් කිරීමට පළමුවැන්න වෙනස් කිරීම යනු ක්රියාකාරී ඩෙස්ක්ටොප් එකක් එහි පැකේජ කළමනාකරු අහිමි වන ආකාරයයි.
සිදු කිරීමට වටිනා සංසන්දනය වන්නේ සැබවින්ම අසමත් වූ සංරචකය සහ ඔබට වෙනස් කිරීමට අයිතිය ඇති runtime එක අතරය. ඒවා පාහේ කිසිදා එකම වස්තුව නොවේ.
එකක් ලෙස පෙනෙන Python ප්රශ්න දෙකක්
පළමු ප්රශ්නය: Traceback මුද්රණය කළ වැඩසටහන ධාවනය කළේ කුමන interpreter එකද? දෙවැන්න: මගේ ව්යාපෘතිය කුමන interpreter එක භාවිත කළ යුතුද? ටර්මිනලයක ඒවා සමාන ලෙස පෙනේ, මන්ද දෙකටම පිළිතුර python3 ටයිප් කිරීමෙන් ලැබේ, නමුත් ඒවාට වෙනස් හිමිකරුවන්, වෙනස් උත්ශ්රේණි මාර්ග සහ වෙනස් බලපෑම් අරය ඇත.
පද්ධති මෙවලමක් එහි බෙදාහැරීම විසින් ලබා දුන් interpreter එකට සහ එම interpreter හි ABI එකට එරෙහිව ගොඩනඟන ලද සම්පාදිත මොඩියුලවලට බැඳී ඇත. ව්යාපෘතියක් ඔබ ඒ සඳහා සාදන ඕනෑම පරිසරයකට බැඳී ඇත. පද්ධති පෙරනිමිය ගෙන යාම පළමුවැන්න යන්ත්රයේ සෑම මෙවලමකටම එකවර වෙනස් කරයි; පරිසරයක් සෑදීම දෙවැන්න එක් නාමාවලියකට පමණක් වෙනස් කරයි.
එම ක්රියාවලින් එකක් පමණක් විනාඩියකින් ප්රතිවර්ත කළ හැක. එය පළමුවැන්න නොවේ.
දෝෂය උත්පාදනය කළේ කුමන සංරචකයද
වෙනත් ඕනෑම දෙයක් කියවීමට පෙර Traceback හි පළමු පේළිය සහ එය උත්පාදනය කළ ක්රියාත්මක කළ හැකි ගොනුව කියවන්න. විධාන රේඛා frontend එක, විශේෂ අවසර ලත් සේවාව සහ 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-pagerscript එකක පළමු පේළිය එය භාවිත කරන interpreter එක නම් කරයි, සහ Traceback පැමිණියේ එම interpreter එකෙනි. පැකේජ විමසුම ගොනුව කාට අයත්ද යන්න කියයි, එය කවුරුන්ට එය වෙනස් කළ හැකිද යන්න තීරණය කරයි. සේවා තත්ත්වය සම්පූර්ණයෙන්ම වෙනස් ප්රශ්නයකට පිළිතුරු දෙයි: සැබවින්ම සැසි විවෘත කරන විශේෂ අවසර ලත් backend එක ක්රියාත්මක ද යන්න.
මොඩියුල ආයාත දෝෂයක්, D-Bus සක්රීයකරණය ප්රතික්ෂේප කිරීමක් සහ ප්රතික්ෂේප වූ සත්යාපන දත්ත යනු වෙනස් අවස්ථා තුනකි. ආයාත දෝෂයක් කිසිදු සැසියක් පවතින පෙර සිදු වේ, එබැවින් කොපමණ VPN වින්යාසයක් වුවත් එය නිවැරදි නොකරයි, ක්රියාකාරී සේවාවක් ද එය නිවැරදි නොකරයි. පණිවිඩය එම අවස්ථා තුනෙන් එකකට වර්ග කිරීම සැබෑ පළමු පියවරයි.
ව්යාපෘති පරිසරයකට කළ හැකි හා නොහැකි දේ
ව්යාපෘති පරිසරයක් ව්යාපෘති ගැටලුවක් විසඳයි: එක් යෙදුමකට අවශ්ය නිශ්චිත පුස්තකාල අනුවාද, අනෙක් සියල්ලෙන් හුදකලා කර ලබා දෙයි. එය සැබවින්ම ප්රයෝජනවත් වන අතර, අසමත් වන වැඩසටහන ඔබේම script එකක් නම් එයම නිවැරදි මෙවලමයි.
uv run --python 3.11 app.py
python3 -c 'import openvpn3; print(openvpn3.__file__)'දෙවන විධානය දෙන ලද interpreter එකකට බැඳුම්වල කුමන පිටපත පෙනේද යන්න පෙන්වයි, සහ නැති වූ පැකේජයක් සෙවනැලි වූ පැකේජයකින් වෙන් කිරීමට ඇති වේගවත්ම මාර්ගය එයයි. අසමත් වන script එක භාවිත කරන interpreter එකෙන් එය ධාවනය කරන්න, අහම්බෙන් ක්රියා කරන වෙනත් එකකින් නොවේ.
ව්යාපෘති පරිසරයකට කළ නොහැකි දෙය බෙදාහැරීම විසින් පැකේජ කළ frontend එකක් අලුත්වැඩියා කිරීමයි. එම වැඩසටහනේ යැපීම් පැකේජ කළමනාකරු තෝරාගත් interpreter එක සඳහා ගොඩනගා ඇත, සහ එය ඔබේ ව්යාපෘති පරිසරය තුළ ධාවනය කිරීම එක්කෝ අසමත් වේ, නැතහොත් කිසිවෙකු අනුග්රහය නොදෙන මිශ්රණයක් නිපදවයි. පරිසර විචල්යයකින් එයට මාර්ග එන්නත් කිරීම අමතර පියවර සහිත එම වැරැද්දයි: මෙවලම පූරණය කරන දෙය ඔබ වෙනස් කළා, නමුත් එය කුමකට එරෙහිව පරීක්ෂා කරනු ලැබුවාද යන්න වෙනස් කළේ නැත. එම හුවමාරුව ඊළඟ ආයාතය හමු වන තෙක් පමණක් අලුත්වැඩියාවක් ලෙස පෙනේ.
පද්ධති interpreter එක හරවා යැවීම උගුලක් වන්නේ ඇයි
පෙරනිමි interpreter එක වෙනස් කිරීම ආකර්ෂණීය වන්නේ එය එක් විධානයකින් Traceback එක නිවැරදි කරන බව පෙනෙන නිසාය. එය host එකේ සෑම පැකේජ කළ Python මෙවලමක්ම පදනම් වූ උපකල්පනය ද කඩයි, සහ අසමත් වීම් පසුව සම්බන්ධයක් නැති තැන්වල දිස්වේ.
විකල්ප තේරීමේ යාන්ත්රණ නිර්මාණය කර ඇත්තේ සමාන ක්රියාත්මක කිරීම් අතර මාරු වීමට මිස පැරණි සම්පාදිත මොඩියුල යටතේ නව භාෂාවක් ස්ථාපනය කිරීමට නොවේ. සම්පාදිත දිගු කිරීම් නිශ්චිත ABI එකක් සඳහා ගොඩනඟනු ලැබේ, එබැවින් ඊයේ ආයාත වූ මොඩියුලයක් අද එක් පැකේජයක්වත් ඉවත් නොකර පූරණය නොවිය හැක.
මිනිසුන් සොයා ගන්නා උපදෙස්වල නමක් පිළිබඳ උගුලක් ද ඇත. අනුවාදයක් නොමැති python විධානයට බෙදාහැරීම් සහ පරිසර අතර එක් විශ්වීය අර්ථයක් නැත, සහ එය නිශ්චිත ප්රධාන අනුවාදයක ස්ථිර සමාන පදයක් ලෙස සැලකීම ලියූ යන්ත්රයේ පමණක් ක්රියා කරන නිවැරදි කිරීම් ලබා දෙයි. බ්ලොග් සටහනේ ඇති ප්රතිපත්තිය නොව, ඔබ ඉදිරියෙහි ඇති පද්ධතියේ ප්රතිපත්තිය කියවන්න.
වෙන් වූ පිළිගැනීම් පරීක්ෂණ
අවසානයේ පරීක්ෂණ දෙකක් තිබිය යුතු අතර, එකක් සමත් වීම අනෙක ගැන කිසිවක් නොකියයි. පළමුවැන්න නම් සහාය දක්වන client විධානය එය පැකේජ කළ interpreter එක සමඟ ක්රියා කිරීමයි. දෙවැන්න නම් විශේෂ අවසර ලත් සේවාව සැසියක් ස්ථාපිත කර tunnel එක ගමනාගමනය රැගෙන යාමයි.
openvpn3 sessions-list
openvpn3-service-client --help 2>/dev/null | head -n 3
ip -4 addr show tun0වැඩ කරන අතරතුර යන්ත්රයට ඇතුල් වීමට ස්වාධීන මාර්ගයක් තබා ගන්න, විශේෂයෙන් VPN ඔබේ එකම පරිපාලන ප්රවේශය රැගෙන යන්නේ නම්. පද්ධති interpreter එකකට කරන වෙනසක් යනු අර්ධ මාර්ගයේදී එම ප්රවේශය ඉවත් කළ හැකි ආකාරයේ සංස්කරණයකි.
අසමත් වීම පද්ධති මෙවලමකට නැති වූ මොඩියුලයක් නම්, නිවැරදි කිරීම සහාය දක්වන කාර්ය ප්රවාහය හරහා සිදු කරන පැකේජ ක්රියාවකි. අසමත් වීම ඔබේම ව්යාපෘතියේ අනුවාද ගැටුමක් නම්, නිවැරදි කිරීම පරිසරයකි. එම දෙක අතර තේරීම මුළු තීරණයයි, සහ එය තීරණය වන්නේ කුමන වැඩසටහන Traceback මුද්රණය කළාද යන්නෙනි.