openssl komutu çalışırken VPN derlemesi neden başarısız oluyor
Çalışan bir openssl ikilisi başlıklar ve bağlantı kitaplıkları hakkında hiçbir şey söylemez. Geliştirme paketini, hedef mimariyi ve derlemenin bulma günlüğünü kontrol edin.
Uçbirim memnuniyetle bir OpenSSL sürümü bildirir, kaynak ağacı ise eksik şifreleme başlıklarıyla ilgili bir iletiyle hâlâ başarısız olur. Her iki ifade aynı anda doğrudur, çünkü çalışma zamanı aracı ile derleme girdileri kümesi ayrı ayrı dağıtılır. Şu dört denetimi sırayla yapın: kurulu paketler, bulma çıktısı, arama yolları ve son olarak kaynağın kendisinin uyumlu olup olmadığı. Eski bir bağımlılık listesi yapıştırmak yerine hatayı açıklayan ilk denetimde durun.
Çalışma zamanı ve derleme girdileri farklı paketlerdir
Bir dağıtım OpenSSL'i, paylaşılan kitaplığı ve komut satırı aracını sağlayan bir çalışma zamanı paketine ve başlıkları, sürümsüz bağlayıcı adlarını ve pkg-config üstverisini sağlayan bir geliştirme paketine böler. Birincisini kurmak ikincisini kurmaz ve derleyicinin yalnızca ikincisine ihtiyacı vardır.
Kurduğunuzu hatırladığınız şey yerine gerçekte ne olduğunu denetleyin. Debian türevi sistemlerde geliştirme paketi genellikle libssl-dev iken çalışma zamanı sürümlü bir kitaplık paketi ve openssl ikilisidir.
dpkg -l | grep -E 'libssl-dev|libssl3|openssl' pkg-config --modversion openssl openssl version
İlk komut üçünden hangisinin kurulu olduğunu gösterir, ikincisi derleme sisteminin pkg-config üzerinden bulacağı sürümü bildirir, üçüncüsü çalışma zamanı sürümünü bildirir. İlk çıktıdaki eksik satır hatayı hemen açıklar. İkinci ile üçüncü arasındaki sürüm uyuşmazlığı başka bir sorundur ve genellikle iki kurulumun yarıştığı anlamına gelir.
Derlemenin kendi bulma çıktısını okuyun
Özetten önce okursanız hataların çoğu yapılandırma günlüğünde görünür. CMake'in FindOpenSSL modülü hangi include dizinini ve hangi kitaplıkları bulduğunu bildirir ve gerekli bir bileşen yoksa belirli bir iletiyle başarısız olur.
Projenin hangi modül sürümünü kullandığını doğrulayın, çünkü kaynak ağacının içine paketlenmiş bir kopya kurulu CMake ile gelen kopyadan farklı davranabilir. Ardından bileşen listesini okuyun: yalnızca Crypto isteyen bir projenin SSL kitaplığına ihtiyacı yoktur ve SSL isteyen biri geliştirme paketinin yalnızca bir bölümü varsa başarısız olur.
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release grep -i -E 'openssl|ssl' build/CMakeCache.txt
İlk komut sıfırdan yeniden yapılandırır, ikincisi modülün üzerinde karar kıldığı kök dizin veya kitaplık yolu dahil önbelleğe alınmış sonuçları gösterir. Önbellek önceki bir denemeden kalan eski bir öneki gösteriyorsa değerleri elle düzenlemek yerine derleme dizinini silin ve yeniden yapılandırın. Eski önbellek girdileri, doğru bir düzeltmeden sonra da süren bir başarısızlığın yaygın nedenidir.
Derlemeyi doğru kuruluma dar biçimde yönlendirin
Onaylanmış bir OpenSSL varsayılan arama yolunun dışında yaşıyorsa FindOpenSSL, OPENSSL_ROOT_DIR değişkenini tam o derleme için ipucu olarak belgeler. Unix benzeri sistemlerde pkg-config'e de danışır, bu nedenle uygun bir PKG_CONFIG_PATH hiçbir şeyi genel olarak değiştirmeden yardımcı olabilir.
cmake -S . -B build -DOPENSSL_ROOT_DIR=/opt/openssl-3.2 -DCMAKE_BUILD_TYPE=Release ldd build/vpn_client | grep -i ssl
İlk komut ipucunu tek bir derleme diziniyle sınırlar, ikincisi ortaya çıkan ikilinin çalışma zamanında hangi paylaşılan kitaplığı yükleyeceğini gösterir. Amaçlanan öneke bağlanan bir derleme ile başka birini yükleyen bir ikili, bir çalışma zamanı yolu sorunudur, bulma sorunu değildir ve başka bir yapılandırma bayrağı yerine rpath ya da yükleyici yapılandırması kararı gerektirir.
Bu seçimleri derlemenin içinde yerel tutun. Bir projeyi memnun etmek için sistem kitaplıklarını değiştirmek veya genel pkg-config dosyalarını düzenlemek, çalışan bir masaüstünün bozulmuş bir masaüstüne dönüşme yoludur. Öneki kaydeden bir derleme dizini yeniden üretilebilir; makine genelinde bir değişiklik ise sıradaki projeyi bekleyen bir destek olayıdır. İpucunu değiştirdiğinizde derleme dizinini silin, böylece önbellek eski yanıtı tutamaz.
Sorunun kaynakta olduğunu bilin
Başarılı bir yapılandırma adımı yalnızca denetimlerin tamamlandığını kanıtlar. Derleme, kaynağın beklediği bir API'yi yine reddedebilir ve bağlama eksik bir simge yüzünden yine başarısız olabilir. Her aşamanın ilk belirli hatasını saklayın, çünkü sonrakiler genellikle sonuçlardır.
OpenSSL 3, eski VPN istemcilerinin doğrudan kullandığı birkaç arayüzü kullanımdan kaldırdı ve kaldırdı; bu nedenle o döneme ait bir kaynak ağacı yeni bir include yolu yerine gerçek değişiklikler gerektirebilir. Bakımcılar güncel bir sürümü destekliyorsa onu kullanın. Desteklemiyorlarsa karar hizmetin sahibine aittir, daha eski bir kitaplık dosyası adı arayışına değil.
İsteğe bağlı masaüstü bileşenlerinin de kendi gereksinimleri vardır. Temiz yapılandırılan bir komut satırı hedefi, GUI araç takımının ve düzenleyicinin derlenip derlenmeyeceği hakkında hiçbir şey söylemez, bu nedenle eski bir Qt paket listesini şartname değil tarih olarak görün. Hangi arayüzlerin varsayılan olarak etkin olduğunu kaynak revizyonunun kendi seçeneklerinden denetleyin. Ardından yalnızca ihtiyacınız olanı derleyin, çünkü her isteğe bağlı bağımlılık gerçekleşmeyi bekleyen bir başka bulma sorunudur.