Por que a ferrugem não consegue compilar o comando do openssl-sys v0.9.60 mesmo após a instalação local?

Jan 04 2021

Estou enfrentando o erro failed to run custom build command for openssl-sys v0.9.60ao tentar construir meu programa de ferrugem. Aqui estão main.rsos Cargo.tomlarquivos e.

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"

Instalei o openssl localmente (como sugerido nesta pergunta ), usando:

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

Finalmente, eu corri export OPENSSL_DIR="/usr/local/ssl"

Observei que já tinha uma instalação do anaconda do openssl que estava no meu caminho padrão. Para alterar o caminho padrão do openssl para a instalação do github, executei chmod -x MYPATH/anaconda3/bin/openssle agora which opensslvolto /usr/local/bin/openssl.

Eu também tenho o pkg-config instalado (como sugerido nesta pergunta ). which pkg-configDevoluções em execução/usr/bin/pkg-config

Porém, quando eu executo cargo runnovamente o programa imprime a mesma mensagem de erro. Aqui está toda a mensagem de erro:

> 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 a ferrugem está procurando por SSL /usr/local/ssl/lib. Na verdade, existe uma /usr/local/sslpasta no meu PC, mas não libexiste.

O que eu estou fazendo errado aqui? Como posso fazer minha instalação local do openssl funcionar corretamente com ferrugem?

Respostas

4 ReinierTorenbeek Jan 04 2021 at 04:04

Não tenho experiência em instalar isso sozinho, mas posso dar algumas dicas.

Em primeiro lugar, sobre seu esforço para instalar o OpenSSL. Depois de clonar o repositório, você não seleciona nenhum ramo específico antes de configurar e fazer. Isso significa que você está construindo o masterbranch, que é uma versão em evolução do OpenSSL 3.0.0. Esta não é uma versão suportada de acordo com a documentação do engradado . Para construir uma versão suportada do OpenSSL, você terá que mudar para algum branch ou tag 1.1.1. Como alternativa, você pode baixar a versão 1.1.1 da página de download do OpenSSL .

Dito isso, não parece necessário instalar o OpenSSL a partir do código-fonte. Na seção Automático , a documentação explica que a caixa pode lidar com todos os tipos de instalações OpenSSL típicas. Pode ser mais fácil para você seguir isso, se possível no seu caso. OPENSSL_DIRNesse caso , você deve remover a configuração da variável de ambiente, caso contrário isso (continuará a) sobrescrever os mecanismos automáticos da caixa para localizar a instalação do OpenSSL.

Se você ainda deseja manter a configuração Manual , então, de fato, você deve usar variáveis ​​de ambiente, e OPENSSL_DIRparece uma opção conveniente. No entanto, isso não significa a mesma coisa que o openssldirparâmetro que você usou em seu comando configure ./config --openssldir=/usr/local/ssl. Para obter os detalhes, verifique o significado desse parâmetro de configuração . Na verdade, o significado da caixa de OPENSSL_DIRcorresponde ao da --prefixconfiguração (que você não configurou).

O problema que você está enfrentando agora é que sua OPENSSL_DIRvariável aponta para o diretório dos arquivos de configuração do OpenSSL, enquanto a caixa espera que aponte para o topo da árvore real do diretório de instalação do OpenSSL (que no seu caso parece residir /usr/local).