-
Notifications
You must be signed in to change notification settings - Fork 704
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
{lang}[dummy/,dummy/dummy] Java v1.7.0, Java v1.8.0, JDK v1.7.0_80, ... #5203
{lang}[dummy/,dummy/dummy] Java v1.7.0, Java v1.8.0, JDK v1.7.0_80, ... #5203
Conversation
Intended to provide a more timely way to update packages built with Oracle's Java. I realize it is antithetical to the one true EasyBuild philosophy (which I agree with more than I disagree with) since it subtracts the exact revision of, say, Java/1.8.0_15x. But the present EB implementation for Java makes it very hard to maintain time/secure updates for Oracle's Java. The idea here is that the sysadm can install a new JDK when released and then bump the Java bundle version (which takes very little time). |
Hmm, I'd like to get some feedback from @easybuilders/easybuild-easyconfigs-maintainers on this approach... |
me too (hint hint) |
@JackPerdue - could you spell out the benefits more explicitly? In principle I don't like the idea of a module that hides the sub-version value like this. |
eb --search Java | grep 1.[78].0_ How many of those would you expect to have a secure Java? I believe Oracle would say that only 1.7.0_80 and 1.8.0_144 are supported at the moment. If I built all of those previously should I have to rebuild them all again (and renumber them) for the latest Java? It's like OpenSSH/OpenSSL in a way.... we use the system (os) version to get timely updates. At present, the only way to keep up to date with Java updates with EB is rebuild everything that needs it. Look... I'm totally down with reproducible builds and all that (and it should still be supported through the saved configs/logs for the JDK used) but at present EB's Java nonmenclature is causing problems for me (my boss only wants the latest 1.7 and 1.8 on the system) |
Strictly speaking, this is not specific to Java. It would be nice to be a bit more liberal about versions and support some type of wildcards/ranges, but it's also a can of worms when it's being used too frequently... See also easybuilders/easybuild-framework#746 and easybuilders/easybuild-framework#219. |
Tis true that EB could utilize some of the features Lmod offers in terms of versions. Tis also true that its a can of writhing slimy worms that won't just wiggle onto the hook so you can catch a fish for dinner. This is just a stop gap measure to experiment with to keep everyone's Java up to date. Oracle's Java (and I'll point out its Oracle and not some open source or Sun anymore) has very clear delimiters. Not like whether GCC 6.3.0 will work the same just like 6.3.9... they pretty much say "toss the old stuff, only the new version is supported"..... nailing down the version numbers ends up with a module collection using whatever Java was current at the time. Like I said, its kinda like OpenSSL. EB likes consistency but at the end of the day it doesn't know what version of OpenSSL was used in the underlying build so to some extent it isn't reproducible anyway. Anyway... I manually edited all the modules here to use 1.8.0 instead of 1.8.0_xx in when loading Java. There has been no screaming (I did this on Halloween too). Until we open that can of worms (it can wait), I thought it was a good idea. |
For Java, and for most software in general, I think that EasyBuild is much too strict on version numbers. Using the hierarchy, for compilers and MPI, we are using the two-digits rule within our stack, i.e. the same modules will be visible with OpenMPI 2.1.1 as with 2.1.0, or with GCC 5.4.0 as with GCC 5.4.1 Even two digits seems to be too much for some things. For example, I'm not convinced that modules compiled with Intel 2017.1 aren't compatible with those compiled with Intel 2017.5... Now, with non-toolchain dependencies, we can't really do that as EasyBuild outputs load for specific versions in the modules. |
ping I still think this would simplify things quite a bit. I'm going to have to go through all my easyconfigs that use it before submitting PRs that use Java. I don't much care for it hiding the subversion either but the present EB implementation for Java ends up with a lot of different packages using a lot of different versions. And then there is the security issue (which overrides the version hiding in my book). Sun/Oracle always recommend the latest release for security issues. At present, if I want to secure my system I have to bump the version number in every package that uses and rebuild which causes disruptions on our systems. I should be able to just bump the version number in this and all that use say 1.8.0 would automatically be updated to the latest. Adding Lmod features would be ideal in the end but for now I think this is a reasonable approach in that:
|
|
||
name = 'Java' | ||
jdkver = '1.7.0_80' | ||
version = jdkver[0:5] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@JackPerdue Maybe use 1.7.0
here, and change it below to use
dependencies = [
('JDK', version + '_80'),
]
@JackPerdue I like this approach, but I wonder how we can transition to it... Once this is merged, do we just update all easyconfigs that now depend on a specific version of Java to How do you handle updating the How do you effectively do the update when there's a new version? Do you manually change the module, or replace with |
@boegel To answer your last questions. Yes, I would update all easyconfigs to use the shortened Java version. At present, I manually check for updates "on occasion" (perhaps not often enough). I don't have any tools to notify me when there are new ones. For now, to update, I --force a rebuild of the Java module using the latest JDK (instead manually updating the module) because I want a record in ebfiles_repos (and the installation directory) indicating updates. It only takes a few seconds (as a Bundle) so doesn't cause "too much" disruption (haven't had an issue yet [knock on wood]) |
To get back to this: I'm wondering whether we should go forward with this approach for the @vanzod Can you discuss this during the upcoming EasyBuild conf call, to collect some more feedback? The concrete proposal would be:
This allows to update the Although this is an improvement over the current approach (hardcoding to a specific subversion of |
At least for Lmod, you can use Lmod features to state a dependency over a minimum version instead of a fix3d version, so this should not be an issue for Lmod.
…
On juill. 6, 2018 at 4:56 a.m., <Kenneth Hoste ***@***.***)> wrote:
To get back to this: I'm wondering whether we should go forward with this approach for the 2018b generation of easyconfigs onwards...
@vanzod (https://github.com/vanzod) Can you discuss this during the upcoming EasyBuild conf call, to collect some more feedback?
The concrete proposal would be:
Java-1.8.eb easyconfig which just wraps around latest JDK 1.8.0_x, for example JDK-1.8.0_172.eb
use ('Java', '1.8') in dependencies where relevant
This allows to update the Java/1.8 module in place with JDK updates, without having to reinstalling everything that depends on Java/1.8.
Although this is an improvement over the current approach (hardcoding to a specific subversion of Java, e.g. 1.8.0_162), I'm not terrible happy about the wrapping aspect, as @verdurin (https://github.com/verdurin) already mentioned, but I can't think of a better approach either...
Except maybe for supporting wildcards in dependency versions, but that will cause other problem (different Java versions being used as dependencies making installed modules incompatible with each other over time since they will be using different Java 1.8.0_x versions...).
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub (#5203 (comment)), or mute the thread (https://github.com/notifications/unsubscribe-auth/AHKsam1wm8TTDKHXtvc4OmbcLgRIjPcnks5uDyZNgaJpZM4P0nIg).
|
I like the general idea and at the same time I join @verdurin as not being a supporter of the wrapping. We should definitely discuss what |
@mboisson I believe the Lmod version modifier functions (atleast, between, latest) do not work together with the depends_on feature yet though. I'd prefer to have that over the ability to specify minimum versions, so in my eyes, this wouldn't be of much use. |
@verdurin @vanzod What's your big concern with the wrapping? I see no better (general) way to allow for updating Java to the latest bugfix/security release "in place" without having to regenerate a whole bunch of modules. Relying on Lmod-specific features is not a good solution imho, we need something general that'll also work for sites that don't use Lmod (yet). |
@boegel I don't like the fact that users lose explicit track of which version they're running. In general that feels like a cause of possible problems later. I do see the benefits as well, so it's a trade-off. Certainly the Lmod features mitigate that, with the downside that you mention. |
I propose we follow this approach going forward, starting with the |
@verdurin Users won't lose track imho... |
@boegel I'm primarily thinking of their job submission scripts. I've seen cases where people have been caught out because they've kept in a non-versioned |
@verdurin Not only that, it's also a way more general problem, I don't see how making BTW, you can configure Lmod to only allow full-versioned
The error message could be better, but you can tell Lmod to only allow fully specified |
@boegel May this approach cause issues with Lmod named collections? |
@vanzod I think it depends on whether you've configured Lmod to pin the versions of the modules in the collection. And even then, the previous Maybe @rtmclay can pitch in here? If module |
@vanzod Hmm, seems like your concern is justified...
Not sure if this Lmod config setting has something to do with it...
|
yes it does, because with that option enabled Lmod writes the actual version numbers in the saved collection. |
This will never get merged as is, since i) it's outdated now, and ii) the problems with Lmod collections are a blocker for using a Let's follow up in this at #6712 |
Maybe I am late to the party here, but instead of doing a wrapper, how about using modulerc and default versions ? For example : with modulerc |
@mboisson Ugh, I hate it when people come up with good suggestions... ;-) I played around with this a bit, and it seems like this can actually work, even with Lmod collections:
(the
Note how This helps with saved collections, as long as the
Restoring the saved collection works fine, since the module version alias is irrelevant:
And the new version alias is indeed active, as long as we load
So this is effectively a clean wrapper as originally intended by The only problem is: EasyBuild will need to be made aware of these module version aliases, since when it tries to resolve the EasyBuild relies on the output of
(but this format is most likely specific to Lmod...) And then the other question is: should the So, we're looking at adding support for using a new Thoughts on this @JackPerdue, @vanzod? |
modulerc is hierarchical, i.e. there's a global one and there's a user one. We make a rather heavy use of it on Compute Canada (see below for our current one). If EasyBuild goes this way, there should probably be a mechanism to have both some EasyBuild- managed part and some system-managed part. Since recent versions of Lmod, the modulerc can be written in .lua, so presumably we can "import" a modulerc from another modulerc. @rtmclay would know if this could work ?
|
@mboisson My idea here would be to make EasyBuild control |
(created using
eb --new-pr
)