-
Notifications
You must be signed in to change notification settings - Fork 651
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
update 3rd party libraries, part2 #3707
base: main
Are you sure you want to change the base?
Conversation
ca31a3a
to
25a88f3
Compare
f7603a6
to
6481118
Compare
b254d90
to
2a93369
Compare
6481118
to
f39584d
Compare
2a93369
to
d79d2c9
Compare
a45865d
to
5bb9771
Compare
5bb9771
to
84e7715
Compare
84e7715
to
1766a7b
Compare
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #3707 +/- ##
==========================================
- Coverage 88.92% 88.85% -0.07%
==========================================
Files 254 256 +2
Lines 14294 14560 +266
==========================================
+ Hits 12711 12938 +227
- Misses 1583 1622 +39 ☔ View full report in Codecov by Sentry. |
@@ -1,5 +1,5 @@ | |||
{ | |||
"builtin-baseline": "ca7b1b15f548c25c766360593a2c732d56ed0133", | |||
"builtin-baseline": "c82f74667287d3dc386bce81e44964370c91a289", |
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.
builtin-baseline
field defines the versions of the dependencies of our vcpkg packages. In this particular case, grpc needs this update to get his dependency versions right because of his own update. The value of builtin-baseline
field is simply the commit hash of the vcpkg
repo.
Sorry to bother you guys. Recently, multipass team has been dealing with rebasing the patches (code commits on the top of the release tag) of grpc after updating grpc to newer version. It has been a painful process due to the size of the patches and conflicts with the grpc refactors and changes. This really got us thinking what is the exact reason to keep these patches. Why multipass has a unique use case from the regular ones? By looking at commit messages and the code, my superficial understanding is that. Multipass wants to support skipping verifying server certificate. Because of that, the Any information would be appreciated in case you guys know about it, thanks a lot. |
Basically to support SSH-style authorization. Both sides generate their encryption keys in isolation, without a CA between them. All communication is encrypted, and the key fingerprints are what determines whether they want to talk to one other on a higher level, not whether the certificates are valid or not. |
Thanks for the reply. But why exactly does multipass have to use the SSH-style authorization? The standard TLS/mTLS always requires the server certificate and verifies it. As a result, grpc api only provides My wondering here is whether this orthodox way has some inadequacies we are not aware of or it somehow does not fit in the multipass use case. Any info will be appreciated, thanks. |
…, which is non-intrusiveserver address resolver from intrusive change to
@@ -0,0 +1,2 @@ | |||
list(REMOVE_AT ARGS 0) | |||
_find_package(gRPC ${ARGS}) # Shouldn't this be fixed downstream instead of using a Wrapper? |
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.
_find_package(gRPC ${ARGS}) # Shouldn't this be fixed downstream instead of using a Wrapper? | |
_find_package(gRPC ${ARGS}) # Shouldn't this be fixed downstream instead of using a Wrapper? | |
WIP
close #3568
Original repo
1. vcpkg, updated to 2024.09.30.
vcpkg:
1. grpc, 1.52.1-> 1.60.0, ongoing.
There are a lot hassles in grpc update:, so it is worth to talk about it. grpc has two layers of patches in the multipass use case, the first layer is the commits on the top of the standard grpc release.
Layer 1:
Orignally, there are 5 commits on the top of 1.52.1 release tag, that is the branch. They are around two things.
grpc_ssl_server_certificate_request_type
options to the client side and disablepem_root_certs
check along the way, see this section in the spec for details.getsockname
to get local server address instead ofgetpeername
to get the remote address.config_.pem_root_certs == nullptr
checks based on the workflow first 3 commits setup, meaning thatconfig_.pem_root_certs
is supposed to be nullptr because we do not want to verify the server certificate. Because of that, theSslCredentialsOptions::pem_root_certs
field which is the trust store of server certificates is set nulltptr when we create a channel on the client side.GetDefaultAuthority
function. It is a quick fix and it is intrusive as well. The alternative of this is mentioned in the github issue, where they callgrpc.insecure_channel(srv_endpoint, options=(('grpc.default_authority', 'localhost'),))
on python client to overwrite the default authority from the client code, the C++ equivalent to this would be changinggrpc::CreateChannel
calls togrpc::CreateCustomChannel
calls with channel arguments, see below code snippet for detailsBe aware that this change affects all types of address resolvers as opposed to just unix domain socket address resolver. Besides, this approach is also a workaround based on the discussions in the thread. So I personally prefer the current fix and wait for the update of grpc.
Layer 2:
The second layer patches is the new patches applied and the changes made (the diff between the vcpkg tempate file and multipass cutom file) in the vcpkg grpc portfile.cmake file. The goal of the custom portfile.cmake is to cut off the unneeded library build and cut down the library size, which will reduce the build time of grpc, multipass and the binary size of them.
snap: