rustでopensslをbuildうまくできないときの対処法

みなさんこんにちは、エルゴヒューマンの椅子をかって腰の調子がすこぶる良い今日この頃です。

さて本題に入りましょう。 現在、統計的機械学習を学ぶためにRustでPRMLに乗っている手法を実装しているのですが、そこではもちろん行列計算や線形代数のツールを使う必要があります。私はrust-ndarrayを利用しています。線形代数を扱うndarray-linalgでは、intel-mklやopenblasなどを用いています。

github.com

そこで私のlinuxのマシンでbuildを行ったところ、

  --- stderr
  thread 'main' panicked at '

  Could not find directory of OpenSSL installation, and this `-sys` crate cannot
  proceed without this knowledge. If OpenSSL is installed and this crate had
  trouble finding it,  you can set the `OPENSSL_DIR` environment variable for the
  compilation process.

  Make sure you also have the development packages of openssl installed.
  For example, `libssl-dev` on Ubuntu or `openssl-devel` on Fedora.

  If you're in a situation where you think the directory *should* be found
  automatically, please open a bug at https://github.com/sfackler/rust-openssl
  and include information about your system as well as this message.

  $HOST = x86_64-unknown-linux-gnu
  $TARGET = x86_64-unknown-linux-gnu
  openssl-sys = 0.9.60

このようなエラーを吐いてとまりました。 そこで、エラーの中身を見てみると、opensslがうまく入っていないようです。

  • OPENSSL_DIRがうまく設定されていない可能性
  • libssl-devが入っていない可能性

があるように感じました。 そこで最初に

openssl version -a

してopensslの状態を調べます。 その結果

OpenSSL 1.1.1f  31 Mar 2020
built on: Mon Apr 20 11:53:50 2020 UTC
platform: debian-amd64
options:  bn(64,64) rc4(16x,int) des(int) blowfish(ptr) 
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -fdebug-prefix-map=/build/openssl-P_ODHM/openssl-1.1.1f=. -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_TLS_SECURITY_LEVEL=2 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2
OPENSSLDIR: "/usr/lib/ssl"
ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-1.1"
Seeding source: os-specific

と出てきたので、このパスを~/.zshrcに書き加えました。 でも解決しませんでした。

そこで、libssl-devがうまく入っていない可能性があると思い、

sudo apt-get install libssl

しました。

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package libssl-dev

ですが、うまく入らず。

となりうまく入らず... そこでいろいろ調べてみた結果、

/etc/apt/sources.list

に問題がありそうなことがわかりました。

で、sources.listとは何かといいますと、

wiki.debian.org

に詳しく書いてあります。 これを、

askubuntu.com

に従って改変し、

sudo apt update
sudo apt upgrade

したらうまく入りました。