Terminal teatab rõõmsalt OpenSSL-i versiooni, ja lähtekoodi puu ebaõnnestub ikka veel teatega puuduvate krüpto-päiste kohta. Mõlemad väited on korraga tõesed, sest käitusaegne tööriist ja hulk ehituse sisendeid tarnitakse eraldi. Tehke need neli kontrolli järjest: paigaldatud paketid, tuvastuse väljund, otsinguteed ja lõpuks see, kas lähtekood ise on ühilduv. Peatuge esimesel, mis selgitab ebaõnnestumist, selle asemel et kleepida vana sõltuvuste nimekiri.

Käitusaeg ja ehituse sisendid on erinevad paketid

Distributsioon jagab OpenSSL-i käitusaja paketiks, mis pakub jagatud teeki ja käsureatööriista, ning arenduspaketiks, mis pakub päiseid, versioonita linkimisnimesid ja pkg-configi metaandmeid. Esimese paigaldamine ei paigalda teist, ja kompilaatoril on vaja ainult teist.

Kontrollige, mis tegelikult olemas on, mitte seda, mida mäletate paigaldanud olevat. Debianil põhinevates süsteemides on arenduspakett tavaliselt libssl-dev, samas kui käitusaeg on versioonitud teegipakett pluss openssl-binaar.

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

Esimene käsk näitab, milline kolmest on paigaldatud, teine teatab versiooni, mille ehitussüsteem pkg-configi kaudu leiab, ja kolmas teatab käitusaja versiooni. Puuduv rida esimeses väljundis selgitab vea kohe. Versioonide lahknevus teise ja kolmanda vahel on teine probleem ja tähendab tavaliselt, et kaks paigaldust võistlevad.

Lugege ehituse enda tuvastuse väljundit

Enamik ebaõnnestumisi on konfigureerimislogis nähtavad, kui loete seda enne kokkuvõtet. CMake'i FindOpenSSL-i moodul teatab, millise include-kataloogi ja millised teegid see leidis, ning ebaõnnestub konkreetse teatega, kui nõutav komponent puudub.

Kinnitage, millist mooduli versiooni projekt kasutab, sest lähtekoodi puu sees olev kaasapakitud koopia võib käituda teisiti kui paigaldatud CMake'iga tarnitav. Seejärel lugege komponentide nimekirja: projekt, mis küsib ainult Crypto't, ei vaja SSL-teeki, ja projekt, mis küsib SSL-i, ebaõnnestub, kui arenduspaketist on olemas ainult osa.

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

Esimene käsk konfigureerib nullist uuesti ja teine näitab vahemällu salvestatud tulemusi, sealhulgas mis tahes juurkataloogi või teegi teed, millele moodul jäi. Kui vahemälu osutab varasemast katsest pärinevale vanale prefiksile, kustutage ehituskataloog ja konfigureerige uuesti, selle asemel et väärtusi käsitsi muuta. Aegunud vahemälukirjed on sagedane põhjus ebaõnnestumiseks, mis elab üle korrektse paranduse.

Suunake ehitus õigele paigaldusele kitsalt

Kui kinnitatud OpenSSL asub väljaspool vaikimisi otsinguteed, dokumenteerib FindOpenSSL muutuja OPENSSL_ROOT_DIR vihjena just sellele ehitusele. Unixi-laadsetes süsteemides konsulteerib see ka pkg-configi, seega sobiv PKG_CONFIG_PATH võib aidata ilma midagi globaalselt muutmata.

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

Esimene käsk piirab vihje ühe ehituskataloogiga ja teine näitab, millise jagatud teegi tulemuseks olev binaar käitusajal laadib. Ehitus, mis linkib kavandatud prefiksi vastu, ja binaar, mis laadib teise, on käitusaja tee probleem, mitte tuvastuse probleem, ja see nõuab rpath'i või laadija konfiguratsiooni otsust, mitte veel üht konfiguratsioonilipu.

Hoidke need valikud ehituse suhtes kohalikena. Süsteemiteekide asendamine või globaalsete pkg-configi failide muutmine ühe projekti rahuldamiseks on viis, kuidas töötav töölaud muutub katkiseks. Prefiksi salvestav ehituskataloog on korratav; masinaülene muudatus on tugijuhtum, mis ootab järgmist projekti. Kustutage ehituskataloog vihje muutmisel, et vahemälu ei saaks vana vastust hoida.

Tea, millal probleem on lähtekoodis

Edukas konfigureerimisaste tõestab ainult seda, et kontrollid lõppesid. Kompileerimine võib ikka tagasi lükata API, mida lähtekood eeldab, ja linkimine võib ikka nurjuda puuduva sümboli tõttu. Hoidke iga etapi esimest konkreetset viga, sest hilisemad on tavaliselt tagajärjed.

OpenSSL 3 kuulutas vananenuks ja eemaldas mitu liidest, mida vanemad VPN-kliendid otse kasutavad, seega selle ajastu lähtekoodi puu võib vajada tõelisi muudatusi, mitte uut include-teed. Kui hooldajad toetavad praegust väljaannet, kasutage seda. Kui ei, kuulub otsus sellele, kes teenust omab, mitte vanema teegifaili nime otsimisele.

Valikulistel töölauakomponentidel on ka omad nõuded. Käsurea sihtmärk, mis konfigureerub puhtalt, ei ütle midagi selle kohta, kas GUI-tööriistakomplekt ja redaktor ehitatakse, seega käsitlege vana Qt paketiloendit ajaloona, mitte spetsifikatsioonina. Kontrollige lähtekoodi redaktsiooni enda valikuid, millised liidesed on vaikimisi lubatud. Seejärel ehitage ainult seda, mida vajate, sest iga valikuline sõltuvus on veel üks tuvastusprobleem, mis ootab juhtumist.

Seotud artiklid