Por que a ferrugem não consegue compilar o comando do openssl-sys v0.9.60 mesmo após a instalação local?
Estou enfrentando o erro failed to run custom build command for openssl-sys v0.9.60
ao tentar construir meu programa de ferrugem. Aqui estão main.rs
os Cargo.toml
arquivos 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/openssl
e agora which openssl
volto /usr/local/bin/openssl
.
Eu também tenho o pkg-config instalado (como sugerido nesta pergunta ). which pkg-config
Devoluções em execução/usr/bin/pkg-config
Porém, quando eu executo cargo run
novamente 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/ssl
pasta no meu PC, mas não lib
existe.
O que eu estou fazendo errado aqui? Como posso fazer minha instalação local do openssl funcionar corretamente com ferrugem?
Respostas
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 master
branch, 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_DIR
Nesse 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_DIR
parece uma opção conveniente. No entanto, isso não significa a mesma coisa que o openssldir
parâ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_DIR
corresponde ao da --prefixconfiguração (que você não configurou).
O problema que você está enfrentando agora é que sua OPENSSL_DIR
variá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
).