Kāpēc openssl komanda strādā, bet VPN būvēšana neizdodas
Strādājošs openssl binārais fails neko nepasaka par galvenēm un saistīšanas bibliotēkām. Pārbaudiet izstrādes pakotni, mērķa arhitektūru un būvēšanas atklāšanas žurnālu.
Terminālis labprāt ziņo OpenSSL versiju, un pirmkoda koks joprojām neizdodas ar ziņojumu par trūkstošām kriptogrāfijas galvenēm. Abi apgalvojumi ir patiesi vienlaikus, jo izpildlaika rīks un būvēšanas ievades tiek piegādātas atsevišķi. Veiciet šīs četras pārbaudes pēc kārtas: instalētās pakotnes, atklāšanas izvade, meklēšanas ceļi un visbeidzot tas, vai pats pirmkods ir saderīgs. Apstājieties pie pirmās, kas izskaidro kļūdu, nevis ielīmējiet vecu atkarību sarakstu.
Izpildlaiks un būvēšanas ievades ir dažādas pakotnes
Distribūcija sadala OpenSSL izpildlaika pakotnē, kas nodrošina koplietojamo bibliotēku un komandrindas rīku, un izstrādes pakotnē, kas nodrošina galvenes, neversijotas saistīšanas nosaukumus un pkg-config metadatus. Pirmās instalēšana neinstalē otro, un kompilatoram ir vajadzīga tikai otrā.
Pārbaudiet, kas patiešām ir, nevis to, ko atceraties esam instalējuši. Debian atvasinātās sistēmās izstrādes pakotne parasti ir libssl-dev, bet izpildlaiks ir versijota bibliotēkas pakotne plus openssl binārais fails.
dpkg -l | grep -E 'libssl-dev|libssl3|openssl' pkg-config --modversion openssl openssl version
Pirmā komanda parāda, kura no trim ir instalēta, otrā ziņo versiju, ko būvēšanas sistēma atklās caur pkg-config, un trešā ziņo izpildlaika versiju. Trūkstoša rinda pirmajā izvadē uzreiz izskaidro kļūdu. Versiju neatbilstība starp otro un trešo ir cita problēma, un tā parasti nozīmē, ka sacenšas divas instalācijas.
Lasiet pašas būvēšanas atklāšanas izvadi
Lielākā daļa kļūdu ir redzamas konfigurēšanas žurnālā, ja to izlasāt pirms kopsavilkuma. CMake modulis FindOpenSSL ziņo, kuru include direktoriju un kuras bibliotēkas tas atrada, un tas neizdodas ar konkrētu ziņojumu, ja trūkst obligātas sastāvdaļas.
Apstipriniet, kuru moduļa versiju projekts izmanto, jo pirmkoda kokā iekļauta kopija var uzvesties citādi nekā tā, kas piegādāta kopā ar instalēto CMake. Pēc tam izlasiet sastāvdaļu sarakstu: projektam, kas pieprasa tikai Crypto, SSL bibliotēka nav vajadzīga, un tas, kas pieprasa SSL, neizdosies, ja ir tikai daļa izstrādes pakotnes.
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release grep -i -E 'openssl|ssl' build/CMakeCache.txt
Pirmā komanda pārkonfigurē no nulles, un otrā parāda kešatmiņā saglabātos rezultātus, tostarp jebkuru saknes direktoriju vai bibliotēkas ceļu, pie kura modulis apstājās. Ja kešatmiņa norāda uz vecu iepriekšējā mēģinājuma prefiksu, izdzēsiet būvēšanas direktoriju un konfigurējiet no jauna, nevis labojiet vērtības ar roku. Novecojuši kešatmiņas ieraksti ir biežs neizdošanās cēlonis, kas pārdzīvo pareizu labojumu.
Novirziet būvēšanu uz pareizo instalāciju, šauri
Kad apstiprināts OpenSSL atrodas ārpus noklusējuma meklēšanas ceļa, FindOpenSSL dokumentē OPENSSL_ROOT_DIR kā mājienu tieši šai būvēšanai. Unix tipa sistēmās tas arī konsultē pkg-config, tāpēc atbilstošs PKG_CONFIG_PATH var palīdzēt, neko globāli nemainot.
cmake -S . -B build -DOPENSSL_ROOT_DIR=/opt/openssl-3.2 -DCMAKE_BUILD_TYPE=Release ldd build/vpn_client | grep -i ssl
Pirmā komanda ierobežo mājienu ar vienu būvēšanas direktoriju, un otrā parāda, kuru koplietojamo bibliotēku iegūtais binārais fails ielādēs izpildlaikā. Būvēšana, kas saistīta ar paredzēto prefiksu, un binārais fails, kas ielādē citu, ir izpildlaika ceļa problēma, nevis atklāšanas problēma, un tai nepieciešams lēmums par rpath vai ielādētāja konfigurāciju, nevis vēl viens konfigurēšanas slēdzis.
Turiet šos lēmumus vietējus būvēšanai. Sistēmas bibliotēku aizstāšana vai globālu pkg-config failu rediģēšana viena projekta apmierināšanai ir ceļš, kā strādājoša darbvirsma kļūst salauzta. Būvēšanas direktorijs, kas reģistrē prefiksu, ir atkārtojams; izmaiņas visā mašīnā ir atbalsta incidents, kas gaida nākamo projektu. Izdzēsiet būvēšanas direktoriju, kad maināt mājienu, lai kešatmiņa nevarētu paturēt veco atbildi.
Ziniet, kad problēma ir pirmkodā
Veiksmīgs konfigurēšanas solis pierāda tikai to, ka pārbaudes ir pabeigtas. Kompilēšana joprojām var noraidīt API, ko pirmkods sagaida, un saistīšana joprojām var neizdoties trūkstoša simbola dēļ. Saglabājiet katras pakāpes pirmo konkrēto kļūdu, jo vēlākās parasti ir sekas.
OpenSSL 3 pasludināja par novecojušām un noņēma vairākas saskarnes, ko vecāki VPN klienti izmanto tieši, tāpēc tā laika pirmkoda kokam var būt vajadzīgas patiesas izmaiņas, nevis jauns include ceļš. Ja uzturētāji atbalsta pašreizējo laidienu, izmantojiet to. Ja ne, lēmums pieder tam, kam pieder pakalpojums, nevis vecāka bibliotēkas faila nosaukuma meklēšanai.
Arī izvēles darbvirsmas sastāvdaļām ir savas prasības. Komandrindas mērķis, kas konfigurējas tīri, neko nepasaka par to, vai tiks uzbūvēts GUI rīku komplekts un redaktors, tāpēc veco Qt pakotņu sarakstu uztveriet kā vēsturi, nevis kā specifikāciju. Pārbaudiet pašas pirmkoda revīzijas opcijas, kuras saskarnes ir iespējotas pēc noklusējuma. Pēc tam būvējiet tikai to, kas jums vajadzīgs, jo katra izvēles atkarība ir vēl viena atklāšanas problēma, kas gaida notikšanu.