¿Por qué rust no puede compilar el comando para openssl-sys v0.9.60 incluso después de la instalación local?

Jan 04 2021

Me enfrento al error failed to run custom build command for openssl-sys v0.9.60al intentar construir mi programa rust. Aquí están main.rslos Cargo.tomlarchivos y.

main.rs

extern crate reqwest;

fn main() {
    let mut resp = reqwest::get("http://www.governo.mg.gov.br/Institucional/Equipe").unwrap();
    assert!(resp.status().is_success());
}

Cargo.toml

[package]
name = "get_sct"
version = "0.1.0"
authors = ["myname <myemail>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
reqwest = "0.10.10"

Instalé openssl localmente (como se sugiere en esta pregunta ), usando:

git clone git://git.openssl.org/openssl.git
cd openssl
./config --openssldir=/usr/local/ssl
make
make test
sudo make install

Finalmente, corrí export OPENSSL_DIR="/usr/local/ssl"

Noté que ya tenía una instalación anaconda de openssl que estaba en mi ruta predeterminada. Para cambiar la ruta predeterminada de openssl a la instalación de github, ejecuté chmod -x MYPATH/anaconda3/bin/openssly ahora which opensslregresa /usr/local/bin/openssl.

También tengo instalado pkg-config (como se sugiere en esta pregunta ). Correr which pkg-configdevoluciones/usr/bin/pkg-config

Sin embargo, cuando vuelvo a ejecutar, cargo runel programa imprime el mismo mensaje de error. Aquí está el mensaje de error completo:

> cargo run
   Compiling openssl-sys v0.9.60
   Compiling tokio v0.2.24
   Compiling pin-project-internal v0.4.27
   Compiling pin-project-internal v1.0.2
   Compiling mime_guess v2.0.3
   Compiling url v2.2.0
error: failed to run custom build command for `openssl-sys v0.9.60`

Caused by:
  process didn't exit successfully: `/PACKAGEPATH/target/debug/build/openssl-sys-db18d493257de4f7/build-script-main` (exit code: 101)
  --- stdout
  cargo:rustc-cfg=const_fn
  cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_LIB_DIR
  X86_64_UNKNOWN_LINUX_GNU_OPENSSL_LIB_DIR unset
  cargo:rerun-if-env-changed=OPENSSL_LIB_DIR
  OPENSSL_LIB_DIR unset
  cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_INCLUDE_DIR
  X86_64_UNKNOWN_LINUX_GNU_OPENSSL_INCLUDE_DIR unset
  cargo:rerun-if-env-changed=OPENSSL_INCLUDE_DIR
  OPENSSL_INCLUDE_DIR unset
  cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_DIR
  X86_64_UNKNOWN_LINUX_GNU_OPENSSL_DIR unset
  cargo:rerun-if-env-changed=OPENSSL_DIR
  OPENSSL_DIR = /usr/local/ssl

  --- stderr
  thread 'main' panicked at 'OpenSSL library directory does not exist: /usr/local/ssl/lib', /home/lucas/.cargo/registry/src/github.com-1ecc6299db9ec823/openssl-sys-0.9.60/build/main.rs:66:9
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
error: build faile

Parece que rust está buscando ssl en /usr/local/ssl/lib. De hecho, hay una /usr/local/sslcarpeta en mi PC, pero no hay ninguna lib.

¿Qué estoy haciendo mal aquí? ¿Cómo puedo hacer que mi instalación local de openssl funcione correctamente con rust?

Respuestas

4 ReinierTorenbeek Jan 04 2021 at 04:04

No tengo experiencia con la instalación de esto por mí mismo, pero es posible que pueda dar algunos consejos.

En primer lugar, sobre su esfuerzo por instalar OpenSSL. Después de clonar el repositorio, no selecciona ninguna rama en particular antes de configurar y hacer. Esto significa que está creando la masterrama, que es una versión en evolución de OpenSSL 3.0.0. Esta no es una versión compatible según la documentación de la caja . Para crear una versión compatible de OpenSSL, tendrá que cambiar a alguna rama o etiqueta 1.1.1. Alternativamente, puede descargar la versión 1.1.1 desde la página de descarga de OpenSSL .

Dicho esto, no parece necesario instalar OpenSSL desde la fuente. En la sección Automático , la documentación explica que la caja puede hacer frente a todo tipo de instalaciones típicas de OpenSSL. Puede que le resulte más fácil seguir eso, si es posible en su caso. Si es así, debe desarmar la OPENSSL_DIRvariable de entorno; de lo contrario, esto anulará (continuará) los mecanismos automáticos de la caja para encontrar la instalación de OpenSSL.

Si aún desea seguir con la configuración manual , entonces debería usar variables de entorno, y OPENSSL_DIRparece conveniente. Sin embargo, no significa lo mismo que el openssldirparámetro que usó en su comando de configuración ./config --openssldir=/usr/local/ssl. Para obtener los detalles, consulte el significado de ese parámetro de configuración . De hecho, el significado de la caja OPENSSL_DIRcorresponde a la --prefixconfiguración (que no configuró).

El problema con el que se encuentra ahora es que su OPENSSL_DIRvariable apunta a su directorio para los archivos de configuración de OpenSSL, mientras que la caja espera que apunte a la parte superior del árbol de directorio de instalación de OpenSSL real (que en su caso parece residir en /usr/local)