Ubuntu 20.04へのDiscourseのインストールに関する注意点

bundle install のステップで問題が発生しています。このエラーが繰り返し表示されます。

(... )
sassc-rails 2.1.2 をインストール中
discourse-ember-rails 0.18.6 をインストール中
Gem::Ext::BuildError: エラー: gem のネイティブ拡張のビルドに失敗しました。

    現在のディレクトリ: /home/archie/gems/gems/openssl-2.2.1/ext/openssl
/usr/bin/ruby3.0 -I /usr/lib/ruby/vendor_ruby -r
./siteconf20220430-16096-soaves.rb extconf.rb
t_open() in -lnsl... いいえ
socket() in -lsocket... いいえ
openssl/ssl.h... はい
CRYPTO_malloc() in -lcrypto... はい
SSL_new() in -lssl... はい
LIBRESSL_VERSION_NUMBER in openssl/opensslv.h... いいえ
OpenSSL バージョン >= 1.0.1 かつ < 3.0.0... いいえ
*** extconf.rb が失敗しました ***
必要なライブラリやヘッダーが不足しているため、Makefile を作成できませんでした。詳細は mkmf.log ファイルを確認してください。設定オプションが必要な場合があります。

提供された設定オプション:
	--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-openssl-dir
	--without-openssl-dir
	--with-openssl-include
	--without-openssl-include=${openssl-dir}/include
	--with-openssl-lib
	--without-openssl-lib=${openssl-dir}/lib
	--with-kerberos-dir
	--without-kerberos-dir
	--with-kerberos-include
	--without-kerberos-include=${kerberos-dir}/include
	--with-kerberos-lib
	--without-kerberos-lib=${kerberos-dir}/lib
	--with-debug
	--without-debug
	--enable-debug
	--disable-debug
	--with-nsl-dir
	--without-nsl-dir
	--with-nsl-include
	--without-nsl-include=${nsl-dir}/include
	--with-nsl-lib
	--without-nsl-lib=${nsl-dir}/lib
	--with-nsllib
	--without-nsllib
	--with-socket-dir
	--without-socket-dir
	--with-socket-include
	--without-socket-include=${socket-dir}/include
	--with-socket-lib
	--without-socket-lib=${socket-dir}/lib
	--with-socketlib
	--without-socketlib
	--with-openssl-config
	--without-openssl-config
	--with-pkg-config
	--without-pkg-config
	--with-crypto-dir
	--without-crypto-dir
	--with-crypto-include
	--without-crypto-include=${crypto-dir}/include
	--with-crypto-lib
	--without-crypto-lib=${crypto-dir}/lib
	--with-cryptolib
	--without-cryptolib
	--with-ssl-dir
	--without-ssl-dir
	--with-ssl-include
	--without-ssl-include=${ssl-dir}/include
	--with-ssl-lib
	--without-ssl-lib=${ssl-dir}/lib
	--with-ssllib
	--without-ssllib
extconf.rb:113:in `<main>': OpenSSL >= 1.0.1, < 3.0.0 または LibreSSL >= 2.5.0 が必要です (RuntimeError)

この拡張機能がコンパイルに失敗した理由を確認するには、mkmf.log ファイルを確認してください。
このファイルは次の場所にあります。

  /home/archie/gems/extensions/x86_64-linux/3.0.0/openssl-2.2.1/mkmf.log

extconf は失敗しました。終了コード 1
Gem ファイルは /home/archie/gems/gems/openssl-2.2.1 に検査用に残ります。
結果は次の場所に記録されました
/home/archie/gems/extensions/x86_64-linux/3.0.0/openssl-2.2.1/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'

openssl (2.2.1) のインストール中にエラーが発生し、Bundler は続行できません。

Gemfile で:
  cose は 1.2.0 に解決され、
    openssl-signature_algorithm は 1.1.1 に解決され、
      openssl に依存しています
「いいね!」 3

私も最近 @Sonosus と同様の問題に遭遇し、Ubuntu (20.04) の最新バージョンに OpenSSL 3.0.2 がプリインストールされていることが原因だと判明しました。この状況は、OpenSSL がプリインストールされている他のバージョンの Ubuntu/Debian でも発生する可能性があります。もしこの問題に遭遇している場合は、ソースから古いバージョンの OpenSSL (私は OpenSSL-1.1.1n を使用しました) をコンパイルし、その後 bundle install コマンドを再実行することをお勧めします。基本的に、このエラーメッセージは OpenSSL >= 1.0.1, < 3.0.0 に関するもので、1.1 が唯一の代替手段であることが判明しました。

ruby --version で使用している Ruby のバージョンも確認する必要があります。Discourse はまだ Ruby 2 を使用しているため、Ruby 3.x 以降を使用している場合は、古いバージョンを使用する必要があります。Ruby のインストール方法によっては、古いバージョンのインストールでも同様の OpenSSL 問題に遭遇する可能性が高いため、ここでは Ruby のバージョンマネージャーを使用することをお勧めします。現在、Discourse で使用するのに最適なバージョンは Ruby 2.7.6 だと判明しました。

Ubuntu 20.04 のクリーンインストール後、bundle install を正しく実行するために行ったことは次のとおりです。

Discourse の依存関係、asdf、および Discourse のクローンをインストールする

bash <(wget -qO- https://raw.githubusercontent.com/discourse/install-rails/master/linux)
sudo apt install build-essential checkinstall zlib1g-dev
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.10.0
git clone https://github.com/discourse/discourse.git ~/discourse

データベースのセットアップ

Ubuntu のシステムユーザー名と同じ名前の ロールを作成します。

sudo -u postgres createuser -s "$USER"

OpenSSL-1.1.1n をソースからインストールする

wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz
tar -zxf openssl-1.1.1n.tar.gz && cd openssl-1.1.1n
./config --prefix=/opt/openssl-1.1.1n --openssldir=/opt/openssl-1.1.1n shared zlib
make
make test
make install
sudo rm -rf /opt/openssl-1.1.1n/certs
sudo ln -s /etc/ssl/certs /opt/openssl-1.1.1n

その後、.bashrc ファイルに次の行を追加しました。

export RUBY_CONFIGURE_OPTS="--with-openssl-dir=/opt/openssl-1.1.1n/"

ついでに、asdf のために次の行も追加しました。

. $HOME/.asdf/asdf.sh
. $HOME/.asdf/completions/asdf.bash

保存して終了し、次に

source ~/.bashrc

Ruby 2.7.6 をインストールする

asdf plugin add ruby
asdf install ruby 2.7.6

これで bundle install を実行できるかもしれませんが、Discourse のインストールプロセス中にさらにいくつかの問題が発生しました。これらの問題が発生した場合は、参考のためにここに記載しておきます。

mini_racer のインストール中にエラーが発生しました

OpenSSL-1.1.1n と Ruby 2.7.6 をインストールした後、bundle install を実行中に常に発生していました。

An error occurred while installing mini_racer (0.6.1), and Bundler cannot continue.

これは、discourse/Gemfile のローカルバージョンで次の行を編集することで解決できます。

そして、次のように置き換えます。

gem 'mini_racer', github: 'rubyjs/mini_racer', branch: 'refs/pull/186/head'

このステップの後、bundle install を正常に実行できるようになりました。

これは、MacOS で発生している問題に似ており、こちら で詳細を読むことができます。

No such file or directory - convert

Discourse のインストールの後半で、bundle exec rake autospec を実行したときに次の問題にも遭遇しました。

Failures:
  1. AboutController.index should display the about page for logged in user when login_required is true
    Failure/Error: expect(response.status).to eq(200)

    expected: 200
    got: 500

      (comparted using ==)
    #./spec/requests/about_controller_spec.rb:27:in 'block (3 levels) in <main>'
    #./spec/rails_helper.rb:277:in 'block (2 levels) in <top (required)>'
    #---------------------
    #---Caused by:---
    # Errno::ENOENT
    #  No such file or directory - convert
    # ./lib/letter_avatar.rb:105:inc ``'

このエラーは、ImageMagick パッケージがインストールされていない ( convert バイナリを提供している) ことを意味します。

おそらく、Discourse のインストールプロセスの冒頭にあるこのスクリプトには、必要なパッケージがすべて含まれているはずですが、このパッケージは除外されていたようです。

最後に、sudo apt install imagemagickImageMagick をインストールした後、Discourse サーバーを正常に実行できるようになりました。

この情報が、このプロセスを進めていて困っている方々の助けになれば幸いです。:smile:

「いいね!」 5

ありがとうございます。試してみて、どうなるか見てみます。

「いいね!」 1