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 ਛਾਪਿਆ।