Miért működik az openssl parancs, de a VPN összeállítása elbukik
Egy működő openssl bináris semmit sem mond a fejlécekről és a kapcsolási könyvtárakról. Ellenőrizze a fejlesztői csomagot, a célarchitektúrát és a fordítás felderítési naplóját.
A terminál készségesen jelent egy OpenSSL-verziót, a forrásfa pedig továbbra is elbukik a hiányzó kripto-fejlécekről szóló üzenettel. Mindkét állítás egyszerre igaz, mert a futásidejű eszköz és a fordítási bemenetek halmaza külön kerül kiszállításra. Végezze el ezt a négy ellenőrzést sorrendben: telepített csomagok, felderítési kimenet, keresési útvonalak, végül pedig az, hogy maga a forrás kompatibilis-e. Álljon meg az elsőnél, amely megmagyarázza a hibát, ahelyett hogy egy régi függőséglistát illesztene be.
A futásidejű környezet és a fordítási bemenetek külön csomagok
Egy disztribúció az OpenSSL-t futásidejű csomagra bontja, amely a megosztott könyvtárat és a parancssori eszközt adja, valamint fejlesztői csomagra, amely a fejléceket, a verzió nélküli kapcsolási neveket és a pkg-config metaadatokat adja. Az első telepítése nem telepíti a másodikat, és a fordítónak csak a másodikra van szüksége.
Ellenőrizze, mi van valóban jelen, ne azt, amire emlékszik, hogy telepített. A Debian-alapú rendszereken a fejlesztői csomag általában libssl-dev, míg a futásidejű a verziózott könyvtár-csomag plusz a openssl bináris.
dpkg -l | grep -E 'libssl-dev|libssl3|openssl' pkg-config --modversion openssl openssl version
Az első parancs megmutatja, melyik van telepítve a három közül, a második jelenti azt a verziót, amelyet a fordítási rendszer a pkg-config segítségével talál meg, a harmadik pedig a futásidejű verziót jelenti. Az első kimenetből hiányzó sor azonnal megmagyarázza a hibát. A második és a harmadik közötti verzióeltérés más probléma, és általában azt jelenti, hogy két telepítés verseng.
Olvassa el a fordítás saját felderítési kimenetét
A legtöbb hiba látható a konfigurációs naplóban, ha az összefoglaló előtt elolvassa. A CMake FindOpenSSL modulja jelenti, melyik include-könyvtárat és mely könyvtárakat találta meg, és konkrét üzenettel bukik el, ha egy szükséges összetevő hiányzik.
Erősítse meg, melyik modulverziót használja a projekt, mert a forrásfán belül becsomagolt másolat másképp viselkedhet, mint az a telepített CMake-hez mellékelt példány. Ezután olvassa el az összetevők listáját: a csak Crypto-t kérő projektnek nincs szüksége az SSL könyvtárra, és az SSL-t kérő projekt elbukik, ha a fejlesztői csomagnak csak egy része van jelen.
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release grep -i -E 'openssl|ssl' build/CMakeCache.txt
Az első parancs elölről konfigurál újra, a második pedig a gyorsítótárazott eredményeket mutatja, beleértve minden gyökérkönyvtárat vagy könyvtárútvonalat, amelynél a modul megállapodott. Ha a gyorsítótár egy korábbi kísérlet régi előtagjára mutat, törölje a fordítási könyvtárat és konfiguráljon újra, ahelyett hogy kézzel szerkesztené az értékeket. Az elavult gyorsítótár-bejegyzések gyakori okozói a helyes javítás után is fennmaradó hibának.
Irányítsa a fordítást a helyes telepítésre, szűken
Amikor egy jóváhagyott OpenSSL az alapértelmezett keresési útvonalon kívül él, a FindOpenSSL dokumentálja a OPENSSL_ROOT_DIR változót épp annak a fordításnak szóló tippként. Unix-szerű rendszereken a pkg-configot is megkérdezi, így egy megfelelő PKG_CONFIG_PATH segíthet anélkül, hogy bármit globálisan megváltoztatna.
cmake -S . -B build -DOPENSSL_ROOT_DIR=/opt/openssl-3.2 -DCMAKE_BUILD_TYPE=Release ldd build/vpn_client | grep -i ssl
Az első parancs egyetlen fordítási könyvtárra szűkíti a tippet, a második pedig megmutatja, melyik megosztott könyvtárat tölti be a létrejövő bináris futásidőben. Az a fordítás, amely a szándékolt előtaghoz kapcsolódik, és az a bináris, amely egy másikat tölt be, futásidejű útvonalprobléma, nem felderítési probléma, és rpath- vagy betöltő-konfigurációs döntést igényel egy újabb konfigurációs kapcsoló helyett.
Tartsa ezeket a választásokat a fordításra helyiekben. A rendszerkönyvtárak lecserélése vagy globális pkg-config fájlok szerkesztése egyetlen projekt kedvéért az az út, amelyen egy működő asztal tönkrement asztallá válik. A fordítást rögzítő könyvtár reprodukálható; egy gépszintű változtatás egy támogatási esemény, amely a következő projektre vár. Törölje a fordítási könyvtárat, amikor megváltoztatja a tippet, hogy a gyorsítótár ne tarthassa meg a régi választ.
Tudja, mikor maga a forrás a probléma
Egy sikeres konfigurálási lépés csak azt bizonyítja, hogy az ellenőrzések befejeződtek. A fordítás továbbra is elutasíthat egy API-t, amelyet a forrás vár, és a kapcsolás továbbra is elbukhat egy hiányzó szimbólum miatt. Őrizze meg minden szakasz első konkrét hibáját, mert a későbbiek általában következmények.
Az OpenSSL 3 elavultnak nyilvánított és eltávolított több olyan interfészt, amelyet a régebbi VPN kliensek közvetlenül használnak, ezért az abból a korszakból származó forrásfa valódi változtatásokat igényelhet új include-útvonal helyett. Ha a karbantartók támogatnak egy jelenlegi kiadást, használja azt. Ha nem, a döntés azt illeti, aki a szolgáltatás tulajdonosa, nem egy régebbi könyvtárfájlnév keresését.
Az opcionális asztali összetevőknek is megvannak a maguk követelményei. Egy tisztán konfigurálódó parancssori cél semmit sem mond arról, hogy a GUI eszközkészlet és a szerkesztő felépül-e, ezért a régi Qt csomaglistát történelemként kezelje, ne specifikációként. Ellenőrizze a forrásváltozat saját beállításait arról, mely interfészek vannak alapértelmezés szerint engedélyezve. Ezután csak azt fordítsa le, amire szüksége van, mert minden opcionális függőség egy újabb felderítési probléma, amely megtörténésre vár.