Terminal rahatlıqla OpenSSL versiyasını göstərir, lakin mənbə ağacı hələ də itkin kripto başlıqları barədə mesajla uğursuz olur. Hər iki ifadə eyni anda doğrudur, çünki işləmə mühiti aləti və quruluş girişləri ayrıca göndərilir. Bu dörd yoxlamanı sıra ilə aparın: quraşdırılmış paketlər, kəşf çıxışı, axtarış yolları və sonra mənbənin özünün uyğun olub-olmaması. Köhnə asılılıq siyahısını yapışdırmaq əvəzinə, uğursuzluğu izah edən ilk yoxlamada dayanın.

İşləmə mühiti və quruluş girişləri fərqli paketlərdir

Distributiv OpenSSL-i iki yerə bölür: paylaşılan kitabxananı və əmr sətri alətini verən işləmə mühiti paketi, və başlıqları, versiyasız keçid adlarını və pkg-config metadatasını verən inkişaf paketi. Birincini quraşdırmaq ikincini quraşdırmır, kompilyatora isə yalnız ikincisi lazımdır.

Xatırladığınız quraşdırmaya deyil, həqiqətən mövcud olana baxın. Debian əsaslı sistemlərdə inkişaf paketi adətən libssl-dev olur, işləmə mühiti isə versiyalı kitabxana paketi üstəgəl openssl binarlığıdır.

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

Birinci əmr üçündən hansının quraşdırıldığını göstərir, ikinci quruluş sisteminin pkg-config vasitəsilə kəşf edəcəyi versiyanı bildirir, üçüncü isə işləmə mühitinin versiyasını göstərir. Birinci çıxışda itkin sətir xətanı dərhal izah edir. İkinci və üçüncü arasındakı versiya uyğunsuzluğu başqa problemdir və adətən iki quraşdırmanın rəqabət apardığını bildirir.

Quruluşun öz kəşf çıxışını oxuyun

Əksər uğursuzluqlar konfiqurasiya jurnalında görünür, əgər onu xülasədən əvvəl oxusaq. CMake-in FindOpenSSL modulu hansı daxiletmə qovluğunu və kitabxanaları tapdığını bildirir və tələb olunan komponent yoxdursa, konkret mesajla uğursuz olur.

Layihənin hansı modul versiyasını istifadə etdiyini təsdiqləyin, çünki mənbə ağacının içindəki daxili surət quraşdırılmış CMake ilə gələn surətdən fərqli davrana bilər. Sonra komponent siyahısını oxuyun: yalnız Crypto tələb edən layihəyə SSL kitabxanası lazım deyil, SSL tələb edən layihə isə inkişaf paketinin yalnız bir hissəsi varsa uğursuz olacaq.

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

Birinci əmr sıfırdan yenidən konfiqurasiya edir, ikinci keşlənmiş nəticələri göstərir, o cümlədən modulun seçdiyi istənilən kök qovluğu və ya kitabxana yolunu. Əgər keş əvvəlki cəhddən qalan köhnə prefiksə işarə edirsə, dəyərləri əl ilə redaktə etmək əvəzinə quruluş qovluğunu silin və yenidən konfiqurasiya edin. Köhnə keş qeydləri düzgün düzəlişdən sonra da davam edən uğursuzluğun geniş yayılmış səbəbidir.

Quruluşu düzgün quraşdırmaya dar şəkildə yönəldin

Təsdiqlənmiş OpenSSL defolt axtarış yolundan kənarda olanda, FindOpenSSL OPENSSL_ROOT_DIR dəyişənini məhz həmin quruluş üçün işarə kimi sənədləşdirir. Unix bənzəri sistemlərdə pkg-config-ə də baxır, ona görə uyğun PKG_CONFIG_PATH qlobal heç nəyi dəyişmədən kömək edə bilər.

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

Birinci əmr işarəni bir quruluş qovluğuna məhdudlaşdırır, ikinci isə yaranan binarlığın işləmə vaxtı hansı paylaşılan kitabxananı yükləyəcəyini göstərir. Nəzərdə tutulan prefiksə keçid edən quruluş və fərqli birini yükləyən binarlıq işləmə vaxtı yolu problemidir, kəşf problemi deyil, və başqa konfiqurasiya bayrağı deyil, rpath və ya yükləyici konfiqurasiyası qərarı tələb edir.

Bu seçimləri quruluşun içində saxlayın. Bir layihəni razı salmaq üçün sistem kitabxanalarını dəyişmək və ya qlobal pkg-config fayllarını redaktə etmək işlək masaüstünü sınıq masaüstünə çevirməyin yoludur. Prefiksi qeyd edən quruluş qovluğu təkrar istehsal olunandır; maşın boyu dəyişiklik isə növbəti layihəni gözləyən dəstək hadisəsidir. İşarəni dəyişəndə quruluş qovluğunu silin ki, keş köhnə cavabı saxlaya bilməsin.

Mənbənin problem olduğunu nə vaxt bilməli

Uğurlu konfiqurasiya addımı yalnız yoxlamaların tamamlandığını sübut edir. Kompilyasiya hələ də mənbənin gözlədiyi API-ni rədd edə bilər, keçid isə itkin simvol üzündən uğursuz ola bilər. Hər mərhələdən ilk konkret xətanı saxlayın, çünki sonrakılar adətən nəticələrdir.

OpenSSL 3 köhnə VPN müştərilərinin birbaşa istifadə etdiyi bir neçə interfeysi köhnəltdi və sildi, ona görə o dövrün mənbə ağacı yeni daxiletmə yolu deyil, real dəyişikliklər tələb edə bilər. Əgər baxıcılar cari buraxılışı dəstəkləyirsə, onu istifadə edin. Dəstəkləmirlərsə, qərar xidmətin sahibinə aiddir, köhnə kitabxana fayl adının axtarışına deyil.

Könüllü masaüstü komponentlərinin də öz tələbləri var. Təmiz konfiqurasiya olunan əmr sətri hədəfi GUI alət dəstininin və redaktorun qurulub-qurulmayacağı barədə heç nə demir, ona görə köhnə Qt paket siyahısına spesifikasiya kimi deyil, tarix kimi baxın. Mənbə reviziyasının öz seçimlərində hansı interfeyslərin defolt olaraq aktiv olduğunu yoxlayın. Sonra yalnız lazım olanı qurun, çünki hər könüllü asılılıq baş verəcəyini gözləyən daha bir kəşf problemidir.

Əlaqəli məqalələr