鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

CentOS 7.6到openEuler 20.03-LTS版本的二进制文件迁移

将软件从CentOS迁移到openEuler操作系统时,如果要迁移的软件没有源码,只有二进制文件,又无法使用x2openEuler工具迁移的情况下,可以使用二进制搬迁工具对二进制ELF文件直接进行修改,将CentOS环境上的依赖修改为openEuler环境上的替代依赖,进而达到搬迁的目的。关于软件搬迁到openEuler的更多详细信息请参见openEuler社区

本节以迁移某个应用程序为例进行介绍,以下操作步骤均在openEuler操作系统上执行。

  1. 安装Ruby。
    yum install ruby -y
  2. 安装patchelf-0.14。
    git clone https://github.com/NixOS/patchelf.git -b 0.14 
    cd  patchelf 
    ./bootstrap.sh 
    ./configure 
    make 
    make install
  3. 创建相关目录,用于存放迁移过来的二进制文件和依赖库文件。
    mkdir -p /opt/c7/usr/lib64 
    mkdir -p /opt/c7/usr/lib
    mkdir /opt/c7/usr/bin
  4. 从CentOS拷贝二进制文件及运行所需的动态库so文件,依赖的so文件可以通过ldd命令查看。
    rsync -av <centos_ip>:/usr/lib64/* /opt/c7/usr/lib64
    rsync -av <centos_ip>:/usr/lib/* /opt/c7/usr/lib
    scp <centos_ip>:/usr/local/bin/qemu-img /opt/c7/usr/bin
  5. 上传add-rpath.sh和expand-lib.rb脚本到“/opt/c7/usr”目录,并执行以下命令。
    脚本获取地址:https://www.hikunpeng.com/forum/thread-0248123322153999011-1-1.html
    cd /opt/c7/usr
    chmod +x add-rpath.sh expand-lib.rb
    ./add-rpath.sh bin/* 
    ./add-rpath.sh lib64/libc-2.17.so 
    ./expand-lib.rb lib64/* lib64/*/*
  6. 以上步骤完成后,执行ldd xx命令可以查看程序依赖库。
    如果有缺失的库,即提示“xx.so not found”,则需要使用patchelf命令来指定程序运行时搜索共享库的路径。在本例中,使用patchelf命令来指定libaio.so.1的路径为“/opt/c7/usr/lib64”
    patchelf --set-rpath /opt/c7/usr/lib64 ./lib64/libaio.so.1