飼育係(べべ)日記


2013-05-14(Tue) [長年日記]

_ pycurlのGnuTLS recv errorの回避方法

pycurlを使って通信するスクリプトを使っていると、httpsなURLにつないだ時に

GnuTLS recv error (-9): A TLS packet with unexpected length was received.

というエラーメッセージが出ることがある。これをなんとかしたい。

Ubuntu(Debian)のpython-pycurlパッケージは、libcurl4-gnutls-devに依存して作られている。これを、libcurl4-openssl-devを参照するようにパッケージを作り直せばよい。

$ sudo apt-get install build-essential fakeroot dpkg-dev
$ mkdir ~/python-pycurl-openssl
$ cd ~/python-pycurl-openssl
$ apt-get source python-pycurl
$ sudo apt-get build-dep python-pycurl
$ sudo apt-get install libcurl4-openssl-dev
$ dpkg-source -x pycurl_7.19.0-5ubuntu8.dsc
$ cd pycurl-7.19.0

ここで、 debian/control 内に書いてある "libcurl4-gnutls-dev"を"libcurl4-openssl-dev"に置換する。そのうえで、パッケージの作成&インストール。

$ dpkg-buildpackage -rfakeroot -b
$ sudo dpkg -i ../python-pycurl_7.19.0-5ubuntu8_i386.deb

参考

以下に載っていた方法をそのまま。 http://serverfault.com/q/348815 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=515200