Archive from 11月, 2021
11月 29, 2021 - コンピューター    Python-3.10.0 +OpenSSL1.1.1で、OpenSSLを見てくれない問題 はコメントを受け付けていません

Python-3.10.0 +OpenSSL1.1.1で、OpenSSLを見てくれない問題

まず、OpenSSLのインストール。

tar zxvf openssl-1.1.1l.tar.gz
cd openssl-1.1.1l
./config –prefix=/usr/local/openssl1.1.1l –openssldir=/usr/local/openssl1.1.1l -rpath=/usr/local/openssl1.1.1l
make
make test
make install

でさくっと入るが、

/usr/local/openssl1.1.1l/bin/openssl version -a

でバージョン確認をすると、libssl.so.1.1が無いと表示される。しかし、/usr/local/openssl1.1.1l/lib の下に、libssl.so.1.1 はちゃんとある。

実行時だけしのげればいいなら、

setenv LD_LIBRARY_PATH /usr/local/openssl1.1.1l/lib

でエラーは出なくなる。

次にcurlを入れる。この時点で一番新しいバージョンをインストール。

tar zxvf curl-7.80.0.tar.gz
cd curl-7.80.0
./configure –prefix=/usr/local/curl7.80.0 –with-ssl=/usr/local/openssl1.1.1l/ –enable-libcurl-option
make
make install

動作確認は、

/usr/local/curl7.80.0/bin/curl -V

>
で、こちらも、LD_LIBRARY_PATHの設定前はSSLエラーが出たが設定後は動くようになった。

ド嵌まりしたのがPython。Python-3.10.0.tgz をダウンロード

tar zxvf Python-3.10.0.tgz
cd Python-3.10.0.tgz
./configure –prefix /usr/local/python3.10.0/ –with-pydebug –with-openssl=/usr/local/src/openssl-1.1.1l –with-ssl

このとき、–with-openssl=のディレクトリは、インストール先つまり配下にincludeやlibのあるディレクトリを指定したのでは動かない。インストール前にソースを解凍したディレクトリで、openssl.pcのある場所を書かないと、
checking for openssl/ssl.h in /usr/local/openssl-1.1.1l… no
checking whether compiling and linking against OpenSSL works… no
というエラーが出る。これが出ている間はコンパイルしてもOpenSSLは使えない。ここをクリアすると、一応チェックでOpenSSLまわりがyesになってコンパイルはできる。

しかし、

/usr/local/python3.10.0/bin/pip3.10 list

を実行すると、

WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

と出て、外部にパッケージを取りに行く接続でコケるし、pip自体のアップグレードもできない。

環境変数かな、と思って、
setenv PATH “${PATH}:/usr/local/openssl-1.1.1l/bin”
setenv LD_LIBRARY_PATH /usr/local/openssl-1.1.1l/lib
setenv LDFLAGS “-L /usr/local/openssl-1.1.1l/lib -Wl,-rpath,/usr/local/openssl-1.1.1l/lib”
などとやってみたけど結果は変わらず。

コンパイルオプションかなと思って
./configure –prefix /usr/local/python3.10.0/ –with-pydebug –with-openssl=/usr/local/src/openssl-1.1.1l –with-ssl CFLAGS=”-I/usr/local/openssl-1.1.1l/include” LDFLAGS=”-L/usr/local/openssl-1.1.1l/”

などとあからさまにやってみたけどダメ。

結局、Python-3.10.0/Modules/Setupを編集。コメントアウトを外して、
OPENSSL=/usr/local/openssl1.1.1l
# To statically link OpenSSL:
_ssl _ssl.c \
-I$(OPENSSL)/include -L$(OPENSSL)/lib \
-l:libssl.a -Wl,–exclude-libs,libssl.a \
-l:libcrypto.a -Wl,–exclude-libs,libcrypto.a
_hashlib _hashopenssl.c \
-I$(OPENSSL)/include -L$(OPENSSL)/lib \
-l:libcrypto.a -Wl,–exclude-libs,libcrypto.a
のように、staticリンクさせてから、すぐ上のオプションで./configureして、make celanしてmakeしてmake installで、やっとOpenSSLを見失わずに実行できるようになった。

ウェブサイトを見ても、OpenSSLをインストールしましょうとか、Macで同様のことになったのでhomebrewでPytionとOpenSSLを最インストールとか、いろんなやり方がいっぱい出てくるのだけど、Setupを直接いじってみては、と指摘していた人を一人だけ海外で見つけた。