Mengapa perintah openssl berfungsi tetapi binaan VPN gagal
Binari openssl yang berfungsi tidak memberitahu apa-apa tentang pengepala dan pustaka pautan. Periksa pakej pembangunan, seni bina sasaran dan log penemuan binaan.
Terminal dengan gembira melaporkan versi OpenSSL, dan pokok sumber masih gagal dengan mesej tentang pengepala kripto yang hilang. Kedua-dua kenyataan benar serentak, kerana alat masa jalan dan satu set input binaan dihantar secara berasingan. Lakukan keempat-empat pemeriksaan ini mengikut urutan: pakej terpasang, output penemuan, laluan carian, dan kemudian sama ada sumber itu sendiri serasi. Berhenti pada pemeriksaan pertama yang menjelaskan kegagalan dan bukannya menampal senarai kebergantungan lama.
Masa jalan dan input binaan ialah pakej berbeza
Sebuah pengedaran membahagikan OpenSSL kepada pakej masa jalan yang menyediakan pustaka dikongsi dan alat baris arahan, serta pakej pembangunan yang menyediakan pengepala, nama pautan tanpa versi dan metadata pkg-config. Memasang yang pertama tidak memasang yang kedua, dan pengkompil hanya memerlukan yang kedua.
Periksa apa yang benar-benar ada dan bukannya apa yang anda ingat telah dipasang. Pada sistem berasaskan Debian pakej pembangunan biasanya libssl-dev, manakala masa jalan ialah pakej pustaka berversi serta binari openssl.
dpkg -l | grep -E 'libssl-dev|libssl3|openssl' pkg-config --modversion openssl openssl version
Perintah pertama menunjukkan yang mana antara tiga dipasang, yang kedua melaporkan versi yang akan ditemui sistem binaan melalui pkg-config, dan yang ketiga melaporkan versi masa jalan. Baris yang hilang dalam output pertama menjelaskan ralat dengan segera. Percanggahan versi antara yang kedua dan ketiga ialah masalah lain, dan biasanya bermaksud dua pemasangan bersaing.
Baca output penemuan binaan itu sendiri
Kebanyakan kegagalan kelihatan dalam log konfigurasi jika anda membacanya sebelum ringkasan. Modul FindOpenSSL CMake melaporkan direktori include dan pustaka yang ditemuinya, dan ia gagal dengan mesej khusus apabila komponen yang diperlukan tiada.
Sahkan versi modul mana yang digunakan projek, kerana salinan yang dibundel dalam pokok sumber mungkin berkelakuan berbeza daripada yang dihantar bersama CMake terpasang. Kemudian baca senarai komponen: projek yang hanya meminta Crypto tidak memerlukan pustaka SSL, dan yang meminta SSL akan gagal jika hanya sebahagian pakej pembangunan hadir.
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release grep -i -E 'openssl|ssl' build/CMakeCache.txt
Perintah pertama mengkonfigurasi semula dari awal, dan yang kedua menunjukkan hasil yang di-cache, termasuk mana-mana direktori akar atau laluan pustaka yang dipilih modul. Jika cache menunjuk ke awalan lama daripada percubaan sebelumnya, padam direktori binaan dan konfigurasi semula dan bukannya mengedit nilai secara manual. Entri cache yang lapuk ialah punca biasa kegagalan yang kekal selepas pembetulan yang betul.
Arahkan binaan ke pemasangan yang betul, secara sempit
Apabila OpenSSL yang diluluskan berada di luar laluan carian lalai, FindOpenSSL mendokumenkan OPENSSL_ROOT_DIR sebagai petunjuk untuk binaan tertentu itu. Pada sistem seperti Unix ia juga merujuk pkg-config, jadi PKG_CONFIG_PATH yang sesuai boleh membantu tanpa mengubah apa-apa secara global.
cmake -S . -B build -DOPENSSL_ROOT_DIR=/opt/openssl-3.2 -DCMAKE_BUILD_TYPE=Release ldd build/vpn_client | grep -i ssl
Perintah pertama mengehadkan petunjuk kepada satu direktori binaan, dan yang kedua menunjukkan pustaka dikongsi mana yang akan dimuatkan binari yang terhasil semasa masa jalan. Binaan yang berpaut pada awalan yang dimaksudkan dan binari yang memuatkan yang lain ialah masalah laluan masa jalan, bukan masalah penemuan, dan ia memerlukan keputusan tentang rpath atau konfigurasi pemuat dan bukannya bendera konfigurasi lain.
Kekalkan pilihan ini setempat pada binaan. Menggantikan pustaka sistem atau menyunting fail pkg-config global untuk memuaskan satu projek ialah cara desktop yang berfungsi menjadi rosak. Direktori binaan yang merekodkan awalan boleh dihasilkan semula; perubahan seluruh mesin ialah insiden sokongan yang menunggu projek seterusnya. Padam direktori binaan apabila anda menukar petunjuk, supaya cache tidak dapat menyimpan jawapan lama.
Ketahui bila sumbernya yang bermasalah
Langkah konfigurasi yang berjaya hanya membuktikan pemeriksaan telah selesai. Pengkompilan masih boleh menolak API yang dijangka sumber, dan pautan masih boleh gagal kerana simbol yang hilang. Simpan ralat khusus pertama daripada setiap peringkat, kerana yang kemudian biasanya akibat.
OpenSSL 3 telah mengisytiharkan lapuk dan mengalih keluar beberapa antara muka yang digunakan klien VPN lama secara langsung, jadi pokok sumber dari zaman itu mungkin memerlukan perubahan sebenar dan bukannya laluan include baharu. Jika penyelenggara menyokong keluaran semasa, gunakannya. Jika tidak, keputusan itu milik pemilik perkhidmatan, bukan pencarian nama fail pustaka yang lebih lama.
Komponen desktop pilihan juga mempunyai keperluan sendiri. Sasaran baris arahan yang dikonfigurasi dengan bersih tidak memberitahu sama ada kit alat GUI dan editor akan dibina, jadi anggap senarai pakej Qt lama sebagai sejarah dan bukan spesifikasi. Periksa pilihan semakan sumber itu sendiri untuk antara muka mana yang didayakan secara lalai. Kemudian bina hanya apa yang anda perlukan, kerana setiap kebergantungan pilihan ialah satu lagi masalah penemuan yang menunggu berlaku.