Terminalul raportează bucuros o versiune OpenSSL, iar arborele sursă tot eșuează cu un mesaj despre antete criptografice lipsă. Ambele afirmații sunt adevărate simultan, pentru că unealta de rulare și un set de intrări de compilare sunt livrate separat. Faceți aceste patru verificări în ordine: pachete instalate, ieșirea descoperirii, căile de căutare și, în final, dacă sursa însăși este compatibilă. Opriți-vă la prima care explică eșecul, în loc să lipiți o listă veche de dependențe.

Rularea și intrările de compilare sunt pachete diferite

O distribuție împarte OpenSSL într-un pachet de rulare care oferă biblioteca partajată și instrumentul de linie de comandă, și un pachet de dezvoltare care oferă antete, nume de legătură fără versiune și metadate pkg-config. Instalarea primului nu îl instalează pe al doilea, iar compilatorul are nevoie doar de al doilea.

Verificați ce este realmente prezent, nu ce vă amintiți că ați instalat. În sistemele derivate din Debian pachetul de dezvoltare este de obicei libssl-dev, în timp ce rularea este un pachet de bibliotecă versionat plus binarul openssl.

dpkg -l | grep -E 'libssl-dev|libssl3|openssl'
pkg-config --modversion openssl
openssl version

Prima comandă arată care dintre cele trei este instalat, a doua raportează versiunea pe care sistemul de compilare o va descoperi prin pkg-config, iar a treia raportează versiunea de rulare. O linie lipsă în prima ieșire explică imediat eroarea. O diferență de versiune între a doua și a treia este altă problemă și înseamnă de obicei că două instalări concurează.

Citiți ieșirea de descoperire a compilării înseși

Cele mai multe eșecuri sunt vizibile în jurnalul de configurare dacă îl citiți înainte de rezumat. Modulul FindOpenSSL al CMake raportează ce director include și ce biblioteci a găsit și eșuează cu un mesaj specific atunci când lipsește o componentă obligatorie.

Confirmați ce versiune de modul folosește proiectul, pentru că o copie inclusă în arborele sursă se poate comporta diferit de cea livrată cu CMake instalat. Apoi citiți lista de componente: un proiect care cere doar Crypto nu are nevoie de biblioteca SSL, iar unul care cere SSL va eșua dacă este prezentă doar o parte a pachetului de dezvoltare.

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
grep -i -E 'openssl|ssl' build/CMakeCache.txt

Prima comandă reconfigura de la zero, iar a doua arată rezultatele din cache, inclusiv orice director rădăcină sau cale de bibliotecă pe care s-a oprit modulul. Dacă cache-ul indică un prefix vechi dintr-o încercare anterioară, ștergeți directorul de compilare și reconfigurați în loc să editați valorile manual. Intrările învechite din cache sunt o cauză frecventă a unui eșec care supraviețuiește unei corecturi corecte.

Orientați compilarea către instalarea corectă, îngust

Când un OpenSSL aprobat se află în afara căii de căutare implicite, FindOpenSSL documentează OPENSSL_ROOT_DIR ca indiciu pentru exact acea compilare. În sistemele de tip Unix consultă și pkg-config, așa că un PKG_CONFIG_PATH adecvat poate ajuta fără a schimba nimic global.

cmake -S . -B build -DOPENSSL_ROOT_DIR=/opt/openssl-3.2 -DCMAKE_BUILD_TYPE=Release
ldd build/vpn_client | grep -i ssl

Prima comandă limitează indiciul la un singur director de compilare, iar a doua arată ce bibliotecă partajată va încărca binarul rezultat la rulare. O compilare care se leagă la prefixul dorit și un binar care încarcă altul reprezintă o problemă de cale la rulare, nu o problemă de descoperire, și necesită o decizie privind rpath sau configurația încărcătorului în loc de încă un steag de configurare.

Păstrați aceste alegeri locale pentru compilare. Înlocuirea bibliotecilor de sistem sau editarea fișierelor pkg-config globale pentru a satisface un singur proiect este calea pe care un desktop funcțional devine defect. Un director de compilare care înregistrează prefixul este reproductibil; o modificare la nivelul întregii mașini este un incident de suport care așteaptă următorul proiect. Ștergeți directorul de compilare când schimbați indiciul, ca cache-ul să nu poată păstra răspunsul vechi.

Să știți când problema este sursa

Un pas de configurare reușit dovedește doar că verificările s-au încheiat. Compilarea poate încă respinge un API pe care sursa îl așteaptă, iar legarea poate încă eșua din cauza unui simbol lipsă. Păstrați prima eroare specifică din fiecare etapă, pentru că cele ulterioare sunt de obicei consecințe.

OpenSSL 3 a declarat învechite și a eliminat mai multe interfețe pe care clienții VPN mai vechi le folosesc direct, așa că un arbore sursă din acea epocă poate avea nevoie de modificări reale în loc de o nouă cale include. Dacă întreținătorii susțin o versiune actuală, folosiți-o. Dacă nu, decizia aparține celui care deține serviciul, nu unei căutări după un nume mai vechi de fișier de bibliotecă.

Componentele opționale de desktop au și ele cerințele lor. O țintă de linie de comandă care se configurează curat nu spune nimic despre dacă trusa GUI și editorul se vor compila, așa că tratați o listă veche de pachete Qt ca istorie, nu ca specificație. Verificați opțiunile propriei revizii sursă pentru ce interfețe sunt activate implicit. Apoi compilați doar ce aveți nevoie, pentru că fiecare dependență opțională este încă o problemă de descoperire care așteaptă să apară.

Articole similare