Waarom die openssl-opdrag werk, maar die VPN-bou misluk
’n Werkende openssl-binêre sê niks oor kopstukke en skakelbiblioteke nie. Kontroleer die ontwikkelingspakket, die teikenargitektuur en die bou se ontdekkingslog.
Die terminaal rapporteer met graagte ’n OpenSSL-weergawe, en die bronboom misluk steeds met ’n boodskap oor ontbrekende kripto-kopstukke. Beide stellings is gelyktydig waar, want ’n looptydnutsmiddel en ’n stel bou-insette word afsonderlik verskeep. Werk hierdie vier kontroles in volgorde deur: geïnstalleerde pakkette, ontdekkingsuitset, soekpaaie, en dan of die bron self versoenbaar is. Stop by die eerste een wat die mislukking verduidelik, eerder as om ’n ou afhanklikheidslys te plak.
Looptyd- en bou-insette is verskillende pakkette
’n Distribusie verdeel OpenSSL in ’n looptydpakket wat die gedeelde biblioteek en die opdragreël-hulpmiddel verskaf, en ’n ontwikkelingspakket wat kopstukke, onweergawe skakelname en pkg-config-metadata verskaf. Om die eerste te installeer, installeer nie die tweede nie, en die kompileerder het net die tweede nodig.
Kontroleer wat werklik teenwoordig is, eerder as wat jy onthou jy geïnstalleer het. Op Debian-afgeleide stelsels is die ontwikkelingspakket gewoonlik libssl-dev, terwyl die looptyd ’n weergawe-biblioteekpakket plus die openssl-binêre is.
dpkg -l | grep -E 'libssl-dev|libssl3|openssl' pkg-config --modversion openssl openssl version
Die eerste opdrag wys watter van die drie geïnstalleer is, die tweede rapporteer die weergawe wat die boustelsel deur pkg-config sal ontdek, en die derde rapporteer die looptydweergawe. ’n Ontbrekende reël in die eerste uitset verduidelik die fout onmiddellik. ’n Weergawe-verskil tussen die tweede en derde is ’n ander probleem, en dit beteken gewoonlik dat twee installasies meeding.
Lees die bou se eie ontdekkingsuitset
Die meeste mislukkings is in die konfigureerlog sigbaar as jy dit voor die opsomming lees. CMake se FindOpenSSL-module rapporteer watter insluitgids en biblioteke dit gevind het, en dit misluk met ’n spesifieke boodskap wanneer ’n vereiste komponent afwesig is.
Bevestig watter moduleweergawe die projek gebruik, want ’n gebondelde kopie binne die bronboom kan anders optree as die een wat saam met die geïnstalleerde CMake verskeep word. Lees dan die komponentlys: ’n projek wat net vir Crypto vra, het nie die SSL-biblioteek nodig nie, en een wat vir SSL vra, sal misluk as net ’n deel van die ontwikkelingspakket teenwoordig is.
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release grep -i -E 'openssl|ssl' build/CMakeCache.txt
Die eerste opdrag herkonfigureer van nuuts af, en die tweede wys die gekassiede resultate, insluitend enige wortelgids of biblioteekpad waarop die module besluit het. As die kas na ’n ou voorvoegsel van ’n vorige poging wys, verwyder die bougids en konfigureer weer eerder as om waardes met die hand te redigeer. Vervalle kasinskrywings is ’n algemene oorsaak van ’n mislukking wat ’n korrekte regstelling oorleef.
Rig die bou eng op die regte installasie
Wanneer ’n goedgekeurde OpenSSL buite die verstek soekpad woon, dokumenteer FindOpenSSL OPENSSL_ROOT_DIR as ’n wenk vir daardie spesifieke bou. Op Unix-agtige stelsels raadpleeg dit ook pkg-config, so ’n gepaste PKG_CONFIG_PATH kan help sonder om iets globaal te verander.
cmake -S . -B build -DOPENSSL_ROOT_DIR=/opt/openssl-3.2 -DCMAKE_BUILD_TYPE=Release ldd build/vpn_client | grep -i ssl
Die eerste opdrag beperk die wenk tot een bougids, en die tweede wys watter gedeelde biblioteek die resulterende binêre lêer by looptyd sal laai. ’n Bou wat teen die beoogde voorvoegsel skakel en ’n binêre lêer wat ’n ander een laai, is ’n looptydpad-probleem, nie ’n ontdekkingsprobleem nie, en dit verg ’n rpath- of laaierkonfigurasiebesluit eerder as nog ’n konfigureervlag.
Hou hierdie keuses plaaslik by die bou. Om stelselbiblioteke te vervang of globale pkg-config-lêers te redigeer om een projek te pas, is hoe ’n werkende werkskerm ’n stukkende een word. ’n Bougids wat die voorvoegsel aanteken, is reproduceerbaar; ’n masjienwye verandering is ’n ondersteuningsinsident wat op die volgende projek wag. Verwyder die bougids wanneer jy die wenk verander, sodat die kas nie die ou antwoord kan hou nie.
Weet wanneer die bron die probleem is
’n Suksesvolle konfigureerstap bewys net dat die kontroles voltooi is. Kompilasie kan steeds ’n API verwerp wat die bron verwag, en skakeling kan steeds op ’n ontbrekende simbool misluk. Hou die eerste spesifieke fout van elke stap, want die latere is gewoonlik gevolge.
OpenSSL 3 het verskeie koppelvlakke afgeskaf en verwyder wat ouer VPN-kliënte direk gebruik, so ’n bronboom uit daardie era het dalk werklike veranderinge nodig eerder as ’n nuwe insluitpad. As die instandhouers ’n huidige vrystelling ondersteun, gebruik dit. As hulle dit nie doen nie, hoort die besluit by wie die diens besit, nie by ’n soektog na ’n ouer biblioteeklêernaam nie.
Opsionele werkskermkomponente het ook hul eie vereistes. ’n Opdragreël-teiken wat skoon konfigureer, sê niks oor of die GUI-nutsgoedstel en redigeerder sal bou nie, so behandel ’n ou Qt-pakketlys as geskiedenis eerder as as ’n spesifikasie. Kontroleer die bronhersiening se eie opsies vir watter koppelvlakke by verstek geaktiveer is. Bou dan net wat jy nodig het, want elke opsionele afhanklikheid is nog ’n ontdekkingsprobleem wat staan en wag om te gebeur.