tikv 离线编译,cargo 下载vendor包报错

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】

【概述】 场景 + 问题概述
公司内部开发环境不能访问外网,只能离线编译tikv。在使用cargo vendor命令获取离线依赖包时报错如下,请问如何解决?
[root@2b5d24ff2964 tikv-51377c0190fd2376eb059cb4b7ea933b762a59c9]# cargo vendor
error: failed to sync

Caused by:
found duplicate version of package crossbeam-epoch v0.9.3 vendored from two sources:

    source 1: registry `crates-io`
    source 2: https://github.com/tikv/crossbeam.git?branch=tikv-5.0#e0e083d0

【应用框架及开发适配业务逻辑】

【背景】 做过哪些操作

【现象】 业务和数据库现象

【问题】 当前遇到的问题

【业务影响】

【TiDB 版本】
TIKV 5.4,commit id:51377c0190fd2376eb059cb4b7ea933b762a59c9

【附件】 相关日志及监控(https://metricstool.pingcap.com/)


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

1赞

不懂代码,这样离线编译的目的是啥

内网限制,没办法啊

found duplicate version of package crossbeam-epoch v0.9.3 vendored from two sources:

感觉是在编译的时候发现了两个source中都有这个包,看看能不能禁掉一个先

rust社区问题:
https://github.com/rust-lang/cargo/issues/10310
cargo-vendor以前有no-merge-sources参数可以解决这个问题,但合到cargo vendor命令以后就不支持了,虽然用cargo-vendor 工具加上这个参数可以使用,但由于3年多没更新了,对lock文件的新格式支持不了:
[root@2b5d24ff2964 tikv-51377c0190fd2376eb059cb4b7ea933b762a59c9]# cargo-vendor vendor --no-merge-sources
error: failed to sync

Caused by:
failed to load pkg lockfile

Caused by:
failed to parse lock file at: /mnt/tikv-51377c0190fd2376eb059cb4b7ea933b762a59c9/Cargo.lock

Caused by:
invalid serialized PackageId for key package.dependencies

有两个包存在重名的情况:

  1. crossbeam-epoch
    components/concurrency_manager/Cargo.toml
    PR:https://github.com/tikv/tikv/pull/9722/files
  2. encoding_rs
    components/tidb_query_datatype/Cargo.toml
    PR:https://github.com/tikv/tikv/pull/11506/files

如果把上面恢复成creates-io可以成功 cargo vendor,但无法使用上面PR的特性。

@Yilin_Chen 请问还有其他办法吗?

Workaround:修改第三方包版本号,将重复包版本与create-io源版本号错开

  1. crossbeam 版本修改:
    https://github.com/shonge/crossbeam/commit/3bccd15e486a5b027539311484689aa309dfddbd
  2. encoding_rs 版本修改:
    https://github.com/shonge/encoding_rs/commit/e8585f6db1aa11479d7002bade7a8803a55cc39d
  3. tikv 引用修改:
    https://github.com/shonge/tikv/commit/e3940192657dafcdf2f1fb0dd6ab752e3d9a0c30
1赞

请教下,tikv make build 时,编译 tikv-ctl 和 tikv-server 时,遇到符号冲突,如何解决?

  = note: ld.lld: error: duplicate symbol: __muloti4
          >>> defined at int128_builtins.cpp
          >>>            int128_builtins.cpp.o:(__muloti4) in archive /usr/local/bin/../lib/x86_64-unknown-linux-gnu/libc++.a
          >>> defined at compiler_builtins.e12c7ff4-cgu.0
          >>>            compiler_builtins-e31492cc38d60eb0.compiler_builtins.e12c7ff4-cgu.0.rcgu.o:(.text.__muloti4+0x0) in archive /db/tikv/target/x86_64-unknown-linux-gnu/debug/deps/libcompiler_builtins-e31492cc38d60eb0.rlib
          clang-13: error: linker command failed with exit code 1 (use -v to see invocation)

就算删除 .rlib,下次编译又会重新生成

请问你这个离线编译问题解决了吗,我现在也在做tikv离线编译,在外网环境做cargo vendor,在拷贝到内网编译,还是会报错。
Caused by:
failed to load source for dependency kvproto
看本地也有这个包
ll vendor/kvproto/
total 72
-rw-r–r-- 1 root root 679 Sep 14 16:54 build.rs
-rw-r–r-- 1 root root 1200 Sep 14 16:54 Cargo.toml
drwxr-xr-x 3 root root 4096 Sep 14 16:54 cpp
-rw-r–r-- 1 root root 1883 Sep 14 16:54 Dockerfile
-rw-r–r-- 1 root root 320 Sep 14 16:54 go.mod
-rw-r–r-- 1 root root 7813 Sep 14 16:54 go.sum
drwxr-xr-x 4 root root 4096 Sep 14 16:54 include
-rw-r–r-- 1 root root 11294 Sep 14 16:54 LICENSE
-rw-r–r-- 1 root root 524 Sep 14 16:54 Makefile
drwxr-xr-x 30 root root 4096 Sep 14 16:54 pkg
drwxr-xr-x 2 root root 4096 Sep 14 16:54 proto
-rw-r–r-- 1 root root 732 Sep 14 16:54 README.md
drwxr-xr-x 2 root root 4096 Sep 14 16:54 scripts
drwxr-xr-x 2 root root 4096 Sep 14 16:54 src
-rw-r–r-- 1 root root 472 Sep 14 16:54 tools.json