1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-10-18 19:49:40 +00:00

Envoy is a high performance C++ distributed edge and service proxy for

cloud-native services and applications.

Envoy is originally built with Bazel, monstrous build system written in
Java which does silly things like downloading dependencies from GitHub
and is just a PITA to work against.  This port is built with two simple
makefiles and GNU make(1).  Protobuf semantic validation was disabled
because it apparently requires pulling in ``Go'' language, and I'm not
comfortable with this technology yet.

Note that this port currently requires DEFAULT_VERSIONS+=ssl=boringssl
added to your /etc/make.conf file.

WWW: https://www.envoyproxy.io/
This commit is contained in:
Alexey Dokuchaev 2019-07-10 09:38:32 +00:00
parent b8a2328c74
commit fb65c87f25
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=506344
9 changed files with 441 additions and 0 deletions

View File

@ -142,6 +142,7 @@
SUBDIR += elixir-webassembly
SUBDIR += emacs-w3m
SUBDIR += encode-explorer
SUBDIR += envoy
SUBDIR += ephemera
SUBDIR += epiphany
SUBDIR += erlang-cowboy

103
www/envoy/Makefile Normal file
View File

@ -0,0 +1,103 @@
# Created by: Alexey Dokuchaev <danfe@FreeBSD.org>
# $FreeBSD$
PORTNAME= envoy
PORTVERSION= 1.10.0
DISTVERSIONPREFIX= v
CATEGORIES= www
MAINTAINER= danfe@FreeBSD.org
COMMENT= Edge and service proxy for cloud-native applications
LICENSE= APACHE20
BROKEN_i386= makes a lot of 64-bit assumptions (patches welcome)
BROKEN_SSL= base openssl openssl111 libressl libressl-devel
BROKEN_SSL_REASON= requires BoringSSL
BUILD_DEPENDS= ${LOCALBASE}/include/absl/base/thread_annotations.h:devel/abseil \
${LOCALBASE}/include/fmt/format.h:devel/libfmt \
${LOCALBASE}/include/rapidjson/document.h:devel/rapidjson \
${LOCALBASE}/include/spdlog/spdlog.h:devel/spdlog \
${LOCALBASE}/include/tclap/CmdLine.h:devel/tclap
LIB_DEPENDS= libcircllhist.so:devel/libcircllhist \
libevent.so:devel/libevent \
libgpr.so:devel/grpc \
libprotobuf.so:devel/protobuf \
libxxhash.so:devel/xxhash \
libyaml-cpp.so:devel/yaml-cpp \
libcares.so:dns/c-ares \
libhttp_parser.so:www/http-parser \
libnghttp2.so:www/libnghttp2
USES= compiler:c++14-lang gmake ssl
USE_GITHUB= yes
GH_ACCOUNT= ${PORTNAME}proxy gogo:protobuf googleapis:gapis \
prometheus:pm grpc:grpc
GH_PROJECT= protoc-gen-validate:validate protobuf:protobuf \
googleapis:gapis client_model:pm grpc:grpc
GH_TAGNAME= v0.1.0:validate v1.1.1:protobuf b4c73fa:gapis \
fd36f42:pm v1.22.0:grpc
PLIST_FILES= bin/envoy
PORTEXAMPLES= cors/backend/front-envoy.yaml \
cors/backend/service-envoy.yaml \
cors/frontend/front-envoy.yaml \
cors/frontend/service-envoy.yaml \
front-proxy/front-envoy.yaml \
front-proxy/service-envoy.yaml \
grpc-bridge/config/s2s-grpc-envoy.yaml \
grpc-bridge/config/s2s-python-envoy.yaml \
jaeger-tracing/front-envoy-jaeger.yaml \
jaeger-tracing/service1-envoy-jaeger.yaml \
jaeger-tracing/service2-envoy-jaeger.yaml \
lua/envoy.yaml \
zipkin-tracing/front-envoy-zipkin.yaml \
zipkin-tracing/service1-envoy-zipkin.yaml \
zipkin-tracing/service2-envoy-zipkin.yaml
OPTIONS_DEFINE= EXAMPLES
post-extract:
${LN} -s ../../client_model-fd36f42/metrics.proto \
../../googleapis-b4c73fa/google \
../../grpc-1.22.0/src \
../../protobuf-1.1.1/gogoproto \
../../protoc-gen-validate-0.1.0/validate ${WRKSRC}/api
post-patch:
@${REINPLACE_CMD} -e '/<endian\.h>/d' \
${WRKSRC}/source/common/common/byte_order.h
@${REINPLACE_CMD} -e 's,__APPLE__,__${OPSYS}__,' \
${WRKSRC}/source/common/network/address_impl.cc \
${WRKSRC}/source/common/network/udp_listener_impl.cc
@${REINPLACE_CMD} -e 's,O_SYMLINK,O_NOFOLLOW,' \
${WRKSRC}/source/common/filesystem/kqueue/watcher_impl.cc
@${REINPLACE_CMD} -e '/#include/s,\.validate,,' \
${WRKSRC}/source/extensions/access_loggers/file/config.cc \
${WRKSRC}/source/server/overload_manager_impl.h
do-configure:
${ECHO_CMD} '#define BUILD_VERSION_NUMBER "${PORTVERSION}"' \
> ${WRKSRC}/source/common/common/version_number.h
${LN} -s kqueue/watcher_impl.h posix/filesystem_impl.h \
posix/directory_iterator_impl.h \
${WRKSRC}/source/common/filesystem
${LN} -s posix/platform_impl.h ${WRKSRC}/source/exe
${LN} -s posix/thread_impl.h ${WRKSRC}/source/common/common
do-build:
${MAKE_CMD} -C ${WRKSRC}/api -f ${FILESDIR}/makefile-genproto
${MAKE_CMD} ${_MAKE_JOBS} -C ${WRKSRC}/source \
-f ${FILESDIR}/makefile-main
do-install:
${INSTALL_PROGRAM} ${WRKSRC}/source/${PORTNAME} \
${STAGEDIR}${PREFIX}/bin
do-install-EXAMPLES-on:
@${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
${TAR} -cf - -C ${WRKSRC}/examples ${PORTEXAMPLES} | \
${TAR} -xf - -C ${STAGEDIR}${EXAMPLESDIR}
.include <bsd.port.mk>

13
www/envoy/distinfo Normal file
View File

@ -0,0 +1,13 @@
TIMESTAMP = 1554487664
SHA256 (envoyproxy-envoy-v1.10.0_GH0.tar.gz) = 0fd7a0d11662730abeb12b19ef52af771f7426132e13e7eca7ac1fe81287add1
SIZE (envoyproxy-envoy-v1.10.0_GH0.tar.gz) = 3391626
SHA256 (gogo-protobuf-v1.1.1_GH0.tar.gz) = 9f8c2ad49849ab063cd9fef67e77d49606640044227ecf7f3617ea2c92ef147c
SIZE (gogo-protobuf-v1.1.1_GH0.tar.gz) = 1868227
SHA256 (googleapis-googleapis-b4c73fa_GH0.tar.gz) = a8989197096e2643c472fe87d2ad38b58f1737330f16fd2e5d5f0ce6623a2697
SIZE (googleapis-googleapis-b4c73fa_GH0.tar.gz) = 1773201
SHA256 (prometheus-client_model-fd36f42_GH0.tar.gz) = 11f679aee5a14f33afc1ec14eefd7f7665f4d5a11718cb63d246bd36531813ac
SIZE (prometheus-client_model-fd36f42_GH0.tar.gz) = 57479
SHA256 (grpc-grpc-v1.22.0_GH0.tar.gz) = 11ac793c562143d52fd440f6549588712badc79211cdc8c509b183cb69bddad8
SIZE (grpc-grpc-v1.22.0_GH0.tar.gz) = 15082718
SHA256 (envoyproxy-protoc-gen-validate-v0.1.0_GH0.tar.gz) = 49a275b7aff7e9c7e84db38e405b49b1ac91bbd2fcbd0c253d39ec412ed3be61
SIZE (envoyproxy-protoc-gen-validate-v0.1.0_GH0.tar.gz) = 9625220

View File

@ -0,0 +1,90 @@
# $FreeBSD$
LOCALBASE?= /usr/local
PROTOC_FLAGS= -I. -I$(LOCALBASE)/include
PB_HEADERS= \
envoy/admin/v2alpha/certs.pb.h \
envoy/admin/v2alpha/clusters.pb.h \
envoy/admin/v2alpha/config_dump.pb.h \
envoy/admin/v2alpha/memory.pb.h \
envoy/admin/v2alpha/metrics.pb.h \
envoy/admin/v2alpha/mutex_stats.pb.h \
envoy/admin/v2alpha/server_info.pb.h \
envoy/api/v2/auth/cert.pb.h \
envoy/api/v2/cds.pb.h \
envoy/api/v2/cluster/circuit_breaker.pb.h \
envoy/api/v2/cluster/outlier_detection.pb.h \
envoy/api/v2/core/address.pb.h \
envoy/api/v2/core/base.pb.h \
envoy/api/v2/core/config_source.pb.h \
envoy/api/v2/core/grpc_service.pb.h \
envoy/api/v2/core/health_check.pb.h \
envoy/api/v2/core/http_uri.pb.h \
envoy/api/v2/core/protocol.pb.h \
envoy/api/v2/discovery.pb.h \
envoy/api/v2/eds.pb.h \
envoy/api/v2/endpoint/endpoint.pb.h \
envoy/api/v2/endpoint/load_report.pb.h \
envoy/api/v2/lds.pb.h \
envoy/api/v2/listener/listener.pb.h \
envoy/api/v2/ratelimit/ratelimit.pb.h \
envoy/api/v2/rds.pb.h \
envoy/api/v2/route/route.pb.h \
envoy/config/accesslog/v2/als.pb.h \
envoy/config/accesslog/v2/file.pb.h \
envoy/config/bootstrap/v2/bootstrap.pb.h \
envoy/config/filter/accesslog/v2/accesslog.pb.h \
envoy/config/filter/fault/v2/fault.pb.h \
envoy/config/filter/http/buffer/v2/buffer.pb.h \
envoy/config/filter/http/fault/v2/fault.pb.h \
envoy/config/filter/http/health_check/v2/health_check.pb.h \
envoy/config/filter/http/lua/v2/lua.pb.h \
envoy/config/filter/http/rate_limit/v2/rate_limit.pb.h \
envoy/config/filter/http/router/v2/router.pb.h \
envoy/config/filter/http/squash/v2/squash.pb.h \
envoy/config/filter/http/transcoder/v2/transcoder.pb.h \
envoy/config/filter/network/client_ssl_auth/v2/client_ssl_auth.pb.h \
envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.pb.h \
envoy/config/filter/network/mongo_proxy/v2/mongo_proxy.pb.h \
envoy/config/filter/network/rate_limit/v2/rate_limit.pb.h \
envoy/config/filter/network/redis_proxy/v2/redis_proxy.pb.h \
envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.pb.h \
envoy/config/metrics/v2/metrics_service.pb.h \
envoy/config/metrics/v2/stats.pb.h \
envoy/config/overload/v2alpha/overload.pb.h \
envoy/config/ratelimit/v2/rls.pb.h \
envoy/config/rbac/v2alpha/rbac.pb.h \
envoy/config/trace/v2/trace.pb.h \
envoy/data/accesslog/v2/accesslog.pb.h \
envoy/data/cluster/v2alpha/outlier_detection_event.pb.h \
envoy/data/core/v2alpha/health_check_event.pb.h \
envoy/service/accesslog/v2/als.pb.h \
envoy/service/discovery/v2/ads.pb.h \
envoy/service/discovery/v2/hds.pb.h \
envoy/service/discovery/v2/sds.pb.h \
envoy/service/load_stats/v2/lrs.pb.h \
envoy/service/metrics/v2/metrics_service.pb.h \
envoy/service/ratelimit/v2/rls.pb.h \
envoy/type/matcher/metadata.pb.h \
envoy/type/matcher/number.pb.h \
envoy/type/matcher/string.pb.h \
envoy/type/matcher/value.pb.h \
envoy/type/percent.pb.h \
envoy/type/range.pb.h \
gogoproto/gogo.pb.h \
google/api/annotations.pb.h \
google/api/http.pb.h \
google/rpc/status.pb.h \
metrics.pb.h \
src/proto/grpc/health/v1/health.pb.h \
validate/validate.pb.h
%.pb.h: %.proto
protoc -I. -I$(LOCALBASE)/include --cpp_out=. $<
# XXX: we're not ready for semantic validation just yet :(
echo >> $(basename $@).validate.h
all: $(PB_HEADERS)
.phony: all

View File

@ -0,0 +1,172 @@
# $FreeBSD$
LOCALBASE?= /usr/local
CXXFLAGS+= -std=c++14 -Wall -Wextra -Wno-unused-parameter
CPPFLAGS+= -I. -I../include -I../api -I$(LOCALBASE)/include \
-DNDEBUG -DENVOY_SSL_VERSION=\"BoringSSL\" \
-DBUILD_SCM_REVISION=\"e95ef6b\" \
-DBUILD_SCM_STATUS=\"Modified\"
LDFLAGS+= -L$(LOCALBASE)/lib
CCACHE?= $(shell command -v ccache)
api_OBJS= ../api/envoy/admin/v2alpha/certs.pb.o \
../api/envoy/admin/v2alpha/clusters.pb.o \
../api/envoy/admin/v2alpha/config_dump.pb.o \
../api/envoy/admin/v2alpha/memory.pb.o \
../api/envoy/admin/v2alpha/metrics.pb.o \
../api/envoy/admin/v2alpha/mutex_stats.pb.o \
../api/envoy/admin/v2alpha/server_info.pb.o \
../api/envoy/api/v2/auth/cert.pb.o \
../api/envoy/api/v2/cds.pb.o \
../api/envoy/api/v2/cluster/circuit_breaker.pb.o \
../api/envoy/api/v2/cluster/outlier_detection.pb.o \
../api/envoy/api/v2/core/address.pb.o \
../api/envoy/api/v2/core/base.pb.o \
../api/envoy/api/v2/core/config_source.pb.o \
../api/envoy/api/v2/core/grpc_service.pb.o \
../api/envoy/api/v2/core/health_check.pb.o \
../api/envoy/api/v2/core/protocol.pb.o \
../api/envoy/api/v2/discovery.pb.o \
../api/envoy/api/v2/eds.pb.o \
../api/envoy/api/v2/endpoint/endpoint.pb.o \
../api/envoy/api/v2/endpoint/load_report.pb.o \
../api/envoy/api/v2/lds.pb.o \
../api/envoy/api/v2/listener/listener.pb.o \
../api/envoy/api/v2/ratelimit/ratelimit.pb.o \
../api/envoy/api/v2/rds.pb.o \
../api/envoy/api/v2/route/route.pb.o \
../api/envoy/config/accesslog/v2/als.pb.o \
../api/envoy/config/accesslog/v2/file.pb.o \
../api/envoy/config/bootstrap/v2/bootstrap.pb.o \
../api/envoy/config/filter/accesslog/v2/accesslog.pb.o \
../api/envoy/config/filter/fault/v2/fault.pb.o \
../api/envoy/config/filter/http/fault/v2/fault.pb.o \
../api/envoy/config/filter/http/transcoder/v2/transcoder.pb.o \
../api/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.pb.o \
../api/envoy/config/filter/network/redis_proxy/v2/redis_proxy.pb.o \
../api/envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.pb.o \
../api/envoy/config/metrics/v2/metrics_service.pb.o \
../api/envoy/config/metrics/v2/stats.pb.o \
../api/envoy/config/overload/v2alpha/overload.pb.o \
../api/envoy/config/rbac/v2alpha/rbac.pb.o \
../api/envoy/config/trace/v2/trace.pb.o \
../api/envoy/data/accesslog/v2/accesslog.pb.o \
../api/envoy/data/cluster/v2alpha/outlier_detection_event.pb.o \
../api/envoy/data/core/v2alpha/health_check_event.pb.o \
../api/envoy/service/accesslog/v2/als.pb.o \
../api/envoy/service/discovery/v2/ads.pb.o \
../api/envoy/service/discovery/v2/hds.pb.o \
../api/envoy/service/discovery/v2/sds.pb.o \
../api/envoy/service/load_stats/v2/lrs.pb.o \
../api/envoy/service/metrics/v2/metrics_service.pb.o \
../api/envoy/service/ratelimit/v2/rls.pb.o \
../api/envoy/type/matcher/metadata.pb.o \
../api/envoy/type/matcher/number.pb.o \
../api/envoy/type/matcher/string.pb.o \
../api/envoy/type/matcher/value.pb.o \
../api/envoy/type/percent.pb.o \
../api/envoy/type/range.pb.o \
../api/gogoproto/gogo.pb.o \
../api/google/api/annotations.pb.o \
../api/google/api/http.pb.o \
../api/google/rpc/status.pb.o \
../api/metrics.pb.o \
../api/src/proto/grpc/health/v1/health.pb.o \
../api/validate/validate.pb.o
source_OBJS= $(common_SRCS:.cc=.o) \
$(exe_SRCS:.cc=.o) \
$(extensions_SRCS:.cc=.o) \
$(server_SRCS:.cc=.o)
common_SRCS= $(wildcard common/access_log/*.cc) \
common/api/api_impl.cc \
common/api/os_sys_calls_impl.cc \
$(wildcard common/buffer/*.cc) \
$(wildcard common/chromium_url/*.cc) \
$(wildcard common/common/*.cc) \
common/common/posix/thread_impl.cc \
$(wildcard common/config/*.cc) \
$(wildcard common/event/*.cc) \
$(wildcard common/filesystem/*.cc) \
common/filesystem/kqueue/watcher_impl.cc \
$(wildcard common/filesystem/posix/*.cc) \
$(wildcard common/grpc/*.cc) \
common/html/utility.cc \
$(wildcard common/http/*.cc) \
$(wildcard common/http/http1/*.cc) \
$(wildcard common/http/http2/*.cc) \
$(wildcard common/init/*.cc) \
$(wildcard common/json/*.cc) \
$(wildcard common/memory/*.cc) \
$(wildcard common/network/*.cc) \
common/profiler/profiler.cc \
common/protobuf/utility.cc \
$(wildcard common/router/*.cc) \
$(wildcard common/runtime/*.cc) \
$(wildcard common/secret/*.cc) \
$(wildcard common/singleton/*.cc) \
$(wildcard common/ssl/*.cc) \
$(wildcard common/stats/*.cc) \
$(wildcard common/stream_info/*.cc) \
common/tcp/conn_pool.cc \
common/thread/thread_factory_singleton.cc \
common/thread_local/thread_local_impl.cc \
common/tracing/http_tracer_impl.cc \
$(wildcard common/upstream/*.cc)
exe_SRCS= $(wildcard exe/*.cc)
extensions_SRCS=\
extensions/filters/common/rbac/matchers.cc \
$(wildcard extensions/transport_sockets/tls/*.cc) \
$(wildcard extensions/access_loggers/*/*.cc) \
$(wildcard extensions/stat_sinks/metrics_service/*.cc)
server_SRCS= $(wildcard server/config_validation/*.cc) \
server/configuration_impl.o \
server/connection_handler_impl.o \
server/drain_manager_impl.o \
server/guarddog_impl.cc \
server/http/admin.o \
server/http/config_tracker_impl.o \
server/lds_api.o \
server/listener_manager_impl.o \
server/options_impl.cc \
server/options_impl_platform_default.o \
server/overload_manager_impl.o \
server/proto_descriptors.cc \
server/server.o \
server/watchdog_impl.o \
server/worker_impl.o
%.o: %.cc
$(CCACHE) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -o $@ -c $<
LIBS= $(LOCALBASE)/lib/libabsl_bad_optional_access.a \
$(LOCALBASE)/lib/libabsl_base.a \
$(LOCALBASE)/lib/libabsl_city.a \
$(LOCALBASE)/lib/libabsl_graphcycles_internal.a \
$(LOCALBASE)/lib/libabsl_hash.a \
$(LOCALBASE)/lib/libabsl_hashtablez_sampler.a \
$(LOCALBASE)/lib/libabsl_int128.a \
$(LOCALBASE)/lib/libabsl_malloc_internal.a \
$(LOCALBASE)/lib/libabsl_raw_hash_set.a \
$(LOCALBASE)/lib/libabsl_spinlock_wait.a \
$(LOCALBASE)/lib/libabsl_stacktrace.a \
$(LOCALBASE)/lib/libabsl_strings.a \
$(LOCALBASE)/lib/libabsl_symbolize.a \
$(LOCALBASE)/lib/libabsl_synchronization.a \
$(LOCALBASE)/lib/libabsl_throw_delegate.a \
$(LOCALBASE)/lib/libabsl_time.a \
$(LOCALBASE)/lib/libabsl_time_zone.a \
-lcares -lcircllhist -lcrypto -levent -levent_pthreads -lgpr \
-lgrpc++ -lhttp_parser -lnghttp2 -lprotobuf -lpthread -lssl \
-lxxhash -lyaml-cpp
envoy: $(api_OBJS) $(source_OBJS)
$(CXX) $(LDFLAGS) -o $@ $^ $(LIBS)
all: envoy
.PHONY: all install

View File

@ -0,0 +1,23 @@
--- source/common/common/posix/thread_impl.cc.orig 2019-04-05 18:07:44 UTC
+++ source/common/common/posix/thread_impl.cc
@@ -3,6 +3,8 @@
#if defined(__linux__)
#include <sys/syscall.h>
+#elif defined(__FreeBSD__)
+#include <pthread_np.h>
#endif
namespace Envoy {
@@ -13,9 +15,9 @@ namespace {
int64_t getCurrentThreadId() {
#ifdef __linux__
return static_cast<int64_t>(syscall(SYS_gettid));
-#elif defined(__APPLE__)
+#elif defined(__FreeBSD__)
uint64_t tid;
- pthread_threadid_np(NULL, &tid);
+ tid = pthread_getthreadid_np();
return tid;
#else
#error "Enable and test pthread id retrieval code for you arch in pthread/thread_impl.cc"

View File

@ -0,0 +1,12 @@
--- source/common/common/stack_array.h.orig 2019-04-05 18:07:44 UTC
+++ source/common/common/stack_array.h
@@ -2,9 +2,6 @@
#ifdef WIN32
#include <malloc.h>
-
-#else
-#include <alloca.h>
#endif
#include <stddef.h>

View File

@ -0,0 +1,15 @@
--- source/common/protobuf/utility.h.orig 2019-04-05 18:07:44 UTC
+++ source/common/protobuf/utility.h
@@ -222,10 +222,12 @@ class MessageUtil { (public)
// Log warnings or throw errors if deprecated fields are in use.
checkForDeprecation(message);
+#if notyet
std::string err;
if (!Validate(message, &err)) {
throw ProtoValidationException(err, message);
}
+#endif
}
template <class MessageType>

12
www/envoy/pkg-descr Normal file
View File

@ -0,0 +1,12 @@
Originally built at Lyft, Envoy is a high performance C++ distributed proxy
designed for single services and applications, as well as a communication
bus and "universal data plane" designed for large microservice "service
mesh" architectures. Built on the learnings of solutions such as NGINX,
HAProxy, hardware load balancers, and cloud load balancers, Envoy runs
alongside every application and abstracts the network by providing common
features in a platform-agnostic manner. When all service traffic in an
infrastructure flows via an Envoy mesh, it becomes easy to visualize problem
areas via consistent observability, tune overall performance, and add
substrate features in a single place.
WWW: https://www.envoyproxy.io/