ubuntu依赖库迁移至另一台ubuntu电脑中

发布时间 2024-01-04 15:21:05作者: 逍遥鱼儿叹大海

/usr 文件夹移植

ubuntu 系统中,使用命令 apt installapt-get install 安装的依赖库,都会安装到目录 /usr 下,大部分动态库会安装到目录 /usr/lib/x86_64-linux-gnu 下,例如 opencvpcl 等。

可以使用命令 rsync 命令来实现文件的复制功能,rsync 命令使用方法参考 rsync使用方法

动态库 移植

可以直接将本地的 /usr 文件夹复制到其他电脑中,将已经配置好的电脑A的 /usr 文件打包,使用 scp 命令发送给环境未配置的电脑B,在电脑B中将文件解压,使用命令 rsync -av usr/ /usr ,将加压后的文件复制到电脑B的 /usr 中。

如果仅使用上述的命令,则会产生错误: Ubuntu sudo:/usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位 ,因此需要在执行命令前将文件的拥有者指定为用户或用户组,使用命令 sudo chown -R root:root usr/ ,然后再执行 rsync -av usr/ /usr

    # 在电脑A下
    tar -cf usr.tar /usr
    scp usr.tar aaa@192.168.137.100:~/

    # 在电脑B下
    tar -xf usr.tar
    sudo chown -R root:root usr/
    sudo rsync -av usr/ /usr

或者可以省略打包复制的环节,直接从电脑A复制到电脑B:

sudo rsync -av /usr/ aaa:192.168.137.100:/usr

上述方法执行后依然失败,因为在此时打开一个终端,执行 sudo 命令时会出现 Ubuntu sudo:/usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位 错误提示。解决方法参考sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set问题解决方案

链接库移植

执行完上述操作后,在目录 /usr/bin 和目录 /usr/lib/x86_64-linux-gnu 下会有很多链接文件失效,还需要将电脑A的目录 /etc/alternatives 复制到电脑B下,使用命令:

    # 电脑A下
    cd /etc
    tar -cf alternatives.tar alternatives
    scp alternatives.tar aaa@192.168.137.100:~/ # 电脑B的地址

    # 在电脑B下
    tar -xf alternatives.tar
    sudo chown -R root:root alternatives/
    sudo rsync -av alternatives/ /etc/alternatives/

环境变量配置

将移植的动态库链接到环境变量里面:

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

也可以将上述命令行添加到 ~/.bashrc 文件中;

ros/humble 文件夹移植

ros/humble 文件夹的移植很简单,只需要将电脑A中的 /opt/ros/humble 文件夹打包,复制到电脑B中,解压到电脑B的 /opt/ros/ 下即可。

为了方便,也可以将 ROS 的环境变量添加到 ~/.bashrc 文件中:

    source /opt/ros/humble/setup.bash

其他依赖移植

最后,将存放在其他位置的依赖从电脑A复制到电脑B下,例如 navigation2 的可执行文件、IMU的配置文件、运行代码的可执行文件等。