Can't install gem jekyll-content-security-policy-generator in Jekyll

452 Views Asked by At

I have an issue while installing a gem on Jekyll, on a Raspberry Pi 4 (which runs a Jenkins pipeline that I use to publish a website).

I'm trying to install the jekyll-content-security-policy-generator plugin based on https://github.com/strongscot/jekyll-content-security-policy-generator.

But I am stuck installing it and I can't figure it out how to make it work.

This is what my Gemfile looks like:

# frozen_string_literal: true

source "https://rubygems.org"

# Use the latest version.
gem 'jekyll', '~> 4.0'

group :jekyll_plugins do
    # (other jekyll plugins)
    gem 'nokogiri'
    gem 'jekyll-content-security-policy-generator'
    gem 'jekyll_picture_tag', '~> 2.0'
    gem 'jekyll-seo-tag', '~> 2.8.0'
    gem 'jekyll-sitemap', '~> 1.4.0'
end

And this is what I have tried right now:

  1. First approach
> bundle install

[...]
Bundle complete! 6 Gemfile dependencies, 42 gems now installed.

> JEKYLL_ENV=production /var/lib/jenkins/.rbenv/shims/jekyll build

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/arm-linux-gnueabihf/libm.so.6: version `GLIBC_2.29' not found (required by /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/nokogiri-1.14.1-arm-linux/lib/nokogiri/3.1/nokogiri.so) - /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/nokogiri-1.14.1-arm-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.

/var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/nokogiri-1.14.1-arm-linux/lib/nokogiri/extension.rb:7:in `require_relative': /lib/arm-linux-gnueabihf/libm.so.6: version `GLIBC_2.29' not found (required by /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/nokogiri-1.14.1-arm-linux/lib/nokogiri/3.1/nokogiri.so) - /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/nokogiri-1.14.1-arm-linux/lib/nokogiri/3.1/nokogiri.so (LoadError)
    from /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/nokogiri-1.14.1-arm-linux/lib/nokogiri/extension.rb:7:in `<top (required)>'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/nokogiri-1.14.1-arm-linux/lib/nokogiri.rb:8:in `require_relative'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/nokogiri-1.14.1-arm-linux/lib/nokogiri.rb:8:in `<top (required)>'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/runtime.rb:60:in `require'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/runtime.rb:60:in `block (2 levels) in require'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/runtime.rb:55:in `each'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/runtime.rb:55:in `block in require'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/runtime.rb:44:in `each'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/runtime.rb:44:in `require'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler.rb:195:in `require'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/jekyll-4.3.2/lib/jekyll/plugin_manager.rb:53:in `require_from_bundler'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/jekyll-4.3.2/exe/jekyll:11:in `<top (required)>'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/bin/jekyll:25:in `load'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/bin/jekyll:25:in `<main>'

Googling this error led me to the second approach, which is the same, but it sets a configuration flag first.

  1. Second approach
> bundle config set force_ruby_platform true
> bundle install
> JEKYLL_ENV=production /var/lib/jenkins/.rbenv/shims/jekyll build

/var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/definition.rb:524:in `materialize': Could not find sass-embedded-1.57.1 in locally installed gems (Bundler::GemNotFound)
    from /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/definition.rb:197:in `specs'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/definition.rb:254:in `specs_for'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/runtime.rb:18:in `setup'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler.rb:170:in `setup'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/jekyll-4.3.2/lib/jekyll/plugin_manager.rb:52:in `require_from_bundler'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/jekyll-4.3.2/exe/jekyll:11:in `<top (required)>'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/bin/jekyll:25:in `load'
    from /var/lib/jenkins/.rbenv/versions/3.1.3/bin/jekyll:25:in `<main>'

I have installed that gem manually (sass-embedded) and even included it in the Gemfile, but the problem persists. If a set the above flag to false, the GLIBC error appears.

How can this be fixed?

Let me know in a comment in case you need more details on the issue; I will update the question accordingly.

Thank you in advance.

1

There are 1 best solutions below

1
cabreracanal On

Well I've managed a dirty solution for this. I tried to install jekyll-content-security-policy-generator.gemspec and sass-embedded manually without success (cloning from Github). Forgive me as I wasn't very strict on my testing (actually a little chaotic), but in the end, I ended up with this error:

> jenkins@retropie:/tmp/balandisinteriorismo.com$
> JEKYLL_ENV=production /var/lib/jenkins/.rbenv/shims/jekyll build
/var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/3.1.0/rubygems/specification.rb:1453:in `rescue in block in activate_dependencies': Could not find 'sass-embedded' (~> 1.54) among 128 total gem(s) (Gem::MissingSpecError)
Checked in 'GEM_PATH=/var/lib/jenkins/.local/share/gem/ruby/3.1.0:/var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0' at: /var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/specifications/jekyll-sass-converter-3.0.0.gemspec, execute `gem env` for more information

Why did I come up with this 1.54 version? I don't know, but I was trying to install first version 1.58.0 and later 1.57.1 of sass-converter. Then I started playing again with the Gemfile of my project:

bundle install
JEKYLL_ENV=production /var/lib/jenkins/.rbenv/shims/jekyll build

Whatever, having a look at:

/var/lib/jenkins/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/specifications/jekyll-sass-converter-3.0.0.gemspec

I've replaced the 1.54 values by 1.57.1 and run again the bundle install and Jekyll build command (both, in that order!). It worked!

This is my final Gemfile:

group :jekyll_plugins do
    # (other jekyll plugins)
    gem 'sass-embedded', '~> 1.57.1'
    gem 'nokogiri', :platforms=>:ruby
    gem 'jekyll-content-security-policy-generator'
    gem 'jekyll_picture_tag', '~> 2.0'
    gem 'jekyll-seo-tag', '~> 2.8.0'
    gem 'jekyll-sitemap', '~> 1.4.0'

And the content of the gemspec above mentioned:

# -*- encoding: utf-8 -*-
# stub: jekyll-sass-converter 3.0.0 ruby lib

Gem::Specification.new do |s|
  s.name = "jekyll-sass-converter".freeze
  s.version = "3.0.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Parker Moore".freeze]
  s.date = "2022-12-21"
  s.email = ["[email protected]".freeze]
  s.homepage = "https://github.com/jekyll/jekyll-sass-converter".freeze
  s.licenses = ["MIT".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.6.0".freeze)
  s.rubygems_version = "3.3.26".freeze
  s.summary = "A basic Sass converter for Jekyll.".freeze

  s.installed_by_version = "3.3.26" if s.respond_to? :installed_by_version

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_runtime_dependency(%q<sass-embedded>.freeze, ["~> 1.57.1"])
    s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
    s.add_development_dependency(%q<rake>.freeze, [">= 0"])
    s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
    s.add_development_dependency(%q<rubocop-jekyll>.freeze, ["~> 0.12.0"])
  else
    s.add_dependency(%q<sass-embedded>.freeze, ["~> 1.57.1"])
    s.add_dependency(%q<bundler>.freeze, [">= 0"])
    s.add_dependency(%q<rake>.freeze, [">= 0"])
    s.add_dependency(%q<rspec>.freeze, [">= 0"])
    s.add_dependency(%q<rubocop-jekyll>.freeze, ["~> 0.12.0"])
  end
end

Jenkins output:

15:34:29 + JEKYLL_ENV=production /var/lib/jenkins/.rbenv/shims/jekyll build
15:34:31 Resolving dependencies...
15:34:32 Configuration file: /var/lib/jenkins/jobs/Paloma Avellán Web/workspace/_config.yml
15:34:32             Source: /var/lib/jenkins/jobs/Paloma Avellán Web/workspace
15:34:32        Destination: /var/lib/jenkins/jobs/Paloma Avellán Web/workspace/_site
15:34:32  Incremental build: disabled. Enable with --incremental
15:34:32       Generating... 
15:34:33 Converting style attribute to inline style, inserted into HEAD.