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 பொதிப் பட்டியலை விவரக்குறிப்பாக அல்ல, வரலாறாகக் கருதுங்கள். எந்த இடைமுகங்கள் இயல்பாக இயக்கப்பட்டுள்ளன என்பதை ஆதாரத் திருத்தத்தின் சொந்த விருப்பங்களில் சரிபார்க்கவும். பின்னர் தேவையானதை மட்டும் கட்டுங்கள், ஏனெனில் ஒவ்வொரு விருப்பச் சார்பும் நிகழக் காத்திருக்கும் மற்றொரு தேடல் சிக்கல்.