Prečo príkaz openssl funguje, ale zostavenie VPN zlyháva
Funkčný binárny súbor openssl nehovorí nič o hlavičkách a knižniciach na prepojenie. Skontrolujte vývojový balík, cieľovú architektúru a protokol vyhľadávania zostavenia.
Terminál ochotne hlási verziu OpenSSL a strom zdrojového kódu stále zlyháva so správou o chýbajúcich kryptografických hlavičkách. Obe tvrdenia platia súčasne, pretože nástroj runtime a sada vstupov zostavenia sa dodávajú oddelene. Vykonajte tieto štyri kontroly v poradí: nainštalované balíky, výstup vyhľadávania, cesty hľadania a nakoniec to, či je samotný zdrojový kód kompatibilný. Zastavte sa pri prvej, ktorá vysvetlí zlyhanie, namiesto vkladania starého zoznamu závislostí.
Runtime a vstupy zostavenia sú rôzne balíky
Distribúcia delí OpenSSL na balík runtime, ktorý poskytuje zdieľanú knižnicu a nástroj príkazového riadka, a vývojový balík, ktorý poskytuje hlavičky, neverzované názvy prepojenia a metadáta pkg-config. Inštalácia prvého nenainštaluje druhý a kompilátor potrebuje iba druhý.
Skontrolujte, čo skutočne existuje, nie to, čo si pamätáte, že ste nainštalovali. V systémoch odvodených z Debianu je vývojový balík zvyčajne libssl-dev, zatiaľ čo runtime je verzovaný knižničný balík plus binárny súbor openssl.
dpkg -l | grep -E 'libssl-dev|libssl3|openssl' pkg-config --modversion openssl openssl version
Prvý príkaz ukazuje, ktorý z troch je nainštalovaný, druhý hlási verziu, ktorú systém zostavenia nájde cez pkg-config, a tretí hlási verziu runtime. Chýbajúci riadok v prvom výstupe hneď vysvetlí chybu. Rozdiel verzií medzi druhým a tretím je iný problém a zvyčajne znamená, že súťažia dve inštalácie.
Prečítajte si vlastný výstup vyhľadávania zostavenia
Väčšina zlyhaní je viditeľná v konfiguračnom protokole, ak ho prečítate pred zhrnutím. Modul FindOpenSSL v CMake hlási, ktorý adresár include a ktoré knižnice našiel, a zlyhá s konkrétnou správou, keď chýba povinná komponenta.
Potvrďte, ktorú verziu modulu projekt používa, pretože priložená kópia v strome zdrojového kódu sa môže správať inak ako tá, ktorá sa dodáva s nainštalovaným CMake. Potom si prečítajte zoznam komponentov: projekt, ktorý žiada iba Crypto, nepotrebuje knižnicu SSL, a projekt, ktorý žiada SSL, zlyhá, ak je prítomná len časť vývojového balíka.
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release grep -i -E 'openssl|ssl' build/CMakeCache.txt
Prvý príkaz prekonfiguruje od nuly a druhý zobrazí výsledky z vyrovnávacej pamäte vrátane koreňového adresára alebo cesty ku knižnici, na ktorej sa modul ustálil. Ak vyrovnávacia pamäť ukazuje na starý prefix z predchádzajúceho pokusu, vymažte adresár zostavenia a nakonfigurujte znova, namiesto ručnej úpravy hodnôt. Zastarané položky vo vyrovnávacej pamäti sú častou príčinou zlyhania, ktoré prežije správnu opravu.
Nasmerujte zostavenie na správnu inštaláciu, úzko
Keď schválený OpenSSL sídli mimo predvolenej cesty hľadania, FindOpenSSL dokumentuje OPENSSL_ROOT_DIR ako nápovedu pre toto konkrétne zostavenie. V systémoch podobných Unixu sa tiež pýta pkg-config, takže vhodná PKG_CONFIG_PATH môže pomôcť bez globálnej zmeny.
cmake -S . -B build -DOPENSSL_ROOT_DIR=/opt/openssl-3.2 -DCMAKE_BUILD_TYPE=Release ldd build/vpn_client | grep -i ssl
Prvý príkaz obmedzuje nápovedu na jeden adresár zostavenia a druhý ukazuje, ktorú zdieľanú knižnicu výsledný binárny súbor načíta pri behu. Zostavenie prepojené so zamýšľaným prefixom a binárny súbor, ktorý načíta iný, predstavujú problém cesty pri behu, nie problém vyhľadávania, a vyžadujú rozhodnutie o rpath alebo konfigurácii zavádzača namiesto ďalšieho konfiguračného prepínača.
Tieto voľby držte lokálne pre zostavenie. Nahradenie systémových knižníc alebo úprava globálnych súborov pkg-config, aby ste uspokojili jeden projekt, je cesta, ako sa z funkčnej plochy stane pokazená. Adresár zostavenia, ktorý zaznamenáva prefix, je reprodukovateľný; zmena pre celý stroj je incident podpory, ktorý čaká na ďalší projekt. Pri zmene nápovedy vymažte adresár zostavenia, aby si vyrovnávacia pamäť nemohla ponechať starú odpoveď.
Vedzte, kedy je problém v zdrojovom kóde
Úspešný konfiguračný krok dokazuje len to, že kontroly skončili. Kompilácia stále môže odmietnuť API, ktoré zdrojový kód očakáva, a prepojenie stále môže zlyhať pre chýbajúci symbol. Uložte si prvú konkrétnu chybu z každej fázy, pretože tie neskoršie sú zvyčajne dôsledky.
OpenSSL 3 označil za zastarané a odstránil niekoľko rozhraní, ktoré starší klienti VPN používajú priamo, takže strom zdrojového kódu z tej éry môže potrebovať skutočné zmeny namiesto novej cesty include. Ak správcovia podporujú aktuálne vydanie, použite ho. Ak nie, rozhodnutie patrí tomu, kto službu vlastní, nie hľadaniu staršieho názvu knižničného súboru.
Voliteľné komponenty pracovnej plochy majú tiež svoje požiadavky. Cieľ príkazového riadka, ktorý sa čisto nakonfiguruje, nehovorí nič o tom, či sa zostavia súprava nástrojov GUI a editor, preto starý zoznam balíkov Qt berte ako históriu, nie ako špecifikáciu. Skontrolujte vlastné možnosti revízie zdrojového kódu, ktoré rozhrania sú predvolene zapnuté. Potom zostavte len to, čo potrebujete, pretože každá voliteľná závislosť je ďalší problém vyhľadávania, ktorý čaká na vznik.