Zakaj ukaz openssl deluje, a gradnja VPN ne uspe
Delujoča binarna datoteka openssl ne pove ničesar o glavah in knjižnicah za povezovanje. Preverite razvojni paket, ciljno arhitekturo in dnevnik iskanja gradnje.
Terminal z veseljem poroča različico OpenSSL, drevo izvorne kode pa še vedno ne uspe s sporočilom o manjkajočih kriptografskih glavah. Obe trditvi držita hkrati, ker se orodje med izvajanjem in nabor vhodov gradnje dobavljata ločeno. Izvedite te štiri preglede po vrsti: nameščeni paketi, izhod iskanja, iskalne poti in nazadnje, ali je izvorna koda sama združljiva. Ustavite se pri prvem, ki pojasni napako, namesto da prilepite star seznam odvisnosti.
Izvedbeno okolje in vhodi gradnje so različni paketi
Distribucija razdeli OpenSSL na paket za izvajanje, ki zagotavlja deljeno knjižnico in orodje ukazne vrstice, ter razvojni paket, ki zagotavlja glave, nerazličičena imena povezovanja in metapodatke pkg-config. Namestitev prvega ne namesti drugega, prevajalnik pa potrebuje samo drugega.
Preverite, kaj je dejansko prisotno, ne česa se spomnite, da ste namestili. V sistemih, ki izhajajo iz Debiana, je razvojni paket običajno libssl-dev, medtem ko je izvajanje različnični knjižnični paket in binarna datoteka openssl.
dpkg -l | grep -E 'libssl-dev|libssl3|openssl' pkg-config --modversion openssl openssl version
Prvi ukaz pokaže, kateri od treh je nameščen, drugi poroča različico, ki jo bo sistem gradnje odkril prek pkg-config, tretji pa poroča različico izvajanja. Manjkajoča vrstica v prvem izhodu takoj pojasni napako. Neskladje različic med drugim in tretjim je druga težava in običajno pomeni, da tekmujeta dve namestitvi.
Preberite lastni izhod iskanja gradnje
Večina napak je vidna v dnevniku konfiguracije, če ga preberete pred povzetkom. Modul FindOpenSSL v CMake poroča, katero mapo include in katere knjižnice je našel, in ne uspe s posebnim sporočilom, ko manjka zahtevana komponenta.
Potrdite, katero različico modula uporablja projekt, ker se kopija, priložena v drevesu izvorne kode, lahko obnaša drugače kot tista, ki je dobavljena z nameščenim CMake. Nato preberite seznam komponent: projekt, ki zahteva samo Crypto, ne potrebuje knjižnice SSL, projekt, ki zahteva SSL, pa ne bo uspel, če je prisoten le del razvojnega paketa.
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release grep -i -E 'openssl|ssl' build/CMakeCache.txt
Prvi ukaz znova konfigurira od začetka, drugi pa pokaže predpomnjene rezultate, vključno s katero koli korensko mapo ali potjo knjižnice, na kateri se je modul ustavil. Če predpomnilnik kaže na staro predpono iz prejšnjega poskusa, izbrišite mapo gradnje in znova konfigurirajte, namesto da bi vrednosti urejali ročno. Zastareli vnosi v predpomnilniku so pogost vzrok napake, ki preživi pravilen popravek.
Usmerite gradnjo na pravo namestitev, ozko
Ko odobreni OpenSSL živi zunaj privzete iskalne poti, FindOpenSSL dokumentira OPENSSL_ROOT_DIR kot namig za to gradnjo. V sistemih, podobnih Unixu, se posvetuje tudi s pkg-config, zato lahko ustrezna PKG_CONFIG_PATH pomaga, ne da bi karkoli spremenila globalno.
cmake -S . -B build -DOPENSSL_ROOT_DIR=/opt/openssl-3.2 -DCMAKE_BUILD_TYPE=Release ldd build/vpn_client | grep -i ssl
Prvi ukaz omeji namig na eno mapo gradnje, drugi pa pokaže, katero deljeno knjižnico bo nastala binarna datoteka naložila med izvajanjem. Gradnja, povezana z želeno predpono, in binarna datoteka, ki naloži drugo, predstavljata težavo poti med izvajanjem, ne težavo iskanja, in zahteva odločitev o rpathu ali konfiguraciji nalagalnika namesto še ene konfiguracijske zastavice.
Te izbire ohranite lokalne za gradnjo. Zamenjava sistemskih knjižnic ali urejanje globalnih datotek pkg-config, da bi zadovoljili en projekt, je pot, po kateri delujoče namizje postane pokvarjeno. Mapa gradnje, ki zabeleži predpono, je ponovljiva; sprememba za celoten stroj je podporni dogodek, ki čaka na naslednji projekt. Ko spremenite namig, izbrišite mapo gradnje, da predpomnilnik ne more obdržati starega odgovora.
Vedite, kdaj je težava v izvorni kodi
Uspešen korak konfiguracije dokazuje le, da so pregledi končani. Prevajanje lahko še vedno zavrne API, ki ga izvorna koda pričakuje, povezovanje pa lahko še vedno ne uspe zaradi manjkajočega simbola. Shranite prvo konkretno napako vsake faze, ker so poznejše običajno posledice.
OpenSSL 3 je označil za zastarela in odstranil več vmesnikov, ki jih starejši odjemalci VPN uporabljajo neposredno, zato bo drevo izvorne kode iz tistega časa morda potrebovalo resnične spremembe namesto nove poti include. Če vzdrževalci podpirajo trenutno izdajo, jo uporabite. Če ne, odločitev pripada lastniku storitve, ne iskanju starejšega imena knjižnične datoteke.
Neobvezne komponente namizja imajo tudi svoje zahteve. Cilj ukazne vrstice, ki se čisto konfigurira, ne pove ničesar o tem, ali se bosta zgradila nabor orodij GUI in urejevalnik, zato star seznam paketov Qt obravnavajte kot zgodovino, ne kot specifikacijo. Preverite lastne možnosti revizije izvorne kode, kateri vmesniki so privzeto omogočeni. Nato zgradite samo tisto, kar potrebujete, ker je vsaka neobvezna odvisnost še ena težava iskanja, ki čaka, da se zgodi.