ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange |
1 | initial version |
I'll see if I can address your questions and then give a suggested approach:
The “easier” but not sure if it works well: generate a tar.gz of the catkin workspace after having cleaned it from source code…. Do you have experience on this? Do we need to remove the devel folder? if we remove the src folder this doesn't work, do we need to leave at least the config and lanch files? more?... Is this documented somewhere? Maybe we need to compile catkin with release flag?
When you build a catkin workspace, you can tell it to do make install
. This can be done with catkin_make install
or catkin_make_isolated --install
, depending on the build tool you are using. The result will be an install
folder along side your src
, build
, and devel
folders. This install
folder stands on its own, you can delete the src
, build
, and devel
folders and it will still function. It is also relocatable (a feature that cross-compiler's frequently use), meaning you can move the folder and it should still work. Debian package generation does just this, it takes the result of bloom (source + debian configuration files) and builds then installs your packages into an install
folder, then it packages up that install folder and that is what is distributed in the resulting .deb
file.
The more complex but cleaner and more long-term: generating a debian and putting it on a server. I’ve seen that we can use Bloom to generate a debian automatically in GitHub. And then there is pull generated to populate the ROS buildfarm…
The bloom-release
command will generate the required debian configuration files, and then open a pull request on github. The pull request is only required if you are going to have our build farm compile your packages into .deb
files. This requires that your code is open source, so this will not be what you want. As @IsaacSaito suggested, this answer should help you manually build the .deb
from the result of bloom without a pull request or our farm:
http://answers.ros.org/question/67345/build-debian-package-locally/?answer=67373#post-id-67373
Then you can automate that process with a CI server like Jenkins or buildbot, see buildbot-ros
:
https://github.com/mikeferguson/buildbot-ros
But then, where is it compiled? In local? By github? By ros.org?
If you open the pull request it will be built on jenkins.ros.org and the result hosted on packages.ros.org (open source only).
How can we specify/include in the debian only compiled code and not source code? (or a mix)
If you are using our farm, the source code and binaries are both always provided in the result, there is no configuration, hence the requirement for open source.
Can we generate only one debian for a metapackage? or will we have to generate as many .debs as packages?
If you are using bloom, there will be one .deb
per package and per metapackage (contains just the metapackage not the packages which belong to it). If you want to generate a single .deb
for multiple catkin packages, consider combining catkin_make install
(which is really just cmake
+ make
+ make install
) with checkinstall
:
https://help.ubuntu.com/community/CheckInstall
Do you know how to disable this pull to ros.org? and to github (or how to configure the deb to be generated on our git server?)
The answer linked above tells you how to use bloom to generate the debian configurations, but not open a pull request.
If we don’t publish it on ros.org , can we still get the track feature to manage release version and tags etc…
No, all of our tools require our infrastructure, but they are all open source and designed with as few assumptions about infrastructure as possible, so it would be possible to adapt them to private use, though at this time we do not provide documentation on how to do that.
If/when we'll have generated the .deb, what kind of server would we need to implement to get a private server to be able to run apt-get? (or any similar method) Might PPA be the solution? Or can one call an apt-get on a private git server since the release debian will be there?
To host .debs
you will need an apt repository:
https://wiki.debian.org/HowToSetupADebianRepository
And finally, how/where does the obfuscation popsup in this process?
We don't support this functionality at all, this is entirely up to the user, we provide our process and infrastructure to facilitate federated collaboration, so it isn't a feature which is requested often enough for us to support.
But when running fakeroot debian/rules binary the compiler doesn’t find the include files that are located in the "devel/include/" directory of the catkin workspace and thus aborts.
So the fake_root process assumes that you have your dependencies available for what ever package your are trying to build, you likely did not source the setup.bash
file for the workspace containing the packages on which your package is depending.
Hopefully this gives you some directions in which to go investigating solutions. If you find something that works really well for your use case please consider providing details here for others.