solidusio/solidus

Error when running tests on Macbook Air M1

FranciscoJBrito opened this issue · 11 comments

When trying to run the tests I get an error with the Nokogori gem.

The only previous command I ran was: docker-compose up -d and wait for all the gems to be installed. Then when running the command docker-compose exec app bin/rspec I got the error.

Solidus Version:
4.3.0

##LOGS:

docker-compose exec app bin/rspec                                                                                 
$ cd admin; bundle exec rspec; cd -
fatal: detected dubious ownership in repository at '/home/solidus_user/app'
To add an exception for this directory, call:
	git config --global --add safe.directory /home/solidus_user/app
fatal: detected dubious ownership in repository at '/home/solidus_user/app'
To add an exception for this directory, call:
	git config --global --add safe.directory /home/solidus_user/app
fatal: detected dubious ownership in repository at '/home/solidus_user/app'
To add an exception for this directory, call:

	git config --global --add safe.directory /home/solidus_user/app
fatal: detected dubious ownership in repository at '/home/solidus_user/app'
To add an exception for this directory, call:

	git config --global --add safe.directory /home/solidus_user/app
fatal: detected dubious ownership in repository at '/home/solidus_user/app'
To add an exception for this directory, call:

	git config --global --add safe.directory /home/solidus_user/app

ERROR: It looks like you're trying to use Nokogiri as a precompiled native gem on a system
       with an unsupported version of glibc.

  /lib/aarch64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /home/solidus_user/gems/gems/nokogiri-1.15.5-aarch64-linux/lib/nokogiri/3.1/nokogiri.so) - /home/solidus_user/gems/gems/nokogiri-1.15.5-aarch64-linux/lib/nokogiri/3.1/nokogiri.so

  If that's the case, then please install Nokogiri via the `ruby` platform gem:
      gem install nokogiri --platform=ruby
  or:
      bundle config set force_ruby_platform true

  Please visit https://nokogiri.org/tutorials/installing_nokogiri.html for more help.


An error occurred while loading ./spec/components/solidus_admin/base_component_spec.rb. - Did you mean?
                    rspec ./spec/components/solidus_admin/ui/badge/component_spec.rb
                    rspec ./spec/components/solidus_admin/ui/table/component_spec.rb
                    rspec ./spec/components/solidus_admin/ui/tab/component_spec.rb

Failure/Error: require "solidus_core"

LoadError:
  /lib/aarch64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /home/solidus_user/gems/gems/nokogiri-1.15.5-aarch64-linux/lib/nokogiri/3.1/nokogiri.so) - /home/solidus_user/gems/gems/nokogiri-1.15.5-aarch64-linux/lib/nokogiri/3.1/nokogiri.so
# /home/solidus_user/gems/gems/nokogiri-1.15.5-aarch64-linux/lib/nokogiri/extension.rb:7:in `require_relative'
# /home/solidus_user/gems/gems/nokogiri-1.15.5-aarch64-linux/lib/nokogiri/extension.rb:7:in `<top (required)>'
# /home/solidus_user/gems/gems/nokogiri-1.15.5-aarch64-linux/lib/nokogiri.rb:8:in `require_relative'
# /home/solidus_user/gems/gems/nokogiri-1.15.5-aarch64-linux/lib/nokogiri.rb:8:in `<top (required)>'
# /home/solidus_user/gems/gems/loofah-2.22.0/lib/loofah.rb:3:in `<top (required)>'
# /home/solidus_user/gems/gems/rails-html-sanitizer-1.6.0/lib/rails-html-sanitizer.rb:5:in `<top (required)>'
# /home/solidus_user/gems/gems/actionview-7.0.8/lib/action_view/helpers/sanitize_helper.rb:3:in `<top (required)>'
# /home/solidus_user/gems/gems/actionview-7.0.8/lib/action_view/helpers.rb:8:in `<top (required)>'
# /home/solidus_user/gems/gems/sprockets-rails-3.4.2/lib/sprockets/rails/context.rb:1:in `<top (required)>'
# /home/solidus_user/gems/gems/sprockets-rails-3.4.2/lib/sprockets/railtie.rb:10:in `<top (required)>'
# /home/solidus_user/app/core/lib/spree/core.rb:10:in `<top (required)>'
# /home/solidus_user/app/core/lib/spree_core.rb:3:in `<top (required)>'
# /home/solidus_user/app/core/lib/solidus_core.rb:3:in `<top (required)>'
# ./lib/solidus_admin.rb:3:in `<top (required)>'
# ./spec/spec_helper.rb:14:in `<top (required)>'
# ./spec/components/solidus_admin/base_component_spec.rb:3:in `<top (required)>'

ERROR: It looks like you're trying to use Nokogiri as a precompiled native gem on a system
       with an unsupported version of glibc.

  /lib/aarch64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /home/solidus_user/gems/gems/nokogiri-1.15.5-aarch64-linux/lib/nokogiri/3.1/nokogiri.so) - /home/solidus_user/gems/gems/nokogiri-1.15.5-aarch64-linux/lib/nokogiri/3.1/nokogiri.so

  If that's the case, then please install Nokogiri via the `ruby` platform gem:
      gem install nokogiri --platform=ruby
  or:
      bundle config set force_ruby_platform true

  Please visit https://nokogiri.org/tutorials/installing_nokogiri.html for more help.


An error occurred while loading ./spec/components/solidus_admin/layout/feedback/component_spec.rb. - Did you mean?
                    rspec ./spec/components/solidus_admin/ui/table/component_spec.rb
                    rspec ./spec/components/solidus_admin/layout/skip_link/component_spec.rb
                    rspec ./spec/components/solidus_admin/ui/badge/component_spec.rb

Failure/Error: require "solidus_core"

I made these changes to .dockerdev/Dockerfile and it seems to be working.

 ARG RUBY_VERSION
-FROM ruby:$RUBY_VERSION-slim-bullseye
+FROM ruby:$RUBY_VERSION-bullseye

 ARG PG_VERSION
 ARG MYSQL_VERSION
@@ -14,6 +14,7 @@ RUN apt-get update -qq \
     git \
     imagemagick \
     libvips \
+    libffi-dev \
     libmariadb-dev \
     sqlite3 \
     libsqlite3-dev \

Can you please confirm so I can send a PR? Or feel free to send the PR yourself. 🙂

@kennyadsl yes, I had already tried changing the image to bullseye, because I think the slim-buster image and some others have compatibility problems with the M1 architecture, but I had not added the additional libffi-dev \ command. I tried again by adding this extra command in the docker file but I get the same error as I got by changing just the image.
(Here is the Dockerfile)
The error is the following:

docker-compose build --build-arg RUBY_VERSION=3.1 app
 Building 174.7s (10/14)                                                                  docker:desktop-linux
 => [app internal] load build definition from Dockerfile                                                    10.0s
 => => transferring dockerfile: 1.74kB                                                                      10.0s
 => [app internal] load .dockerignore                                                                       10.0s
 => => transferring context: 2B                                                                             10.0s
 => [app internal] load metadata for docker.io/library/ruby:3.1-bullseye                                    24.2s
 => [app auth] library/ruby:pull token for registry-1.docker.io                                              0.0s
 => CACHED [app  1/10] FROM docker.io/library/ruby:3.1-bullseye@sha256:0918d213e5194a85e3785f81ea88a58d78b3  0.0s
 => [app  2/10] RUN apt-get update -qq   && DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-instal  23.7s
 => [app  3/10] RUN curl -sSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -   && echo   1.8s
 => [app  4/10] RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467b942d3a79bd29  && echo "deb  3.7s
 => [app  5/10] RUN curl -sSL https://deb.nodesource.com/setup_14.x | bash -                                86.5s
 => ERROR [app  6/10] RUN apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get -yq dist-upgrade &&   4.6s
------
 > [app  6/10] RUN apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get -yq dist-upgrade &&   DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends     libpq-dev     postgresql-client-13     default-mysql-client     nodejs   &&  rm -rf /var/lib/apt/lists/*:
1.151 Reading package lists...
1.410 Building dependency tree...
1.477 Reading state information...
1.488 Calculating upgrade...
1.593 The following packages will be upgraded:
1.593   libpq-dev libpq5 libtiff-dev libtiff5 libtiffxx5
1.685 5 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
1.685 Need to get 1155 kB of archives.
1.685 After this operation, 252 kB of additional disk space will be used.
1.685 Get:1 http://deb.debian.org/debian-security bullseye-security/main arm64 libtiff-dev arm64 4.2.0-1+deb11u5 [405 kB]
1.822 Get:2 http://deb.debian.org/debian-security bullseye-security/main arm64 libtiff5 arm64 4.2.0-1+deb11u5 [278 kB]
1.834 Get:3 http://deb.debian.org/debian-security bullseye-security/main arm64 libtiffxx5 arm64 4.2.0-1+deb11u5 [129 kB]
2.126 Get:4 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main arm64 libpq-dev arm64 16.1-1.pgdg100+1 [138 kB]
3.347 Get:5 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main arm64 libpq5 arm64 16.1-1.pgdg100+1 [205 kB]
3.785 debconf: delaying package configuration, since apt-utils is not installed
3.807 Fetched 1155 kB in 2s (561 kB/s)
(Reading database ... 31911 files and directories currently installed.)
3.833 Preparing to unpack .../libpq-dev_16.1-1.pgdg100+1_arm64.deb ...
3.836 Unpacking libpq-dev (16.1-1.pgdg100+1) over (13.13-0+deb11u1) ...
3.887 Preparing to unpack .../libpq5_16.1-1.pgdg100+1_arm64.deb ...
3.891 Unpacking libpq5:arm64 (16.1-1.pgdg100+1) over (13.13-0+deb11u1) ...
3.924 Preparing to unpack .../libtiff-dev_4.2.0-1+deb11u5_arm64.deb ...
3.927 Unpacking libtiff-dev:arm64 (4.2.0-1+deb11u5) over (4.2.0-1+deb11u4) ...
4.015 Preparing to unpack .../libtiff5_4.2.0-1+deb11u5_arm64.deb ...
4.019 Unpacking libtiff5:arm64 (4.2.0-1+deb11u5) over (4.2.0-1+deb11u4) ...
4.055 Preparing to unpack .../libtiffxx5_4.2.0-1+deb11u5_arm64.deb ...
4.060 Unpacking libtiffxx5:arm64 (4.2.0-1+deb11u5) over (4.2.0-1+deb11u4) ...
4.089 Setting up libpq5:arm64 (16.1-1.pgdg100+1) ...
4.092 Setting up libpq-dev (16.1-1.pgdg100+1) ...
4.097 Setting up libtiff5:arm64 (4.2.0-1+deb11u5) ...
4.100 Setting up libtiffxx5:arm64 (4.2.0-1+deb11u5) ...
4.105 Setting up libtiff-dev:arm64 (4.2.0-1+deb11u5) ...
4.111 Processing triggers for libc-bin (2.31-13+deb11u7) ...
4.146 Reading package lists...
4.408 Building dependency tree...
4.475 Reading state information...
4.504 libpq-dev is already the newest version (16.1-1.pgdg100+1).
4.504 Some packages could not be installed. This may mean that you have
4.504 requested an impossible situation or if you are using the unstable
4.504 distribution that some required packages have not yet been created
4.504 or been moved out of Incoming.
4.504 The following information may help to resolve the situation:
4.504
4.504 The following packages have unmet dependencies:
4.542  postgresql-client-13 : Depends: libreadline7 (>= 6.0) but it is not installable
4.548 E: Unable to correct problems, you have held broken packages.
------
failed to solve: process "/bin/sh -c apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get -yq dist-upgrade &&   DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends     libpq-dev     postgresql-client-$PG_VERSION     default-mysql-client     nodejs   &&  rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100

Ah got it. I had other changes in my Dockerfile that didn't add here:

 ARG RUBY_VERSION
-FROM ruby:$RUBY_VERSION-slim-buster
+FROM ruby:$RUBY_VERSION-bullseye

 ARG PG_VERSION
 ARG MYSQL_VERSION
@@ -14,6 +14,7 @@ RUN apt-get update -qq \
     git \
     imagemagick \
     libvips \
+    libffi-dev \
     libmariadb-dev \
     sqlite3 \
     libsqlite3-dev \
@@ -22,10 +23,10 @@ RUN apt-get update -qq \
   && rm -rf /var/cache/apt/lists/*

 RUN curl -sSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \
-  && echo 'deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main' $PG_VERSION > /etc/apt/sources.list.d/pgdg.list
+  && echo 'deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main' $PG_VERSION > /etc/apt/sources.list.d/pgdg.list

 RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467b942d3a79bd29 \
- && echo "deb http://repo.mysql.com/apt/debian/ buster mysql-"$MYSQL_VERSION > /etc/apt/sources.list.d/mysql.list
+ && echo "deb http://repo.mysql.com/apt/debian/ bullseye mysql-"$MYSQL_VERSION > /etc/apt/sources.list.d/mysql.list

 RUN curl -sSL https://deb.nodesource.com/setup_$NODE_VERSION.x | bash -

@@ -49,6 +50,7 @@ RUN useradd -ms /bin/bash $APP_USER

 RUN gem update --system \
   && gem install bundler:$BUNDLER_VERSION \
+  && bundle config set force_ruby_platform true \
   && chown -R $APP_USER:$(id -g $APP_USER) /home/$APP_USER/gems

 USER $APP_USER

@kennyadsl Now it's working, but I have some additional errors when running the tests.

Command sequence:
docker-compose build --build-arg RUBY_VERSION=3.1 app
docker-compose up -d
docker-compose exec app env DB=postgres bin/rspec

Logs:

docker-compose exec app env DB=postgres bin/rspec                                                          
$ cd admin; bundle exec rspec; cd -

Randomized with seed 63291
.............Capybara starting Puma...
* Version 5.6.7 , codename: Birdie's Version
* Min threads: 0, max threads: 4
* Listening on http://127.0.0.1:37161
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
Fqemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
Fqemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
Fqemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
F...........qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
Fqemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
Fqemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
F.qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
F....system temporary path is world-writable: /tmp
/tmp is world-writable: /tmp
..qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
F.............................qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
F.....qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
F.........qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
F.qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
F..