diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 01e13b54dec..d9725886dc8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -31,7 +31,7 @@ default: parallel: matrix: # ADD NEW RUBIES HERE - - RUBY_VERSION: ["3.2.2", "3.1.4", "3.0.6", "2.7.8"] + - RUBY_VERSION: ["3.4", "3.3", "3.2", "3.1", "3.0", "2.7"] script: - > docker build @@ -60,7 +60,7 @@ promote-image: parallel: matrix: # ADD NEW RUBIES HERE - - RUBY_VERSION: ["3.2.2", "3.1.4", "3.0.6", "2.7.8"] + - RUBY_VERSION: ["3.4", "3.3", "3.2", "3.1", "3.0", "2.7"] ARCHITECTURE: ["amd64", "arm64"] script: - docker pull $RUBY_CUSTOM_IMAGE_BASE/$RUBY_VERSION-$ARCHITECTURE:$CI_PIPELINE_ID @@ -92,7 +92,7 @@ install-dependencies: tags: [ "arch:$ARCH" ] parallel: matrix: - - RUBY_VERSION: ["2.7.8", "3.0.6", "3.1.4", "3.2.2"] + - RUBY_VERSION: ["3.4", "3.3", "3.2", "3.1", "3.0", "2.7"] ARCH: [ "amd64", "arm64" ] stage: package needs: diff --git a/.gitlab/Dockerfile-2.7 b/.gitlab/Dockerfile-2.7 new file mode 100644 index 00000000000..099626411cd --- /dev/null +++ b/.gitlab/Dockerfile-2.7 @@ -0,0 +1 @@ +FROM ghcr.io/datadog/images-rb/engines/ruby:2.7-centos-gcc diff --git a/.gitlab/Dockerfile-2.7.8 b/.gitlab/Dockerfile-2.7.8 deleted file mode 100644 index 447c2bfa2df..00000000000 --- a/.gitlab/Dockerfile-2.7.8 +++ /dev/null @@ -1,94 +0,0 @@ -# This is copied from official Docker image -# but compile Ruby with `--disable-shared` and update gem version - -FROM registry.ddbuild.io/images/mirror/buildpack-deps:buster - -# skip installing gem documentation -RUN set -eux; \ - mkdir -p /usr/local/etc; \ - { \ - echo 'install: --no-document'; \ - echo 'update: --no-document'; \ - } >> /usr/local/etc/gemrc - -ENV LANG C.UTF-8 -ENV RUBY_MAJOR 2.7 -ENV RUBY_VERSION 2.7.8 -ENV RUBY_DOWNLOAD_SHA256 f22f662da504d49ce2080e446e4bea7008cee11d5ec4858fc69000d0e5b1d7fb - -# some of ruby's build scripts are written in ruby -# we purge system ruby later to make sure our final image uses what we just built -RUN set -eux; \ - \ - savedAptMark="$(apt-mark showmanual)"; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - bison \ - dpkg-dev \ - libgdbm-dev \ - ruby \ - ; \ - rm -rf /var/lib/apt/lists/*; \ - \ - wget -O ruby.tar.xz "https://cache.ruby-lang.org/pub/ruby/${RUBY_MAJOR%-rc}/ruby-$RUBY_VERSION.tar.xz"; \ - echo "$RUBY_DOWNLOAD_SHA256 *ruby.tar.xz" | sha256sum --check --strict; \ - \ - mkdir -p /usr/src/ruby; \ - tar -xJf ruby.tar.xz -C /usr/src/ruby --strip-components=1; \ - rm ruby.tar.xz; \ - \ - cd /usr/src/ruby; \ - \ -# hack in "ENABLE_PATH_CHECK" disabling to suppress: -# warning: Insecure world writable dir - { \ - echo '#define ENABLE_PATH_CHECK 0'; \ - echo; \ - cat file.c; \ - } > file.c.new; \ - mv file.c.new file.c; \ - \ - autoconf; \ - gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ - ./configure \ - --build="$gnuArch" \ - --disable-install-doc \ - --disable-shared \ - ; \ - make -j "$(nproc)"; \ - make install; \ - \ - apt-mark auto '.*' > /dev/null; \ - apt-mark manual $savedAptMark > /dev/null; \ - find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec ldd '{}' ';' \ - | awk '/=>/ { print $(NF-1) }' \ - | sort -u \ - | grep -vE '^/usr/local/lib/' \ - | xargs -r dpkg-query --search \ - | cut -d: -f1 \ - | sort -u \ - | xargs -r apt-mark manual \ - ; \ - apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ - \ - cd /; \ - rm -r /usr/src/ruby; \ -# verify we have no "ruby" packages installed - if dpkg -l | grep -i ruby; then exit 1; fi; \ - [ "$(command -v ruby)" = '/usr/local/bin/ruby' ]; \ -# update gem version - gem update --system 3.3.27;\ -# rough smoke test - ruby --version; \ - gem --version; \ - bundle --version - -# don't create ".bundle" in all our apps -ENV GEM_HOME /usr/local/bundle -ENV BUNDLE_SILENCE_ROOT_WARNING=1 \ - BUNDLE_APP_CONFIG="$GEM_HOME" -ENV PATH $GEM_HOME/bin:$PATH -# adjust permissions of a few directories for running "gem install" as an arbitrary user -RUN mkdir -p "$GEM_HOME" && chmod 1777 "$GEM_HOME" - -CMD [ "irb" ] diff --git a/.gitlab/Dockerfile-3.0 b/.gitlab/Dockerfile-3.0 new file mode 100644 index 00000000000..e342afc299a --- /dev/null +++ b/.gitlab/Dockerfile-3.0 @@ -0,0 +1 @@ +FROM ghcr.io/datadog/images-rb/engines/ruby:3.0-centos-gcc diff --git a/.gitlab/Dockerfile-3.0.6 b/.gitlab/Dockerfile-3.0.6 deleted file mode 100644 index 08b2947d849..00000000000 --- a/.gitlab/Dockerfile-3.0.6 +++ /dev/null @@ -1,94 +0,0 @@ -# This is copied from official Docker image -# but compile Ruby with `--disable-shared` and update gem version - -FROM registry.ddbuild.io/images/mirror/buildpack-deps:buster - -# skip installing gem documentation -RUN set -eux; \ - mkdir -p /usr/local/etc; \ - { \ - echo 'install: --no-document'; \ - echo 'update: --no-document'; \ - } >> /usr/local/etc/gemrc - -ENV LANG C.UTF-8 -ENV RUBY_MAJOR 3.0 -ENV RUBY_VERSION 3.0.6 -ENV RUBY_DOWNLOAD_SHA256 b5cbee93e62d85cfb2a408c49fa30a74231ae8409c2b3858e5f5ea254d7ddbd1 - -# some of ruby's build scripts are written in ruby -# we purge system ruby later to make sure our final image uses what we just built -RUN set -eux; \ - \ - savedAptMark="$(apt-mark showmanual)"; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - bison \ - dpkg-dev \ - libgdbm-dev \ - ruby \ - ; \ - rm -rf /var/lib/apt/lists/*; \ - \ - wget -O ruby.tar.xz "https://cache.ruby-lang.org/pub/ruby/${RUBY_MAJOR%-rc}/ruby-$RUBY_VERSION.tar.xz"; \ - echo "$RUBY_DOWNLOAD_SHA256 *ruby.tar.xz" | sha256sum --check --strict; \ - \ - mkdir -p /usr/src/ruby; \ - tar -xJf ruby.tar.xz -C /usr/src/ruby --strip-components=1; \ - rm ruby.tar.xz; \ - \ - cd /usr/src/ruby; \ - \ -# hack in "ENABLE_PATH_CHECK" disabling to suppress: -# warning: Insecure world writable dir - { \ - echo '#define ENABLE_PATH_CHECK 0'; \ - echo; \ - cat file.c; \ - } > file.c.new; \ - mv file.c.new file.c; \ - \ - autoconf; \ - gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ - ./configure \ - --build="$gnuArch" \ - --disable-install-doc \ - --disable-shared \ - ; \ - make -j "$(nproc)"; \ - make install; \ - \ - apt-mark auto '.*' > /dev/null; \ - apt-mark manual $savedAptMark > /dev/null; \ - find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec ldd '{}' ';' \ - | awk '/=>/ { print $(NF-1) }' \ - | sort -u \ - | grep -vE '^/usr/local/lib/' \ - | xargs -r dpkg-query --search \ - | cut -d: -f1 \ - | sort -u \ - | xargs -r apt-mark manual \ - ; \ - apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ - \ - cd /; \ - rm -r /usr/src/ruby; \ -# verify we have no "ruby" packages installed - if dpkg -l | grep -i ruby; then exit 1; fi; \ - [ "$(command -v ruby)" = '/usr/local/bin/ruby' ]; \ -# update gem version - gem update --system;\ -# rough smoke test - ruby --version; \ - gem --version; \ - bundle --version - -# don't create ".bundle" in all our apps -ENV GEM_HOME /usr/local/bundle -ENV BUNDLE_SILENCE_ROOT_WARNING=1 \ - BUNDLE_APP_CONFIG="$GEM_HOME" -ENV PATH $GEM_HOME/bin:$PATH -# adjust permissions of a few directories for running "gem install" as an arbitrary user -RUN mkdir -p "$GEM_HOME" && chmod 1777 "$GEM_HOME" - -CMD [ "irb" ] diff --git a/.gitlab/Dockerfile-3.1 b/.gitlab/Dockerfile-3.1 new file mode 100644 index 00000000000..b28521c11b9 --- /dev/null +++ b/.gitlab/Dockerfile-3.1 @@ -0,0 +1 @@ +FROM ghcr.io/datadog/images-rb/engines/ruby:3.1-centos-gcc diff --git a/.gitlab/Dockerfile-3.1.4 b/.gitlab/Dockerfile-3.1.4 deleted file mode 100644 index c27d01a0081..00000000000 --- a/.gitlab/Dockerfile-3.1.4 +++ /dev/null @@ -1,94 +0,0 @@ -# This is copied from official Docker image -# but compile Ruby with `--disable-shared` and update gem version - -FROM registry.ddbuild.io/images/mirror/buildpack-deps:buster - -# skip installing gem documentation -RUN set -eux; \ - mkdir -p /usr/local/etc; \ - { \ - echo 'install: --no-document'; \ - echo 'update: --no-document'; \ - } >> /usr/local/etc/gemrc - -ENV LANG C.UTF-8 -ENV RUBY_MAJOR 3.1 -ENV RUBY_VERSION 3.1.4 -ENV RUBY_DOWNLOAD_SHA256 1b6d6010e76036c937b9671f4752f065aeca800a6c664f71f6c9a699453af94f - -# some of ruby's build scripts are written in ruby -# we purge system ruby later to make sure our final image uses what we just built -RUN set -eux; \ - \ - savedAptMark="$(apt-mark showmanual)"; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - bison \ - dpkg-dev \ - libgdbm-dev \ - ruby \ - ; \ - rm -rf /var/lib/apt/lists/*; \ - \ - wget -O ruby.tar.xz "https://cache.ruby-lang.org/pub/ruby/${RUBY_MAJOR%-rc}/ruby-$RUBY_VERSION.tar.xz"; \ - echo "$RUBY_DOWNLOAD_SHA256 *ruby.tar.xz" | sha256sum --check --strict; \ - \ - mkdir -p /usr/src/ruby; \ - tar -xJf ruby.tar.xz -C /usr/src/ruby --strip-components=1; \ - rm ruby.tar.xz; \ - \ - cd /usr/src/ruby; \ - \ -# hack in "ENABLE_PATH_CHECK" disabling to suppress: -# warning: Insecure world writable dir - { \ - echo '#define ENABLE_PATH_CHECK 0'; \ - echo; \ - cat file.c; \ - } > file.c.new; \ - mv file.c.new file.c; \ - \ - autoconf; \ - gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ - ./configure \ - --build="$gnuArch" \ - --disable-install-doc \ - --disable-shared \ - ; \ - make -j "$(nproc)"; \ - make install; \ - \ - apt-mark auto '.*' > /dev/null; \ - apt-mark manual $savedAptMark > /dev/null; \ - find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec ldd '{}' ';' \ - | awk '/=>/ { print $(NF-1) }' \ - | sort -u \ - | grep -vE '^/usr/local/lib/' \ - | xargs -r dpkg-query --search \ - | cut -d: -f1 \ - | sort -u \ - | xargs -r apt-mark manual \ - ; \ - apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ - \ - cd /; \ - rm -r /usr/src/ruby; \ -# verify we have no "ruby" packages installed - if dpkg -l | grep -i ruby; then exit 1; fi; \ - [ "$(command -v ruby)" = '/usr/local/bin/ruby' ]; \ -# update gem version - gem update --system;\ -# rough smoke test - ruby --version; \ - gem --version; \ - bundle --version - -# don't create ".bundle" in all our apps -ENV GEM_HOME /usr/local/bundle -ENV BUNDLE_SILENCE_ROOT_WARNING=1 \ - BUNDLE_APP_CONFIG="$GEM_HOME" -ENV PATH $GEM_HOME/bin:$PATH -# adjust permissions of a few directories for running "gem install" as an arbitrary user -RUN mkdir -p "$GEM_HOME" && chmod 1777 "$GEM_HOME" - -CMD [ "irb" ] diff --git a/.gitlab/Dockerfile-3.2 b/.gitlab/Dockerfile-3.2 new file mode 100644 index 00000000000..9c18c8072ff --- /dev/null +++ b/.gitlab/Dockerfile-3.2 @@ -0,0 +1 @@ +FROM ghcr.io/datadog/images-rb/engines/ruby:3.2-centos-gcc diff --git a/.gitlab/Dockerfile-3.2.2 b/.gitlab/Dockerfile-3.2.2 deleted file mode 100644 index 5f0b67f3a0a..00000000000 --- a/.gitlab/Dockerfile-3.2.2 +++ /dev/null @@ -1,118 +0,0 @@ -# This is copied from official Docker image, but -# compile Ruby with `--disable-shared` and update gem version - -FROM registry.ddbuild.io/images/mirror/buildpack-deps:buster - -# skip installing gem documentation -RUN set -eux; \ - mkdir -p /usr/local/etc; \ - { \ - echo 'install: --no-document'; \ - echo 'update: --no-document'; \ - } >> /usr/local/etc/gemrc - -ENV LANG C.UTF-8 -ENV RUBY_MAJOR 3.2 -ENV RUBY_VERSION 3.2.2 -ENV RUBY_DOWNLOAD_SHA256 4b352d0f7ec384e332e3e44cdbfdcd5ff2d594af3c8296b5636c710975149e23 - -# some of ruby's build scripts are written in ruby -# we purge system ruby later to make sure our final image uses what we just built -RUN set -eux; \ - \ - savedAptMark="$(apt-mark showmanual)"; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - bison \ - dpkg-dev \ - libgdbm-dev \ - ruby \ - ; \ - rm -rf /var/lib/apt/lists/*; \ - \ - rustArch=; \ - dpkgArch="$(dpkg --print-architecture)"; \ - case "$dpkgArch" in \ - 'amd64') rustArch='x86_64-unknown-linux-gnu'; rustupUrl='https://static.rust-lang.org/rustup/archive/1.25.1/x86_64-unknown-linux-gnu/rustup-init'; rustupSha256='5cc9ffd1026e82e7fb2eec2121ad71f4b0f044e88bca39207b3f6b769aaa799c' ;; \ - 'arm64') rustArch='aarch64-unknown-linux-gnu'; rustupUrl='https://static.rust-lang.org/rustup/archive/1.25.1/aarch64-unknown-linux-gnu/rustup-init'; rustupSha256='e189948e396d47254103a49c987e7fb0e5dd8e34b200aa4481ecc4b8e41fb929' ;; \ - esac; \ - \ - if [ -n "$rustArch" ]; then \ - mkdir -p /tmp/rust; \ - \ - wget -O /tmp/rust/rustup-init "$rustupUrl"; \ - echo "$rustupSha256 */tmp/rust/rustup-init" | sha256sum --check --strict; \ - chmod +x /tmp/rust/rustup-init; \ - \ - export RUSTUP_HOME='/tmp/rust/rustup' CARGO_HOME='/tmp/rust/cargo'; \ - export PATH="$CARGO_HOME/bin:$PATH"; \ - /tmp/rust/rustup-init -y --no-modify-path --profile minimal --default-toolchain '1.66.0' --default-host "$rustArch"; \ - \ - rustc --version; \ - cargo --version; \ - fi; \ - \ - wget -O ruby.tar.xz "https://cache.ruby-lang.org/pub/ruby/${RUBY_MAJOR%-rc}/ruby-$RUBY_VERSION.tar.xz"; \ - echo "$RUBY_DOWNLOAD_SHA256 *ruby.tar.xz" | sha256sum --check --strict; \ - \ - mkdir -p /usr/src/ruby; \ - tar -xJf ruby.tar.xz -C /usr/src/ruby --strip-components=1; \ - rm ruby.tar.xz; \ - \ - cd /usr/src/ruby; \ - \ -# hack in "ENABLE_PATH_CHECK" disabling to suppress: -# warning: Insecure world writable dir - { \ - echo '#define ENABLE_PATH_CHECK 0'; \ - echo; \ - cat file.c; \ - } > file.c.new; \ - mv file.c.new file.c; \ - \ - autoconf; \ - gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ - ./configure \ - --build="$gnuArch" \ - --disable-install-doc \ - --disable-shared \ - ${rustArch:+--enable-yjit} \ - ; \ - make -j "$(nproc)"; \ - make install; \ - \ - rm -rf /tmp/rust; \ - apt-mark auto '.*' > /dev/null; \ - apt-mark manual $savedAptMark > /dev/null; \ - find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec ldd '{}' ';' \ - | awk '/=>/ { print $(NF-1) }' \ - | sort -u \ - | grep -vE '^/usr/local/lib/' \ - | xargs -r dpkg-query --search \ - | cut -d: -f1 \ - | sort -u \ - | xargs -r apt-mark manual \ - ; \ - apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ - \ - cd /; \ - rm -r /usr/src/ruby; \ -# verify we have no "ruby" packages installed - if dpkg -l | grep -i ruby; then exit 1; fi; \ - [ "$(command -v ruby)" = '/usr/local/bin/ruby' ]; \ -# update gem version - gem update --system;\ -# rough smoke test - ruby --version; \ - gem --version; \ - bundle --version - -# don't create ".bundle" in all our apps -ENV GEM_HOME /usr/local/bundle -ENV BUNDLE_SILENCE_ROOT_WARNING=1 \ - BUNDLE_APP_CONFIG="$GEM_HOME" -ENV PATH $GEM_HOME/bin:$PATH -# adjust permissions of a few directories for running "gem install" as an arbitrary user -RUN mkdir -p "$GEM_HOME" && chmod 1777 "$GEM_HOME" - -CMD [ "irb" ] diff --git a/.gitlab/Dockerfile-3.3 b/.gitlab/Dockerfile-3.3 new file mode 100644 index 00000000000..d854cb28efd --- /dev/null +++ b/.gitlab/Dockerfile-3.3 @@ -0,0 +1 @@ +FROM ghcr.io/datadog/images-rb/engines/ruby:3.3-centos-gcc diff --git a/.gitlab/Dockerfile-3.4 b/.gitlab/Dockerfile-3.4 new file mode 100644 index 00000000000..8159a223623 --- /dev/null +++ b/.gitlab/Dockerfile-3.4 @@ -0,0 +1 @@ +FROM ghcr.io/datadog/images-rb/engines/ruby:3.4-centos-gcc diff --git a/lib-injection/requirements.json b/lib-injection/requirements.json index c753ec54b45..14357abb53c 100644 --- a/lib-injection/requirements.json +++ b/lib-injection/requirements.json @@ -6,13 +6,13 @@ { "arch": "x64", "supported": true, - "min": "2.27", + "min": "2.17", "description": "libffi needs memfd_create" }, { "arch": "arm64", "supported": true, - "min": "2.27", + "min": "2.17", "description": "libffi needs memfd_create" } ], diff --git a/lib-injection/requirements.rb b/lib-injection/requirements.rb index e63e05b736f..109289d4d67 100755 --- a/lib-injection/requirements.rb +++ b/lib-injection/requirements.rb @@ -11,13 +11,13 @@ def requirements { 'arch' => 'x64', 'supported' => true, - 'min' => '2.27', + 'min' => '2.17', 'description' => 'libffi needs memfd_create', }, { 'arch' => 'arm64', 'supported' => true, - 'min' => '2.27', + 'min' => '2.17', 'description' => 'libffi needs memfd_create', }, ], diff --git a/lib-injection/test_allow.json b/lib-injection/test_allow.json index cdd2d082856..e9cbc895a29 100644 --- a/lib-injection/test_allow.json +++ b/lib-injection/test_allow.json @@ -1,6 +1,6 @@ [ - {"name": "✅ 2.27 glibc x86" , "filepath": "/some/path", "args": [], "envars": [], "host": {"os": "linux", "arch": "x64" , "libc": "glibc:2.27"}}, - {"name": "✅ 2.27 glibc arm64", "filepath": "/some/path", "args": [], "envars": [], "host": {"os": "linux", "arch": "arm64", "libc": "glibc:2.27"}}, + {"name": "✅ 2.17 glibc x86" , "filepath": "/some/path", "args": [], "envars": [], "host": {"os": "linux", "arch": "x64" , "libc": "glibc:2.17"}}, + {"name": "✅ 2.17 glibc arm64", "filepath": "/some/path", "args": [], "envars": [], "host": {"os": "linux", "arch": "arm64", "libc": "glibc:2.17"}}, {"name": "✅ ruby" , "filepath": "/some/path/ruby", "args": ["ruby", "/some/path/to/foo.rb"], "envars": [], "host": {"os": "linux", "arch": "arm64", "libc": "glibc:2.27"}}, {"name": "✅ ruby" , "filepath": "/some/path/ruby", "args": ["ruby", "some/path/to/foo.rb"], "envars": [], "host": {"os": "linux", "arch": "arm64", "libc": "glibc:2.27"}}, diff --git a/lib-injection/test_block.json b/lib-injection/test_block.json index a39fd80efd3..f3af160664d 100644 --- a/lib-injection/test_block.json +++ b/lib-injection/test_block.json @@ -4,11 +4,11 @@ {"name": "❌ musl x64" ,"filepath": "/some/path", "args": [], "envars": [], "host": {"os": "linux", "arch": "x64" , "libc": "musl:"}}, {"name": "❌ musl arm64" ,"filepath": "/some/path", "args": [], "envars": [], "host": {"os": "linux", "arch": "arm64" , "libc": "musl:"}}, - {"name": "❌ 2.27 glibc x86" , "filepath": "/some/path", "args": [], "envars": [], "host": {"os": "linux", "arch": "x86" , "libc": "glibc:2.27"}}, - {"name": "❌ 2.27 glibc arm" , "filepath": "/some/path", "args": [], "envars": [], "host": {"os": "linux", "arch": "arm" , "libc": "glibc:2.27"}}, + {"name": "❌ 2.17 glibc x86" , "filepath": "/some/path", "args": [], "envars": [], "host": {"os": "linux", "arch": "x86" , "libc": "glibc:2.17"}}, + {"name": "❌ 2.17 glibc arm" , "filepath": "/some/path", "args": [], "envars": [], "host": {"os": "linux", "arch": "arm" , "libc": "glibc:2.17"}}, - {"name": "❌ 2.26 glibc x64" , "filepath": "/some/path", "args": [], "envars": [], "host": {"os": "linux", "arch": "x64" , "libc": "glibc:2.26"}}, - {"name": "❌ 2.26 glibc arm64", "filepath": "/some/path", "args": [], "envars": [], "host": {"os": "linux", "arch": "arm64", "libc": "glibc:2.26"}}, + {"name": "❌ 2.16 glibc x64" , "filepath": "/some/path", "args": [], "envars": [], "host": {"os": "linux", "arch": "x64" , "libc": "glibc:2.16"}}, + {"name": "❌ 2.16 glibc arm64", "filepath": "/some/path", "args": [], "envars": [], "host": {"os": "linux", "arch": "arm64", "libc": "glibc:2.16"}}, {"name": "❌ gem", "filepath": "/path/to/ruby", "args": ["/path/to/ruby", "/path/to/gem" ], "envars": [], "host": {"os": "linux", "arch": "x64", "libc": "glibc:2.40"}}, {"name": "❌ gem install", "filepath": "/path/to/ruby", "args": ["/path/to/ruby", "/path/to/gem", "install" ], "envars": [], "host": {"os": "linux", "arch": "x64", "libc": "glibc:2.40"}},