golang升级接口变更分析

背景

20.03-LTS-SP1目前golang的版本过低(1.13.3),上游社区已经不再维护

老版本的CVE没有补丁,需要从高版本回合,但是在改动较大,或者涉及runtime等底层修改的情况下,回合与验证比较困难。我们希望升级到golang-1.15.7。

版本变化

Go1范围内升级:1.13.3 --> 1.15.7

差异分析

golang-1.14和1.15都确保Go1兼容性:the release maintains the Go 1 promise of compatibility。

Go1.14

golang-1.14关键特性包括:goroutine支持异步抢占,defer性能优化,定时器性能优化等。

删除接口

输入图片说明

变更接口

  • go get 命令行不再支持-mod选项。根据go.mod文件和vendor目录是否存在自动推断。

  • go test -v采用流式输出,以前是在所有测试都结束后才会打印输出。

  • go list -m不再忽略vendor中没有提供包的依赖,发现会报错。该命令很少使用。

  • 标准库encoding/json: Compact()不再转义U+2028 and U+2029字符,如果希望转义,可以调用HTMLEscape()、Number()不再支持无效数字

新增接口


Go1.15

golang-1.15关键特性包括链接器改进,新增标准库time/tzdata。

删除接口

语言层面无变更:There are no changes to the language.

变更接口

  • 标准库io/ioutil:Tempdir参数模式不支持含有路径分隔符(安全增强)

  • 标准库:弃用将X.509CommonName作为主机名,可以通过设置x509ignoreCN=0临时开启

新增接口

  • tzdata:增加tzdata包(将时区数据嵌入到Go应用二进制文件中)

影响分析

经分析,本次golang升级涉及剔除不安全协议、CVE修复,客户感知小,版本提升大,申请在openEuler 20.03-LTS-SP1中进行升级。

遗留问题

  • 软件包涉及梳理(编译)
  • 软件包显示调用接口梳理

遗留问题分析

涉及组件

openEuler-20.03-LTS-SP1中,使用golang作为编译依赖的包一共28款,其中EPOL类软件6款。

类型 软件包
常规软件 A-Tune、audit、authz、containerd、containernetworking-plugins、docker、go-compilers、golang、golang-github-cpuguy83-go-md2man、golang-github-russross-blackfriday、isula-build、iSulad-img、isula-transform、kata-containers、libnetwork、lxcfs-tools、podman、runc、skopeo、syscontainer-tools、thrift、umoci
EPOL startdde、deepin-dbus-generator、dde-daemon、dde-api、deepin-desktop-schemas、kubernetes

编译问题

在升级golang至1.15.7之后,有10款软件无法正常编译,其中8款在解决go-compilers编译问题之后可以顺利编译

  • 常规软件:

    软件包 备注
    A-Tune 自身编译问题
    go-compilers 自身编译问题
    golang-github-cpuguy83-go-md2man 依赖go-compilers
    golang-github-russross-blackfriday 依赖go-compilers
    containernetworking-plugins 依赖go-compilers
    podman 依赖go-compilers
    skopeo 依赖go-compilers
  • EPOL:

    软件包 备注
    deepin-dbus-generator 依赖go-compilers
    dde-daemon 依赖go-compilers
    dde-api 依赖go-compilers

修复建议

需要 A-Tune(@hanxinke)、go-compilers(@ultra_planet)软件包owner进行修复

A-Tune

报错:go: inconsistent vendoring in /home/abuild/rpmbuild/BUILD/A-Tune

go mod vendor

go-compilers

报错:unexpected directory layout

尝试处理golist问题。