-
-
Notifications
You must be signed in to change notification settings - Fork 12.5k
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
[email protected] 1.1.0 (new formula) #971
Conversation
This is still very much a WIP. I need to work out the system Perl bug and whether that's an upstream problem (and then go report it if it is), but here's floating a discussion 🎈. |
Given what I read on the OpenSSL homepage about their release policy and compatibility guarantees, I wonder whether this formula should be named |
#ifdef __#{arch}__ | ||
#{(buildpath/"build-#{arch}/opensslconf.h").read} | ||
#endif | ||
EOS |
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.
This EOS
seems to be misaligned.
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.
Yeah, it is 👍. I'm not sure who put it there originally, but I missed that alignment issue when I re-used it here. Will fix.
Yeah. This sucks. I gotta ask, what is the impetus for 1.1.x at all? Why are they doing this? What's being gained? Sure, zlib and SSLv3 should have probably been disabled a while ago actually, upstream, and/or in the homebrew formula, but that's all water under the bridge at this point. But I definitely think this should be openssl110 (and be relegated to I wonder how much stuff would break if the openssl deps were all changed to libressl. |
if File.read(f).include?(Formula["perl"].bin) | ||
inreplace f, Formula["perl"].bin, Formula["perl"].opt_bin | ||
end | ||
end |
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.
IMO, this part should be in install
instead of post_install
.
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.
Yeah, that shouldn't be a problem. I dumped it here for easier testing, and then didn't move it, but install
makes sense to me.
1.1.x is a (relative to OpenSSL) cleaner & more consistently-styled codebase, which long-term should make life a bit easier for the upstream devs and people who have to package it downstream, and less "cruft" brings with it the chances of less vulnerabilities from areas of the codebase not touched for years. They're also introducing new ciphers that other crypto libraries have had for a while. The 1.1.x release branch is, IMHO, a step forwards for OpenSSL and will eventually make life easier for a whole bunch of other tools and libraries that require it. But yeah, short-term, this is going to be hell for most package managers whilst we wait for the OpenSSL ecosystem to catch up on 1.1.x and patch their projects for it.
Versions, as a tap, is more or less a dying pony at this point. There's already a fairly major cleanup going on behind the scenes there but long-term the core problem is that almost nobody in terms of either contributors or maintainers either wants or has the time to promise to look after versioned formulae adequately. This sort of thing is going to become more commonplace, where upstream release major breaking changes the old version sticks around in the core for a while beside the new version. It'll likely happen with the next Boost release, for example.
Lots. Lots. The LibreSSL team have made their fair share of breaking changes themselves, and for now is a less stable library than OpenSSL, as fond as I am of LibreSSL's work. |
I see. Well, that's good news!
That makes sense. My, a lot has changed while I was gone for a bit.
I think that's really quite prudent, honestly. Personally, I think that bleeding-edge culture homebrew had going for a while may have been useful to a point, but its probably time to settle down a little bit. Perfectly fine with me.
Yeah, I suspected as much. Bummer. |
A CA file has been bootstrapped using certificates from the system | ||
keychain. To add additional certificates, place .pem files in | ||
#{openssldir}/certs | ||
|
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.
While we're kinda on the topic: are you guys aware that this doesn't actually work?
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.
Can you elaborate? It seems to work for me locally.
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.
If you put .pem
s in #{openssldir}/certs
, they do nothing. For me, anyway. Maybe it's because I'm not in /usr/local
.
Updated to reflect Xu's comments on |
How is migration planned to be done for Ideally, the switch to Mixing old and new [ Apologize if this is an already resolved problem. ] |
@vszakats This hasn't been completely formalized and we don't have a coherent document yet we can point people at. This is partially a result of the discussion in Homebrew/brew#60. A summary is in the top post and it's probably worth reading the few comments from Homebrew/brew#60 (comment) to the end. Though if you're curious, I'd say reading the whole thread for more context is worthwhile. |
Thanks for the pointers @UniqMartin! |
Although for full disclosure, even I haven't read that thread yet, knowing full well once I do I'll end up writing a minor dissertation 😅.
Agreed. They shouldn't end up in the same recursive dependency tree in an ideal world.
I'm not even going to set a timetable for this, to be honest. 1.0.2 is supported until 2019 and it wouldn't surprise me if it takes that long for our entire package ecosystem that needs OpenSSL to be shunted across to what will presumably by then by 1.1.1 or something. If we're lucky Debian will take the jump sooner rather than later, significant chunks of the rest of Linux will follow and the ecosystem will go "Linux has moved over, we need to get on with fixing any incompatibility sharpish". We saw something like this happen when Debian killed off SSLv3, although on a smaller scale than would be required here. The primary goal of this package isn't necessarily to move everything right out of the gate; it's to provide an easy way to test what works and what doesn't locally & also fulfil the loose promise that somewhere, somehow Homebrew supplies the latest and greatest.
Yeah, have no desire to go down this path whatsoever. Even if Homebrew had 50 maintainers and a large CI farm I'd have my concerns about this, let alone as we are, heh. |
Thank you @DomT4, I've also read into the other thread and now have a picture of how this is planned. Here's hoping the 1.1.x upgrade can happen relatively fast and smooth. It's an important upgrade, with clear benefits. I could drop some ugly old cruft from existing code while updating, and most attention needed to go into keeping compatibility with previous/current OpenSSL versions. |
Hey - I was wondering if anyone knew where the original discussion that led from from changing from using the Curl CA bundle to using the certs generated by the |
@geoff-codes Your comments were investigated further & resulted in changes:
Thanks for highlighting the potential issue there. |
@DomT4 No problem! I'm considering opening an issue in brew for discussion of possible robust, long-term approaches to this sort of thing. While I wouldn't consider it at all critical, its still not ideal how we're reliant on the Apple CA list at the time of install; when Apple updates the list with a software update, brew's list doesn't get updated without reinstalling OpenSSL, GnuTLS, etc. Which is to say nothing of older versions of OS X, which don't get updated at all. And it would be nice to have some type of mechanism/game-plan in place for if and when something like this happens again. @Owners, would you guys be open to some type of discussion on this? |
Don't worry about the Issue. I've thought about this before and did so again after re-reading the original discussion a few days back. I have 90% of a PR ready to go already. Give me today to file that, PRs generate more discussion than Issues by their nature, especially once I threaten to start merging mine as-is 😜. |
@DomT4 Fantastic. 😉 |
You read my mind. 💯 |
Pushed a bunch of changes here, contacted OpenSSL about the Perl hashbang oddities, etc. PR may be slow, but it's not dead yet 😉. |
Yeah, I'm aware, I'm on the mailing list, heh. Thanks for the unintentional nudge here though! Keep meaning to bump this to the current beta; need to check the status around the Perl hashbang, which by reporting upstream I managed to spark a wider debate which I quietly backed away from & left them to decide the best path forwards 😄. |
This be stable now. PR updated. |
|
||
# This isn't technically needed where Clang exists, but is a small | ||
# dep and is hard to reliably express non-Clang-only in dependency format. | ||
depends_on "makedepend" => :build |
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.
Doesn't clang automatically exist if either the CLT or Xcode is installed? If so, can we just drop this?
OTOH something rings a bell that makedepend
entered the picture for reasons totally unconnected to compilers.
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.
If you changed the default algorithms you needed to run make depend
to rejiggle (technical term that) things to build correctly before. I think it would still be necessary if you've got a dirty source. Documentation upstream is kind of "eh" on the makedepend
situation. There's a commit here that adds some detail, but not much.
I'll try poking it locally. If it breaks I guess we could always add the dep in later.
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.
Yeah, I think makedepend was brought in because we activated the ec-nistp
stuff. I think that without the make depend
step we silently weren't getting the ec-nistp
.
But then how could it be true that makedepend
is unnecessary when clang is present?
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.
openssl/openssl@30752dd
openssl/openssl@09aa263
Apparently Clang (since always) and some GCC versions support dependency generation natively without having to lean on makedepend
to do that magic.
It's going to take us a long time to transition every formula across to the new OpenSSL release (when it's stable) given the not insignificant API changes, as well as upstream deprecation of zlib compression and SSLv3. Consequently, we're going to be running two OpenSSL releases for the foreseeable. The OpenSSL formula will remain for now the 1.0.2 branch which is supported until 2019, this formula will track 1.1.0 which is supported upstream till ~2018 under current plans. Some things in this formula are on by default, such as the overdue death of SSLv3 and zlib compression, but since those are fairly big departures from OpenSSL releases to date it's explicitly stated in-formula so when people report "This is broken using this" some of the very obvious breakage points are highlighted at cursory glance. This OpenSSL release also introduces a fairly high Perl requirement. I'd like to note at this point this isn't our choice and is something we're trying to minimise, but to be somewhat blunt if you're running 10.8 or less you're going to have to accept the system utilities on those OS X versions are increasingly problematic today. This formula is a fairly large departure from the way people have come to expect Homebrew to behave in terms of always running the latest. OpenSSL is a particularly punchy example of this, but going forwards incompatible releases are going to be given a little more leeway to remain around until a transition can happen in a mildly smoother manner than we've perhaps managed previously at times.
Debian has had OpenSSL 1.1.0 prereleases in experimental for a while now, and there is a transition tracking bug open (the lengthy list of blocking bugs there are packages that failed to rebuild against 1.1.0). It'll probably take a while to sort out the broken packages, but I expect the next stable release of Debian to have 1.1.0. So at worst, you can probably borrow Debian's patches in many cases, but hopefully most of these problems will be fixed upstream, rather than requiring distribution-specific patches. |
Yeah, I've been keeping an eye on some of them. It's a few months old now so less useful but https://breakpoint.cc/openssl-1.1-rebuild-2016-05-29/ is interesting & an easier format to read through.
Yeah, I don't have a lot of interest in carrying around what is essentially a feature patch (support for 1.1.0) given OpenSSL are supporting 1.0.2 as an LTS branch. Not planning to leap over upstream releases unless absolutely necessary for whatever reason. Transition is also complicated by potentially overlapping linkage, so for example, if you
We may well change that plan as time passes; If I could I'd have the entire ecosystem using OpenSSL 1.1.0 tomorrow but it really depends on how quickly we can get this done without breaking significant things for users. |
This is blocked on Homebrew/brew#812 temporarily. |
Now blocked on Homebrew/brew#832. Making progress! |
@DomT4 ! |
Can't quite yet. There's a new blocker around
I poked at it a bit in
|
@DomT4 Weirdly worked fine for me the second time I did a |
It
|
Because someone will notice & ask, the Merged in 663e479. |
@DomT4 Hooray! 👏 |
@MikeMcQuaid Thanks for your help finishing up the I'll try and spin up a VM soon locally to rebuild as much as possible in the core that currently uses |
Follow-up from #812 to fix handling fully-qualified versioned formulae names. Allows pulling Homebrew/homebrew-core#971.
Follow-up from #812 to fix handling fully-qualified versioned formulae names. Allows pulling Homebrew/homebrew-core#971.
brew install <formula>
(where<formula>
is the name of the formula you're submitting)?brew audit --strict --online <formula>
(after doingbrew install <formula>
)?(Apart from one issue, which I've deliberately ignored for consistency).
It's going to take us a long time to transition every formula across to the new OpenSSL release (when it's stable) given the not insignificant API changes, as well as upstream deprecation of zlib compression and SSLv3.
Consequently, we're going to be running two OpenSSL releases for the foreseeable. The OpenSSL formula will remain for now the 1.0.2 branch which is supported until 2019, this formula will track 1.1.0 which is supported upstream till ~2018 under current plans.
Some things in this formula are on by default, such as the overdue death of SSLv3 and zlib compression, but since those are fairly big departures from OpenSSL releases to date it's explicitly stated in-formula so when people report "This is broken using this" some of the very obvious breakage points are highlighted at cursory glance.
This OpenSSL release also introduces a fairly high Perl requirement. I'd like to note at this point this isn't our choice and is something we're trying to minimise, but to be somewhat blunt if you're running 10.8 or less you're going to have to accept the system utilities on those OS X versions are increasingly problematic today.
This formula is a fairly large departure from the way people have come to expect Homebrew to behave in terms of always running the latest. OpenSSL is a particularly punchy example of this, but going forwards incompatible releases are going to be given a little more leeway to remain around until a transition can happen in a mildly smoother manner than we've perhaps managed previously at times.