Hi John-Paul,

On 09/10/15 21:43, John-Paul Robinson wrote:
Hi,

I'm using EasyBuild 2.3.0 and are wanting to build Cufflinks.  We tried
the Cufflinks-2.2.1-goolf-1.4.10.eb on CentOS and the build fails.
How does it fail exactly? It works fine on our Scientific Linux 6 system.

Fixing the the build falls into one of several categories:
* patch GCC 4.7.2 (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52903)
* update goolf-1.4.10 to use GCC 4.7.3 (fixes the bug in 4.7.2)
* create a new Cufflinks easyconfig based on goolf-1.7.20

As a learning exercise, I'm following each path. (BTW, I do plan to
submit pull requests once my builds are verified.) In doing so, I'm
wondering if there are there any recommended practices for updating and
easyconfig that has a bug, changing a compiler version dependency or
introducing new easyconfigs.

I wouldn't start with backporting patches to older an compiler version and rebuilding the compiler, especially since there's a new minor release (4.7.3) for the same major compiler version (4.7). Just moving on to the newer minor (or even major) release of the compiler makes more sense, imho.

We never update toolchain components without bumping the toolchain version in the easyconfigs we ship via the easybuild-easyconfigs repository, and I wouldn't recommend it either. Bumping a compiler (or any other component) should imply also bumping the toolchain version (that's the whole point of having a toolchain version imho).

Rebuilding Cufflinks with a newer toolchain version makes most sense to me.
And of course, a pull request for it makes sense. :-)


I assume the git-hooks are designed to allow sites to build against
pending upstream commits using the "build against pull request feature".
You're referring to eb --from-pr here, right?

It is mostly intended to easily pull requests to check whether they're good to merge.

For new easyconfigs, it can also be used to build & install things not included in the latest release. But beware that later pull requests may modify the easyconfig before it gets included in a release (for whatever reason)...

I haven't seen much in the way of recommendations for handling the local
environment to make contributing easier.  For example, how to install
the easyconfig or blocks so that I can work against a git clone'd tree
(I'm currently using a symlink to the repo easyconfig dir inside my
personal easybuid env).

There are a couple of ways to sit on top of the current 'develop' branches, but it also a risk (just so you're aware).

Easyblocks and easyconfigs in the 'develop' branch may require features in the EasyBuild framework that are not included in the latest EasyBuild yet, and for all intents and purposes you should always consider 'develop' to be unstable. Although we are quite (very, even) careful when merging changes to the develop branch, it's always possible that bugs are introduced that only pop up during a thorough regression test (which is typically only done shortly before a new release).

One way is to simply clone the different repositories (framework, easyblocks, easyconfigs), set $PYTHONPATH and $PATH, and use EasyBuild develop directly.

Another option is to install the develop branches using easy_install/pip/whatever (for example, easy_install --prefix <prefix> https://github.com/hpcugent/easybuild-framework/archive/develop.tar.gz, after setting $PYTHONPATH and pre-creating the 'site-packages' dir).

If you only care about easyconfigs, you can clone/download the develop branch, and use the --robot-paths configuration option (see http://easybuild.readthedocs.org/en/latest/Using_the_EasyBuild_command_line.html#controlling-the-robot-search-path) to make sure EasyBuild will pick up these easyconfigs. A simple "git pull" can make sure you're getting the latest easyconfigs that were reviewed/tested thoroughly before merging.

To use 'develop' easyblocks by occasion, the --include-easyblocks configuration option can be very useful (see http://easybuild.readthedocs.org/en/latest/Including_additional_Python_modules.html#include-easyblocks).

There's also a script available to set up the 'develop' clones, see http://easybuild.readthedocs.org/en/latest/Installation_Alternative.html#installation-of-latest-development-version-using-provided-script .
   Given that the easyconfigs are all distributed
from upstream in one big chunk vs. individual repos, I may have a need
to maintain local variations that don't make it into the upstream or
aren't appropriate for it.

What approaches do you recommend for handling these situations?

To maintain local variations, you can throw your easyconfigs in a separate directory, and list it first in --robot-paths. That way, your customized easyconfigs will be considered first, before other easyconfig files with the same name.

Currently, we don't have a good way of keeping locally maintained copies of easyconfigs in sync with their equivalent 'upstream'. One idea has been to add support for 'easyconfig patch files' (.ebp), where you can just specify the customizations, rather than requiring you to copy the whole easyconfig file. But nobody has stepped up to implement this yet, so it remains just an idea.

I hope this helps, do let us know if you have any more questions.

Unless I'm mistaken, this is your first post to the list, so: welcome to the wonderful world of EasyBuild!


regards,

Kenneth

Reply via email to