google-cloud-ruby: Unable to use gem on Alpine Linux

Hi! At work, we’ve been working hard to migrate most of our applications to Google Cloud Platform, initially running in Docker in Compute Engine, and eventually migrating to Container Engine. Like many other folks who are using Docker, we’ve landed on Alpine Linux as our preferred base image.

Much of the new infrastructure we’re building will be communicating via Pub/Sub, and so pretty much all of these apps will be using the google-cloud-pubsub gem as a dependency.

Unfortunately, that’s turned out to pose a problem in our base image of choice, because of a number of issues with dependencies pulled in by google-cloud-pubsub.

Initially, we ran into issues linking against google-protobuf 3.2.0.1. I’d hoped to solve this by building, but ran into the issue I shared here. It was a dependency on glibc, when Alpine uses musl libc. I resolved this by going back to 3.2.0, and @acozzette has since resolved the issue with building. However, he’s raised a valid point that it might be worth looking into ways to allow the published, prebuilt gem to work out of the box.

Now, I’m personally just fine with building the gem’s native extensions, so I proceeded along, thinking I’d managed to resolve the issue that was dooming our devs to a life of slim images.

And then I found out about grpc.

Gory build failure inside...
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory:
/opt/app/vendor/bundle-development/gems/grpc-1.2.0/src/ruby/ext/grpc
/usr/local/bin/ruby -r ./siteconf20170322-7-odtrys.rb extconf.rb
Building internal gRPC into
/opt/app/vendor/bundle-development/gems/grpc-1.2.0/src/ruby/ext/grpc/libs/opt
make: Entering directory '/opt/app/vendor/bundle-development/gems/grpc-1.2.0'
[C]       Compiling third_party/zlib/adler32.c
[C]       Compiling third_party/zlib/compress.c
[C]       Compiling third_party/zlib/crc32.c
[C]       Compiling third_party/zlib/deflate.c
[C]       Compiling third_party/zlib/gzclose.c
[C]       Compiling third_party/zlib/gzlib.c
[C]       Compiling third_party/zlib/gzwrite.c
[C]       Compiling third_party/zlib/gzread.c
[C]       Compiling third_party/zlib/infback.c
[C]       Compiling third_party/zlib/inffast.c
[C]       Compiling third_party/zlib/inflate.c
[C]       Compiling third_party/zlib/inftrees.c
[C]       Compiling third_party/zlib/trees.c
[C]       Compiling third_party/zlib/uncompr.c
[C]       Compiling third_party/zlib/zutil.c
[C]       Compiling src/boringssl/err_data.c
[C]       Compiling third_party/boringssl/crypto/aes/aes.c
[C]       Compiling third_party/boringssl/crypto/aes/mode_wrappers.c
[C]       Compiling third_party/boringssl/crypto/asn1/a_bitstr.c
[C]       Compiling third_party/boringssl/crypto/asn1/a_bool.c
[C]       Compiling third_party/boringssl/crypto/asn1/a_d2i_fp.c
[C]       Compiling third_party/boringssl/crypto/asn1/a_dup.c
[C]       Compiling third_party/boringssl/crypto/asn1/a_enum.c
[C]       Compiling third_party/boringssl/crypto/asn1/a_gentm.c
[C]       Compiling third_party/boringssl/crypto/asn1/a_i2d_fp.c
[C]       Compiling third_party/boringssl/crypto/asn1/a_int.c
[C]       Compiling third_party/boringssl/crypto/asn1/a_mbstr.c
[C]       Compiling third_party/boringssl/crypto/asn1/a_octet.c
[C]       Compiling third_party/boringssl/crypto/asn1/a_object.c
[C]       Compiling third_party/boringssl/crypto/asn1/a_print.c
[C]       Compiling third_party/boringssl/crypto/asn1/a_strnid.c
[C]       Compiling third_party/boringssl/crypto/asn1/a_time.c
[C]       Compiling third_party/boringssl/crypto/asn1/a_type.c
[C]       Compiling third_party/boringssl/crypto/asn1/a_utctm.c
[C]       Compiling third_party/boringssl/crypto/asn1/a_utf8.c
[C]       Compiling third_party/boringssl/crypto/asn1/asn1_lib.c
[C]       Compiling third_party/boringssl/crypto/asn1/asn1_par.c
[C]       Compiling third_party/boringssl/crypto/asn1/asn_pack.c
[C]       Compiling third_party/boringssl/crypto/asn1/f_enum.c
[C]       Compiling third_party/boringssl/crypto/asn1/f_int.c
[C]       Compiling third_party/boringssl/crypto/asn1/t_bitst.c
[C]       Compiling third_party/boringssl/crypto/asn1/f_string.c
[C]       Compiling third_party/boringssl/crypto/asn1/tasn_dec.c
[C]       Compiling third_party/boringssl/crypto/asn1/tasn_enc.c
[C]       Compiling third_party/boringssl/crypto/asn1/tasn_fre.c
[C]       Compiling third_party/boringssl/crypto/asn1/tasn_new.c
[C]       Compiling third_party/boringssl/crypto/asn1/tasn_typ.c
[C]       Compiling third_party/boringssl/crypto/asn1/x_bignum.c
[C]       Compiling third_party/boringssl/crypto/asn1/tasn_utl.c
[C]       Compiling third_party/boringssl/crypto/asn1/x_long.c
[C]       Compiling third_party/boringssl/crypto/bio/bio.c
[C]       Compiling third_party/boringssl/crypto/base64/base64.c
[C]       Compiling third_party/boringssl/crypto/bio/bio_mem.c
[C]       Compiling third_party/boringssl/crypto/bio/buffer.c
[C]       Compiling third_party/boringssl/crypto/bio/connect.c
[C]       Compiling third_party/boringssl/crypto/bio/fd.c
[C]       Compiling third_party/boringssl/crypto/bio/file.c
[C]       Compiling third_party/boringssl/crypto/bio/hexdump.c
[C]       Compiling third_party/boringssl/crypto/bio/pair.c
[C]       Compiling third_party/boringssl/crypto/bio/printf.c
[C]       Compiling third_party/boringssl/crypto/bio/socket.c
[C]       Compiling third_party/boringssl/crypto/bio/socket_helper.c
[C]       Compiling third_party/boringssl/crypto/bn/add.c
[C]       Compiling third_party/boringssl/crypto/bn/asm/x86_64-gcc.c
[C]       Compiling third_party/boringssl/crypto/bn/bn.c
[C]       Compiling third_party/boringssl/crypto/bn/bn_asn1.c
[C]       Compiling third_party/boringssl/crypto/bn/cmp.c
[C]       Compiling third_party/boringssl/crypto/bn/convert.c
[C]       Compiling third_party/boringssl/crypto/bn/ctx.c
[C]       Compiling third_party/boringssl/crypto/bn/div.c
[C]       Compiling third_party/boringssl/crypto/bn/exponentiation.c
[C]       Compiling third_party/boringssl/crypto/bn/gcd.c
[C]       Compiling third_party/boringssl/crypto/bn/generic.c
[C]       Compiling third_party/boringssl/crypto/bn/kronecker.c
[C]       Compiling third_party/boringssl/crypto/bn/montgomery.c
[C]       Compiling third_party/boringssl/crypto/bn/montgomery_inv.c
[C]       Compiling third_party/boringssl/crypto/bn/mul.c
[C]       Compiling third_party/boringssl/crypto/bn/prime.c
[C]       Compiling third_party/boringssl/crypto/bn/random.c
[C]       Compiling third_party/boringssl/crypto/bn/rsaz_exp.c
[C]       Compiling third_party/boringssl/crypto/bn/shift.c
[C]       Compiling third_party/boringssl/crypto/bn/sqrt.c
[C]       Compiling third_party/boringssl/crypto/buf/buf.c
[C]       Compiling third_party/boringssl/crypto/bytestring/asn1_compat.c
[C]       Compiling third_party/boringssl/crypto/bytestring/ber.c
[C]       Compiling third_party/boringssl/crypto/bytestring/cbb.c
[C]       Compiling third_party/boringssl/crypto/bytestring/cbs.c
[C]       Compiling third_party/boringssl/crypto/chacha/chacha.c
[C]       Compiling third_party/boringssl/crypto/cipher/aead.c
[C]       Compiling third_party/boringssl/crypto/cipher/cipher.c
[C]       Compiling third_party/boringssl/crypto/cipher/derive_key.c
[C]       Compiling third_party/boringssl/crypto/cipher/e_aes.c
[C]       Compiling third_party/boringssl/crypto/cipher/e_chacha20poly1305.c
[C]       Compiling third_party/boringssl/crypto/cipher/e_des.c
[C]       Compiling third_party/boringssl/crypto/cipher/e_rc2.c
[C]       Compiling third_party/boringssl/crypto/cipher/e_null.c
[C]       Compiling third_party/boringssl/crypto/cipher/e_rc4.c
[C]       Compiling third_party/boringssl/crypto/cipher/e_ssl3.c
[C]       Compiling third_party/boringssl/crypto/cipher/e_tls.c
[C]       Compiling third_party/boringssl/crypto/cipher/tls_cbc.c
[C]       Compiling third_party/boringssl/crypto/cmac/cmac.c
[C]       Compiling third_party/boringssl/crypto/conf/conf.c
[C]       Compiling third_party/boringssl/crypto/cpu-aarch64-linux.c
[C]       Compiling third_party/boringssl/crypto/cpu-arm-linux.c
[C]       Compiling third_party/boringssl/crypto/cpu-arm.c
[C]       Compiling third_party/boringssl/crypto/cpu-intel.c
[C]       Compiling third_party/boringssl/crypto/cpu-ppc64le.c
[C]       Compiling third_party/boringssl/crypto/crypto.c
[C]       Compiling third_party/boringssl/crypto/curve25519/curve25519.c
[C]       Compiling third_party/boringssl/crypto/curve25519/spake25519.c
[C]       Compiling third_party/boringssl/crypto/curve25519/x25519-x86_64.c
[C]       Compiling third_party/boringssl/crypto/des/des.c
[C]       Compiling third_party/boringssl/crypto/dh/check.c
[C]       Compiling third_party/boringssl/crypto/dh/dh.c
[C]       Compiling third_party/boringssl/crypto/dh/dh_asn1.c
[C]       Compiling third_party/boringssl/crypto/dh/params.c
[C]       Compiling third_party/boringssl/crypto/digest/digest.c
[C]       Compiling third_party/boringssl/crypto/digest/digests.c
[C]       Compiling third_party/boringssl/crypto/dsa/dsa.c
[C]       Compiling third_party/boringssl/crypto/dsa/dsa_asn1.c
[C]       Compiling third_party/boringssl/crypto/ec/ec.c
[C]       Compiling third_party/boringssl/crypto/ec/ec_asn1.c
[C]       Compiling third_party/boringssl/crypto/ec/ec_key.c
[C]       Compiling third_party/boringssl/crypto/ec/ec_montgomery.c
[C]       Compiling third_party/boringssl/crypto/ec/oct.c
[C]       Compiling third_party/boringssl/crypto/ec/p224-64.c
[C]       Compiling third_party/boringssl/crypto/ec/p256-64.c
[C]       Compiling third_party/boringssl/crypto/ec/p256-x86_64.c
[C]       Compiling third_party/boringssl/crypto/ec/simple.c
[C]       Compiling third_party/boringssl/crypto/ec/util-64.c
[C]       Compiling third_party/boringssl/crypto/ec/wnaf.c
[C]       Compiling third_party/boringssl/crypto/ecdh/ecdh.c
[C]       Compiling third_party/boringssl/crypto/ecdsa/ecdsa.c
[C]       Compiling third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c
[C]       Compiling third_party/boringssl/crypto/engine/engine.c
[C]       Compiling third_party/boringssl/crypto/err/err.c
[C]       Compiling third_party/boringssl/crypto/evp/digestsign.c
[C]       Compiling third_party/boringssl/crypto/evp/evp.c
[C]       Compiling third_party/boringssl/crypto/evp/evp_asn1.c
[C]       Compiling third_party/boringssl/crypto/evp/evp_ctx.c
[C]       Compiling third_party/boringssl/crypto/evp/p_dsa_asn1.c
[C]       Compiling third_party/boringssl/crypto/evp/p_ec.c
[C]       Compiling third_party/boringssl/crypto/evp/p_ec_asn1.c
[C]       Compiling third_party/boringssl/crypto/evp/p_rsa.c
[C]       Compiling third_party/boringssl/crypto/evp/p_rsa_asn1.c
[C]       Compiling third_party/boringssl/crypto/evp/pbkdf.c
[C]       Compiling third_party/boringssl/crypto/evp/print.c
[C]       Compiling third_party/boringssl/crypto/evp/sign.c
[C]       Compiling third_party/boringssl/crypto/ex_data.c
[C]       Compiling third_party/boringssl/crypto/hkdf/hkdf.c
[C]       Compiling third_party/boringssl/crypto/hmac/hmac.c
[C]       Compiling third_party/boringssl/crypto/lhash/lhash.c
[C]       Compiling third_party/boringssl/crypto/md4/md4.c
[C]       Compiling third_party/boringssl/crypto/md5/md5.c
[C]       Compiling third_party/boringssl/crypto/mem.c
[C]       Compiling third_party/boringssl/crypto/modes/cbc.c
[C]       Compiling third_party/boringssl/crypto/modes/cfb.c
[C]       Compiling third_party/boringssl/crypto/modes/ctr.c
[C]       Compiling third_party/boringssl/crypto/modes/gcm.c
[C]       Compiling third_party/boringssl/crypto/modes/ofb.c
[C]       Compiling third_party/boringssl/crypto/newhope/error_correction.c
[C]       Compiling third_party/boringssl/crypto/newhope/newhope.c
[C]       Compiling third_party/boringssl/crypto/newhope/poly.c
[C]       Compiling third_party/boringssl/crypto/newhope/ntt.c
[C]       Compiling third_party/boringssl/crypto/newhope/precomp.c
[C]       Compiling third_party/boringssl/crypto/newhope/reduce.c
[C]       Compiling third_party/boringssl/crypto/obj/obj.c
[C]       Compiling third_party/boringssl/crypto/obj/obj_xref.c
[C]       Compiling third_party/boringssl/crypto/pem/pem_all.c
[C]       Compiling third_party/boringssl/crypto/pem/pem_info.c
[C]       Compiling third_party/boringssl/crypto/pem/pem_lib.c
[C]       Compiling third_party/boringssl/crypto/pem/pem_oth.c
[C]       Compiling third_party/boringssl/crypto/pem/pem_pk8.c
[C]       Compiling third_party/boringssl/crypto/pem/pem_pkey.c
[C]       Compiling third_party/boringssl/crypto/pem/pem_x509.c
[C]       Compiling third_party/boringssl/crypto/pem/pem_xaux.c
[C]       Compiling third_party/boringssl/crypto/pkcs8/p5_pbe.c
[C]       Compiling third_party/boringssl/crypto/pkcs8/p5_pbev2.c
[C]       Compiling third_party/boringssl/crypto/pkcs8/p8_pkey.c
[C]       Compiling third_party/boringssl/crypto/pkcs8/pkcs8.c
[C]       Compiling third_party/boringssl/crypto/poly1305/poly1305.c
[C]       Compiling third_party/boringssl/crypto/poly1305/poly1305_arm.c
[C]       Compiling third_party/boringssl/crypto/poly1305/poly1305_vec.c
[C]       Compiling third_party/boringssl/crypto/rand/deterministic.c
[C]       Compiling third_party/boringssl/crypto/rand/rand.c
[C]       Compiling third_party/boringssl/crypto/rand/urandom.c
[C]       Compiling third_party/boringssl/crypto/rand/windows.c
[C]       Compiling third_party/boringssl/crypto/rc4/rc4.c
[C]       Compiling third_party/boringssl/crypto/refcount_c11.c
[C]       Compiling third_party/boringssl/crypto/refcount_lock.c
[C]       Compiling third_party/boringssl/crypto/rsa/blinding.c
[C]       Compiling third_party/boringssl/crypto/rsa/padding.c
[C]       Compiling third_party/boringssl/crypto/rsa/rsa.c
[C]       Compiling third_party/boringssl/crypto/rsa/rsa_asn1.c
[C]       Compiling third_party/boringssl/crypto/rsa/rsa_impl.c
[C]       Compiling third_party/boringssl/crypto/sha/sha1.c
[C]       Compiling third_party/boringssl/crypto/sha/sha256.c
[C]       Compiling third_party/boringssl/crypto/sha/sha512.c
[C]       Compiling third_party/boringssl/crypto/stack/stack.c
[C]       Compiling third_party/boringssl/crypto/thread.c
[C]       Compiling third_party/boringssl/crypto/thread_none.c
[C]       Compiling third_party/boringssl/crypto/thread_pthread.c
[C]       Compiling third_party/boringssl/crypto/thread_win.c
[C]       Compiling third_party/boringssl/crypto/time_support.c
[C]       Compiling third_party/boringssl/crypto/x509/a_digest.c
[C]       Compiling third_party/boringssl/crypto/x509/a_sign.c
[C]       Compiling third_party/boringssl/crypto/x509/a_strex.c
[C]       Compiling third_party/boringssl/crypto/x509/a_verify.c
[C]       Compiling third_party/boringssl/crypto/x509/algorithm.c
[C]       Compiling third_party/boringssl/crypto/x509/asn1_gen.c
[C]       Compiling third_party/boringssl/crypto/x509/by_dir.c
[C]       Compiling third_party/boringssl/crypto/x509/by_file.c
[C]       Compiling third_party/boringssl/crypto/x509/i2d_pr.c
[C]       Compiling third_party/boringssl/crypto/x509/pkcs7.c
[C]       Compiling third_party/boringssl/crypto/x509/rsa_pss.c
[C]       Compiling third_party/boringssl/crypto/x509/t_crl.c
[C]       Compiling third_party/boringssl/crypto/x509/t_req.c
[C]       Compiling third_party/boringssl/crypto/x509/t_x509.c
[C]       Compiling third_party/boringssl/crypto/x509/t_x509a.c
[C]       Compiling third_party/boringssl/crypto/x509/x509.c
[C]       Compiling third_party/boringssl/crypto/x509/x509_att.c
[C]       Compiling third_party/boringssl/crypto/x509/x509_cmp.c
[C]       Compiling third_party/boringssl/crypto/x509/x509_d2.c
[C]       Compiling third_party/boringssl/crypto/x509/x509_def.c
[C]       Compiling third_party/boringssl/crypto/x509/x509_ext.c
[C]       Compiling third_party/boringssl/crypto/x509/x509_lu.c
[C]       Compiling third_party/boringssl/crypto/x509/x509_obj.c
[C]       Compiling third_party/boringssl/crypto/x509/x509_r2x.c
[C]       Compiling third_party/boringssl/crypto/x509/x509_req.c
[C]       Compiling third_party/boringssl/crypto/x509/x509_set.c
[C]       Compiling third_party/boringssl/crypto/x509/x509_trs.c
[C]       Compiling third_party/boringssl/crypto/x509/x509_txt.c
[C]       Compiling third_party/boringssl/crypto/x509/x509_v3.c
[C]       Compiling third_party/boringssl/crypto/x509/x509_vfy.c
[C]       Compiling third_party/boringssl/crypto/x509/x509_vpm.c
[C]       Compiling third_party/boringssl/crypto/x509/x509cset.c
[C]       Compiling third_party/boringssl/crypto/x509/x509name.c
[C]       Compiling third_party/boringssl/crypto/x509/x509rset.c
[C]       Compiling third_party/boringssl/crypto/x509/x509spki.c
[C]       Compiling third_party/boringssl/crypto/x509/x_algor.c
[C]       Compiling third_party/boringssl/crypto/x509/x509type.c
[C]       Compiling third_party/boringssl/crypto/x509/x_all.c
[C]       Compiling third_party/boringssl/crypto/x509/x_attrib.c
[C]       Compiling third_party/boringssl/crypto/x509/x_crl.c
[C]       Compiling third_party/boringssl/crypto/x509/x_exten.c
[C]       Compiling third_party/boringssl/crypto/x509/x_info.c
[C]       Compiling third_party/boringssl/crypto/x509/x_name.c
[C]       Compiling third_party/boringssl/crypto/x509/x_pkey.c
[C]       Compiling third_party/boringssl/crypto/x509/x_pubkey.c
[C]       Compiling third_party/boringssl/crypto/x509/x_req.c
[C]       Compiling third_party/boringssl/crypto/x509/x_sig.c
[C]       Compiling third_party/boringssl/crypto/x509/x_spki.c
[C]       Compiling third_party/boringssl/crypto/x509/x_val.c
[C]       Compiling third_party/boringssl/crypto/x509/x_x509.c
[C]       Compiling third_party/boringssl/crypto/x509/x_x509a.c
[C]       Compiling third_party/boringssl/crypto/x509v3/pcy_cache.c
[C]       Compiling third_party/boringssl/crypto/x509v3/pcy_data.c
[C]       Compiling third_party/boringssl/crypto/x509v3/pcy_lib.c
[C]       Compiling third_party/boringssl/crypto/x509v3/pcy_map.c
[C]       Compiling third_party/boringssl/crypto/x509v3/pcy_node.c
[C]       Compiling third_party/boringssl/crypto/x509v3/pcy_tree.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_akey.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_akeya.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_bcons.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_alt.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_bitst.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_conf.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_cpols.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_crld.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_enum.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_extku.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_genn.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_ia5.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_info.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_int.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_lib.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_ncons.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_pci.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_pcia.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_pcons.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_pku.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_pmaps.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_prn.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_purp.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_skey.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_sxnet.c
[C]       Compiling third_party/boringssl/crypto/x509v3/v3_utl.c
[C]       Compiling third_party/boringssl/ssl/custom_extensions.c
[C]       Compiling third_party/boringssl/ssl/d1_both.c
[C]       Compiling third_party/boringssl/ssl/d1_lib.c
[C]       Compiling third_party/boringssl/ssl/d1_pkt.c
[C]       Compiling third_party/boringssl/ssl/d1_srtp.c
[C]       Compiling third_party/boringssl/ssl/dtls_method.c
[C]       Compiling third_party/boringssl/ssl/dtls_record.c
[C]       Compiling third_party/boringssl/ssl/handshake_client.c
[C]       Compiling third_party/boringssl/ssl/handshake_server.c
[C]       Compiling third_party/boringssl/ssl/s3_both.c
[C]       Compiling third_party/boringssl/ssl/s3_enc.c
[C]       Compiling third_party/boringssl/ssl/s3_lib.c
[C]       Compiling third_party/boringssl/ssl/s3_pkt.c
[C]       Compiling third_party/boringssl/ssl/ssl_aead_ctx.c
[C]       Compiling third_party/boringssl/ssl/ssl_asn1.c
[C]       Compiling third_party/boringssl/ssl/ssl_buffer.c
[C]       Compiling third_party/boringssl/ssl/ssl_cert.c
[C]       Compiling third_party/boringssl/ssl/ssl_cipher.c
[C]       Compiling third_party/boringssl/ssl/ssl_ecdh.c
[C]       Compiling third_party/boringssl/ssl/ssl_file.c
[C]       Compiling third_party/boringssl/ssl/ssl_lib.c
[C]       Compiling third_party/boringssl/ssl/ssl_rsa.c
[C]       Compiling third_party/boringssl/ssl/ssl_session.c
[C]       Compiling third_party/boringssl/ssl/ssl_stat.c
[C]       Compiling third_party/boringssl/ssl/t1_enc.c
[C]       Compiling third_party/boringssl/ssl/t1_lib.c
[C]       Compiling third_party/boringssl/ssl/tls13_both.c
[C]       Compiling third_party/boringssl/ssl/tls13_client.c
[C]       Compiling third_party/boringssl/ssl/tls13_enc.c
[C]       Compiling third_party/boringssl/ssl/tls13_server.c
[C]       Compiling third_party/boringssl/ssl/tls_method.c
[C]       Compiling third_party/boringssl/ssl/tls_record.c
[C]       Compiling src/core/lib/surface/init.c
[C]       Compiling src/core/lib/channel/channel_args.c
[C]       Compiling src/core/lib/channel/channel_stack.c
[C]       Compiling src/core/lib/channel/channel_stack_builder.c
[C]       Compiling src/core/lib/channel/compress_filter.c
[C]       Compiling src/core/lib/channel/connected_channel.c
[C]       Compiling src/core/lib/channel/deadline_filter.c
[C]       Compiling src/core/lib/channel/handshaker.c
[C]       Compiling src/core/lib/channel/handshaker_factory.c
[C]       Compiling src/core/lib/channel/handshaker_registry.c
[C]       Compiling src/core/lib/channel/http_client_filter.c
[C]       Compiling src/core/lib/channel/http_server_filter.c
[C]       Compiling src/core/lib/channel/message_size_filter.c
[C]       Compiling src/core/lib/compression/compression.c
[C]       Compiling src/core/lib/compression/message_compress.c
[C]       Compiling src/core/lib/debug/trace.c
[C]       Compiling src/core/lib/http/format_request.c
[C]       Compiling src/core/lib/http/httpcli.c
[C]       Compiling src/core/lib/http/parser.c
[C]       Compiling src/core/lib/iomgr/closure.c
[C]       Compiling src/core/lib/iomgr/combiner.c
[C]       Compiling src/core/lib/iomgr/endpoint.c
[C]       Compiling src/core/lib/iomgr/endpoint_pair_posix.c
[C]       Compiling src/core/lib/iomgr/endpoint_pair_uv.c
[C]       Compiling src/core/lib/iomgr/endpoint_pair_windows.c
[C]       Compiling src/core/lib/iomgr/error.c
[C]       Compiling src/core/lib/iomgr/ev_epoll_linux.c
[C]       Compiling src/core/lib/iomgr/ev_poll_posix.c
[C]       Compiling src/core/lib/iomgr/ev_posix.c
[C]       Compiling src/core/lib/iomgr/exec_ctx.c
[C]       Compiling src/core/lib/iomgr/executor.c
[C]       Compiling src/core/lib/iomgr/iocp_windows.c
[C]       Compiling src/core/lib/iomgr/iomgr.c
[C]       Compiling src/core/lib/iomgr/iomgr_posix.c
[C]       Compiling src/core/lib/iomgr/iomgr_uv.c
[C]       Compiling src/core/lib/iomgr/iomgr_windows.c
[C]       Compiling src/core/lib/iomgr/load_file.c
[C]       Compiling src/core/lib/iomgr/network_status_tracker.c
[C]       Compiling src/core/lib/iomgr/polling_entity.c
[C]       Compiling src/core/lib/iomgr/pollset_set_uv.c
[C]       Compiling src/core/lib/iomgr/pollset_set_windows.c
[C]       Compiling src/core/lib/iomgr/pollset_uv.c
[C]       Compiling src/core/lib/iomgr/pollset_windows.c
[C]       Compiling src/core/lib/iomgr/resolve_address_posix.c
[C]       Compiling src/core/lib/iomgr/resolve_address_uv.c
[C]       Compiling src/core/lib/iomgr/sockaddr_utils.c
[C]       Compiling src/core/lib/iomgr/resolve_address_windows.c
[C]       Compiling src/core/lib/iomgr/resource_quota.c
[C]       Compiling src/core/lib/iomgr/socket_mutator.c
[C]       Compiling src/core/lib/iomgr/socket_utils_common_posix.c
[C]       Compiling src/core/lib/iomgr/socket_utils_linux.c
[C]       Compiling src/core/lib/iomgr/socket_utils_posix.c
[C]       Compiling src/core/lib/iomgr/socket_utils_uv.c
[C]       Compiling src/core/lib/iomgr/socket_utils_windows.c
[C]       Compiling src/core/lib/iomgr/socket_windows.c
[C]       Compiling src/core/lib/iomgr/tcp_client_posix.c
[C]       Compiling src/core/lib/iomgr/tcp_client_uv.c
[C]       Compiling src/core/lib/iomgr/tcp_client_windows.c
[C]       Compiling src/core/lib/iomgr/tcp_posix.c
[C]       Compiling src/core/lib/iomgr/tcp_server_posix.c
[C]       Compiling src/core/lib/iomgr/tcp_server_uv.c
[C]       Compiling src/core/lib/iomgr/tcp_server_windows.c
[C]       Compiling src/core/lib/iomgr/tcp_uv.c
[C]       Compiling src/core/lib/iomgr/tcp_windows.c
[C]       Compiling src/core/lib/iomgr/time_averaged_stats.c
[C]       Compiling src/core/lib/iomgr/timer_generic.c
[C]       Compiling src/core/lib/iomgr/timer_heap.c
[C]       Compiling src/core/lib/iomgr/timer_uv.c
[C]       Compiling src/core/lib/iomgr/udp_server.c
[C]       Compiling src/core/lib/iomgr/unix_sockets_posix.c
src/core/lib/iomgr/tcp_posix.c: In function 'tcp_do_read':
src/core/lib/iomgr/tcp_posix.c:219:20: error: conversion to 'int' from
'msg_iovlen_type {aka long unsigned int}' may alter its value
[-Werror=conversion]
   msg.msg_iovlen = tcp->iov_size;
                    ^
src/core/lib/iomgr/tcp_posix.c: In function 'tcp_flush':
src/core/lib/iomgr/tcp_posix.c:364:22: error: conversion to 'int' from
'msg_iovlen_type {aka long unsigned int}' may alter its value
[-Werror=conversion]
     msg.msg_iovlen = iov_size;
                      ^
[C]       Compiling src/core/lib/iomgr/unix_sockets_posix_noop.c
[C]       Compiling src/core/lib/iomgr/wakeup_fd_cv.c
[C]       Compiling src/core/lib/iomgr/wakeup_fd_eventfd.c
cc1: all warnings being treated as errors
Makefile:2364: recipe for target
'/opt/app/vendor/bundle-development/gems/grpc-1.2.0/src/ruby/ext/grpc/objs/opt/src/core/lib/iomgr/tcp_posix.o'
failed
make: ***
[/opt/app/vendor/bundle-development/gems/grpc-1.2.0/src/ruby/ext/grpc/objs/opt/src/core/lib/iomgr/tcp_posix.o]
Error 1
make: *** Waiting for unfinished jobs....
make: Leaving directory '/opt/app/vendor/bundle-development/gems/grpc-1.2.0'
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
	--with-opt-dir
	--without-opt-dir
	--with-opt-include
	--without-opt-include=${opt-dir}/include
	--with-opt-lib
	--without-opt-lib=${opt-dir}/lib
	--with-make-prog
	--without-make-prog
	--srcdir=.
	--curdir
	--ruby=/usr/local/bin/$(RUBY_BASE_NAME)

extconf failed, exit code 1

Gem files will remain installed in
/opt/app/vendor/bundle-development/gems/grpc-1.2.0 for inspection.
Results logged to
/opt/app/vendor/bundle-development/extensions/x86_64-linux/2.3.0/grpc-1.2.0/gem_make.out

An error occurred while installing grpc (1.2.0), and Bundler cannot continue.
Make sure that `gem install grpc -v '1.2.0'` succeeds before bundling.
Error running command. Aborting.

While the glibc dependencies in google-protobuf ended up being pretty straightforward to work around, it seems like there are more involved issues with grpc. According to grpc/grpc#8899, at least one reported incompatibility (grpc/grpc#6850) has survived for 9 months without a resolution, and the closest workarounds seem to involve using the prebuilt library, installing libc6-compat, and/or installing other compatibility packages pulled down with wget. All of this to install a dependency of a dependency of a dependency.

And none of this helps us build from source, which we’re now forcing to work around the issues with protobuf, and would prefer to do in any case, vs using the precompiled gems.

I’m not really sure what I can offer the devs on my team aside from “just switch to slim” – but I think, given the traction that Alpine has in the Docker space, and Google’s bet on containerization in Google Cloud Platform, this would be relevant to Google’s interests. At least, I’d hope it is.

I’d ask if it was possible to eliminate the dependency on grpc for google-cloud-pubsub, but I’m fairly sure I know the answer to that, based on its ubiquity in my Gemfile.lock at this point. Either way, I thought it might be a useful bit of feedback to share.

About this issue

  • Original URL
  • State: closed
  • Created 7 years ago
  • Reactions: 5
  • Comments: 20 (10 by maintainers)

Most upvoted comments

alpine-3.9
ruby-2.6.3p62
google-protobuf-3.7.1
grpc-1.20.0

I did a bit of digging and found that it was due to alpine gcc not being able to compile boringssl library due to function type cast error.

My temporary solution is as follows.

In Gemfile

# platforms :ruby needed to force build native extensions. Else, segfault in alpine
gem 'google-protobuf', platforms: [:ruby]
gem 'grpc', platforms: [:ruby]

Turn [-Wcast-function-type] error to warning during gcc native extension build.

CFLAGS="-Wno-cast-function-type" bundle install

It builds on alpine 3.9 and works fine with the above steps.

@swcloud can we get a bug against the grpc gem so that it can build on Alpine Linux? It seems like we’ll run into this more and more as folks move to containers and GKE.