protocolbuffers / protobuf

Protocol Buffers - Google's data interchange format
http://protobuf.dev
Other
65.77k stars 15.51k forks source link

Segmentation Fault (Segfault) on the ruby gem #4460

Closed larribas closed 3 years ago

larribas commented 6 years ago

Hello there,

The following segmentation fault pops up upon running

ruby -e 'require "google/cloud/trace"'

inside of a Docker container based on ruby:2.5-alpine (alpine 3.7.0)

Gemfile.lock (partial)

    google-cloud-core (1.2.0)
      google-cloud-env (~> 1.0)
    google-cloud-env (1.0.1)
      faraday (~> 0.11)
    google-cloud-trace (0.31.0)
      google-cloud-core (~> 1.2)
      google-gax (~> 1.0)
      stackdriver-core (~> 1.3)
    google-gax (1.0.1)
      google-protobuf (~> 3.2)
      googleapis-common-protos (>= 1.3.5, < 2.0)
      googleauth (~> 0.6.2)
      grpc (>= 1.7.2, < 2.0)
      rly (~> 0.2.3)
    google-protobuf (3.5.1.2)
    googleapis-common-protos (1.3.7)
      google-protobuf (~> 3.0)
      googleapis-common-protos-types (~> 1.0)
      grpc (~> 1.0)
    googleapis-common-protos-types (1.0.1)
      google-protobuf (~> 3.0)
    googleauth (0.6.2)
      faraday (~> 0.12)
      jwt (>= 1.4, < 3.0)
      logging (~> 2.0)
      memoist (~> 0.12)
      multi_json (~> 1.11)
      os (~> 0.9)
      signet (~> 0.7)
    grpc (1.10.0)
      google-protobuf (~> 3.1)
      googleapis-common-protos-types (~> 1.0.0)
      googleauth (>= 0.5.1, < 0.7)

Ruby Segfault Dump

/usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/any_pb.rb:15: [BUG] Segmentation fault at 0x0000000000016e16
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-musl]

-- Control frame information -----------------------------------------------
c:0039 p:---- s:0240 e:000239 CFUNC  :msgclass
c:0038 p:0022 s:0236 e:000235 CLASS  /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/any_pb.rb:15
c:0037 p:0007 s:0233 e:000232 CLASS  /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/any_pb.rb:14
c:0036 p:0033 s:0230 E:001380 TOP    /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/any_pb.rb:13 [FINISH]
c:0035 p:---- s:0227 e:000226 CFUNC  :require
c:0034 p:0110 s:0222 e:000221 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
c:0033 p:0013 s:0210 e:000209 TOP    /usr/local/bundle/gems/googleapis-common-protos-types-1.0.1/lib/google/rpc/status_pb.rb:6 [FINISH]
c:0032 p:---- s:0207 e:000206 CFUNC  :require
c:0031 p:0110 s:0202 e:000201 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
c:0030 p:0013 s:0190 e:000189 TOP    /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/google_rpc_status_utils.rb:16 [FINISH]
c:0029 p:---- s:0187 e:000186 CFUNC  :require
c:0028 p:0110 s:0182 e:000181 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
c:0027 p:0013 s:0170 e:000169 TOP    /usr/local/bundle/gems/google-gax-1.0.1/lib/google/gax/grpc.rb:31 [FINISH]
c:0026 p:---- s:0167 e:000166 CFUNC  :require
c:0025 p:0110 s:0162 e:000161 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
c:0024 p:0013 s:0150 e:000149 TOP    /usr/local/bundle/gems/google-gax-1.0.1/lib/google/gax/errors.rb:32 [FINISH]
c:0023 p:---- s:0147 e:000146 CFUNC  :require
c:0022 p:0110 s:0142 e:000141 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
c:0021 p:0013 s:0130 e:000129 TOP    /usr/local/bundle/gems/google-gax-1.0.1/lib/google/gax/api_callable.rb:32 [FINISH]
c:0020 p:---- s:0127 e:000126 CFUNC  :require
c:0019 p:0110 s:0122 e:000121 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
c:0018 p:0006 s:0110 e:000109 TOP    /usr/local/bundle/gems/google-gax-1.0.1/lib/google/gax.rb:30 [FINISH]
c:0017 p:---- s:0107 e:000106 CFUNC  :require
c:0016 p:0110 s:0102 e:000101 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
c:0015 p:0020 s:0090 e:000089 TOP    /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/v1/trace_service_client.rb:28 [FINISH]
c:0014 p:---- s:0087 e:000086 CFUNC  :require
c:0013 p:0110 s:0082 e:000081 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
c:0012 p:0006 s:0070 e:000069 TOP    /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/v1.rb:16 [FINISH]
c:0011 p:---- s:0067 e:000066 CFUNC  :require
c:0010 p:0110 s:0062 e:000061 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
c:0009 p:0020 s:0050 e:000049 TOP    /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/service.rb:18 [FINISH]
c:0008 p:---- s:0047 e:000046 CFUNC  :require
c:0007 p:0110 s:0042 e:000041 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
c:0006 p:0062 s:0030 e:000029 TOP    /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace.rb:24 [FINISH]
c:0005 p:---- s:0027 e:000026 CFUNC  :require
c:0004 p:0091 s:0022 e:000021 RESCUE /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135
c:0003 p:0376 s:0018 e:000017 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:39
c:0002 p:0006 s:0006 e:000005 EVAL   -e:1 [FINISH]
c:0001 p:0000 s:0003 E:000d00 (none) [FINISH]

-- Ruby level backtrace information ----------------------------------------
-e:1:in `<main>'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:39:in `require'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135:in `rescue in require'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135:in `require'
/usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace.rb:24:in `<top (required)>'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/service.rb:18:in `<top (required)>'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/v1.rb:16:in `<top (required)>'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/v1/trace_service_client.rb:28:in `<top (required)>'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/bundle/gems/google-gax-1.0.1/lib/google/gax.rb:30:in `<top (required)>'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/bundle/gems/google-gax-1.0.1/lib/google/gax/api_callable.rb:32:in `<top (required)>'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/bundle/gems/google-gax-1.0.1/lib/google/gax/errors.rb:32:in `<top (required)>'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/bundle/gems/google-gax-1.0.1/lib/google/gax/grpc.rb:31:in `<top (required)>'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/google_rpc_status_utils.rb:16:in `<top (required)>'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/bundle/gems/googleapis-common-protos-types-1.0.1/lib/google/rpc/status_pb.rb:6:in `<top (required)>'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/any_pb.rb:13:in `<top (required)>'
/usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/any_pb.rb:14:in `<module:Google>'
/usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/any_pb.rb:15:in `<module:Protobuf>'
/usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/any_pb.rb:15:in `msgclass'

-- Machine register context ------------------------------------------------
 RIP: 0x0000000000016e16 RBP: 0x00007ffda9865780 RSP: 0x00007ffda9865738
 RAX: 0x000000000000000a RBX: 0x000055d0f91e09c0 RCX: 0x0000000000000008
 RDX: 0x0000000000000001 RDI: 0x00007ffda9865740 RSI: 0x00007ffda986574e
  R8: 0x0000000000000003  R9: 0xffffffffffffffff R10: 0x0000000000000000
 R11: 0x000055d0f92be2c0 R12: 0x0000000000000000 R13: 0x0000000000000002
 R14: 0x00007ffda98657e8 R15: 0x000055d0f91e09c0 EFL: 0x0000000000010246

-- Other runtime information -----------------------------------------------

* Loaded script: -e

* Loaded features:

    0 enumerator.so
    1 thread.rb
    2 rational.so
    3 complex.so
    4 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/encdb.so
    5 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/trans/transdb.so
    6 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/rbconfig.rb
    7 /usr/local/lib/ruby/2.5.0/rubygems/compatibility.rb
    8 /usr/local/lib/ruby/2.5.0/rubygems/defaults.rb
    9 /usr/local/lib/ruby/2.5.0/rubygems/deprecate.rb
   10 /usr/local/lib/ruby/2.5.0/rubygems/errors.rb
   11 /usr/local/lib/ruby/2.5.0/rubygems/version.rb
   12 /usr/local/lib/ruby/2.5.0/rubygems/requirement.rb
   13 /usr/local/lib/ruby/2.5.0/rubygems/platform.rb
   14 /usr/local/lib/ruby/2.5.0/rubygems/basic_specification.rb
   15 /usr/local/lib/ruby/2.5.0/rubygems/stub_specification.rb
   16 /usr/local/lib/ruby/2.5.0/rubygems/util/list.rb
   17 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/stringio.so
   18 /usr/local/lib/ruby/2.5.0/uri/rfc2396_parser.rb
   19 /usr/local/lib/ruby/2.5.0/uri/rfc3986_parser.rb
   20 /usr/local/lib/ruby/2.5.0/uri/common.rb
   21 /usr/local/lib/ruby/2.5.0/uri/generic.rb
   22 /usr/local/lib/ruby/2.5.0/uri/ftp.rb
   23 /usr/local/lib/ruby/2.5.0/uri/http.rb
   24 /usr/local/lib/ruby/2.5.0/uri/https.rb
   25 /usr/local/lib/ruby/2.5.0/uri/ldap.rb
   26 /usr/local/lib/ruby/2.5.0/uri/ldaps.rb
   27 /usr/local/lib/ruby/2.5.0/uri/mailto.rb
   28 /usr/local/lib/ruby/2.5.0/uri.rb
   29 /usr/local/lib/ruby/2.5.0/rubygems/specification.rb
   30 /usr/local/lib/ruby/2.5.0/rubygems/exceptions.rb
   31 /usr/local/lib/ruby/2.5.0/rubygems/dependency.rb
   32 /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_gem.rb
   33 /usr/local/lib/ruby/2.5.0/monitor.rb
   34 /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb
   35 /usr/local/lib/ruby/2.5.0/rubygems.rb
   36 /usr/local/lib/ruby/2.5.0/rubygems/path_support.rb
   37 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/version.rb
   38 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/core_ext/name_error.rb
   39 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/levenshtein.rb
   40 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/jaro_winkler.rb
   41 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checker.rb
   42 /usr/local/lib/ruby/2.5.0/delegate.rb
   43 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
   44 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
   45 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers.rb
   46 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/method_name_checker.rb
   47 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/key_error_checker.rb
   48 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/null_checker.rb
   49 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/formatters/plain_formatter.rb
   50 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean.rb
   51 /usr/local/lib/ruby/2.5.0/rubygems/bundler_version_finder.rb
   52 /usr/local/bundle/gems/google-cloud-core-1.2.0/lib/google/cloud/config.rb
   53 /usr/local/bundle/gems/google-cloud-core-1.2.0/lib/google/cloud/core/version.rb
   54 /usr/local/lib/ruby/2.5.0/cgi/core.rb
   55 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/cgi/escape.so
   56 /usr/local/lib/ruby/2.5.0/cgi/util.rb
   57 /usr/local/lib/ruby/2.5.0/cgi/cookie.rb
   58 /usr/local/lib/ruby/2.5.0/cgi.rb
   59 /usr/local/lib/ruby/2.5.0/set.rb
   60 /usr/local/lib/ruby/2.5.0/forwardable/impl.rb
   61 /usr/local/lib/ruby/2.5.0/forwardable.rb
   62 /usr/local/lib/ruby/2.5.0/timeout.rb
   63 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/utils.rb
   64 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/options.rb
   65 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/connection.rb
   66 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/rack_builder.rb
   67 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/parameters.rb
   68 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/middleware.rb
   69 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/adapter.rb
   70 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/request.rb
   71 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/response.rb
   72 /usr/local/bundle/gems/multipart-post-2.0.0/lib/composite_io.rb
   73 /usr/local/bundle/gems/multipart-post-2.0.0/lib/parts.rb
   74 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/upload_io.rb
   75 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/error.rb
   76 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/autoload.rb
   77 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday.rb
   78 /usr/local/lib/ruby/2.5.0/json/version.rb
   79 /usr/local/lib/ruby/2.5.0/ostruct.rb
   80 /usr/local/lib/ruby/2.5.0/json/generic_object.rb
   81 /usr/local/lib/ruby/2.5.0/json/common.rb
   82 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/json/ext/parser.so
   83 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/json/ext/generator.so
   84 /usr/local/lib/ruby/2.5.0/json/ext.rb
   85 /usr/local/lib/ruby/2.5.0/json.rb
   86 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/request/url_encoded.rb
   87 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/socket.so
   88 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/io/wait.so
   89 /usr/local/lib/ruby/2.5.0/socket.rb
   90 /usr/local/lib/ruby/2.5.0/net/protocol.rb
   91 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/zlib.so
   92 /usr/local/lib/ruby/2.5.0/net/http/exceptions.rb
   93 /usr/local/lib/ruby/2.5.0/net/http/header.rb
   94 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/windows_31j.so
   95 /usr/local/lib/ruby/2.5.0/net/http/generic_request.rb
   96 /usr/local/lib/ruby/2.5.0/net/http/request.rb
   97 /usr/local/lib/ruby/2.5.0/net/http/requests.rb
   98 /usr/local/lib/ruby/2.5.0/net/http/response.rb
   99 /usr/local/lib/ruby/2.5.0/net/http/responses.rb
  100 /usr/local/lib/ruby/2.5.0/net/http/proxy_delta.rb
  101 /usr/local/lib/ruby/2.5.0/net/http/backward.rb
  102 /usr/local/lib/ruby/2.5.0/net/http.rb
  103 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/digest.so
  104 /usr/local/lib/ruby/2.5.0/digest.rb
  105 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/openssl.so
  106 /usr/local/lib/ruby/2.5.0/openssl/bn.rb
  107 /usr/local/lib/ruby/2.5.0/openssl/pkey.rb
  108 /usr/local/lib/ruby/2.5.0/openssl/cipher.rb
  109 /usr/local/lib/ruby/2.5.0/openssl/config.rb
  110 /usr/local/lib/ruby/2.5.0/openssl/digest.rb
  111 /usr/local/lib/ruby/2.5.0/openssl/x509.rb
  112 /usr/local/lib/ruby/2.5.0/openssl/buffering.rb
  113 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/io/nonblock.so
  114 /usr/local/lib/ruby/2.5.0/openssl/ssl.rb
  115 /usr/local/lib/ruby/2.5.0/openssl/pkcs5.rb
  116 /usr/local/lib/ruby/2.5.0/openssl.rb
  117 /usr/local/lib/ruby/2.5.0/net/https.rb
  118 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/adapter/net_http.rb
  119 /usr/local/bundle/gems/google-cloud-env-1.0.1/lib/google/cloud/env.rb
  120 /usr/local/bundle/gems/google-cloud-env-1.0.1/lib/google/cloud/env/version.rb
  121 /usr/local/bundle/gems/google-cloud-env-1.0.1/lib/google-cloud-env.rb
  122 /usr/local/bundle/gems/google-cloud-core-1.2.0/lib/google/cloud.rb
  123 /usr/local/bundle/gems/addressable-2.5.2/lib/addressable/version.rb
  124 /usr/local/bundle/gems/addressable-2.5.2/lib/addressable/idna/pure.rb
  125 /usr/local/bundle/gems/addressable-2.5.2/lib/addressable/idna.rb
  126 /usr/local/bundle/gems/public_suffix-3.0.2/lib/public_suffix/domain.rb
  127 /usr/local/bundle/gems/public_suffix-3.0.2/lib/public_suffix/version.rb
  128 /usr/local/bundle/gems/public_suffix-3.0.2/lib/public_suffix/errors.rb
  129 /usr/local/bundle/gems/public_suffix-3.0.2/lib/public_suffix/rule.rb
  130 /usr/local/bundle/gems/public_suffix-3.0.2/lib/public_suffix/list.rb
  131 /usr/local/bundle/gems/public_suffix-3.0.2/lib/public_suffix.rb
  132 /usr/local/bundle/gems/addressable-2.5.2/lib/addressable/uri.rb
  133 /usr/local/bundle/gems/signet-0.8.1/lib/signet/version.rb
  134 /usr/local/bundle/gems/signet-0.8.1/lib/signet.rb
  135 /usr/local/bundle/gems/signet-0.8.1/lib/signet/errors.rb
  136 /usr/local/lib/ruby/2.5.0/base64.rb
  137 /usr/local/bundle/gems/multi_json-1.13.1/lib/multi_json/options.rb
  138 /usr/local/bundle/gems/multi_json-1.13.1/lib/multi_json/version.rb
  139 /usr/local/bundle/gems/multi_json-1.13.1/lib/multi_json/adapter_error.rb
  140 /usr/local/bundle/gems/multi_json-1.13.1/lib/multi_json/parse_error.rb
  141 /usr/local/bundle/gems/multi_json-1.13.1/lib/multi_json/options_cache.rb
  142 /usr/local/bundle/gems/multi_json-1.13.1/lib/multi_json.rb
  143 /usr/local/bundle/gems/signet-0.8.1/lib/signet/oauth_2.rb
  144 /usr/local/bundle/gems/jwt-1.5.6/lib/jwt/json.rb
  145 /usr/local/bundle/gems/jwt-1.5.6/lib/jwt/error.rb
  146 /usr/local/bundle/gems/jwt-1.5.6/lib/jwt/verify.rb
  147 /usr/local/bundle/gems/jwt-1.5.6/lib/jwt/decode.rb
  148 /usr/local/bundle/gems/jwt-1.5.6/lib/jwt.rb
  149 /usr/local/bundle/gems/signet-0.8.1/lib/signet/oauth_2/client.rb
  150 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/signet.rb
  151 /usr/local/bundle/gems/memoist-0.16.0/lib/memoist/version.rb
  152 /usr/local/bundle/gems/memoist-0.16.0/lib/memoist/core_ext/singleton_class.rb
  153 /usr/local/bundle/gems/memoist-0.16.0/lib/memoist.rb
  154 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/compute_engine.rb
  155 /usr/local/lib/ruby/2.5.0/psych/versions.rb
  156 /usr/local/lib/ruby/2.5.0/psych/exception.rb
  157 /usr/local/lib/ruby/2.5.0/psych/syntax_error.rb
  158 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/psych.so
  159 /usr/local/lib/ruby/2.5.0/psych/omap.rb
  160 /usr/local/lib/ruby/2.5.0/psych/set.rb
  161 /usr/local/lib/ruby/2.5.0/psych/class_loader.rb
  162 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/strscan.so
  163 /usr/local/lib/ruby/2.5.0/psych/scalar_scanner.rb
  164 /usr/local/lib/ruby/2.5.0/psych/nodes/node.rb
  165 /usr/local/lib/ruby/2.5.0/psych/nodes/stream.rb
  166 /usr/local/lib/ruby/2.5.0/psych/nodes/document.rb
  167 /usr/local/lib/ruby/2.5.0/psych/nodes/sequence.rb
  168 /usr/local/lib/ruby/2.5.0/psych/nodes/scalar.rb
  169 /usr/local/lib/ruby/2.5.0/psych/nodes/mapping.rb
  170 /usr/local/lib/ruby/2.5.0/psych/nodes/alias.rb
  171 /usr/local/lib/ruby/2.5.0/psych/nodes.rb
  172 /usr/local/lib/ruby/2.5.0/psych/streaming.rb
  173 /usr/local/lib/ruby/2.5.0/psych/visitors/visitor.rb
  174 /usr/local/lib/ruby/2.5.0/psych/visitors/to_ruby.rb
  175 /usr/local/lib/ruby/2.5.0/psych/visitors/emitter.rb
  176 /usr/local/lib/ruby/2.5.0/psych/handler.rb
  177 /usr/local/lib/ruby/2.5.0/psych/tree_builder.rb
  178 /usr/local/lib/ruby/2.5.0/psych/visitors/yaml_tree.rb
  179 /usr/local/lib/ruby/2.5.0/psych/json/ruby_events.rb
  180 /usr/local/lib/ruby/2.5.0/psych/visitors/json_tree.rb
  181 /usr/local/lib/ruby/2.5.0/psych/visitors/depth_first.rb
  182 /usr/local/lib/ruby/2.5.0/psych/visitors.rb
  183 /usr/local/lib/ruby/2.5.0/psych/parser.rb
  184 /usr/local/lib/ruby/2.5.0/psych/coder.rb
  185 /usr/local/lib/ruby/2.5.0/psych/core_ext.rb
  186 /usr/local/lib/ruby/2.5.0/psych/stream.rb
  187 /usr/local/lib/ruby/2.5.0/psych/json/yaml_events.rb
  188 /usr/local/lib/ruby/2.5.0/psych/json/tree_builder.rb
  189 /usr/local/lib/ruby/2.5.0/psych/json/stream.rb
  190 /usr/local/lib/ruby/2.5.0/psych/handlers/document_stream.rb
  191 /usr/local/lib/ruby/2.5.0/psych.rb
  192 /usr/local/lib/ruby/2.5.0/yaml.rb
  193 /usr/local/bundle/gems/os-0.9.6/lib/os.rb
  194 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/credentials_loader.rb
  195 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/service_account.rb
  196 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/scope_util.rb
  197 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/user_refresh.rb
  198 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/default_credentials.rb
  199 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/application_default.rb
  200 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/client_id.rb
  201 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/credentials.rb
  202 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/user_authorizer.rb
  203 /usr/local/lib/ruby/2.5.0/securerandom.rb
  204 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/web_user_authorizer.rb
  205 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth.rb
  206 /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google-cloud-trace.rb
  207 /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/version.rb
  208 /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/credentials.rb
  209 /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/label_key.rb
  210 /usr/local/bundle/gems/stackdriver-core-1.3.0/lib/stackdriver/core/async_actor.rb
  211 /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/async_reporter.rb
  212 /usr/local/bundle/gems/stackdriver-core-1.3.0/lib/stackdriver/core/trace_context.rb
  213 /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/middleware.rb
  214 /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/notifications.rb
  215 /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/project.rb
  216 /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/result_set.rb
  217 /usr/local/lib/ruby/2.5.0/English.rb
  218 /usr/local/bundle/gems/google-cloud-core-1.2.0/lib/google/cloud/errors.rb
  219 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/pathname.so
  220 /usr/local/lib/ruby/2.5.0/pathname.rb
  221 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/date_core.so
  222 /usr/local/lib/ruby/2.5.0/date.rb
  223 /usr/local/lib/ruby/2.5.0/time.rb
  224 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/2.5/grpc_c.so
  225 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/grpc.rb
  226 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/errors.rb
  227 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/logconfig.rb
  228 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/notifier.rb
  229 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/version.rb
  230 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/core/time_consts.rb
  231 /usr/local/lib/ruby/2.5.0/weakref.rb
  232 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/generic/bidi_call.rb
  233 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/generic/active_call.rb
  234 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/generic/client_stub.rb
  235 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/generic/rpc_desc.rb
  236 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/generic/service.rb
  237 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/generic/rpc_server.rb
  238 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/generic/interceptor_registry.rb
  239 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/generic/interceptors.rb
  240 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc.rb
  241 /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/message_exts.rb
  242 /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/2.5/protobuf_c.so
  243 /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/repeated_field.rb
  244 /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf.rb

* Process memory map:

55d0f7453000-55d0f7454000 r-xp 00000000 08:06 154456                     /usr/local/bin/ruby
55d0f7653000-55d0f7654000 r--p 00000000 08:06 154456                     /usr/local/bin/ruby
55d0f7654000-55d0f7655000 rw-p 00001000 08:06 154456                     /usr/local/bin/ruby
55d0f89e8000-55d0f9987000 rw-p 00000000 00:00 0                          [heap]
7f6c3bcb9000-7f6c3bd1a000 rw-p 00000000 00:00 0
7f6c3bd1a000-7f6c3bf70000 r-xp 00000000 08:06 5929343                    /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/2.5/protobuf_c.so
7f6c3bf70000-7f6c3bf78000 r--p 00056000 08:06 5929343                    /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/2.5/protobuf_c.so
7f6c3bf78000-7f6c3bf7a000 rw-p 0005e000 08:06 5929343                    /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/2.5/protobuf_c.so
7f6c3bf7a000-7f6c3c169000 rw-p 00000000 00:00 0
7f6c3c169000-7f6c3c5af000 r-xp 00000000 08:06 10524010                   /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/2.5/grpc_c.so
7f6c3c5af000-7f6c3c5c4000 r--p 00246000 08:06 10524010                   /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/2.5/grpc_c.so
7f6c3c5c4000-7f6c3c5cb000 rw-p 0025b000 08:06 10524010                   /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/2.5/grpc_c.so
7f6c3c5cb000-7f6c3c5d0000 rw-p 00000000 00:00 0
7f6c3c5d0000-7f6c3c803000 r-xp 00000000 08:06 155330                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/date_core.so
7f6c3c803000-7f6c3c804000 r--p 00033000 08:06 155330                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/date_core.so
7f6c3c804000-7f6c3c805000 rw-p 00034000 08:06 155330                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/date_core.so
7f6c3c805000-7f6c3c806000 rw-p 00000000 00:00 0
7f6c3c806000-7f6c3ca0d000 r-xp 00000000 08:06 155416                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/pathname.so
7f6c3ca0d000-7f6c3ca0e000 r--p 00007000 08:06 155416                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/pathname.so
7f6c3ca0e000-7f6c3ca0f000 rw-p 00008000 08:06 155416                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/pathname.so
7f6c3ca0f000-7f6c3cc15000 r-xp 00000000 08:06 155429                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/strscan.so
7f6c3cc15000-7f6c3cc16000 r--p 00006000 08:06 155429                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/strscan.so
7f6c3cc16000-7f6c3cc17000 rw-p 00007000 08:06 155429                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/strscan.so
7f6c3cc17000-7f6c3ce30000 r-xp 00000000 08:06 154434                     /usr/lib/libyaml-0.so.2.0.5
7f6c3ce30000-7f6c3ce31000 r--p 00019000 08:06 154434                     /usr/lib/libyaml-0.so.2.0.5
7f6c3ce31000-7f6c3ce32000 rw-p 0001a000 08:06 154434                     /usr/lib/libyaml-0.so.2.0.5
7f6c3ce32000-7f6c3d037000 r-xp 00000000 08:06 155417                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/psych.so
7f6c3d037000-7f6c3d038000 r--p 00005000 08:06 155417                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/psych.so
7f6c3d038000-7f6c3d039000 rw-p 00006000 08:06 155417                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/psych.so
7f6c3d039000-7f6c3d239000 r-xp 00000000 08:06 155407                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/io/nonblock.so
7f6c3d239000-7f6c3d23a000 r--p 00000000 08:06 155407                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/io/nonblock.so
7f6c3d23a000-7f6c3d23b000 rw-p 00001000 08:06 155407                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/io/nonblock.so
7f6c3d23b000-7f6c3d43e000 r-xp 00000000 08:06 155338                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/digest.so
7f6c3d43e000-7f6c3d43f000 r--p 00003000 08:06 155338                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/digest.so
7f6c3d43f000-7f6c3d440000 rw-p 00004000 08:06 155338                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/digest.so
7f6c3d440000-7f6c3d7bf000 r-xp 00000000 08:06 9849394                    /lib/libcrypto.so.42.0.0
7f6c3d7bf000-7f6c3d7dc000 r--p 0017f000 08:06 9849394                    /lib/libcrypto.so.42.0.0
7f6c3d7dc000-7f6c3d7e2000 rw-p 0019c000 08:06 9849394                    /lib/libcrypto.so.42.0.0
7f6c3d7e2000-7f6c3d7e6000 rw-p 00000000 00:00 0
7f6c3d7e6000-7f6c3da2a000 r-xp 00000000 08:06 9849396                    /lib/libssl.so.44.0.1
7f6c3da2a000-7f6c3da2e000 r--p 00044000 08:06 9849396                    /lib/libssl.so.44.0.1
7f6c3da2e000-7f6c3da32000 rw-p 00048000 08:06 9849396                    /lib/libssl.so.44.0.1
7f6c3da32000-7f6c3dc86000 r-xp 00000000 08:06 155415                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/openssl.so
7f6c3dc86000-7f6c3dc8a000 r--p 00054000 08:06 155415                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/openssl.so
7f6c3dc8a000-7f6c3dc8b000 rw-p 00058000 08:06 155415                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/openssl.so
7f6c3dc8b000-7f6c3de8d000 r-xp 00000000 08:06 155399                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/windows_31j.so
7f6c3de8d000-7f6c3de8e000 r--p 00002000 08:06 155399                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/windows_31j.so
7f6c3de8e000-7f6c3de8f000 rw-p 00003000 08:06 155399                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/windows_31j.so
7f6c3de8f000-7f6c3e0a4000 r-xp 00000000 08:06 9849398                    /lib/libz.so.1.2.11
7f6c3e0a4000-7f6c3e0a5000 r--p 00015000 08:06 9849398                    /lib/libz.so.1.2.11
7f6c3e0a5000-7f6c3e0a6000 rw-p 00016000 08:06 9849398                    /lib/libz.so.1.2.11
7f6c3e0a6000-7f6c3e2b7000 r-xp 00000000 08:06 155431                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/zlib.so
7f6c3e2b7000-7f6c3e2b8000 r--p 00011000 08:06 155431                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/zlib.so
7f6c3e2b8000-7f6c3e2b9000 rw-p 00012000 08:06 155431                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/zlib.so
7f6c3e2b9000-7f6c3e4ba000 r-xp 00000000 08:06 155408                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/io/wait.so
7f6c3e4ba000-7f6c3e4bb000 r--p 00001000 08:06 155408                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/io/wait.so
7f6c3e4bb000-7f6c3e4bc000 rw-p 00002000 08:06 155408                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/io/wait.so
7f6c3e4bc000-7f6c3e6e8000 r-xp 00000000 08:06 155427                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/socket.so
7f6c3e6e8000-7f6c3e6e9000 r--p 0002c000 08:06 155427                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/socket.so
7f6c3e6e9000-7f6c3e6ea000 rw-p 0002d000 08:06 155427                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/socket.so
7f6c3e6ea000-7f6c3e8f3000 r-xp 00000000 08:06 155411                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/json/ext/generator.so
7f6c3e8f3000-7f6c3e8f4000 r--p 00009000 08:06 155411                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/json/ext/generator.so
7f6c3e8f4000-7f6c3e8f5000 rw-p 0000a000 08:06 155411                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/json/ext/generator.so
7f6c3e8f5000-7f6c3eafa000 r-xp 00000000 08:06 155412                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/json/ext/parser.so
7f6c3eafa000-7f6c3eafb000 r--p 00005000 08:06 155412                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/json/ext/parser.so
7f6c3eafb000-7f6c3eafc000 rw-p 00006000 08:06 155412                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/json/ext/parser.so
7f6c3eafc000-7f6c3ecfe000 r-xp 00000000 08:06 155327                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/cgi/escape.so
7f6c3ecfe000-7f6c3ecff000 r--p 00002000 08:06 155327                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/cgi/escape.so
7f6c3ecff000-7f6c3ed00000 rw-p 00003000 08:06 155327                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/cgi/escape.so
7f6c3ed00000-7f6c3ef08000 r-xp 00000000 08:06 155428                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/stringio.so
7f6c3ef08000-7f6c3ef09000 r--p 00008000 08:06 155428                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/stringio.so
7f6c3ef09000-7f6c3ef0a000 rw-p 00009000 08:06 155428                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/stringio.so
7f6c3ef0a000-7f6c3f10c000 r-xp 00000000 08:06 155386                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/trans/transdb.so
7f6c3f10c000-7f6c3f10d000 r--p 00002000 08:06 155386                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/trans/transdb.so
7f6c3f10d000-7f6c3f10e000 rw-p 00003000 08:06 155386                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/trans/transdb.so
7f6c3f10e000-7f6c3f30f000 r-xp 00000000 08:06 155343                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/encdb.so
7f6c3f30f000-7f6c3f310000 r--p 00001000 08:06 155343                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/encdb.so
7f6c3f310000-7f6c3f311000 rw-p 00002000 08:06 155343                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/encdb.so
7f6c3f311000-7f6c3f824000 r-xp 00000000 08:06 154493                     /usr/local/lib/libruby.so.2.5.1
7f6c3f824000-7f6c3f82c000 r--p 00313000 08:06 154493                     /usr/local/lib/libruby.so.2.5.1
7f6c3f82c000-7f6c3f82d000 rw-p 0031b000 08:06 154493                     /usr/local/lib/libruby.so.2.5.1
7f6c3f82d000-7f6c3f83b000 rw-p 00000000 00:00 0
7f6c3f83b000-7f6c3f8c4000 r-xp 00000000 08:06 154211                     /lib/ld-musl-x86_64.so.1
7f6c3f8d2000-7f6c3f916000 rw-p 00000000 00:00 0
7f6c3f916000-7f6c3f9ba000 rw-p 00000000 00:00 0
7f6c3f9ba000-7f6c3f9bb000 r--s 00000000 08:06 9723329                    /etc/localtime
7f6c3f9bb000-7f6c3f9bd000 ---p 00000000 00:00 0
7f6c3f9bd000-7f6c3fac3000 rw-p 00000000 00:00 0
7f6c3fac3000-7f6c3fac4000 r--p 00088000 08:06 154211                     /lib/ld-musl-x86_64.so.1
7f6c3fac4000-7f6c3fac5000 rw-p 00089000 08:06 154211                     /lib/ld-musl-x86_64.so.1
7f6c3fac5000-7f6c3fac8000 rw-p 00000000 00:00 0
7ffda984e000-7ffda986f000 rw-p 00000000 00:00 0                          [stack]
7ffda99f5000-7ffda99f8000 r--p 00000000 00:00 0                          [vvar]
7ffda99f8000-7ffda99fa000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

Aborted (core dumped)
TeBoring commented 6 years ago

Could you include all steps to reproduce the bug? e.g., Dockerfile, command line, download files.

TeBoring commented 6 years ago

I can reproduce it in docker now.

TeBoring commented 6 years ago

@pherl, I can reproduce the bug with the gem downloaded from ruby gem repository. However, I cannot reproduce the bug with the gem locally built on alpine3.7 docker container. Is cross-compiling related to the issue?

TeBoring commented 6 years ago

@larribas Can you try install locally built protobuf gem? If you have difficulty building it, I can show you.

larribas commented 6 years ago

Just tested it. It does look like a cross-compilation bug. Here's what I did:

Within docker run -it --rm --entrypoint=sh ruby:2.5-alpine

apk add  --update git gcc make cmake libc-dev linux-headers bash wget libc6-compat autoconf automake libtool curl make g++ unzip

# SEGFAULT
gem install google-protobuf
ruby -e 'require "google/protobuf/any_pb"'

# GOOD
git submodule update --init --recursive
./autogen.sh
./configure
make
make check
make install
ldconfig
cd ruby
gem install bundler
bundle
rake
rake clobber_package gem
gem install `ls pkg/google-protobuf-*.gem`
ruby -e 'require "google/protobuf/any_pb"'

Let me know if I can help with anything else

carlpartridge commented 6 years ago

I am having a very similar issue: ruby 2.4.4 alpine 3.7, using google-cloud-pubsub gem https://github.com/google/protobuf/issues/4728

TeBoring commented 6 years ago

I tested 3.6.x branch. Unfortunately, the linux-x86_64 gem still doesn't work on alpine. The workaround is to install a native gem which is built on target platform:

apk add  --update git gcc make cmake libc-dev linux-headers bash wget libc6-compat autoconf automake libtool curl make g++ unzip
gem install google-protobuf --version=3.5.1.2 --platform=ruby

Feel free to reopen this issue if this workaround is unacceptable.

carlpartridge commented 6 years ago

Hello, thanks for looking into this.

Your workaround is not working for us. Same segfault error. Here is our dockerfile:

FROM ruby:2.4.4-alpine3.7

ENV RAILS_ROOT /rails/prism
ENV PAGER /usr/bin/less
ENV TERM xterm

RUN mkdir -p $RAILS_ROOT/tmp/pids
WORKDIR $RAILS_ROOT
ADD Gemfile* ./

RUN apk --update --no-cache add \
    autoconf \
    automake \
    bash \
    cmake \
    curl \
    curl-dev \
    dbus \
    fontconfig \
    g++ \
    gcc \
    git \
    libc-dev \
    libc6-compat \
    libcurl \
    libtool \
    libxml2-dev \
    libxslt-dev \
    linux-headers \
    make \
    mysql-client \
    mysql-dev \
    nodejs \
    pdftk \
    poppler-utils \
    qt5-qtbase-dev \
    ttf-freefont \
    unzip    \
    wget \
    && gem install google-protobuf --version=3.5.1.2 --platform=ruby \
    && apk --update add --virtual build-dependencies build-base build-dependencies gcc git less \
    && bundle install --jobs `expr $(cat /proc/cpuinfo | grep -c "cpu cores") - 1` --retry 3 --without test development\
    && apk del build-dependencies

COPY . $RAILS_ROOT

EXPOSE 3000

CMD ["bin/rails", "server", "-b", "0.0.0.0"]

Were you suggesting we try alpine 3.6.x? Anything else you can think of trying?

@TeBoring

TeBoring commented 6 years ago

Did you try ruby -e 'require "google/protobuf/any_pb"' after you install the gem?

carlpartridge commented 6 years ago

Just tried it, same error :(

FROM ruby:2.4.4-alpine3.7

ENV RAILS_ROOT /rails/prism
ENV PAGER /usr/bin/less
ENV TERM xterm

RUN mkdir -p $RAILS_ROOT/tmp/pids
WORKDIR $RAILS_ROOT
ADD Gemfile* ./

RUN apk --update --no-cache add \
    autoconf \
    automake \
    bash \
    cmake \
    curl \
    curl-dev \
    dbus \
    fontconfig \
    g++ \
    gcc \
    git \
    libc-dev \
    libc6-compat \
    libcurl \
    libtool \
    libxml2-dev \
    libxslt-dev \
    linux-headers \
    make \
    mysql-client \
    mysql-dev \
    nodejs \
    pdftk \
    poppler-utils \
    qt5-qtbase-dev \
    ttf-freefont \
    unzip    \
    wget \
    && gem install google-protobuf --version=3.5.1.2 --platform=ruby \
    && ruby -e 'require "google/protobuf/any_pb"' \
    && apk --update add --virtual build-dependencies build-base build-dependencies gcc git less \
    && bundle install --jobs `expr $(cat /proc/cpuinfo | grep -c "cpu cores") - 1` --retry 3 --without test development\
    && apk del build-dependencies

COPY . $RAILS_ROOT

EXPOSE 3000

CMD ["bin/rails", "server", "-b", "0.0.0.0"]
TeBoring commented 6 years ago

The segmentation happens after the docker file is executed or at the place of calling ruby -e 'require "google/protobuf/any_pb"'?

carlpartridge commented 6 years ago

The segmentation occurs after the build, when I try to run the rails app itself (instantiate the class that requires google-cloud-pubsub).

Thanks again for all your timely help!

jeffdeville commented 6 years ago

@TeBoring - I've recreated our bug in minimal form, including an attempt to follow the workaround @larribas demonstrated.

https://github.com/BenefitsDataTrust/tmp-protobuf-segfault

To replicate, just clone, drop a creds.json file in the repo, and docker build .

jeffdeville commented 6 years ago

(I added your workaround suggestion in the ./teboring subdir if you want to check that out as well.)

TeBoring commented 6 years ago

@jeffdeville, thanks, I'll take a look.

ravindar commented 6 years ago

@teboring any updates on this issue?

gentlemich commented 6 years ago

Hi guys, Any workaround for this issue?

aniketdivekar commented 6 years ago

Hi guys, facing the same issue. Any fix/workaround available? @TeBoring

dalekurt commented 6 years ago

I'm experiencing the same issue using ruby:2.4.4-alpine3.7. Has anyone found a workaround for this?

kam1kaze commented 6 years ago

As work-a-round, you could set bundle config option to ignore the current machine's platform and install only ruby platform gems: export BUNDLE_FORCE_RUBY_PLATFORM=1

So Dockerfile would look like:

FROM ruby:2.5.1-alpine

RUN apk add --update build-base

ADD . .

RUN BUNDLE_FORCE_RUBY_PLATFORM=1 bundle install --jobs $(nproc)

CMD ./start.rb
theodorosidmar commented 6 years ago

Thank you, @kam1kaze I was trying to build a Dockerfile from ruby:2.5.1-alpine with grpc gem and that (your suggest) just worked fine!

nmammeri commented 6 years ago

Many thanks @kam1kaze your workaround works for me. I'm using ruby:2.5.3-alpine3.8.

TeBoring commented 5 years ago

We are currently using rake-compiler-docker to cross compile ruby gems: https://github.com/rake-compiler/rake-compiler-dock/blob/v0.6.2/Dockerfile However, the gem built by that docker image doesn't work on alpine. Previously, I doubt whether it's the problem of ruby 2.5.0 (protobuf doesn't work on ruby 2.5.0 for ruby's internal bug). I tried to build a docker image for ruby 2.5.1 and build gem on that. But same error. I don't have a way to go now. If any one knows how to build a gem for x86_64 that also work on alpine, please let me know.

TeBoring commented 5 years ago

https://github.com/docker-library/ruby/issues/196 Maybe this is related?

archonic commented 5 years ago

FWIW I encountered this on ruby:2.6.1-stretch as well.

ilyutov commented 5 years ago

Here's another hack that worked for me on ruby:2.5.1-alpine. It should be faster as you don't specify BUNDLE_FORCE_RUBY_PLATFORM for entire Gemfile.

  1. Lock google-protobuf version in your Gemfile: gem "google-protobuf", '3.7.0'
  2. After bundle install remove the installed version and re-install it manually like this:
    RUN bundle install --jobs $(nproc) --retry 2
    RUN gem uninstall -I google-protobuf
    RUN gem install google-protobuf --version=3.7.0 --platform=ruby
quinn commented 5 years ago

For me, i have to first add the gcompat package to get the segfault. It is segfaulting with or without BUNDLE_FORCE_RUBY_PLATFORM=1.

shideneyu commented 5 years ago

I have exactly the same issue @quinn . Did you find any workaround ?

quinn commented 5 years ago

@shideneyu I never did and had to switch from alpine to Ubuntu for the base image. Image size went from 50MB to 850MB, or something like that lol

If someone has this working can they post a Dockerfile with a Gemfile that works??

quinn commented 5 years ago

it seems like people in this thread have gotten this to work, and the great thing about deterministic tools like bundler and docker is that it makes it incredibly easy to reproduce other's results. Can someone share their working:

  1. Gemfile
  2. Gemfile.lock
  3. Dockerfile

🙏

nplusp commented 5 years ago

This does work for me on 2.6.3-alpine.

I have this in Gemfile:

gem "grpc", "1.21.0", platforms: ["ruby"]
gem "google-protobuf", "3.8.0", platforms: ["ruby"]

And this in Dockerfile:

RUN CFLAGS="-Wno-cast-function-type" \
      BUNDLE_FORCE_RUBY_PLATFORM=1 \
      bundle install
OpakAlex commented 4 years ago

Same issue with ruby:2.6.5-alpine3.10

Tried: CFLAGS="-Wno-cast-function-type" BUNDLE_FORCE_RUBY_PLATFORM=1 bundle install --jobs 20 --retry 5 --path /bundle

into Docker, no luck(

OpakAlex commented 4 years ago

here is an example: https://github.com/OpakAlex/reproduce-google-protobuf-gem-issue for reproduce bug

vitobotta commented 4 years ago

Hi @OpakAlex have you found a solution in the meantime? Thanks

acro5piano commented 4 years ago

In my case the error occurs with the following Dockerfile:

FROM ruby:2.5.3-alpine

RUN gem install google-protobuf --version=3.8.0

CMD ruby -e 'require "google/protobuf/any_pb"'

whereas with the following it doesn't occur:

FROM ruby:2.5.3-alpine

RUN gem install google-protobuf --version=3.11.4

CMD ruby -e 'require "google/protobuf/any_pb"'

Unfortunately, ENV BUNDLE_FORCE_RUBY_PLATFORM 1 does not help in my case.

[edit] I'm sorry, ENV BUNDLE_FORCE_RUBY_PLATFORM 1 is for bundler. Apparently not work for gem install

Anyway ENV BUNDLE_FORCE_RUBY_PLATFORM 1 worked for me. Thanks

nhattan commented 4 years ago

Try gcompat instead of libc6-compat. It works for me on ruby:2.6.3-alpine and google-protobuf (3.12.1) https://pkgs.alpinelinux.org/contents?file=ld-linux-x86-64.so.2&path=&name=&branch=edge

XeeD commented 4 years ago

I am facing the same issue, segmentation fault. I've tried @nhattan's solution with using gcompat but it didn't work for me. I'm on Ruby 2.4.10 Alpine image.

DawidJanczak commented 4 years ago

I can confirm that @nhattan's solution worked for us on ruby:2.7.1-alpine3.11, protobuf gem version 3.12.2. Thank you for the suggestion @nhattan!

XeeD commented 4 years ago

I've just tried it again with ruby:2.5.8-alpine3.11 and google-protobuf (3.12.2). Unfortunately I am still seeing the same crashes as before any time the Stackdriver gem wants to report an exception using Cloud Logging.

DawidJanczak commented 4 years ago

Apologies @nhattan, @XeeD, I haven't tested this sufficiently. It got rid of one segfault, but unfortunately another one still follows.

rnnds commented 4 years ago

I can confirm that @nhattan's solution worked for us on ruby:2.7.1-alpine3.11, protobuf gem version 3.12.2. Thank you for the suggestion @nhattan!

ruby:2.5.6-alpine3.10 with apk add --no-cache gcompat also works fine.

DawidJanczak commented 4 years ago

@rnnds I'm not sure if you've seen my follow up, but it ended up actually not working for us. Just to confirm this is without BUNDLE_FORCE_RUBY_PLATFORM set correct? Would it be possible for you to share your Dockerfile with us?

rnnds commented 4 years ago

@rnnds I'm not sure if you've seen my follow up, but it ended up actually not working for us. Just to confirm this is without BUNDLE_FORCE_RUBY_PLATFORM set correct? Would it be possible for you to share your Dockerfile with us?

@DawidJanczak sorry, you are right I didn't notice your message and I also got an error. I definitively solve it using a different image:

FROM ruby:2.6-slim-stretch

RUN apt-get update && apt-get install -y \
  build-essential \
  libpq-dev

RUN gem install bundler
RUN bundle install

#...
flipsasser commented 3 years ago

This is not going to be a problem-solving comment, so if you're looking for solutions, please disregard. If you're disgruntled like me, maybe it'll confirm your own biases. Regardless, I'm putting it here in the hopes that someone reads it and maybe something changes.

TLDR: A protocol buffers dependency is absolutely hamstringing us and we will be leaving Google Cloud due to this issue.

The long version: protobuf is a dependency for background jobs on our Cloud Run instance (via Cloudtasker). I do understand that protocol buffers saves overhead in the long-run vs. JSON. I know the benefits, and they sound absolutely wonderful for a massive system at-scale. Considering, however, how much time we've spent chasing this issue and, when we do solve it, sitting around waiting for Docker images to rebuild gRPC and protobuf from scratch, we are not seeing any benefit.

Serializing is a solved problem, and protocol buffers should not be an exception. It needs an implementation that is lightweight and performant; this does not seem like a heavy lift if Google expects us to use it in order to use their cloud offerings. The Rust implementation might be a good place to start. Or why not distribute a pre-built Go version? That would be more in Google's wheelhouse.

Whatever the case, stuff like this is going to cost Google customers. And we are one of those customers. And that's a real bummer - both for us in time and money wasted on this, and for Google in customers lost.

archonic commented 3 years ago

I've also left GCP for this and a few other reasons. It's a pretty ridiculous reason to lose customers.

TeBoring commented 3 years ago

Unlike python which allows us to build different wheels for different platforms, gem only allows us to upload a single version to support all platforms. For that reason, we have no way to provide a gem which supports alpine but also supports the other platforms.

So, for now, the only solution is to build gem locally on alpine from our source code.

https://github.com/rake-compiler/rake-compiler-dock/issues/20#issuecomment-450457761

Hopefully, gem could do similar thing like wheel in python (might raise issue in gem instead :)).

flipsasser commented 3 years ago

Thanks for the note, @TeBoring - I appreciate your position here, and totally understand there are technical limitations at the Ruby layer. This is probably a more appropriate discussion to have about the protobuf library itself, since it is what is segfaulting. While Rubygems forcing a re-build slows builds down, it's by no means a dealbreaker; the library being built but not functioning, on the other hand, is.

I do want to say that I don't post comments like the above lightly. I am grateful daily for anyone's open-source contributions, and don't want to come across as a "choosing beggar." If I wasn't paying my hosting provider to force the technology on me, I would never dream of criticizing, even implicitly, the contributions of folks such as yourself. Thanks for everything you do!

Flip

dlj-NaN commented 3 years ago

@flipsasser (and others): In this case, the protobuf library is only surfacing a deeper issue, which is the platform ABI. The libstdc++ docs include an explanation of the API/ABI interplay which (IMO) is quite clear and well-written, at least relative to the topic, but also a bit C++-centric. The ABI-related issue with Alpine is actually deeper than C++, though: Alpine uses musl libc instead of glibc . In fact, this is one of the key selling points on the Alpine linux homepage. However, despite the benefit to the Alpine ecosystem, this also means glibc-based binaries (and libraries) are generally not drop-in compatible with Alpine Linux.

For prebuilt protobuf libraries targeting x86_64 CPUs and the Linux kernel, protobuf prebuilts further use a GNU-based target -- i.e., one where the library named libc.so and found by the loader is implemented by glibc. This ABI is commonly denoted as x86_64-unknown-linux-gnu [1], where -gnu is notionally the OS, distinct from the kernel -linux (and famously so).

Ultimately, for prebuilt binary libraries, we must choose an implementation and version of libc consistent with all other runtime libraries and the running process itself. Unfortunately, this means that protobuf prebuilts targeting glibc are rendered incompatible with Alpine Linux, because they disagree at a minimum on the lowest-level [2] runtime library.

As @TeBoring pointed out, building from source does not tie you to the target OS of our prebuilt binary libraries. The protobuf sources are source-compatible with Musl, and hence Alpine, similar to how they are source-compatible with macOS and Windows targets. (I do, however, appreciate that Docker surfaces the build overhead cost quickly and often.) Alternatively, as @nhattan and @rnnds point out, there are excellent binary compatibility shims you can use to run glibc-targeted binaries under Musl; and as @rnnds also points out, switching away from an Alpine-based image altogether to a Debian-based image also eliminates the issue.

At the risk of droning on, I would also point out that Alpine+Musl's differing ABI is not particularly new, nor is it unique to protobuf, Google Cloud, Ruby, or even C/C++... a quick web search shows other projects which have tripped over various ABI aspects when targeting Alpine and/or Musl. It is certainly a tricky topic, though, and one of my least favorite parts of Linux build engineering.

[1] The -unknown part is a bit misleading... if you want, you can read more about the overall structure, history, and cruft of this name format on the OSDev wiki, the GNU Autoconf docs, the Clang docs, in Ian Lance Taylor's explanation, etc. [2] As a mostly-academic distinction, libc.so would technically be the second-lowest level library dependency on a dynamic executable. This is because, under Linux, the dynamic linker is the OS-side, i.e., kernel-external, portion of the program startup implementation. Practically speaking, however, the dynamic linker is also tied to the libc implementation by ABI. This is why the distinction is only mostly academic: glibc and Musl also have their own, separate dynamic linkers: glibc man page, musl conceptual design.

flipsasser commented 3 years ago

Thank you for the deeper dive, @dlj-NaN! This is super helpful for understanding the scope of the challenge in distributing protobuf on as many systems as possible. I'll be the first to say that, at a technical level, protobuf is well above my paygrade to criticize, as well as a wonderful and essential piece of engineering. Or rather, I assume it's wonderful; Clarke's 3rd law applies for me in this case! 😃

I readily concede that Alpine's choice of musl is causing the headache and that the fault lies there (otherwise we wouldn't have added gcompat to our apk add command in the first place). It's also too bad to hear that protobuf is not alone in that complaint against Alpine! In our case, protobuf is the only thing that will not play nicely with Alpine, but I wholly admit that we may be an exception. Perhaps more people are struggling with a wider variety of libraries on Alpine than I fully appreciate or grasp. Regardless, I'm grateful for your masterful perspective on the issue, and I totally get that you cannot feasibly account for every possible edge case in distributing your product.

Having considered your perspective on this, I'm hoping you'll be willing to consider mine.

As a level-set, it's worth clarifying that we do not approach this issue from a purely technical perspective. My goal is not to argue that "Alpine is right" or "musl is the best." I'm also not attempting to compare it to other serialization technologies like JSON. I don't know enough about C++ or streaming deserialization or whatever API/ABI interplay even is to make a big, technical case for doing anything in any way differently.

Instead I ask you to consider that we, as a small, open-source project funded by grants, must contend with a fiscal reality in addition to a technical one. From where we stand, we pay (from a limited budget) for the use of GCP, and GCP, in turn, forces the technical decision to use protobuf on us. Our expectation is therefore that protobuf not throw a wrench into our process.

We consicously chose Alpine because it is widely used and extremely lightweight, two benefits which reduce costs and speed up build processes. And for most of our project's life, that reasoning has proved sound. In fact, right up until we added a dependency on protobuf (which was well after we cut over to GCP from Heroku), we experienced exactly zero Alpine-specific problems (in fairness, we have since experienced one issue related to timezone data).

We therefore view adopting a different OS (and re-writing and re-testing all of our Docker configuration) to be a non-starter. From our perspective, we are being asked to invalidate primary technical decisions on behalf of a tertiary dependency that we are required to use in exchange for paying Google.

That the technology causing this dissonance solves what feels, to us, like a solved problem (in this case serialization) is all the more frustrating. That frustration is compounded by the fact that there are other quick-compiling, light-weight, portable dependencies all over our application. By way of comparison, here are some benchmarks for building fairly high-performance and complicated pieces of software on my 4-year-old iMac:

Redis: builds from source in 13 seconds

magog:~→ brew reinstall redis --build-from-source
...
==> Summary
🍺  /usr/local/Cellar/redis/6.0.10: 11 files, 3.8MB, built in 13 seconds

PostgreSQL: builds from source in 2 minutes and 4 seconds

magog:~→ brew reinstall postgresql --build-from-source
...
==> Summary
🍺  /usr/local/Cellar/postgresql/13.1: 3,217 files, 42.5MB, built in 2 minutes 4 seconds

Protobuf: builds from source in 6 minutes and 31 seconds (3x as long as PostgreSQL and 30x as long as Redis)

magog:~→ brew reinstall protobuf --build-from-source
...
==> Summary
🍺  /usr/local/Cellar/protobuf/3.14.0: 256 files, 18.2MB, built in 6 minutes 31 seconds

Say what you will about the value of comparing benchmarks, this illustrates my point: protobuf appears to take a very long time to build, and (as the ongoing conversation in this Github issue clearly illustrates) still frequently segfaults after it has built, on one of the most popular operating systems in the virtualization ecosystem.

And so, to your customers, and regardless of Alpine's C++ std library choices, protobuf feels like a difficult-to-use dependency compounded by frustation at the fact that it feels unnecessary in all but the highest-volume use cases. Paying a vendor, only to be forced into making big technical decisions for the wrong reasons in order to use a serialization technology that feels redundant, overpowered, or both, is a huge, huge, huge bummer.

Please, please, please do not read this as an attack. I'm confident there are perfectly valid reasons protobuf is written in C++ and takes a very long time to compile, and you've exhaustively convinced me that protobuf and Alpine are not destined to play nicely any time soon, for understandable, fair, and valid reasons.

I am merely trying to illustrate what it feels like being forced to use it, and again, I would never dare offer even comparisons like the above if I weren't paying money to do so.

Ultimately it's our fault for selecting GCP without planning far enough down the road. Had we considered that we'd eventually need a background worker solution, we could have selected a provider who offers such a feature without workarounds involving disparate services like Cloud Tasks and long-running HTTP requests. And we're willing to pay the price for that mistake, but for our money, that price is not rebuilding our infrastructure to use a different OS because Google said we should; it's rebuilding our infrastructure with a different hosting provider. And that is specifically because Google made it too difficult to use theirs and we no longer felt we could trust them not to do it again.

Thank you for all of your contributions to the cause, and I don't take lightly that protobuf is probably at the core of many of the systems I take for granted on a daily basis. It's simply not a good solution for us. I'd be happy to chat more about this over email or on the phone; my contact information can be found on my website, which is listed in my Github profile.

Flip

ltchurik commented 3 years ago

Hi all it took me long to fix it on our project but i ended with this:

No segmentation fault and all running ok.