基于 linux 20.04 构建 ros1 noetic 开发环境 -离线版本

要完成完全的离线安装,需要提前下载所有必需的软件包和依赖项。以下是完整的离线安装方案:

1. 准备离线环境

1.1 在有网络的环境中准备离线包

在一台有网络且系统相同的机器上(Ubuntu 20.04),执行以下步骤:

bash 复制代码
# 创建离线包目录
mkdir -p ~/ros-offline/apt-packages
mkdir -p ~/ros-offline/rosdep
mkdir -p ~/ros-offline/vscode
mkdir -p ~/ros-offline/scripts

# 保存当前系统的软件包列表
dpkg --get-selections > ~/ros-offline/package-list.txt

1.2 下载 ROS 相关软件包

bash 复制代码
# 1. 添加 ROS 源并下载所有相关包
# 方式 A(推荐,适用于 Ubuntu 20.04+):将密钥放入 keyrings,源中指定 signed-by
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros/ubuntu focal main" | sudo tee /etc/apt/sources.list.d/ros-latest.list > /dev/null

# 方式 B(旧方式,apt-key 已弃用但 Ubuntu 20.04 仍可用):若方式 A 失败可尝试
# wget -qO - https://packages.ros.org/ros.key | sudo apt-key add -
# sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu focal main" > /etc/apt/sources.list.d/ros-latest.list'

# 3. 更新源
sudo apt-get update

# 4. 下载 ROS Noetic 桌面完整版及其所有依赖(不安装)
cd ~/ros-offline/apt-packages
apt-get download $(apt-cache depends --no-pre-depends --no-recommends --no-suggests \
  --no-conflicts --no-breaks --no-replaces --no-enhances \
  --recurse ros-noetic-desktop-full | grep "^\w" | sort -u)

# 5. 下载其他必需的软件包
apt-get download \
  python3-rosdep \
  python3-catkin-tools \
  python3-osrf-pycommon \
  build-essential \
  cmake \
  g++ \
  python3-rosinstall \
  python3-rosinstall-generator \
  python3-wstool \
  libgflags-dev \
  libgoogle-glog-dev \
  liblapack-dev \
  libblas-dev \
  libsuitesparse-dev

# 6. 下载 catkin 相关包
apt-get download ros-noetic-catkin

1.3 下载 VSCode 及相关文件

bash 复制代码
# 1. 下载 VSCode 安装包
cd ~/ros-offline/vscode
wget https://update.code.visualstudio.com/latest/linux-deb-x64/stable -O vscode.deb

# 2. 下载微软 GPG 密钥(用于验证 VSCode 包,可选)
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o packages.microsoft.gpg

# 3. 下载 ROS VSCode 插件(当前最新为 0.9.6,仓库已归档可继续使用)
wget "https://github.com/ms-iot/vscode-ros/releases/download/0.9.6/ros-0.9.6.vsix" -O ms-iot.vscode-ros.vsix

1.4 准备 rosdep 数据

bash 复制代码
# 1. 初始化并更新 rosdep(在有网络的环境)
sudo apt-get install python3-rosdep
sudo rosdep init
rosdep update

# 2. 备份 rosdep 数据
cd ~/ros-offline/rosdep
sudo cp -r /etc/ros/rosdep/ ./etc-ros-rosdep/
sudo cp -r /usr/lib/python3/dist-packages/rosdep2/ ./rosdep2-python/
cp -r ~/.ros/rosdep/ ./home-ros-rosdep/

1.5 创建安装脚本

~/ros-offline/scripts 目录中创建以下脚本:

1. install-ros-offline.sh:

bash 复制代码
#!/bin/bash
# install-ros-offline.sh
# 通过脚本所在目录定位离线包根目录,避免 sudo 时 ~ 指向 /root 导致路径错误

set -e
OFFLINE_ROOT="$(cd "$(dirname "$0")/.." && pwd)"

echo "=== 开始离线安装 ROS Noetic ==="
echo "离线包路径: $OFFLINE_ROOT"

# 1. 安装所有下载的 deb 包
echo "安装 ROS 及相关软件包..."
sudo dpkg -i "$OFFLINE_ROOT/apt-packages/"*.deb 2>/dev/null || true

# 2. 修复依赖关系
echo "修复依赖关系..."
sudo apt-get install -f -y --allow-downgrades --allow-remove-essential --allow-change-held-packages

# 3. 恢复 rosdep 数据
echo "配置 rosdep..."
sudo mkdir -p /etc/ros/rosdep/
sudo cp -r "$OFFLINE_ROOT/rosdep/etc-ros-rosdep"/* /etc/ros/rosdep/
sudo cp -r "$OFFLINE_ROOT/rosdep/rosdep2-python"/* /usr/lib/python3/dist-packages/rosdep2/
mkdir -p ~/.ros/rosdep
cp -r "$OFFLINE_ROOT/rosdep/home-ros-rosdep"/* ~/.ros/rosdep/

# 4. 设置环境变量
echo "配置环境变量..."
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source /opt/ros/noetic/setup.bash

# 5. 安装 VSCode
echo "安装 VSCode..."
sudo dpkg -i "$OFFLINE_ROOT/vscode/vscode.deb"

# 6. 安装 VSCode ROS 插件
echo "安装 VSCode ROS 插件..."
code --install-extension "$OFFLINE_ROOT/vscode/ms-iot.vscode-ros.vsix"

echo "=== ROS Noetic 离线安装完成 ==="
echo "请运行 'source ~/.bashrc' 使环境变量生效"

2. setup-workspace.sh:

bash 复制代码
#!/bin/bash
# setup-workspace.sh

set -e

echo "=== 设置 ROS 工作空间 ==="

# 1. 创建 catkin 工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws

# 2. 初始化工作空间
catkin init

# 3. 编译空工作空间
catkin build

# 4. 设置环境变量
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/catkin_ws/devel/setup.bash

echo "=== ROS 工作空间设置完成 ==="

2. 离线环境安装步骤

2.1 传输离线包到目标机器

~/ros-offline 整个目录传输到目标离线机器(使用U盘、移动硬盘或内部网络):

bash 复制代码
# 在目标机器上创建目录
mkdir -p ~/ros-offline
# 将整个 ros-offline 目录复制到目标机器的 ~/ 目录下

2.2 在目标机器上执行离线安装

bash 复制代码
# 1. 进入离线包目录
cd ~/ros-offline

# 2. 给脚本执行权限
chmod +x scripts/*.sh

# 3. 执行安装脚本
sudo ./scripts/install-ros-offline.sh

# 4. 设置工作空间
./scripts/setup-workspace.sh

# 5. 验证安装
source ~/.bashrc
printenv | grep ROS
rosversion -d

# 6. 测试 ROS
# 打开终端1
roscore

# 打开终端2
rosrun roscpp_tutorials talker

3. 创建完整的离线安装包(可选)

如果需要创建可重复使用的离线安装包:

bash 复制代码
# 在有网络的环境中
cd ~
tar -czvf ros-noetic-offline-ubuntu20.04.tar.gz ros-offline/

# 创建自解压安装包
cat > ros-offline-installer.sh << 'EOF'
#!/bin/bash
echo "正在解压 ROS Noetic 离线安装包..."
tail -n +$(($(grep -n "^__ARCHIVE__" $0 | cut -d: -f1) + 1)) $0 | tar -xz
cd ros-offline
chmod +x scripts/*.sh
echo "请执行: sudo ./scripts/install-ros-offline.sh"
exit 0
__ARCHIVE__
EOF

cat ros-noetic-offline-ubuntu20.04.tar.gz >> ros-offline-installer.sh
chmod +x ros-offline-installer.sh

4. 注意事项

4.1 系统要求

  • 目标机器必须是 Ubuntu 20.04(与下载环境相同)
  • 系统架构必须一致(通常都是 amd64)

4.2 常见问题解决

问题1: 依赖关系错误

bash 复制代码
# 若目标机器可联网,可尝试(完全离线时 apt-get update 会失败,可跳过 update 仅执行 install -f)
sudo apt-get update
sudo apt-get install -f -y

问题2 : rosdep 初始化失败

从离线包恢复 rosdep 配置(将备份的 etc-ros-rosdep 复制到 /etc/ros/rosdep/):

bash 复制代码
# 从离线包恢复(请将路径改为你本机的 ros-offline 实际位置)
sudo mkdir -p /etc/ros/rosdep
sudo cp -r ~/ros-offline/rosdep/etc-ros-rosdep/* /etc/ros/rosdep/

问题3: VSCode 安装失败

bash 复制代码
# 手动安装依赖
sudo apt-get install libxss1 libasound2 libgbm1 -y
sudo dpkg -i ~/ros-offline/vscode/vscode.deb

4.3 最小化离线包版本

如果存储空间有限,可以创建最小化离线包:

bash 复制代码
# 只下载必要包(约2GB)
apt-get download \
  ros-noetic-ros-base \
  python3-rosdep \
  python3-catkin-tools \
  build-essential \
  cmake \
  g++

5. 验证安装

在目标机器上执行以下验证:

bash 复制代码
# 1. 验证 ROS 核心
printenv | grep ROS
rosversion -d

# 2. 验证编译工具
which g++
which cmake
which catkin

# 3. 创建测试包
cd ~/catkin_ws/src
catkin_create_pkg test_pkg roscpp rospy std_msgs
cd ~/catkin_ws
catkin build
source devel/setup.bash

# 4. 运行简单节点
roscore &
sleep 2
rosrun roscpp_tutorials talker

这个离线安装方案包含了所有必需的组件,可以在完全无网络的环境中安装完整的 ROS Noetic 开发环境。

相关推荐
starcat20022 小时前
ESXi安装直连显卡的KDE-NEON
linux
EmbedLinX2 小时前
Linux 之设备驱动
linux·服务器·c语言
vortex52 小时前
Alpine Linux syslinux 启动加固(密码保护)
linux·服务器·网络
晚风吹长发2 小时前
初步了解Linux中的线程同步问题及线程安全和死锁与生产消费者模型
linux·运维·服务器·开发语言·数据结构·安全
学嵌入式的小杨同学2 小时前
【Linux 封神之路】进程进阶实战:fork/vfork/exec 函数族 + 作业实现(含僵尸进程解决方案)
linux·开发语言·vscode·嵌入式硬件·vim·软件工程·ux
mi20062 小时前
银河麒麟上tabby和electerm两款终端工具比较
linux·运维
muyan92 小时前
统信uos-server-20-1070e-arm64-20250704-1310 安装mysql-5.7.44
linux·mysql·yum·rpm·uos·统信
muyan92 小时前
浅吐槽一下统信uos linux
linux·运维·国产化·uos·统信·去ioe
LaoWaiHang2 小时前
Linux基础知识14:文件使用权限信息
linux