openssl കമാൻഡ് പ്രവർത്തിക്കുന്നു, പക്ഷേ VPN ബിൽഡ് പരാജയപ്പെടുന്നത് എന്തുകൊണ്ട്
പ്രവർത്തിക്കുന്ന openssl ബൈനറി ഹെഡറുകളെയും ലിങ്ക് ലൈബ്രറികളെയും കുറിച്ച് ഒന്നും പറയുന്നില്ല. ഡെവ് പാക്കേജ്, ലക്ഷ്യ ആർക്കിടെക്ചർ, ബിൽഡിന്റെ കണ്ടെത്തൽ ലോഗ് എന്നിവ പരിശോധിക്കുക.
ടെർമിനൽ സന്തോഷത്തോടെ ഒരു OpenSSL പതിപ്പ് റിപ്പോർട്ട് ചെയ്യുന്നു, എന്നാൽ സോഴ്സ് ട്രീ ഇപ്പോഴും കാണാത്ത ക്രിപ്റ്റോ ഹെഡറുകളെക്കുറിച്ചുള്ള സന്ദേശത്തോടെ പരാജയപ്പെടുന്നു. രണ്ട് പ്രസ്താവനകളും ഒരേസമയം ശരിയാണ്, കാരണം റൺടൈം ടൂളും ബിൽഡ് ഇൻപുട്ടുകളുടെ കൂട്ടവും വെവ്വേറെ വിതരണം ചെയ്യുന്നു. ഈ നാല് പരിശോധനകൾ ക്രമത്തിൽ ചെയ്യുക: ഇൻസ്റ്റാൾ ചെയ്ത പാക്കേജുകൾ, കണ്ടെത്തൽ ഔട്ട്പുട്ട്, തിരയൽ പാതകൾ, എന്നിട്ട് സോഴ്സ് തന്നെ അനുയോജ്യമാണോ എന്നത്. പഴയ ആശ്രിതത്വ പട്ടിക ഒട്ടിക്കുന്നതിനുപകരം പരാജയം വിശദീകരിക്കുന്ന ആദ്യ പരിശോധനയിൽ നിർത്തുക.
റൺടൈമും ബിൽഡ് ഇൻപുട്ടുകളും വ്യത്യസ്ത പാക്കേജുകളാണ്
ഒരു വിതരണം OpenSSL-നെ പങ്കിട്ട ലൈബ്രറിയും കമാൻഡ് ലൈൻ ടൂളും നൽകുന്ന റൺടൈം പാക്കേജായും ഹെഡറുകൾ, പതിപ്പില്ലാത്ത ലിങ്കർ പേരുകൾ, pkg-config മെറ്റാഡാറ്റ എന്നിവ നൽകുന്ന ഡെവലപ്മെന്റ് പാക്കേജായും വിഭജിക്കുന്നു. ആദ്യത്തേത് ഇൻസ്റ്റാൾ ചെയ്യുന്നത് രണ്ടാമത്തേത് ഇൻസ്റ്റാൾ ചെയ്യുന്നില്ല, കമ്പൈലർക്ക് രണ്ടാമത്തേത് മാത്രം മതി.
ഇൻസ്റ്റാൾ ചെയ്തുവെന്ന് ഓർമ്മയുള്ളതിനുപകരം യഥാർത്ഥത്തിൽ എന്താണുള്ളതെന്ന് പരിശോധിക്കുക. Debian അധിഷ്ഠിത സിസ്റ്റങ്ങളിൽ ഡെവലപ്മെന്റ് പാക്കേജ് സാധാരണയായി libssl-dev ആണ്, റൺടൈം പതിപ്പുള്ള ലൈബ്രറി പാക്കേജും openssl ബൈനറിയുമാണ്.
dpkg -l | grep -E 'libssl-dev|libssl3|openssl' pkg-config --modversion openssl openssl version
ആദ്യ കമാൻഡ് മൂന്നിൽ ഏതാണ് ഇൻസ്റ്റാൾ ചെയ്തതെന്ന് കാണിക്കുന്നു, രണ്ടാമത്തേത് ബിൽഡ് സിസ്റ്റം pkg-config വഴി കണ്ടെത്തുന്ന പതിപ്പ് റിപ്പോർട്ട് ചെയ്യുന്നു, മൂന്നാമത്തേത് റൺടൈം പതിപ്പ് റിപ്പോർട്ട് ചെയ്യുന്നു. ആദ്യ ഔട്ട്പുട്ടിൽ ഒരു വരി കാണാതിരുന്നാൽ അത് പിശക് ഉടനടി വിശദീകരിക്കുന്നു. രണ്ടാമത്തേതും മൂന്നാമത്തേതും തമ്മിലുള്ള പതിപ്പ് പൊരുത്തക്കേട് മറ്റൊരു പ്രശ്നമാണ്, സാധാരണയായി രണ്ട് ഇൻസ്റ്റാളുകൾ മത്സരിക്കുന്നു എന്നാണ് അർത്ഥം.
ബിൽഡിന്റെ സ്വന്തം കണ്ടെത്തൽ ഔട്ട്പുട്ട് വായിക്കുക
സംഗ്രഹത്തിന് മുമ്പ് വായിച്ചാൽ മിക്ക പരാജയങ്ങളും കോൺഫിഗർ ലോഗിൽ കാണാം. CMake-ന്റെ FindOpenSSL മൊഡ്യൂൾ ഏത് include ഡയറക്ടറിയും ഏത് ലൈബ്രറികളും കണ്ടെത്തിയെന്ന് റിപ്പോർട്ട് ചെയ്യുന്നു, ആവശ്യമായ ഘടകം ഇല്ലെങ്കിൽ നിർദ്ദിഷ്ട സന്ദേശത്തോടെ പരാജയപ്പെടുന്നു.
പ്രോജക്റ്റ് ഏത് മൊഡ്യൂൾ പതിപ്പാണ് ഉപയോഗിക്കുന്നതെന്ന് ഉറപ്പാക്കുക, കാരണം സോഴ്സ് ട്രീയ്ക്കുള്ളിൽ ബണ്ടിൽ ചെയ്ത പകർപ്പ് ഇൻസ്റ്റാൾ ചെയ്ത CMake-നൊപ്പം വരുന്നതിൽനിന്ന് വ്യത്യസ്തമായി പെരുമാറിയേക്കാം. തുടർന്ന് ഘടക പട്ടിക വായിക്കുക: Crypto മാത്രം ആവശ്യപ്പെടുന്ന പ്രോജക്റ്റിന് SSL ലൈബ്രറി ആവശ്യമില്ല, SSL ആവശ്യപ്പെടുന്നത് ഡെവലപ്മെന്റ് പാക്കേജിന്റെ ഒരു ഭാഗം മാത്രം ഉണ്ടെങ്കിൽ പരാജയപ്പെടും.
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release grep -i -E 'openssl|ssl' build/CMakeCache.txt
ആദ്യ കമാൻഡ് പൂജ്യത്തിൽനിന്ന് വീണ്ടും കോൺഫിഗർ ചെയ്യുന്നു, രണ്ടാമത്തേത് മൊഡ്യൂൾ നിലയുറപ്പിച്ച ഏതെങ്കിലും റൂട്ട് ഡയറക്ടറിയോ ലൈബ്രറി പാതയോ ഉൾപ്പെടെ കാഷെ ചെയ്ത ഫലങ്ങൾ കാണിക്കുന്നു. കാഷെ മുൻ ശ്രമത്തിന്റെ പഴയ പ്രിഫിക്സിലേക്ക് ചൂണ്ടുന്നുണ്ടെങ്കിൽ, മൂല്യങ്ങൾ കൈകൊണ്ട് തിരുത്തുന്നതിനുപകരം ബിൽഡ് ഡയറക്ടറി ഇല്ലാതാക്കി വീണ്ടും കോൺഫിഗർ ചെയ്യുക. കാലഹരണപ്പെട്ട കാഷെ എൻട്രികൾ ശരിയായ തിരുത്തലിനുശേഷവും നിലനിൽക്കുന്ന പരാജയത്തിന്റെ സാധാരണ കാരണമാണ്.
ബിൽഡിനെ ശരിയായ ഇൻസ്റ്റലേഷനിലേക്ക് ഇടുങ്ങിയതായി വഴിതിരിച്ചുവിടുക
അംഗീകൃത OpenSSL സ്ഥിരസ്ഥിതി തിരയൽ പാതയ്ക്ക് പുറത്താണെങ്കിൽ, FindOpenSSL OPENSSL_ROOT_DIR ആ ബിൽഡിന് മാത്രമുള്ള സൂചനയായി രേഖപ്പെടുത്തുന്നു. Unix പോലുള്ള സിസ്റ്റങ്ങളിൽ അത് pkg-config-നോടും ആലോചിക്കുന്നു, അതിനാൽ യോജിച്ച PKG_CONFIG_PATH ആഗോളമായി ഒന്നും മാറ്റാതെ സഹായിക്കും.
cmake -S . -B build -DOPENSSL_ROOT_DIR=/opt/openssl-3.2 -DCMAKE_BUILD_TYPE=Release ldd build/vpn_client | grep -i ssl
ആദ്യ കമാൻഡ് സൂചനയെ ഒരു ബിൽഡ് ഡയറക്ടറിയിൽ ഒതുക്കുന്നു, രണ്ടാമത്തേത് ലഭിച്ച ബൈനറി റൺടൈമിൽ ഏത് പങ്കിട്ട ലൈബ്രറി ലോഡ് ചെയ്യുമെന്ന് കാണിക്കുന്നു. ഉദ്ദേശിച്ച പ്രിഫിക്സിലേക്ക് ലിങ്ക് ചെയ്യുന്ന ബിൽഡും മറ്റൊന്ന് ലോഡ് ചെയ്യുന്ന ബൈനറിയും റൺടൈം പാതയുടെ പ്രശ്നമാണ്, കണ്ടെത്തലിന്റെ പ്രശ്നമല്ല, അതിന് മറ്റൊരു കോൺഫിഗർ ഫ്ലാഗിനുപകരം rpath അല്ലെങ്കിൽ ലോഡർ കോൺഫിഗറേഷന്റെ തീരുമാനം വേണം.
ഈ തിരഞ്ഞെടുപ്പുകൾ ബിൽഡിനുള്ളിൽ പ്രാദേശികമായി നിർത്തുക. ഒരു പ്രോജക്റ്റിനെ തൃപ്തിപ്പിക്കാൻ സിസ്റ്റം ലൈബ്രറികൾ മാറ്റിസ്ഥാപിക്കുന്നതോ ആഗോള pkg-config ഫയലുകൾ തിരുത്തുന്നതോ പ്രവർത്തിക്കുന്ന ഡെസ്ക്ടോപ്പ് തകർന്നതാകുന്ന വഴിയാണ്. പ്രിഫിക്സ് രേഖപ്പെടുത്തുന്ന ബിൽഡ് ഡയറക്ടറി പുനരുൽപ്പാദിപ്പിക്കാവുന്നതാണ്; യന്ത്രം മുഴുവൻ ബാധിക്കുന്ന മാറ്റം അടുത്ത പ്രോജക്റ്റിനായി കാത്തിരിക്കുന്ന പിന്തുണ സംഭവമാണ്. സൂചന മാറ്റുമ്പോൾ ബിൽഡ് ഡയറക്ടറി ഇല്ലാതാക്കുക, കാഷെക്ക് പഴയ ഉത്തരം സൂക്ഷിക്കാനാകാതിരിക്കാൻ.
പ്രശ്നം സോഴ്സിലാണോ എന്ന് അറിയുക
വിജയകരമായ കോൺഫിഗർ ഘട്ടം പരിശോധനകൾ പൂർത്തിയായി എന്ന് മാത്രം തെളിയിക്കുന്നു. കമ്പൈലേഷൻ സോഴ്സ് പ്രതീക്ഷിക്കുന്ന ഒരു API ഇപ്പോഴും നിരസിച്ചേക്കാം, ലിങ്കിംഗ് കാണാത്ത ചിഹ്നം കാരണം ഇപ്പോഴും പരാജയപ്പെടാം. ഓരോ ഘട്ടത്തിന്റെയും ആദ്യ നിർദ്ദിഷ്ട പിശക് സൂക്ഷിക്കുക, കാരണം പിന്നീടുള്ളവ സാധാരണയായി പരിണിതഫലങ്ങളാണ്.
OpenSSL 3 പഴയ VPN ക്ലയന്റുകൾ നേരിട്ട് ഉപയോഗിക്കുന്ന നിരവധി ഇന്റർഫേസുകൾ കാലഹരണപ്പെട്ടതായി പ്രഖ്യാപിച്ച് നീക്കം ചെയ്തു, അതിനാൽ ആ കാലഘട്ടത്തിലെ സോഴ്സ് ട്രീക്ക് പുതിയ include പാതയ്ക്കുപകരം യഥാർത്ഥ മാറ്റങ്ങൾ ആവശ്യമായി വന്നേക്കാം. അറ്റകുറ്റപ്പണിക്കാർ നിലവിലെ റിലീസ് പിന്തുണയ്ക്കുന്നുവെങ്കിൽ അത് ഉപയോഗിക്കുക. ഇല്ലെങ്കിൽ, തീരുമാനം സേവനത്തിന്റെ ഉടമയുടേതാണ്, പഴയ ലൈബ്രറി ഫയൽ പേരിന്റെ അന്വേഷണത്തിന്റേതല്ല.
ഓപ്ഷണൽ ഡെസ്ക്ടോപ്പ് ഘടകങ്ങൾക്കും സ്വന്തം ആവശ്യകതകളുണ്ട്. വൃത്തിയായി കോൺഫിഗർ ചെയ്യുന്ന കമാൻഡ് ലൈൻ ലക്ഷ്യം GUI ടൂൾകിറ്റും എഡിറ്ററും നിർമ്മിക്കുമോ എന്നതിനെക്കുറിച്ച് ഒന്നും പറയുന്നില്ല, അതിനാൽ പഴയ Qt പാക്കേജ് പട്ടികയെ സ്പെസിഫിക്കേഷനായല്ല, ചരിത്രമായി കാണുക. ഏത് ഇന്റർഫേസുകൾ സ്ഥിരസ്ഥിതിയായി പ്രവർത്തനക്ഷമമാണെന്ന് സോഴ്സ് റിവിഷന്റെ സ്വന്തം ഓപ്ഷനുകളിൽ പരിശോധിക്കുക. തുടർന്ന് ആവശ്യമുള്ളത് മാത്രം നിർമ്മിക്കുക, കാരണം ഓരോ ഓപ്ഷണൽ ആശ്രിതത്വവും സംഭവിക്കാൻ കാത്തിരിക്കുന്ന മറ്റൊരു കണ്ടെത്തൽ പ്രശ്നമാണ്.