创建ROS的软件包服务器
前提
1台有公网ip的服务器, 最好有域名
服务器配置
-
连接到服务器
shellssh root@域名或ip
-
创建要存放包的路径
shellmkdir -p /var/ros/ubuntu
-
安装必要的软件
shellsudo apt update sudo apt install nginx dpkg-dev gnupg
-
在自己的主机编译好ros包, 具体可以看使用自定义包进行ros的.deb文件生成
-
将这个包从自己的主机上传到服务器
shellscp ros-noetic-xxxx-0focal_amd64.deb root@域名或ip:/var/ros/ubuntu
-
创建包索引以及公钥生成
shellssh root@域名或ip # 创建公钥 gpg --full-generate-key gpg --output ~/my_repo.gpg --armor --export 'Your Name' # 将公钥移动到/var/ros目录 mv ~/mr_repo.gpg /var/ros # 创建包索引(该目录下存在deb包时再执行该命令) cd /var/ros/ubuntu dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz # gpg签名 gpg --default-key 'Your Name' -abs -o - Packages.gz > Packages.gz.gpg
-
配置nginx服务器
shellssh root@域名或ip sudo vim /etc/nginx/sites-available/
修改成这个样子就差不多了
nginxserver { listen 80 default_server; listen [::]:80 default_server; # 这里是根目录的配置 # 也就是 http://ip或域名/ 直接访问到的目录 # 如果要去二进制目录下 http://ip或域名/ubuntu root /var/ros; index index.html index.htm index.nginx-debian.html; server_name _; location /ubuntu { autoindex on; try_files $uri $uri/ =404; } location / { try_files $uri $uri/ =404; } }
重启nginx服务
sudo systemctl restart nginx
客户端配置
-
获取公钥(这里不用apt-key add的原因是从 Ubuntu 20.04 LTS 开始,
apt-key
命令已被弃用。)shellcurl -fsSL http://your-server/my_repo.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/my-repo-key.gpg >/dev/null
-
添加软件源
shellecho "deb [signed-by=/usr/share/keyrings/my_repo.gpg] http://域名或ip/ubuntu ./" | sudo tee -a /etc/apt/sources.list
-
更新软件源并下载包
shellsudo apt update sudo apt install ros-noetic-xxxx-0focal_amd64.deb
如果无法更新, 显示
shellErr:2 http://ip或域名/ubuntu ./ Release 404 Not Found [IP: ip或域名]
如果确定该服务器安全, 可以直接将
/etc/apt/sourcelist.txt
里面的deb [signed-by=/usr/share/keyrings/my_repo.gpg] http://域名或ip/ubuntu ./
修改为deb [trusted=yes] http://域名或ip/ubuntu ./
这个问题暂时没解决, 后面再说 -
运行ros包
注: 第一次可能要输入完整的命令, 暂时没弄清楚是为啥
shellroslaunch xxxx_xxx xxxx.launch