Per què l’ordre openssl funciona i la compilació de la VPN fracassa
Un binari openssl que funciona no diu res sobre les capçaleres ni les biblioteques d’enllaç. Comproveu el paquet de desenvolupament, l’arquitectura de destinació i el registre de descoberta de la compilació.
El terminal informa sense problemes d’una versió d’OpenSSL, i l’arbre de codi font continua fallant amb un missatge sobre capçaleres criptogràfiques que falten. Les dues afirmacions són certes alhora, perquè l’eina d’execució i el conjunt d’entrades de compilació es distribueixen per separat. Feu aquestes quatre comprovacions en ordre: paquets instal·lats, sortida de descoberta, camins de cerca i, finalment, si el propi codi font és compatible. Atureu-vos a la primera que expliqui el fracàs, en lloc d’enganxar una llista de dependències antiga.
L’execució i les entrades de compilació són paquets diferents
Una distribució divideix OpenSSL en un paquet d’execució que proporciona la biblioteca compartida i l’eina de línia de comandes, i un paquet de desenvolupament que proporciona capçaleres, noms d’enllaç sense versió i metadades de pkg-config. Instal·lar el primer no instal·la el segon, i el compilador només necessita el segon.
Comproveu què hi ha realment en lloc del que recordeu haver instal·lat. Als sistemes derivats de Debian el paquet de desenvolupament sol ser libssl-dev, mentre que l’execució és un paquet de biblioteca amb versió més el binari openssl.
dpkg -l | grep -E 'libssl-dev|libssl3|openssl' pkg-config --modversion openssl openssl version
La primera comanda mostra quin dels tres està instal·lat, la segona informa de la versió que el sistema de compilació descobrirà mitjançant pkg-config, i la tercera informa de la versió d’execució. Una línia que falta a la primera sortida explica l’error immediatament. Una discrepància de versió entre la segona i la tercera és un altre problema, i normalment significa que dues instal·lacions competeixen.
Llegiu la sortida de descoberta de la pròpia compilació
La majoria de fallades són visibles al registre de configuració si el llegiu abans del resum. El mòdul FindOpenSSL de CMake informa de quin directori d’inclusió i quines biblioteques ha trobat, i falla amb un missatge específic quan falta un component obligatori.
Confirmeu quina versió del mòdul fa servir el projecte, perquè una còpia inclosa dins de l’arbre de codi font es pot comportar de manera diferent de la que s’envia amb el CMake instal·lat. Després llegiu la llista de components: un projecte que només demana Crypto no necessita la biblioteca SSL, i un que demana SSL fallarà si només hi ha part del paquet de desenvolupament.
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release grep -i -E 'openssl|ssl' build/CMakeCache.txt
La primera comanda reconfigura des de zero, i la segona mostra els resultats de la memòria cau, incloent-hi qualsevol directori arrel o camí de biblioteca on s’hagi fixat el mòdul. Si la memòria cau apunta a un prefix antic d’un intent anterior, esborreu el directori de compilació i torneu a configurar en lloc d’editar valors a mà. Les entrades obsoletes de la memòria cau són una causa habitual d’una fallada que sobreviu a una correcció correcta.
Orienteu la compilació cap a la instal·lació correcta, de manera estreta
Quan un OpenSSL aprovat viu fora del camí de cerca per defecte, FindOpenSSL documenta OPENSSL_ROOT_DIR com a indici per a aquesta compilació concreta. Als sistemes tipus Unix també consulta pkg-config, de manera que un PKG_CONFIG_PATH adequat pot ajudar sense canviar res globalment.
cmake -S . -B build -DOPENSSL_ROOT_DIR=/opt/openssl-3.2 -DCMAKE_BUILD_TYPE=Release ldd build/vpn_client | grep -i ssl
La primera comanda limita l’indici a un directori de compilació, i la segona mostra quina biblioteca compartida carregarà el binari resultant en temps d’execució. Una compilació que enllaça amb el prefix previst i un binari que en carrega un altre és un problema de camí d’execució, no un problema de descoberta, i requereix una decisió sobre rpath o la configuració del carregador en lloc d’una altra opció de configuració.
Manteniu aquestes eleccions locals a la compilació. Substituir biblioteques del sistema o editar fitxers pkg-config globals per satisfer un sol projecte és com un escriptori que funciona es converteix en un d’espatllat. Un directori de compilació que registra el prefix és reproduïble; un canvi a tota la màquina és un incident de suport esperant el proper projecte. Esborreu el directori de compilació quan canvieu l’indici, perquè la memòria cau no pugui conservar la resposta antiga.
Saber quan el problema és el codi font
Un pas de configuració correcte només demostra que les comprovacions s’han completat. La compilació encara pot rebutjar una API que el codi font espera, i l’enllaç encara pot fallar per un símbol que falta. Guardeu el primer error específic de cada etapa, perquè els posteriors solen ser conseqüències.
OpenSSL 3 va declarar obsoletes i va eliminar diverses interfícies que els clients VPN més antics fan servir directament, així que un arbre de codi font d’aquella època pot necessitar canvis reals en lloc d’un camí d’inclusió nou. Si els mantenidors donen suport a una versió actual, feu-la servir. Si no, la decisió correspon a qui posseeix el servei, no a una cerca d’un nom de fitxer de biblioteca més antic.
Els components opcionals d’escriptori també tenen els seus requisits. Un objectiu de línia de comandes que es configura net no diu res sobre si el conjunt d’eines GUI i l’editor es compilaran, així que tracteu una llista antiga de paquets Qt com a història i no com a especificació. Reviseu les opcions pròpies de la revisió del codi font per saber quines interfícies estan habilitades per defecte. Després compileu només el que necessiteu, perquè cada dependència opcional és un altre problema de descoberta esperant a passar.