Pse komanda openssl funksionon, por ndërtimi i VPN dështon
Një binar openssl që funksionon nuk thotë asgjë për titujt dhe bibliotekat e lidhjes. Kontrolloni paketën e zhvillimit, arkitekturën e synuar dhe regjistrin e zbulimit të ndërtimit.
Terminali raporton me gëzim një version të OpenSSL, dhe pema e burimit vazhdon të dështojë me një mesazh për titujt kriptografikë që mungojnë. Të dyja deklaratat janë të vërteta njëkohësisht, sepse një mjet ekzekutimi dhe një grup hyrjesh ndërtimi shpërndahen veçmas. Kryeni këto katër kontrolle me radhë: paketat e instaluara, dalja e zbulimit, shtigjet e kërkimit dhe së fundi nëse vetë burimi është i pajtueshëm. Ndaloni te i pari që shpjegon dështimin në vend që të ngjitni një listë të vjetër varësish.
Koha e ekzekutimit dhe hyrjet e ndërtimit janë paketa të ndryshme
Një shpërndarje e ndan OpenSSL në një paketë ekzekutimi që ofron bibliotekën e përbashkët dhe mjetin e rreshtit të komandës, dhe një paketë zhvillimi që ofron titujt, emrat e lidhjes pa version dhe metadatat e pkg-config. Instalimi i së parës nuk instalon të dytën, dhe përpiluesi ka nevojë vetëm për të dytën.
Kontrolloni çfarë është vërtet e pranishme dhe jo atë që ju kujtohet se keni instaluar. Në sistemet e bazuara në Debian paketa e zhvillimit është zakonisht libssl-dev, ndërsa ekzekutimi është një paketë biblioteke me version plus binari openssl.
dpkg -l | grep -E 'libssl-dev|libssl3|openssl' pkg-config --modversion openssl openssl version
Komanda e parë tregon cila nga të tre është e instaluar, e dyta raporton versionin që sistemi i ndërtimit do të zbulojë përmes pkg-config, dhe e treta raporton versionin e ekzekutimit. Një rresht që mungon në daljen e parë e shpjegon gabimin menjëherë. Një mospërputhje versioni midis të dytës dhe të tretës është një problem tjetër, dhe zakonisht do të thotë se dy instalime konkurrojnë.
Lexoni daljen e zbulimit të vetë ndërtimit
Shumica e dështimeve janë të dukshme në regjistrin e konfigurimit nëse e lexoni përpara përmbledhjes. Moduli FindOpenSSL i CMake raporton cilin drejtor i include dhe cilat biblioteka gjeti, dhe dështon me një mesazh specifik kur mungon një komponent i detyrueshëm.
Konfirmoni cilin version moduli përdor projekti, sepse një kopje e paketuar brenda pemës së burimit mund të sillet ndryshe nga ajo që dorëzohet me CMake të instaluar. Më pas lexoni listën e komponentëve: një projekt që kërkon vetëm Crypto nuk ka nevojë për bibliotekën SSL, dhe një që kërkon SSL do të dështojë nëse është i pranishëm vetëm një pjesë e paketës së zhvillimit.
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release grep -i -E 'openssl|ssl' build/CMakeCache.txt
Komanda e parë rikonfiguron nga e para, dhe e dyta tregon rezultatet e ruajtura në cache, duke përfshirë çdo drejtor rrënjë ose shteg biblioteke ku u ndal moduli. Nëse cache-i tregon një prefiks të vjetër nga një përpjekje e mëparshme, fshini drejtorinë e ndërtimit dhe rikonfiguroni në vend që të redaktoni vlerat me dorë. Regjistrimet e vjetruara në cache janë një shkak i zakonshëm i një dështimi që i mbijeton një korrigjimi të saktë.
Drejtojeni ndërtimin te instalimi i duhur, në mënyrë të ngushtë
Kur një OpenSSL i miratuar banon jashtë shtegut standard të kërkimit, FindOpenSSL dokumenton OPENSSL_ROOT_DIR si një sugjerim për atë ndërtim të caktuar. Në sistemet e ngjashme me Unix ai konsulton edhe pkg-config, kështu që një PKG_CONFIG_PATH i përshtatshëm mund të ndihmojë pa ndryshuar asgjë globalisht.
cmake -S . -B build -DOPENSSL_ROOT_DIR=/opt/openssl-3.2 -DCMAKE_BUILD_TYPE=Release ldd build/vpn_client | grep -i ssl
Komanda e parë e kufizon sugjerimin në një drejtori ndërtimi, dhe e dyta tregon cilën bibliotekë të përbashkët do të ngarkojë binari që rezulton në kohën e ekzekutimit. Një ndërtim që lidhet me prefiksin e synuar dhe një binar që ngarkon një tjetër përbëjnë një problem shtegu ekzekutimi, jo një problem zbulimi, dhe kërkon një vendim për rpath ose konfigurimin e ngarkuesit në vend të një flamuri tjetër konfigurimi.
Mbani këto zgjedhje lokale për ndërtimin. Zëvendësimi i bibliotekave të sistemit ose redaktimi i skedarëve globalë pkg-config për të kënaqur një projekt të vetëm është mënyra se si një desktop që funksionon bëhet i prishur. Një drejtori ndërtimi që regjistron prefiksin është e riprodhueshme; një ndryshim në të gjithë makinën është një incident mbështetjeje që pret projektin e ardhshëm. Fshini drejtorinë e ndërtimit kur ndryshoni sugjerimin, në mënyrë që cache-i të mos mund të mbajë përgjigjen e vjetër.
Dijeni kur problemi është vetë burimi
Një hap konfigurimi i suksesshëm provon vetëm se kontrollet përfunduan. Përpilimi mund të refuzojë ende një API që burimi pret, dhe lidhja mund të dështojë ende për një simbol që mungon. Ruani gabimin e parë specifik nga çdo fazë, sepse ata të mëvonshëm janë zakonisht pasoja.
OpenSSL 3 shpalli të vjetruara dhe hoqi disa ndërfaqe që klientët më të vjetër të VPN përdorin drejtpërdrejt, kështu që një pemë burimi e asaj epoke mund të ketë nevojë për ndryshime reale në vend të një shtegu të re include. Nëse mirëmbajtësit mbështesin një version aktual, përdoreni atë. Nëse jo, vendimi i takon atij që zotëron shërbimin, jo një kërkimi për një emër më të vjetër skedari biblioteke.
Komponentët opsionalë të desktopit kanë gjithashtu kërkesat e tyre. Një objektiv rreshti komande që konfigurohet pastër nuk thotë asgjë nëse grupi i mjeteve GUI dhe redaktori do të ndërtohen, prandaj trajtoni një listë të vjetër paketash Qt si histori dhe jo si specifikim. Kontrolloni opsionet e vetë rishikimit të burimit për cilat ndërfaqe janë aktivizuar si parazgjedhje. Më pas ndërtoni vetëm atë që ju nevojitet, sepse çdo varësi opsionale është një problem tjetër zbulimi që pret të ndodhë.