发布第三方功能包
Contents
默认情况下,bloom会向公共ROS构建工厂发布包。 请参阅build.ros.org以获得关于发布包的更多信息和策略。
在这种情况下,第三方包是一个非catkin包,你希望将其释放到ROS生态系统中。需要将一个包发布到ROS生态系统中的需求是详细在REP-0136。基本步骤如下:
有catkin配置文件 package.xml
可以在catkin上运行run_depend
需要在<export>有<build_type>标签
安装catkin package.xml
与这些要求有关的细节在REP中。
第三方包可以通过两种方式实现这些需求:在上游存储库中,或者在发布存储库中。
修改上游库
通过在上游存储库中添加一个package.xml和安装它的规则,这个包看起来就像一个catkin包到ROS生态系统。这是一个干净的解决方案,因为它不需要对正常发布过程进行任何修改,而且对上游存储库几乎没有影响。此外,如果package.xml和安装规则是在上游源代码中,然后第三方包可以从源文件中检出的同时在catkin包中构建。如果你选择此方法,那么只需创建一个包。使用此作为参考的: 教程
通知发布存储库
然而,通常情况下,把package.xml放到上游存储库中不是一个选项。在这种情况下,你可以"inject"这个包,使用bloom来进入发布存储库。
设置发布存储库
首先需要做的是遵循创建发布存储库教程。通常,这需要在github上创建一个发布存储库,并将其克隆到本地机器上。
进入发布设置
创建发布存储库之后,需要创建发布跟踪。你可以从头创建一个新的,或者复制和编辑一个旧的配置。创造一个新的轨道:
$ cd /path/to/release/repository $ git-bloom-config new hydro
或者,从旧的轨道复制和编辑:
$ cd /path/to/release/repository $ git-bloom-config copy groovy hydro $ git-bloom-config edit hydro
其中hydro是你创建时的名字追踪(并且该名字最好为你想要发布ROS版本的名称)。遵循配置发布追踪 进入配置选项, 除非以下差异。
版本的条目:
Version: :{ask} This means that the user will be prompted for the version each release. This also means that the upstream devel will be ignored. :{auto} This means the version will be guessed from the devel branch. This means that the devel branch must be set, the devel branch must exist, and there must be a valid package.xml in the upstream devel branch. <version> This will be the version used. It must be updated for each new upstream version. [':{auto}']:
因为没有package.xml上游bloom不能猜测版本:{auto},但是我们可以让bloom通过输入:{ask}来提示版本的发布。
"Patches Directory"条目。把它设置为·hydro·或任何你喜欢的名字。这将是master分支中的文件夹,其中包含你的package.xml。
添加Package.xml到master分支
现在我们已经通知bloom,在主分支中hydro文件夹下的将会有补丁(或者你告诉它的任何内容),我们需要在该目录添加package.xml覆盖到上游。首先切换到master分支,并创建上面指定的补丁文件夹:
$ git checkout master $ mkdir hydro
其中hydro是你填写"Patches Directory"的名字。
现在在这个目录创建package.xml,你可以使用这个:catkin/package.xml 作为参考,确保可以在catkin上有run_depend。
另外,与其将一个实际的版本放到<version>的标签上,不如把它放在:{version}中。:{version}将被每次发布的版本替换。例如:
<?xml version="1.0"?> <package> <name>foo</name> <version>:{version}</version> <description>The foo package</description> <maintainer email="user@todo.todo">user</maintainer> <license>BSD</license> <run_depend>catkin</run_depend> <buildtool_depend>cmake</buildtool_depend> <build_depend>boost</build_depend> <run_depend>boost</run_depend> <export> <build_type>cmake</build_type> </export> </package>
在上面描述的案例中,每次在发布存储库上运行bloom时,将提示用户发布版本,根据"release tag"配置,将获取上游源代码的归档文件,并将其导入到发布存储库的upstream分支,package.xml被覆盖在upstream分支上,并在包中添加:{version} 被用户提供的版本替换的package.xml。
此时,你需要提交package.xml模板到主分支:
$ git add hydro/package.xml $ git commit -m "Added package.xml template"
添加安装规则作为补丁
在将安装规则添加为补丁之前,你需要运行git-bloom-release一次,以便有一个发布分支可以修补:
$ git-bloom-release hydro
hydro是你先前创建的跟踪的名称。
在运行后,你可以添加你的补丁。首先查看发布分支:
$ git checkout release/hydro/foo
发布标签是release/rosdistro/packagename.
注意: 请注意,发布模板基于package名称,而不是repository名称。一个存储库可以有多个包,因此可能有多个release/rosdistro/*分支。你需要对其中的每一个安装一个类似的安装规则补丁。
现在,在这个分支上编辑您的构建系统来安装package.xml。在CMake中它应该是这样的:
... # Install catkin package.xml install(FILES package.xml DESTINATION share/foo) ...
其中foo是包的名字(该值为package.xml中的<name>)。
一旦不将其添加到构建系统中,提交并返回到远程:
$ git add . $ git commit -m "Added install rule for package.xml" $ git-bloom-patch export $ git push
现在只需再次运行git-bloom-release:
$ git-bloom-release hydro
hydro是你之前创建和发布的跟踪的名称。
现在你的发布存储库已经设置好了,你将不需要为将来的版本做任何特别的事情。
向上游存储库添加额外补丁
从上面的安装中,遵循与package.xml中的补丁相同的流程。记住,在你把更多的提交给release/rosdistro/foo来导出补丁之后,就调用git-bloom-patch export。
将补丁从一个ros发行版转移到另一个
如果你已经为一个旧的ros发行版本(例如,groovy)设置了一些针对上游repo的补丁,并且希望将这些补丁移植到新的ros发行版中,然后按照下面的说明操作:
首先,为更新的ros发行版(hydro)执行一个发行版,以确保有一个发布分支可以修补:
$ git-bloom-release hydro
然后,从您的旧的ros发行版(groovy)中签出补丁,并将它们导入新的ros发行版(hydro):
$ git checkout patches/release/hydro/foo $ git ls-tree --name-only -r patches/release/groovy/foo | grep '\.patch' | xargs -I {} sh -c 'git show patches/release/groovy/foo:"$1" > "$1"' -- {} $ git add . $ git commit -m "Importing patches from groovy release branch" $ git checkout release/hydro/foo $ git-bloom-patch import $ git push --all $ git push --tags
然后像往常一样进行发布:
$ git-bloom-release hydro
完成发布
现在你可以完成第一次发布教程,可以开始第一次运行bloom.
注意: 如果你正在重新运行第三方包以满足新的建议,你应该确保release/*或debian/*分支中没有补丁需要移植。
将来的版本
在第一次发布之后,你在其中添加了一个模板package.xml和一个发布分支补丁,你可以直接跟随。发布catkin包教程来成功发布。
故障排除
对于某些版本来说,还有一些细节可能是必要的,并且可以使用新的建议来转换以前发布的第三方包。
自定义构建命令
一些软件包需要比标准cmake && make && make install更多的选项,而其他一些包甚至都不是cmake。在这些情况下,debian文件夹中的rules文件需要修改。要执行此操作,至少要执行一次git-bloom-release命令,然后签出到debian分支:
$ git checkout debian/hydro/foo
其中hydro是发布的ROS发行版,而foo则是包的名称。
在这个分支中,应该有一个包含模板文件的debian文件夹,其中包括rules.em。编辑该文件以满足你的需要,然后提交更改:
$ git add debian/rules.em $ git commit -m "Customized debian rules file" $ git-bloom-patch export
然后重新运行bloom:
$ git-bloom-release hydro
其中hydro是你希望运行追踪的名字。