记录最近折腾Linux遇到的一个问题,有遇到类似的可以参考。

前提:有一个使用Kerberos进行认证的服务(webHDFS),用curl来GET文件是正常的,但是PUT文件报错了,报错码55。环境是国产银河Kylin 10SP2 aarch64环境,在Centos 7 x86环境是正常的。

排查过程:使用-v参数打印verbose信息。
1.如果是kerberos环境GET文件,结果正确。
2.非kerberos环境PUT文件,结果报错。
3.kerberos场景PUT小文件(小于1024字节),结果正确。

原因:curl在PUT大文件(大于1024字节)时,会发送两次请求,其中第一次会发送Expect头;Kerberos环境,curl也会发送多次请求,先获取delegationtoken,然后再带着token进行后续请求。

当两个场景结合时,当PUT一个大文件时,curl会发送3次请求,第二次请求rewind文件指针时报错。

该BUG在curl最新版本未修复,因kerberos场景复杂而古老,社区也不考虑修复。该BUG在另外一些国产系统如华为欧拉上也未能修复。

很多基础设施,由于过于古老和复杂,维护是很吃力的。

refer:
https://gitee.com/src-openeuler/curl/issues/I6TQ8W
https://github.com/curl/curl/issues/8264
 
 
Back to Top