Google OpenID SSL応答の処理中に、トルネードウェブサーバーでgnutls固有のエラーが発生します。 Tornadoメーリングリストから得た提案の1つは、gnutlsではなくOpenSSLバックエンドを試すことです。しかし、Ubuntuサーバー(11.10)では簡単ではないようです。
Ubuntuサーバーでは、gnutls
はlibcurl3-gnutls
パッケージによって提供され、openssl curlサポートはlibcurl4-openssl-dev
パッケージによって提供されます。 (後者が4
およびdev
という名前である理由はわかりませんが、apt-cache検索で他のopenssl + curlパッケージを見つけることができませんでした)。
デフォルトでlibcurl3-gnutls
をインストールしましたが、libcurl4-openssl-dev
はインストールしませんでした。それで、後でインストールしてTorandoインスタンスを再起動しました。しかし、それはうまくいかなかったようです。私はまだ同じgnutlsエラーが出ました。
LibcurlへのさまざまなSSLバックエンドのサポートの問題に関するcurlメーリングリストに関する古い議論を見つけましたが、今日それがどのように行われているかは正確にはわかりませんでした。これまでのところ、opensslはlibcurlに組み込まれていて、gnutlsは別のパッケージで提供されていると思います(libcurl3-opensslがない理由を説明しています)。しかし、libcurlがgnutlsではなくopensslバックエンドを取得するようにするにはどうすればよいですか?これを行うためのlibcurl/pycurl APIにオプションはありますか?
libcurl3-gnutls
をアンインストールしてみましたが、apt-getはpython-pycurl
も一緒に削除することを要求しました。だからそれはしません。
-dev
パッケージは開発パッケージであり、ライブラリを使用するプログラムの開発とコンパイルに使用されるライブラリヘッダーが含まれています。通常、アプリケーションのバイナリパッケージ(既にコンパイルされている)では必要ありません。 libcurl4-openssl-dev
をインストールしても、libcurl3-gnutls
に対してビルドされたバイナリパッケージをOpenSSLで代用するには不十分です。それに対して再コンパイルするアプリケーションにのみ役立ちます。
python-pycurl
パッケージには、libcurl3-gnutls
およびlibgnutls26
に対して 直接依存関係 があります。
代替リポジトリにGnuTLSではなくOpenSSLに対してコンパイルされたUbuntu用のcURLベースのパッケージがない限り、残念ながら自分でビルドする必要があるかもしれません。
これは原則として、ソース(apt-get source python-pycurl
および関連パッケージ)をダウンロードすることで実行できます。 Debianのパッケージ構成ファイルに移動し、オプションを変更して(通常、コンパイル前にconfigure
sも構成するMakefile
スクリプトに渡されます)、コンパイルオプションを変更して、代わりにOpenSSL。また、パッケージの説明を変更して、混乱を他のパッケージに限定する必要があるかもしれません。おそらくprovide:
ディレクティブを使用して、Ubuntuによってパッケージ化されたパッケージをパッケージで置き換えることができると伝えます。
Debianバグトラッカー で解決策を見ました。
自分でpython-pycurl
パッケージを修正するための回避策を投稿すると思いました。
Sudo apt-get install build-essential fakeroot dpkg-dev
mkdir ~/python-pycurl-openssl
cd ~/python-pycurl-openssl
Sudo apt-get source python-pycurl
Sudo apt-get build-dep python-pycurl
Sudo apt-get install libcurl4-openssl-dev
dpkg-source -x pycurl_7.18.2-1.dsc
cd pycurl-7.18.2
Pycurlが更新された可能性があるため、名前が正確にpycurl_7.18.2-1.dsc
でない可能性があることに注意してくださいdebian/control
ファイルを編集し、libcurl4-gnutls-dev
のすべてのインスタンスをlibcurl4-openssl-dev
に置き換えます
dpkg-buildpackage -rfakeroot -b
Sudo dpkg -i ../python-pycurl_7.18.2-1_i386.deb
テストするには、インタプリタにジャンプしてバージョンを確認します。
それはかつて言っていました:
Shell~# python
Python 2.5.2 (r252:60911, Jan 4 2009, 17:40:26)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pycurl
>>> pycurl.version
'libcurl/7.18.2 GnuTLS/2.4.2 zlib/1.2.3.3 libidn/1.8'
これで次のように表示されます(すべてを正しく実行した場合):
Shell~# python
Python 2.5.2 (r252:60911, Jan 4 2009, 17:40:26)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pycurl
>>> pycurl.version
'libcurl/7.18.2 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.8 libssh2/0.18'
ここでdebian/controlファイルを編集するだけで機能するのは、libcurl4-gnutls-dev
とlibcurl4-openssl-dev
の両方がファイル/usr/bin/curl-config
を使用してパッケージをビルドするためです。 1つはgnutls環境用で、もう1つはopenssl用です。
Pycurlモジュールを削除し、pipを使用して再インストールします。
Sudo pip install pycurl
私が理解している限り、パッケージlibcurl3
はOpenSSLサポートを提供する必要があります。