Терминал OpenSSL нұсқасын қуана хабарлайды, ал бастапқы код ағашы жетіспейтін крипто тақырыпшалары туралы хабарламамен әлі де сәтсіз аяқталады. Екі тұжырым да бір уақытта дұрыс, өйткені орындалу уақытының құралы мен құрастыру кірістерінің жиыны бөлек жеткізіледі. Осы төрт тексеруді ретімен орындаңыз: орнатылған пакеттер, табу шығысы, іздеу жолдары, содан кейін бастапқы кодтың өзі үйлесімді ме. Ескі тәуелділіктер тізімін қоюдың орнына сәтсіздікті түсіндіретін бірінші тексеруде тоқтаңыз.

Орындалу уақыты мен құрастыру кірістері — әртүрлі пакеттер

Дистрибутив OpenSSL-ді ортақ кітапхана мен пәрмен жолы құралын беретін орындалу пакетіне және тақырыпшаларды, нұсқасыз байланыс атауларын және pkg-config метадеректерін беретін әзірлеу пакетіне бөледі. Біріншісін орнату екіншісін орнатпайды, ал компиляторға тек екіншісі қажет.

Орнатқаныңызды есіңізде қалғанның орнына шын мәнінде бар нәрсені тексеріңіз. Debian негізіндегі жүйелерде әзірлеу пакеті әдетте libssl-dev, ал орындалу уақыты нұсқаланған кітапхана пакеті және openssl бинарлығы.

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

Бірінші пәрмен үшеудің қайсысы орнатылғанын көрсетеді, екіншісі құрастыру жүйесі pkg-config арқылы табатын нұсқаны хабарлайды, үшіншісі орындалу нұсқасын хабарлайды. Бірінші шығыста жетіспейтін жол қатені бірден түсіндіреді. Екінші мен үшінші арасындағы нұсқа сәйкессіздігі — басқа мәселе және әдетте екі орнатудың бәсекелесіп жатқанын білдіреді.

Құрастырудың өз табу шығысын оқыңыз

Көптеген сәтсіздіктер конфигурация журналында көрінеді, егер оны қорытындыдан бұрын оқысаңыз. CMake-тің FindOpenSSL модулі қай include каталогы мен қай кітапханаларды тапқанын хабарлайды және міндетті құрауыш жоқ болса, нақты хабарламамен сәтсіз аяқталады.

Жоба қай модуль нұсқасын қолданатынын растаңыз, өйткені бастапқы код ағашының ішінде бумаланған көшірме орнатылған CMake-пен келетін көшірмеден өзгеше әрекет етуі мүмкін. Содан кейін құрауыштар тізімін оқыңыз: тек Crypto сұрайтын жобаға SSL кітапханасы қажет емес, ал SSL сұрайтын жоба әзірлеу пакетінің тек бір бөлігі болса, сәтсіз аяқталады.

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

Бірінші пәрмен нөлден қайта конфигурациялайды, екіншісі модуль тоқтаған кез келген түбірлік каталогты немесе кітапхана жолын қоса, кэштелген нәтижелерді көрсетеді. Егер кэш бұрынғы әрекеттің ескі префиксіне нұсқаса, мәндерді қолмен өңдеудің орнына құрастыру каталогын жойып, қайта конфигурациялаңыз. Ескірген кэш жазбалары дұрыс түзетуден кейін де қалатын сәтсіздіктің жиі себебі.

Құрастыруды дұрыс орнатуға тар шеңберде бағыттаңыз

Бекітілген OpenSSL әдепкі іздеу жолынан тыс болса, FindOpenSSL OPENSSL_ROOT_DIR айнымалысын дәл сол құрастыру үшін нұсқау ретінде құжаттайды. Unix тәріздес жүйелерде ол pkg-config-ке де жүгінеді, сондықтан қолайлы PKG_CONFIG_PATH ештеңені жаһандық өзгертпей көмектесе алады.

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

Бірінші пәрмен нұсқауды бір құрастыру каталогымен шектейді, екіншісі алынған бинарлықтың орындалу кезінде қай ортақ кітапхананы жүктейтінін көрсетеді. Көзделген префикске байланысатын құрастыру мен басқасын жүктейтін бинарлық — орындалу жолының мәселесі, табу мәселесі емес, және ол тағы бір конфигурация жалаушасын емес, rpath немесе жүктеуші конфигурациясы туралы шешімді қажет етеді.

Бұл таңдауларды құрастыру ішінде жергілікті ұстаңыз. Бір жобаны қанағаттандыру үшін жүйелік кітапханаларды ауыстыру немесе жаһандық pkg-config файлдарын өңдеу — жұмыс істейтін жұмыс үстелін бұзылғанға айналдыратын жол. Префиксті жазатын құрастыру каталогы қайталанымды; бүкіл машина бойынша өзгеріс — келесі жобаны күтіп тұрған қолдау оқиғасы. Нұсқауды өзгерткенде құрастыру каталогын жойыңыз, кэш ескі жауапты сақтай алмауы үшін.

Мәселе бастапқы кодта екенін біліңіз

Сәтті конфигурация қадамы тексерулердің аяқталғанын ғана дәлелдейді. Компиляция бастапқы код күтетін API-ді әлі де қабылдамауы мүмкін, ал байланыс жетіспейтін таңбаға байланысты әлі де сәтсіз аяқталуы мүмкін. Әр кезеңнің бірінші нақты қатесін сақтаңыз, өйткені кейінгілері әдетте салдар.

OpenSSL 3 ескі VPN клиенттері тікелей қолданатын бірнеше интерфейсті ескірген деп жариялап, жойды, сондықтан сол дәуірдегі бастапқы код ағашына жаңа include жолынан гөрі нақты өзгерістер қажет болуы мүмкін. Егер қолдаушылар ағымдағы шығарылымды қолдаса, соны пайдаланыңыз. Егер жоқ болса, шешім қызметке иелік ететін адамдікі, ескі кітапхана файлының атауын іздеу емес.

Міндетті емес жұмыс үстелі құрауыштарының да өз талаптары бар. Таза конфигурацияланатын пәрмен жолы мақсаты GUI құралдар жиынтығы мен редактор құрастырылатыны туралы ештеңе айтпайды, сондықтан ескі Qt пакеттер тізімін ерекшелік емес, тарих ретінде қараңыз. Қай интерфейстер әдепкі бойынша қосылғанын бастапқы код ревизиясының өз параметрлерінен тексеріңіз. Содан кейін тек қажет нәрсені құрастырыңыз, өйткені әрбір міндетті емес тәуелділік — болуын күтіп тұрған тағы бір табу мәселесі.

Қатысты мақалалар