Pääte ilmoittaa mielellään OpenSSL-version, ja lähdehakemisto epäonnistuu silti viestillä puuttuvista krypto-otsikoista. Molemmat väitteet pitävät yhtä aikaa paikkansa, koska ajonaikainen työkalu ja joukko koontiversion syötteitä toimitetaan erikseen. Käy nämä neljä tarkistusta järjestyksessä läpi: asennetut paketit, hakulokituloste, hakupolut ja lopuksi se, onko lähde itse yhteensopiva. Pysähdy ensimmäiseen tarkistukseen, joka selittää epäonnistumisen, sen sijaan että liittäisit vanhan riippuvuusluettelon.

Ajonaikainen ympäristö ja koontiversion syötteet ovat eri paketteja

Jakelu jakaa OpenSSL:n ajonaikaiseen pakettiin, joka tarjoaa jaetun kirjaston ja komentorivityökalun, sekä kehityspakettiin, joka tarjoaa otsikkotiedostot, versioimattomat linkitysnimet ja pkg-configin metatiedot. Ensimmäisen asentaminen ei asenna toista, ja kääntäjä tarvitsee vain toisen.

Tarkista, mitä todella on läsnä, älä sitä mitä muistat asentaneesi. Debian-pohjaisissa järjestelmissä kehityspaketti on yleensä libssl-dev, kun taas ajonaikainen on versioitu kirjastopaketti sekä openssl-binääri.

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

Ensimmäinen komento näyttää, mikä kolmesta on asennettu, toinen ilmoittaa version, jonka koontijärjestelmä löytää pkg-configin kautta, ja kolmas ilmoittaa ajonaikaisen version. Puuttuva rivi ensimmäisessä tulosteessa selittää virheen heti. Version poikkeama toisen ja kolmannen välillä on eri ongelma, ja se tarkoittaa yleensä, että kaksi asennusta kilpailee.

Lue koontiversion oma hakulokituloste

Useimmat epäonnistumiset näkyvät määrityslokissa, jos luet sen ennen yhteenvetoa. CMaken FindOpenSSL-moduuli ilmoittaa, minkä include-hakemiston ja mitkä kirjastot se löysi, ja se epäonnistuu tiettyyn viestiin, kun vaadittu osa puuttuu.

Varmista, mitä moduuliversiota projekti käyttää, koska lähdehakemiston sisään pakattu kopio voi käyttäytyä eri tavalla kuin asennetun CMaken mukana toimitettu. Lue sitten osaluettelo: projekti, joka pyytää vain Cryptoa, ei tarvitse SSL-kirjastoa, ja SSL:ää pyytävä epäonnistuu, jos kehityspaketista on läsnä vain osa.

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

Ensimmäinen komento määrittää alusta asti uudelleen, ja toinen näyttää välimuistiin tallennetut tulokset, mukaan lukien juurihakemisto tai kirjastopolku, johon moduuli päätyi. Jos välimuisti osoittaa aiemmasta yrityksestä jääneeseen vanhaan etuliitteeseen, poista koontihakemisto ja määritä uudelleen sen sijaan että muokkaisit arvoja käsin. Vanhentuneet välimuistimerkinnät ovat yleinen syy epäonnistumiselle, joka säilyy oikean korjauksen jälkeen.

Suuntaa koontiversio oikeaan asennukseen kapeasti

Kun hyväksytty OpenSSL sijaitsee oletushakupolun ulkopuolella, FindOpenSSL dokumentoi muuttujan OPENSSL_ROOT_DIR vihjeeksi juuri tälle koontiversiolle. Unix-tyyppisissä järjestelmissä se kysyy myös pkg-configia, joten sopiva PKG_CONFIG_PATH voi auttaa muuttamatta mitään maailmanlaajuisesti.

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

Ensimmäinen komento rajaa vihjeen yhteen koontihakemistoon, ja toinen näyttää, minkä jaetun kirjaston tuloksena oleva binääri lataa ajon aikana. Koontiversio, joka linkittyy aiottuun etuliitteeseen, ja binääri, joka lataa toisen, on ajonaikaisen polun ongelma, ei hakujen ongelma, ja se vaatii rpathia tai lataajan määritystä koskevan päätöksen eikä uutta määritysvalitsinta.

Pidä nämä valinnat paikallisina koontiversiossa. Järjestelmäkirjastojen korvaaminen tai globaalien pkg-config-tiedostojen muokkaaminen yhden projektin miellyttämiseksi on tie siihen, että toimivasta työpöydästä tulee rikki. Etuliitteen kirjaava koontihakemisto on toistettava; koneenlaajuinen muutos on tukitapaus, joka odottaa seuraavaa projektia. Poista koontihakemisto, kun muutat vihjettä, jotta välimuisti ei voi säilyttää vanhaa vastausta.

Tiedä, milloin ongelma on lähteessä

Onnistunut määritysvaihe todistaa vain, että tarkistukset ovat valmistuneet. Kääntäminen voi silti hylätä API:n, jota lähde odottaa, ja linkitys voi silti epäonnistua puuttuvan symbolin vuoksi. Tallenna kunkin vaiheen ensimmäinen yksilöity virhe, koska myöhemmät ovat yleensä seurauksia.

OpenSSL 3 merkitsi vanhentuneiksi ja poisti useita rajapintoja, joita vanhemmat VPN-asiakkaat käyttävät suoraan, joten tuon aikakauden lähdehakemisto voi vaatia todellisia muutoksia uuden include-polun sijaan. Jos ylläpitäjät tukevat nykyistä julkaisua, käytä sitä. Jos eivät, päätös kuuluu palvelun omistajalle, ei vanhemman kirjastotiedoston nimen etsimiselle.

Valinnaisilla työpöytäosilla on myös omat vaatimuksensa. Siististi määrittyvä komentorivikohde ei kerro mitään siitä, kääntyvätkö GUI-työkalupakki ja editori, joten kohtele vanhaa Qt-pakettiluetteloa historiana äläkä määritelmänä. Tarkista lähdeversion omista valinnoista, mitkä rajapinnat ovat oletuksena käytössä. Rakenna sitten vain se, mitä tarvitset, koska jokainen valinnainen riippuvuus on uusi hakujen ongelma, joka odottaa tapahtumistaan.

Aiheeseen liittyvät artikkelit