RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
最近在 更新openwrt 和运行"./scripts/feeds update -a"时,遇到以下问题。网上找了很多种方法,但是有些可以,有些不行。先做个简单的总结。
1. 问题描述
RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
详细信息:
Updating feed 'packages' from 'https://git.openwrt.org/feed/packages.git' ...
remote: Enumerating objects: 85124, done.
remote: Counting objects: 100% (85123/85123), done.
remote: Compressing objects: 100% (34661/34661), done.
error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
failed.
Updating feed 'luci' from 'https://git.openwrt.org/project/luci.git' ...
Already up-to-date.
Create index file './feeds/luci.index'
[sudo] password for renyinshan:
Updating feed 'routing' from 'https://git.openwrt.org/feed/routing.git' ...
remote: Enumerating objects: 6835, done.
remote: Counting objects: 100% (6835/6835), done.
remote: Compressing objects: 100% (4477/4477), done.
remote: Total 6664 (delta 2770), reused 4557 (delta 1741)
Receiving objects: 100% (6664/6664), 1.46 MiB | 17.00 KiB/s, done.
Resolving deltas: 100% (2770/2770), completed with 82 local objects.
From https://git.openwrt.org/feed/routing
08ba5e5..56df2cc master -> origin/master
Updating 08ba5e5..56df2cc
Fast-forward
bird1/Makefile | 4 ++--
bird2/Makefile | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
Create index file './feeds/routing.index'
Collecting package info: done
Updating feed 'telephony' from 'https://git.openwrt.org/feed/telephony.git' ...
Already up-to-date.
Create index file './feeds/telephony.index'
2 解决方法
2.1 方法1:修改git的配置
修改git的配置
git config --global http.postBuffer 524288000 # httpBuffer加大
git config --global http.maxRequestBuffer 100M
git config --global core.compression 0 # 压缩配置
# 修改配置文件
export GIT_TRACE_PACKET=1
export GIT_TRACE=1
export GIT_CURL_VERBOSE=1
以上配置文件修改,也可以大幅度提升 git 克隆速度
本人亲测,无效
2.2 方法2:修改下载方式-https改为ssh
把’https://git.openwrt.org/feed/packages.git’改为’git://git.openwrt.org/feed/packages.git’,即:
git clone git://git.openwrt.org/feed/packages.git
修改feeds.conf.default配置即可(我只遇到下载packages.git时的错误,所以只改了这个。)
src-git packages git://git.openwrt.org/feed/packages.git
src-git luci https://git.openwrt.org/project/luci.git
src-git routing https://git.openwrt.org/feed/routing.git
src-git telephony https://git.openwrt.org/feed/telephony.git
#src-git video https://github.com/openwrt/video.git
#src-git targets https://github.com/openwrt/targets.git
#src-git management https://github.com/openwrt-management/packages.git
#src-git oldpackages http://git.openwrt.org/packages.git
#src-link custom /usr/src/openwrt/custom-feed
本人亲测,有效
2.3. 方法3:重新编译git并安装
作者描述:
这个问题折腾了我挺长时间,在网上看到很多解决方案,但是百分之九十以上的都是坑,一点用没有,可能是对我来说没有用,最终找到一个靠谱的解决方案,亲测可用,希望减少大家踩坑。
但是本人使用时无效。
链接:https://zhuanlan.zhihu.com/p/53961303
# 首先安装一些必要的环境和依赖
sudo apt-get install build-essential fakeroot dpkg-dev
# 在home路径下创建一个名为git-rectify的路径(路径名不重要,可以为其他名称)
mkdir ~/git-rectify
# 进入路径,获取git的源文件
cd ~/git-rectify
apt-get source git
# 安装依赖
sudo apt-get build-dep git
# 安装libcurl的依赖文件
sudo apt-get install libcurl4-openssl-dev
# 进入目录(原链接中这里有错误,不需要解压步骤)
cd git-2.17.1/
# 修改文件内容,需要修改两个文件
vim ./debian/control # 把libcurl4-gnutls-dev 修改为 libcurl4-openssl-dev
vim ./debian/rules # 把TEST=test整行删除
# 编译和构建安装包
sudo dpkg-buildpackage -rfakeroot -b
# 退回上一级目录,安装编译好的安装包
cd ..
sudo dpkg -i git_2.17.1-1ubuntu0.4_amd64.deb
完成以上步骤即可解决error: RPC failed; curl 56 GnuTLS recv error (-110): The TLS connection was non-properly terminated问题。
2.4 方法4:理性等待
因为:
刚刚开始以为是由于GnuTLS的BUG导致的。
当时的解决方法是翻墙出去进行克隆。或者用Windows进行克隆操作。
然而,从最近的新闻来看,更像是遭受了攻击导致的。
本人亲测,有点扯蛋
3. 参考连接:
stackoverflow: git error: RPC failed; curl 56 GnuTLS
GitHub 遭遇有史以来最严重DDoS攻击,黑客想玩票大的?
GnuTLS recv error (-9): A TLS packet with unexpected length was received