-
Notifications
You must be signed in to change notification settings - Fork 26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Integration in bloom, and binary package repository #50
Comments
Comment from @dirk-thomas on the ROS answers discussion:
Arch repositories are fairly simple to set up (see the Arch wiki), everything appears to be done with the
Having a server available solves most of the problem (dependencies aside). The main difficulty will probably be to add Arch support to |
Hi, good thing about bloom. I can try to help there but I'm not very proficient in python. Regarding dependencies. At first maybe it would be better to rely on pacaur/yaourt as part of the build process. If this gets going I guess some people may be willing to support the main AUR dependencies . |
One question, though. What is the relation between what bloom does and ros_buildfarm does? From what i understand, bloom is who creates the so-called release repository and ros_buildfarm reads this to know what to do, right? |
That's right, there are 2 distinct steps:
For dependencies, not having binary packages available means the build farm would need to download the source and recompile everything. If something depends on PCL for instance, merely handling the dependencies is likely to take like an hour... That's not gonna cut it. If we have a TU backing us up, that part could be done in |
The build farm will take the release repo as input and produce a binary for each package. It will not build any dependencies - they much have been either available from somewhere else or built by the build farm from other release repos. The build farm will make sure to invoke all jobs in the correct topological order as well as will perform rebuild of downstream packages (since we can't assume ABI compatibility). |
@bchretien I'm currently setting up a private gitlab server with CI where I have managed to set a job for every push where an ubuntu package is generated and stored in a repository, which allows to handle dependencies when compiling other projects in the server. For this, I'm using bloom-generate and then compiling with fakeroot (think of a poor man's, but simpler, ros_buildfarm). I was wondering if the scripts in this repo could be used in the same way, at least rudimentary, to generate a PKGBUILD from a local catkin package, or if this functionality is only developed by pulling package information from rosdistro. I'm asking since if I set this up, I could also try to get a start with porting this functionality to bloom-release. |
@v01d nice, this sounds promising! The script used here is self-contained and grew over time, so it is a bit messy, and it would just be a temporary solution to validate the approach for you. It could be extended to take a path to a local That's the main difference with bloom's deb/rpm generators. The source code should not be bundled with the PKGBUILD (although that's possible AFAIK). If we can rely on |
Hi, thanks for the info. If I wanted to modify the scripts to work on a When you say "bloom's source tarball" you mean the GBP repository, right? In the long-term I guess the correct approach is to generate the GBP On Tue, Mar 8, 2016 at 12:12 PM, Benjamin Chrétien <[email protected]
|
That's correct. Relying on the source tarball from the GBP repository means that people could easily rebuild the packages themselves (i.e. exactly what we currently have on the AUR). If this is not possible or too complicated, a "dirty" PKGBUILD relying on local files could probably work (and in that case we assume that people simply get the Arch binary releases anyway). I guess this is what you currently have in your proof of concept, right? Now, in that case, the PKGBUILD generated by |
Great! On Tue, Mar 8, 2016 at 2:36 PM, Benjamin Chrétien [email protected]
|
I tested on Also, AFAIK, a PKGBUILD's Moreover, the original commit for PKGBUILD support was based on what was done for Debian/Fedora, and there has probably been changes for them that I now need to apply. |
I'll take a look at the ros dependency handling. I fail to see where is I vote for leaving unessential features as the last step. I nice milestone Maybe you can try rebasing your branch on top of master and see what comes On Tue, Mar 8, 2016 at 10:13 PM, Benjamin Chrétien <[email protected]
|
The problem with the in-source approach (PKGBUILD that is supposed to be inside the source directory) is that this is just not AUR-friendly, so the PKGBUILDs generated by my bloom fork are not gonna cut it for now. Since we can add CLI options to My branch is already up-to-date with master, there's just some code duplication. |
@v01d: To test my bloom fork locally with ROS dependencies, I used rosdep-generator, modified the generated yaml to add @dirk-thomas What is the procedure to add a new distribution to |
I don't know how it affects |
Adding an os (platform) to the distribution file does not affect bloom unless you have a generator which asks what the default distros are for that platform/os. See our recent changes to bloom which "add" support for Debian Jessie: ros-infrastructure/bloom@5305e97 In that case we just slightly modified the debian generator to allow for an empty distros (in the cases where Debian is not setup for older ROS distros) and added an action to the default bloom actions which attempts to generate packaging for Debian Jessie. |
Hi, I would like to see if we can pick up this a bit. As I understand this could be gradually implemented.
To actually have this going we need to:
My only question is: how to deal with the rolling release aspect of Arch? I mean, right now when for example boost is updated, all AUR packages need to be recompiled. In this case, how would the ros buildfarm notice this? Finally, I think that once all of this is going, there's no point in having all ROS packages in the AUR. So I don't think it is necessary to keep compatibility for this use case. I can start with some of the initial steps, I would only ask for some guidance or help in this quest with bloom and buildfarm modifications. |
Indeed, we should start with this. Would you be able to manage that repository?
We'd need a way to manually trigger bumps of relevant packages when rebuilds are required. I don't know if this is possible/compatible with the buildfarm.
I'm quite busy at the moment, but I can provide information on what I've done so far. |
You won't need to bump the package versions. A simple manual retriggering of the binary jobs should be sufficient. Each package has the timestamp it was build on appended. |
@bchretien @dirk-thomas can you confirm that the first step is ok? If so, I can make a pull request to rosdistro repo and have that out of the way. After that I can test the bloom fork and re-generate and locally compile pkgbuilds. We can see from there.
I can get the ball rolling and put the necessary precompiled packages up somewhere to test the system. But I'm not sure if I can get commit in the long term to do so. I have the hope that if we have a working system it will be easier to convince a TU to maintain them.
But does the buildfarm check if for example boost was updated and triggers a rebuild? Or is there an API which should be used to externally trigger the rebuild? In the latter case, I understand that it would be ArchLinux's build system's responsibility to invoke this API. |
I am not sure if adding it to the public rosdistro would have any effect. Since you only need this for trying to build local packages I would recommend to fork the rosdistro repo, apply the change their, and then use this fork for your local package tests. |
No, the build farm does not trigger any jobs based on third party packages. It is assumed that all external dependencies are ABI compatible and don't require a rebuild of downstream packages. There is no custom API in |
I understand. I wanted to clear the simpler tasks. Local compilation is just a first task. The idea is to eventually have this officially support. I can test the bloom fork locally. I guess this simple addition into rosdistro can be proposed if we get a pull request for bloom adding support for arch.
For a rolling release distro as arch ABI compatibility can't be ensured, so this rebuild process would be necessary. I don't know much about Jenkins. Do you see the whole system feasible? I would like to work on this but I'm unsure about the reception of the addition of support for Arch. |
Adding a trigger mechanism to |
I made this simple script (it depends on |
Nice! Here's the output for ros-indigo-desktop-full: collada-dom By the way, do you know of a free hosting service where I could put up a
|
@bchretien which branch of your bloom fork repo should I use? |
@v01d it should be |
@bchretien I've downloaded your fork and tried the pkgbuild-support branch. I'm using a rosdep entry generated by rosdep generator with arch included for kinetic. I used bloom-generate on one of my own packages (with many ros deps) and created a functional PKGBUILD which also builds fine. Besides any other aspects you mentioned which could be polished, it would seem that I can reproduce the test you performed. Now, I'm a bit lost on how to proceed. Is this enough on bloom side? I mean, does the buildfarm actually use bloom-generate and then invokes the required build commands (makepkg in this case)? I've looked a bit into ros_buildfarm but is seems incredibly complex to trace where bloom is invoked and how would I start adding support for building for arch. Moreover, testing ros_buildfarm on my own computer also seems very difficult to me (I don't know much about jenkins, however I do handle docker). If buildfarm does indeed invoke bloom-generate, I understand that it would be required to generate a PKGBUILD which gets the sources from the GBP repository and not the sources locally. Is that so? In this case, I understand that for Debian a "source package" is first generated and then it is built into a binary package. I'm not sure how would this work for arch. I would imagine that building a source package is nothing more than generating the PKGBUILD, right? |
The build farm does not run |
Ok, now I understand. Thank you. Definitely for me, modifying the buildfarm code feels out of my capabilities at the moment. So I hope someone else can take this task. I've been working on getting all non-ROS AUR dependencies compiled and up in a testing repository. I've created a github org github.com/ros-archlinux where all packages are stored. These are forks of AUR git repos. I'm working on "rosarch" branch on each repo. I've built a system which builds packages using TravisCI and uploads them automatically to the testing server. For this I'm using a docker-based archlinux build image (github.com/v01d/archlinux-build). The server URL is http://rosarch.h0l.3s (replace the 0 and 3 with an 'o' and 'e'). This is a free hosting service so I will likely eventually run out of bandwidth if it is used frequently. I'm still finishing building the required packages but it seems to be going well (after fighting a bit with docker and Travis). By the way, @bchretien, I've left you a comment on AUR, regarding some packages (gazebo dependencies) which I cannot clone. If you can look into it, I can also get that built. EDIT: all deps for desktop built and uploaded. if the missing repos can be retrieved, I can do the same up to desktop-full. By the way, @bchretien, maybe it would be better for my to adopt these packages in AUR and push also there to avoid duplication. It would be nice to receive pull request for out-of-date packages to help me maintain these. |
@v01d I've added you as a co-maintainer for the ROS dependencies I currently maintain. That should help setting everything up. |
Cool. If you agree I will then merge my rosarch branch to master and push On Sun, Jul 3, 2016 at 3:51 PM, Benjamin Chrétien [email protected]
|
What are the differences on those rosarch branches? Simply version updates? |
They're mostly the same, with a few exceptions. I've updated poco to latest On Sun, Jul 3, 2016 at 4:09 PM, Benjamin Chrétien [email protected]
|
Ok, that sounds reasonable to me! Feel free to apply your changes on the AUR. |
I wrote my own fork of Bloom to support Arch https://github.com/gdlg/bloom but it's very similar to what has been done here. When I started it, I wasn’t aware of this thread. I have posted a message here http://discourse.ros.org/t/who-is-using-ros-on-archlinux/388/6. For the sources, I moved all of them in a subdirectory alongside the PKGBUILD. I think that’s less messy that referencing the parent directory. So far, to test it, I forked rosdistro (https://github.com/gdlg-rosarch/rosdistro) and the *-release repositories into https://github.com/gdlg-rosarch. I generated a new “rosarch” track for Arch which essentially duplicates the “kinetic” track and uses the last released version. I could maintain a script which detects new releases in the “kinetic” track and automatically releases new version for the “rosarch” track. Locally, I had to bump the version of urdfdom and urdfdom-headers to 0.4.2. I also bumped console-bridge to 0.3.2. I would like to issue a PR to Bloom. Hopefully, Arch could be released for Lunar Loggerhead. |
Now that the whole system is fairly stable and has been working well for years, we can consider integrating the work that was done here inside bloom, the ROS release automation tool, and try to establish a repository with binary packages as is done for Debian (and probably Fedora). The first task would be to list the requirements for this endeavor. Because of the rolling-release style of Arch, there might be some key differences in the way we approach this compared to Debian/Ubuntu. The question of dependencies would also need to be resolved: should we package them as well? Or find a TU willing to handle them in
[community]
?Concerning bloom, I found the POC I was investigating 2 years ago. I can update it with what I ended up doing in arch-ros-stacks after, and see how far I can go.
cc @v01d, @dirk-thomas
Related discussion on ROS answers here.
The text was updated successfully, but these errors were encountered: