【保姆级】dora-rs 一键安装脚本:类ros2的fishros 风格交互菜单 + 国内镜像加速,把坑都替你踩完了

主页:https://gitee.com/futurelei

脚本仓库:https://gitee.com/futurelei/dora-rs-install

适用系统:Ubuntu / Debian / 其它 Linux(macOS 部分支持)| 需要 bash

前言

dora-rs 是一个 100% Rust 编写的机器人与 AI 应用数据流框架,官方号称比 ROS2 Python 快 10-17 倍,对 >4KB 的消息走零拷贝共享内存 IPC,还原生支持 Apache Arrow。最近想在机器人项目里试试它,结果安装过程差点把我劝退:

  1. 官网安装文档默认你在 GitHub 下载 release 安装器------国内直连基本超时;
  2. cargo install dora-clicrates.io 装?首先要 Rust 工具链,而 dora 最新版要求 Rust 1.95,Ubuntu 22.04 自带的是 1.75,直接编译报错;
  3. 好不容易装 rustup,sh.rustup.rsstatic.rust-lang.org 在国内时通时断,一个工具链下载 10 分钟没动静;
  4. crates.io 全量拉依赖,不走镜像慢到怀疑人生;
  5. pip 装 Python API 默认源同样龟速。

于是我把自己踩过的坑浓缩成了一个交互式一键安装脚本,体验对标 fishros,但启动秒开不卡顿。开源在 Gitee 上,欢迎大家白嫖 + Star。

一键安装(推荐方式)

方式一:一行命令(fishros 同款体验)

bash 复制代码
source <(wget -qO- https://gitee.com/futurelei/dora-rs-install/raw/main/dora-install)

回车进入交互菜单,选 1 一键安装,全程自动。

小知识:为什么用 source <(...) 而不是 wget ... | bash

source <(进程替换) 执行时脚本内容走独立的文件描述符,你的终端 stdin 仍然连着脚本,交互菜单才能正常接收按键。fishros 也是这么设计的。

方式二:管道模式(懒人专用)

bash 复制代码
wget -qO- https://gitee.com/futurelei/dora-rs-install/raw/main/dora-install | bash

脚本检测到自己在管道里执行(stdin 不是终端),会自动跳过菜单直接开始安装,打印提示告诉你怎么进交互菜单。不用记任何参数。

方式三:克隆仓库

bash 复制代码
git clone https://gitee.com/futurelei/dora-rs-install.git
cd dora-rs-install
bash dora-install          # 交互菜单
bash dora-install install  # 非交互直接装

交互菜单功能一览

直接运行脚本(在终端里)看到的菜单长这样:

复制代码
      ____              _
     |  _ \  ___   __ _| | ___ _ __
     | | | |/ _ \ / _` | |/ _ \ '__|
     | |_| | (_) | (_| |  __/ |
     |____/ \___/ \__, |_|\___|_|
                  |___/   一键安装工具

  [1] 一键安装 dora-rs        (推荐)
  [2] 更新 dora-rs
  [3] 运行示例数据流
  [4] 环境诊断 (dora doctor)
  [5] 卸载 dora-rs
  [6] 切换语言 / Switch Language
  [0] 退出

  请输入编号 [默认1]:
  • 1 一键安装:系统依赖 → Rust 工具链 → cargo 镜像 → 拉源码 → 编译 CLI → Python API → 自动验证,一条龙;
  • 3 运行示例 :自动发现官方示例数据流(如 rust-dataflow),dora up 启动协调器和守护进程,dora build 编译节点,dora run 运行,Ctrl+C 停止,新手第一次体验零门槛;
  • 4 环境诊断:执行前会先打印说明------它检查 dora CLI/协调器/守护进程状态、数据流节点健康度、端口占用与系统资源,并汇总诊断报告,看不懂某项 failed 也没关系;
  • 5 卸载dora down → 移除 CLI → 移除 Python API,源码目录删不删让你确认,不会误删;
  • 6 切换语言:中文 / English 双语,脚本会按系统 locale 和时区自动选择,菜单里随时手动切换,选择会被记住。
  • 0 退出后 别忘了 source ~/.cargo/env,或者重开一个终端。

它是怎么做到不卡的

fishros 的体验很好,但启动时同步探测网络环境,网络差的时候菜单要等好几秒才弹出来。我做了一个小优化:

  1. 后台异步探测 :菜单渲染的同时,探测任务(curl 官方 Rust 源,3 秒超时)已经丢到后台 & disown 跑了,菜单立刻显示
  2. 惰性等待 :只有你真的选了安装/更新,才会去 wait 探测结果------而那时候你本来就要等下载,3 秒探测完全无感;
  3. 结果缓存 :探测结果写入 ~/.dora-install/cache,24 小时内重复运行直接读缓存,零等待
  4. 依赖前置检查 :apt 依赖先 dpkg -s 查一遍,已经装过就完全不碰 apt update

出问题不用慌:日志自动留存

每个菜单动作的完整输出(包括编译、下载、诊断报告)都会自动保存到:

复制代码
~/.dora-install/logs/dora-install-<时间戳>.log

动作开始前会打印本次日志路径,结束后告诉你成功还是失败(带退出码)。退出脚本时,只要全程没报错,日志目录会自动清掉,不在用户主目录留任何垃圾;一旦有报错则保留日志。给我反馈问题时直接把这个文件发过来就行,我拿着日志能直接定位到是哪一步、哪个镜像、哪个依赖出了岔子------不用你费劲复述"就是装的时候报了什么错来着"。

中英双语:自动检测 + 手动切换

脚本内置了完整的 i18n 消息目录(约 80 条文案),首次运行时按「用户上次选择 > 系统 locale(zh_CN)> 时区兜底(Asia/Shanghai 等)> 英文」的优先级自动选择语言,菜单 [6] 随时手动切换,选择持久化保存在 ~/.dora-install/lang。管道模式下提示信息也跟随语言。

踩坑实录(dora 官网安装的 4 个坑)

坑 1:系统 Rust 太旧

dora v1.0.0-rc 的 Cargo.toml 里写着 rust-version = "1.95.0",而 Ubuntu 22.04 apt 装的是 1.75。脚本会检测 rustup 是否存在、目标工具链是否安装,缺什么补什么,并且动态读取仓库的 MSRV------以后 dora 升级要求新版本,脚本不用改。

坑 2:rustup 官方源国内不可达

脚本启动时探测 static.rust-lang.org 连通性,不通就自动切换 rsproxy 镜像(RUSTUP_DIST_SERVER / RUSTUP_UPDATE_ROOT),工具链下载从 10 分钟卡死变成 40 秒。

坑 3:crates.io 拉依赖慢

国内环境下自动往 ~/.cargo/config.toml 写入 rsproxy sparse 镜像配置(已配置则跳过,不重复写)。dora 依赖树里有 zenoh 全家桶,不挂镜像编译等半小时起步,挂上之后 6 分钟出头。

坑 4:GitHub 不可达

dora 源码走 Gitee 官方镜像 https://gitee.com/dora-rs/dora 克隆,--depth 1 浅克隆省时间。

无硬编码路径,人人可用

脚本里没有任何 /root/home/xxx 这类写死的路径:

  • 工具链装在 ~/.cargo
  • 源码默认装在 ~/dora-rs(可通过 REPO_DIR=/your/path 环境变量覆盖);
  • 一切运行时文件集中在 ~/.dora-install/(日志/缓存/语言偏好),无报错退出自动清空;
  • 非 root 用户自动走 sudo 装系统依赖。

常见问题

Q:装完 dora 命令找不到?

A:新开终端,或先执行 source ~/.cargo/env

Q:编译要多久?

A:国内镜像下首次约 5-10 分钟(机器性能有差异),增量重装命中缓存 2 分钟内。

Q:只想装 Python API 不编译 Rust?

A:直接 pip install dora-rs,脚本里的 Python API 步骤就是这么做的;但 CLI 必须本地编译,因为官方 release 下载在国内不稳。

Q:支持 macOS / ARM 吗?

A:脚本会检测 uname -s / uname -m,macOS(需要 Homebrew)和 aarch64 架构都能识别;主要测试环境是 Ubuntu x86_64,其它平台欢迎反馈 issue。

Q:退出脚本后终端狂报 unbound variable(SCM/GEM_HOME 之类)?

A:那是你的终端残留了 set -u 状态(可能被之前运行的旧版脚本或 fishros 泄漏),oh-my-bash 主题重绘提示符时就会报。执行一次 set +u 或重开终端即可;新版脚本已在子 shell 中隔离运行,不会再造成这个问题。

Q:卸载干净吗?

A:菜单选 5,会停掉 dora 进程、卸载 CLI 和 Python API;源码目录和 ~/.cargo 里的工具链是否删除由你确认。

链接汇总

写在最后

这个脚本本质上是把「读文档 → 试错 → 换镜像 → 重试」这套重复劳动固化成了代码。如果你也在搞机器人中间件、AI Agent 数据流,或者单纯想找个比 ROS2 轻的框架玩玩,希望它能帮你省下半小时。

相关推荐
Ramble_Naylor13 小时前
只借不占:Rust 的引用与借用
开发语言·rust
k4m7v2pz17 小时前
交叉编译 Rust 到 aarch64 Linux 掌机:glibc 版本与 sysroot 重建的完整踩坑记录
rust·glibc·交叉编译·aarch64·zigbuild·sysroot
k4m7v2pz21 小时前
用 Rust 重造 Java 的 CLI 分发体验:从 java -jar 到 wasmtime run
rust·跨平台·webassembly·wasmtime·wasi·java-jar
Source.Liu1 天前
【IT】Rust实现win下系统信息采集工具的开发
rust
MC皮蛋侠客1 天前
Tauri 2.x 系列(八):与其他语言结合——Sidecar、服务、FFI 与插件的选择
rust·tauri
MC皮蛋侠客1 天前
Tauri 2.x 系列(五):调用系统 API——官方插件、Rust crate 与原生能力
开发语言·后端·rust
磐链科技2 天前
钱包开发中的跨平台架构:Flutter与Rust构建高性能移动端钱包
flutter·架构·rust
MC皮蛋侠客2 天前
Tauri 2.x 系列(四):窗口、菜单、托盘与应用生命周期——做出真正的桌面体验
rust·tauri