/usr 文件夹移植
在 ubuntu
系统中,使用命令 apt install
或 apt-get install
安装的依赖库,都会安装到目录 /usr
下,大部分动态库会安装到目录 /usr/lib/x86_64-linux-gnu
下,例如 opencv
、 pcl
等。
可以使用命令 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的配置文件、运行代码的可执行文件等。