De terminal meldt grif in OpenSSL-ferzje, en de boarnebeam mislearret noch altyd mei in berjocht oer ûntbrekkende krypto-headers. Beide bewearings binne tagelyk wier, om't in runtime-ark en in set boup-ynfier apart levere wurde. Wurkje dizze fjouwer kontrôles yn folchoarder ôf: ynstalleare pakketten, ûntdekkingsútfier, sykpaaden en dan oft de boarne sels kompatibel is. Stop by de earste dy't de mislearring ferklearret, ynstee fan in âlde ôfhinklikenslist te plakken.

Runtime en boup-ynfier binne ferskillende pakketten

In distribúsje splitst OpenSSL yn in runtime-pakket dat de dielde bibleteek en it kommandorigel-ark leveret, en in ûntwikkelpakket dat headers, ferzjeleaze keppelnammen en pkg-config-metadata leveret. It earste ynstallearje ynstallearret it twadde net, en de kompilearder hat allinnich it twadde nedich.

Kontrolearje wat der eins is, ynstee fan wat jo jo ynstallearre hawwe te ûnthâlden. Op Debian-basearre systemen is it ûntwikkelpakket meastentiids libssl-dev, wylst de runtime in ferzje-bibleteekpakket plus de openssl-binêre is.

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

It earste kommando lit sjen hokker fan de trije ynstalleare is, it twadde meldt de ferzje dy't it bousysteem fia pkg-config ûntdekke sil, en it tredde meldt de runtime-ferzje. In ûntbrekkende rigel yn 'e earste útfier ferklearret de flater daliks. In ferzje-ferskil tusken it twadde en tredde is in oar probleem, en it betsjut meastentiids dat twa ynstallaasjes konkurrearje.

Lês de eigen ûntdekkingsútfier fan de bou

De measte mislearrings binne yn it konfigurearringsloch te sjen as jo it foar de gearfetting lêze. De FindOpenSSL-module fan CMake meldt hokker include-map en hokker bibleteken it fûn, en it mislearret mei in spesifyk berjocht as in fereaske komponint ûntbrekt.

Befêstigje hokker moduleferzje it projekt brûkt, om't in bondelde kopy yn 'e boarnebeam oars gedrage kin as dy't mei de ynstalleare CMake levere wurdt. Lês dan de komponintenlist: in projekt dat allinnich Crypto freget hat de SSL-bibleteek net nedich, en ien dat SSL freget sil mislearje as mar in part fan it ûntwikkelpakket oanwêzich is.

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

It earste kommando konfigurearret fan nul ôf, en it twadde lit de cachede resultaten sjen, ynklusyf elke woartelmap of bibleteekpaad dêr't de module op einige. As de cache nei in âld foarheaksel fan in eardere poging wiist, wiskje dan de boup-map en konfigurearje opnij ynstee fan wearden hânmjittich te bewurkjen. Ferâldere cache-ynfieringen binne in faak foarkommende oarsaak fan in mislearring dy't in korrekte reparaasje oerlibbet.

Rjochtsje de bou smel op de juste ynstallaasje

As in goedkarde OpenSSL bûten it standert sykpaad wennet, dokumintearret FindOpenSSL OPENSSL_ROOT_DIR as in oanwizing foar krekt dy bou. Op Unix-lykense systemen rieplachtet it ek pkg-config, dat in passend PKG_CONFIG_PATH kin helpe sûnder eat globaal te feroarjen.

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

It earste kommando beheint de oanwizing ta ien boup-map, en it twadde lit sjen hokker dielde bibleteek de resultearjende binêre by runtime lade sil. In bou dy't tsjin it bedoelde foarheaksel keppelt en in binêre dy't in oare lade is in runtime-paadprobleem, gjin ûntdekkingsprobleem, en it freget in beslút oer rpath of laderkonfiguraasje ynstee fan noch in konfigurearringsflagge.

Hâld dizze karren lokaal by de bou. Systeembibleteken ferfange of globale pkg-config-bestannen bewurkje om ien projekt tefreden te stellen is de manier dêr't in wurkjend buroblêd in stikken ien fan wurdt. In boup-map dy't it foarheaksel fêstleit is reproduzierber; in masinebrede feroaring is in stypyngsfall dat op it folgjende projekt wachtet. Wiskje de boup-map as jo de oanwizing feroarje, sadat de cache it âlde antwurd net hâlde kin.

Wit wannear't de boarne it probleem is

In slagge konfigurearringstap bewissiget allinnich dat de kontrôles klear binne. Kompilaasje kin noch altyd in API wegerje dy't de boarne ferwachtet, en keppeling kin noch altyd mislearje op in ûntbrekkend symboal. Bewarje de earste spesifike flater fan elke etappe, om't de lettere meastentiids gefolgen binne.

OpenSSL 3 ferklearre ferskate ynterfaces ferâldere en ferwidere se, dy't âldere VPN-klanten direkt brûke, dat in boarnebeam út dy tiid kin echte feroarings nedich hawwe ynstee fan in nij include-paad. As de ûnderhâlders in aktuele útjefte stypje, brûk dy dan. As se dat net dogge, heart it beslút ta wa't de tsjinst besit, net ta in syktocht nei in âlder bibleteekbestânsnamme.

Opsjonele buroblêdkomponinten hawwe ek har eigen easken. In kommandorigel-doel dat skjin konfigurearret seit neat oer oft de GUI-arkkit en de bewurker bouwe sille, dat behannelje in âlde Qt-pakkettenlist as skiednis en net as spesifikaasje. Kontrolearje de eigen opsjes fan 'e boarnerevzy foar hokker ynterfaces standert oan steane. Bou dan allinnich wat jo nedich hawwe, om't elke opsjonele ôfhinklikens wer in ûntdekkingsprobleem is dat wachtet om te barren.

Relatearre artikelen