Techioz Blog

gcc なしのレール?

概要

次のように、リソースが制限された VPS に RoR アプリ (Redmine) をインストールしようとしています。

$ sudo apt install ruby ruby-bundler ruby-dev
$ bundle config set --local without 'development test'
$ bundle install

cparse.c、arena.c、および autolink.c をコンパイルできないため、バンドルのインストールは失敗します (make: x86_64-linux-gnu-gcc: そのようなファイルまたはディレクトリはありません)。

この VPS には gcc をインストールしたくありません。他に選択肢はありますか? RoR は実行時に C コンパイラを必要としますか?開発環境を持つ別の同一のシステム (Ubuntu 22.04) にバンドル インストールを実行し、バイナリをコピーすることはできますか?それとも、これらの C ファイルを開発システム上でコンパイルし、バイナリをコピーするだけでよいでしょうか?

ログ1

current directory: /var/lib/gems/3.0.0/gems/racc-1.7.2/ext/racc/cparse
/usr/bin/ruby3.0 -I /usr/lib/ruby/vendor_ruby -r ./siteconf20231102-2265-eh9t07.rb extconf.rb
creating Makefile

current directory: /var/lib/gems/3.0.0/gems/racc-1.7.2/ext/racc/cparse
make DESTDIR\= clean

current directory: /var/lib/gems/3.0.0/gems/racc-1.7.2/ext/racc/cparse
make DESTDIR\=
compiling cparse.c
make: x86_64-linux-gnu-gcc: No such file or directory
make: *** [Makefile:245: cparse.o] Error 127

make failed, exit code 2

ログ2

current directory: /var/lib/gems/3.0.0/gems/nio4r-2.5.9/ext/nio4r
/usr/bin/ruby3.0 -I /usr/lib/ruby/vendor_ruby -r ./siteconf20231102-2265-ptq7pb.rb extconf.rb
checking for unistd.h... *** 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/bin/$(RUBY_BASE_NAME)3.0
        --with-unistd-dir
        --without-unistd-dir
        --with-unistd-include
        --without-unistd-include=${unistd-dir}/include
        --with-unistd-lib
        --without-unistd-lib=${unistd-dir}/lib
/usr/lib/ruby/3.0.0/mkmf.rb:471:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
        from /usr/lib/ruby/3.0.0/mkmf.rb:613:in `try_cpp'
        from /usr/lib/ruby/3.0.0/mkmf.rb:1124:in `block in have_header'
        from /usr/lib/ruby/3.0.0/mkmf.rb:971:in `block in checking_for'
        from /usr/lib/ruby/3.0.0/mkmf.rb:361:in `block (2 levels) in postpone'
        from /usr/lib/ruby/3.0.0/mkmf.rb:331:in `open'
        from /usr/lib/ruby/3.0.0/mkmf.rb:361:in `block in postpone'
        from /usr/lib/ruby/3.0.0/mkmf.rb:331:in `open'
        from /usr/lib/ruby/3.0.0/mkmf.rb:357:in `postpone'
        from /usr/lib/ruby/3.0.0/mkmf.rb:970:in `checking_for'
        from /usr/lib/ruby/3.0.0/mkmf.rb:1123:in `have_header'
        from extconf.rb:18:in `<main>'

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /var/lib/gems/3.0.0/extensions/x86_64-linux/3.0.0/nio4r-2.5.9/mkmf.log

ログ3

current directory: /var/lib/gems/3.0.0/gems/redcarpet-3.6.0/ext/redcarpet
/usr/bin/ruby3.0 -I /usr/lib/ruby/vendor_ruby -r ./siteconf20231102-2265-gedcgv.rb extconf.rb
creating Makefile

current directory: /var/lib/gems/3.0.0/gems/redcarpet-3.6.0/ext/redcarpet
make DESTDIR\= clean

current directory: /var/lib/gems/3.0.0/gems/redcarpet-3.6.0/ext/redcarpet
make DESTDIR\=
compiling autolink.c
make: x86_64-linux-gnu-gcc: No such file or directory
make: *** [Makefile:245: autolink.o] Error 127

make failed, exit code 2

バンドラー出力

root@vserver:/opt/redmine-5.1.0# bundle install
Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for
all non-root users on this machine.
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies.....
[cuts to save electrons]
...
Installing racc 1.7.2 with native extensions
Installing nio4r 2.5.9 with native extensions
Installing date 3.3.3 with native extensions
Installing commonmarker 0.23.10 with native extensions
Installing mysql2 0.5.5 with native extensions
Installing redcarpet 3.6.0 with native extensions
Installing websocket-driver 0.7.6 with native extensions
...
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/3.0.0/gems/racc-1.7.2/ext/racc/cparse
/usr/bin/ruby3.0 -I /usr/lib/ruby/vendor_ruby -r ./siteconf20231102-2265-eh9t07.rb extconf.rb
creating Makefile

current directory: /var/lib/gems/3.0.0/gems/racc-1.7.2/ext/racc/cparse
make DESTDIR\= clean

current directory: /var/lib/gems/3.0.0/gems/racc-1.7.2/ext/racc/cparse
make DESTDIR\=
compiling cparse.c
make: x86_64-linux-gnu-gcc: No such file or directory
make: *** [Makefile:245: cparse.o] Error 127

make failed, exit code 2

Gem files will remain installed in /var/lib/gems/3.0.0/gems/racc-1.7.2 for inspection.
Results logged to /var/lib/gems/3.0.0/extensions/x86_64-linux/3.0.0/racc-1.7.2/gem_make.out

  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:95:in `run'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:44:in `block in make'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:36:in `each'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:36:in `make'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/ext_conf_builder.rb:63:in `block in build'
  /usr/lib/ruby/3.0.0/tempfile.rb:317:in `open'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/ext_conf_builder.rb:26:in `build'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:161:in `build_extension'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:195:in `block in build_extensions'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:192:in `each'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:192:in `build_extensions'
  /usr/lib/ruby/vendor_ruby/rubygems/installer.rb:847:in `build_extensions'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/rubygems_gem_installer.rb:71:in `build_extensions'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/rubygems_gem_installer.rb:28:in `install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/source/rubygems.rb:204:in `install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/gem_installer.rb:54:in `install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/gem_installer.rb:16:in `install_from_spec'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/parallel_installer.rb:186:in `do_install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/parallel_installer.rb:177:in `block in worker_pool'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:62:in `apply_func'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:57:in `block in process_queue'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:54:in `loop'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:54:in `process_queue'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:91:in `block (2 levels) in create_threads'

An error occurred while installing racc (1.7.2), and Bundler cannot continue.

In Gemfile:
  rails was resolved to 6.1.7.6, which depends on
    actioncable was resolved to 6.1.7.6, which depends on
      actionpack was resolved to 6.1.7.6, which depends on
        actionview was resolved to 6.1.7.6, which depends on
          rails-dom-testing was resolved to 2.2.0, which depends on
            nokogiri was resolved to 1.15.4, which depends on
              racc


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

    current directory: /var/lib/gems/3.0.0/gems/nio4r-2.5.9/ext/nio4r
/usr/bin/ruby3.0 -I /usr/lib/ruby/vendor_ruby -r ./siteconf20231102-2265-ptq7pb.rb extconf.rb
checking for unistd.h... *** 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/bin/$(RUBY_BASE_NAME)3.0
    --with-unistd-dir
    --without-unistd-dir
    --with-unistd-include
    --without-unistd-include=${unistd-dir}/include
    --with-unistd-lib
    --without-unistd-lib=${unistd-dir}/lib
/usr/lib/ruby/3.0.0/mkmf.rb:471:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
    from /usr/lib/ruby/3.0.0/mkmf.rb:613:in `try_cpp'
    from /usr/lib/ruby/3.0.0/mkmf.rb:1124:in `block in have_header'
    from /usr/lib/ruby/3.0.0/mkmf.rb:971:in `block in checking_for'
    from /usr/lib/ruby/3.0.0/mkmf.rb:361:in `block (2 levels) in postpone'
    from /usr/lib/ruby/3.0.0/mkmf.rb:331:in `open'
    from /usr/lib/ruby/3.0.0/mkmf.rb:361:in `block in postpone'
    from /usr/lib/ruby/3.0.0/mkmf.rb:331:in `open'
    from /usr/lib/ruby/3.0.0/mkmf.rb:357:in `postpone'
    from /usr/lib/ruby/3.0.0/mkmf.rb:970:in `checking_for'
    from /usr/lib/ruby/3.0.0/mkmf.rb:1123:in `have_header'
    from extconf.rb:18:in `<main>'

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /var/lib/gems/3.0.0/extensions/x86_64-linux/3.0.0/nio4r-2.5.9/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /var/lib/gems/3.0.0/gems/nio4r-2.5.9 for inspection.
Results logged to /var/lib/gems/3.0.0/extensions/x86_64-linux/3.0.0/nio4r-2.5.9/gem_make.out

  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:95:in `run'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/ext_conf_builder.rb:47:in `block in build'
  /usr/lib/ruby/3.0.0/tempfile.rb:317:in `open'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/ext_conf_builder.rb:26:in `build'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:161:in `build_extension'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:195:in `block in build_extensions'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:192:in `each'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:192:in `build_extensions'
  /usr/lib/ruby/vendor_ruby/rubygems/installer.rb:847:in `build_extensions'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/rubygems_gem_installer.rb:71:in `build_extensions'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/rubygems_gem_installer.rb:28:in `install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/source/rubygems.rb:204:in `install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/gem_installer.rb:54:in `install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/gem_installer.rb:16:in `install_from_spec'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/parallel_installer.rb:186:in `do_install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/parallel_installer.rb:177:in `block in worker_pool'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:62:in `apply_func'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:57:in `block in process_queue'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:54:in `loop'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:54:in `process_queue'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:91:in `block (2 levels) in create_threads'

An error occurred while installing nio4r (2.5.9), and Bundler cannot continue.

In Gemfile:
  rails was resolved to 6.1.7.6, which depends on
    actioncable was resolved to 6.1.7.6, which depends on
      nio4r


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

    current directory: /var/lib/gems/3.0.0/gems/date-3.3.3/ext/date
/usr/bin/ruby3.0 -I /usr/lib/ruby/vendor_ruby -r ./siteconf20231102-2265-80rqrj.rb extconf.rb
checking for rb_category_warn()... *** 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/bin/$(RUBY_BASE_NAME)3.0
/usr/lib/ruby/3.0.0/mkmf.rb:471:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
    from /usr/lib/ruby/3.0.0/mkmf.rb:564:in `try_link0'
    from /usr/lib/ruby/3.0.0/mkmf.rb:582:in `try_link'
    from /usr/lib/ruby/3.0.0/mkmf.rb:794:in `try_func'
    from /usr/lib/ruby/3.0.0/mkmf.rb:1083:in `block in have_func'
    from /usr/lib/ruby/3.0.0/mkmf.rb:971:in `block in checking_for'
    from /usr/lib/ruby/3.0.0/mkmf.rb:361:in `block (2 levels) in postpone'
    from /usr/lib/ruby/3.0.0/mkmf.rb:331:in `open'
    from /usr/lib/ruby/3.0.0/mkmf.rb:361:in `block in postpone'
    from /usr/lib/ruby/3.0.0/mkmf.rb:331:in `open'
    from /usr/lib/ruby/3.0.0/mkmf.rb:357:in `postpone'
    from /usr/lib/ruby/3.0.0/mkmf.rb:970:in `checking_for'
    from /usr/lib/ruby/3.0.0/mkmf.rb:1082:in `have_func'
    from extconf.rb:6:in `<main>'

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /var/lib/gems/3.0.0/extensions/x86_64-linux/3.0.0/date-3.3.3/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /var/lib/gems/3.0.0/gems/date-3.3.3 for inspection.
Results logged to /var/lib/gems/3.0.0/extensions/x86_64-linux/3.0.0/date-3.3.3/gem_make.out

  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:95:in `run'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/ext_conf_builder.rb:47:in `block in build'
  /usr/lib/ruby/3.0.0/tempfile.rb:317:in `open'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/ext_conf_builder.rb:26:in `build'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:161:in `build_extension'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:195:in `block in build_extensions'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:192:in `each'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:192:in `build_extensions'
  /usr/lib/ruby/vendor_ruby/rubygems/installer.rb:847:in `build_extensions'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/rubygems_gem_installer.rb:71:in `build_extensions'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/rubygems_gem_installer.rb:28:in `install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/source/rubygems.rb:204:in `install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/gem_installer.rb:54:in `install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/gem_installer.rb:16:in `install_from_spec'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/parallel_installer.rb:186:in `do_install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/parallel_installer.rb:177:in `block in worker_pool'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:62:in `apply_func'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:57:in `block in process_queue'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:54:in `loop'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:54:in `process_queue'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:91:in `block (2 levels) in create_threads'

An error occurred while installing date (3.3.3), and Bundler cannot continue.

In Gemfile:
  rails was resolved to 6.1.7.6, which depends on
    actionmailbox was resolved to 6.1.7.6, which depends on
      mail was resolved to 2.8.1, which depends on
        net-imap was resolved to 0.3.7, which depends on
          date


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

    current directory: /var/lib/gems/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker
/usr/bin/ruby3.0 -I /usr/lib/ruby/vendor_ruby -r ./siteconf20231102-2265-dc0li8.rb extconf.rb
creating Makefile

current directory: /var/lib/gems/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker
make DESTDIR\= clean

current directory: /var/lib/gems/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker
make DESTDIR\=
compiling arena.c
make: x86_64-linux-gnu-gcc: No such file or directory
make: *** [Makefile:245: arena.o] Error 127

make failed, exit code 2

Gem files will remain installed in /var/lib/gems/3.0.0/gems/commonmarker-0.23.10 for inspection.
Results logged to /var/lib/gems/3.0.0/extensions/x86_64-linux/3.0.0/commonmarker-0.23.10/gem_make.out

  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:95:in `run'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:44:in `block in make'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:36:in `each'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:36:in `make'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/ext_conf_builder.rb:63:in `block in build'
  /usr/lib/ruby/3.0.0/tempfile.rb:317:in `open'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/ext_conf_builder.rb:26:in `build'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:161:in `build_extension'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:195:in `block in build_extensions'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:192:in `each'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:192:in `build_extensions'
  /usr/lib/ruby/vendor_ruby/rubygems/installer.rb:847:in `build_extensions'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/rubygems_gem_installer.rb:71:in `build_extensions'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/rubygems_gem_installer.rb:28:in `install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/source/rubygems.rb:204:in `install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/gem_installer.rb:54:in `install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/gem_installer.rb:16:in `install_from_spec'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/parallel_installer.rb:186:in `do_install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/parallel_installer.rb:177:in `block in worker_pool'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:62:in `apply_func'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:57:in `block in process_queue'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:54:in `loop'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:54:in `process_queue'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:91:in `block (2 levels) in create_threads'

An error occurred while installing commonmarker (0.23.10), and Bundler cannot continue.

In Gemfile:
  commonmarker


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

    current directory: /var/lib/gems/3.0.0/gems/mysql2-0.5.5/ext/mysql2
/usr/bin/ruby3.0 -I /usr/lib/ruby/vendor_ruby -r ./siteconf20231102-2265-y874en.rb extconf.rb
checking for rb_absint_size()... *** 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/bin/$(RUBY_BASE_NAME)3.0
/usr/lib/ruby/3.0.0/mkmf.rb:471:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
    from /usr/lib/ruby/3.0.0/mkmf.rb:564:in `try_link0'
    from /usr/lib/ruby/3.0.0/mkmf.rb:582:in `try_link'
    from /usr/lib/ruby/3.0.0/mkmf.rb:794:in `try_func'
    from /usr/lib/ruby/3.0.0/mkmf.rb:1083:in `block in have_func'
    from /usr/lib/ruby/3.0.0/mkmf.rb:971:in `block in checking_for'
    from /usr/lib/ruby/3.0.0/mkmf.rb:361:in `block (2 levels) in postpone'
    from /usr/lib/ruby/3.0.0/mkmf.rb:331:in `open'
    from /usr/lib/ruby/3.0.0/mkmf.rb:361:in `block in postpone'
    from /usr/lib/ruby/3.0.0/mkmf.rb:331:in `open'
    from /usr/lib/ruby/3.0.0/mkmf.rb:357:in `postpone'
    from /usr/lib/ruby/3.0.0/mkmf.rb:970:in `checking_for'
    from /usr/lib/ruby/3.0.0/mkmf.rb:1082:in `have_func'
    from extconf.rb:34:in `<main>'

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /var/lib/gems/3.0.0/extensions/x86_64-linux/3.0.0/mysql2-0.5.5/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /var/lib/gems/3.0.0/gems/mysql2-0.5.5 for inspection.
Results logged to /var/lib/gems/3.0.0/extensions/x86_64-linux/3.0.0/mysql2-0.5.5/gem_make.out

  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:95:in `run'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/ext_conf_builder.rb:47:in `block in build'
  /usr/lib/ruby/3.0.0/tempfile.rb:317:in `open'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/ext_conf_builder.rb:26:in `build'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:161:in `build_extension'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:195:in `block in build_extensions'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:192:in `each'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:192:in `build_extensions'
  /usr/lib/ruby/vendor_ruby/rubygems/installer.rb:847:in `build_extensions'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/rubygems_gem_installer.rb:71:in `build_extensions'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/rubygems_gem_installer.rb:28:in `install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/source/rubygems.rb:204:in `install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/gem_installer.rb:54:in `install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/gem_installer.rb:16:in `install_from_spec'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/parallel_installer.rb:186:in `do_install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/parallel_installer.rb:177:in `block in worker_pool'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:62:in `apply_func'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:57:in `block in process_queue'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:54:in `loop'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:54:in `process_queue'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:91:in `block (2 levels) in create_threads'

An error occurred while installing mysql2 (0.5.5), and Bundler cannot continue.

In Gemfile:
  mysql2


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

    current directory: /var/lib/gems/3.0.0/gems/redcarpet-3.6.0/ext/redcarpet
/usr/bin/ruby3.0 -I /usr/lib/ruby/vendor_ruby -r ./siteconf20231102-2265-gedcgv.rb extconf.rb
creating Makefile

current directory: /var/lib/gems/3.0.0/gems/redcarpet-3.6.0/ext/redcarpet
make DESTDIR\= clean

current directory: /var/lib/gems/3.0.0/gems/redcarpet-3.6.0/ext/redcarpet
make DESTDIR\=
compiling autolink.c
make: x86_64-linux-gnu-gcc: No such file or directory
make: *** [Makefile:245: autolink.o] Error 127

make failed, exit code 2

Gem files will remain installed in /var/lib/gems/3.0.0/gems/redcarpet-3.6.0 for inspection.
Results logged to /var/lib/gems/3.0.0/extensions/x86_64-linux/3.0.0/redcarpet-3.6.0/gem_make.out

  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:95:in `run'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:44:in `block in make'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:36:in `each'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:36:in `make'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/ext_conf_builder.rb:63:in `block in build'
  /usr/lib/ruby/3.0.0/tempfile.rb:317:in `open'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/ext_conf_builder.rb:26:in `build'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:161:in `build_extension'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:195:in `block in build_extensions'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:192:in `each'
  /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:192:in `build_extensions'
  /usr/lib/ruby/vendor_ruby/rubygems/installer.rb:847:in `build_extensions'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/rubygems_gem_installer.rb:71:in `build_extensions'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/rubygems_gem_installer.rb:28:in `install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/source/rubygems.rb:204:in `install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/gem_installer.rb:54:in `install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/gem_installer.rb:16:in `install_from_spec'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/parallel_installer.rb:186:in `do_install'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/installer/parallel_installer.rb:177:in `block in worker_pool'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:62:in `apply_func'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:57:in `block in process_queue'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:54:in `loop'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:54:in `process_queue'
  /usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/worker.rb:91:in `block (2 levels) in create_threads'

An error occurred while installing redcarpet (3.6.0), and Bundler cannot continue.

In Gemfile:
  redcarpet

解決策

最も明白なアプローチは次の 2 つです。

Redmine には実際にはネイティブ拡張機能を使用して構築された 8 つの gem があります。ログに表示される 3 つだけではありません。これらはコンパイルする必要があるものです。

これが私のやり方です。同じルート ディストリビューション (私の場合は Ubuntu 22.04 サーバー) から作成された 2 つの VM を使用します。 1 つは開発システムとしてセットアップされており、それを使用して gem をコンパイルし、実稼働システムにコピーします。

開発システム上:

redmine # apt install build-essential
redmine # apt install libmysqlclient-dev 
redmine # apt install ruby
redmine # gem install bundler
redmine # apt install ruby-dev
redmine # cd /opt/redmine-5.1.0
redmine # bundle config set --local without 'development test'
redmine # bundle install 
Bundle complete! 41 Gemfile dependencies, 73 gems now installed.
Gems in the groups 'development' and 'test' were not installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

build-essential (および libapache2-mod-passenger を使用している場合) も Ruby をインストールするため、上記の明示的なインストールは必要ないことに注意してください。開発システムと運用システムに同じバージョンの Ruby があることを確認してください。 mysql2 をビルドする場合は、libmysqlclient-dev が必要です。

私は開発システムでもこれを行いますが、これは良いアイデアかもしれませんし、そうでないかもしれません。これを行う場合は、データベースを開発システムからエクスポートし、本番システムにインポートする必要があります (db::maigrate によってテーブルが設定されます)。

redmine # bundle exec rake generate_secret_token
redmine # RAILS_ENV=production bundle exec rake db:migrate
redmine # RAILS_ENV=production bundle exec rake redmine:load_default_data

次に、コンパイルが実際に何をしたかを確認する必要があります。各 gem について確認できます。

redmine # bundle info mysql2 | grep -i path
    Path: /var/lib/gems/3.0.0/gems/mysql2-0.5.5

または、gem 環境を実行するだけです。これにより、開発システムと運用システムの両方で同じ出力が生成されました。

  - GEM PATHS:
     - /var/lib/gems/3.0.0
     - /root/.local/share/gem/ruby/3.0.0
     - /usr/local/lib/ruby/gems/3.0.0
     - /usr/lib/ruby/gems/3.0.0
     - /usr/lib/x86_64-linux-gnu/ruby/gems/3.0.0
     - /usr/share/rubygems-integration/3.0.0
     - /usr/share/rubygems-integration/all
     - /usr/lib/x86_64-linux-gnu/rubygems-integration/3.0.0

ただし、これらのパスのうち 2 つのシステム上に実際に存在するのは 3 つだけです。

/var/lib/gems/3.0.0
/usr/lib/ruby/gems/3.0.0
/usr/share/rubygems-integration/all

これらのツリーを実稼働システム (約 100MB) にコピーするだけです。コピー (および必要に応じてデータベースのインポート) と Ruby のインストール (apt install Ruby) の後、Redmine は本番システム上で問題なく実行されます。ただし、これはすべて少し痛いです。理想的な世界では、Redmine のメンテナがバイナリ パッケージを作成します。