Hinweise zur Installation von Discourse auf Ubuntu 20.04

Ich habe Probleme mit dem bundle install-Schritt. Dieser Fehler tritt immer wieder auf.

(... )
Installing sassc-rails 2.1.2
Installing discourse-ember-rails 0.18.6
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /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
checking for t_open() in -lnsl... no
checking for socket() in -lsocket... no
checking for openssl/ssl.h... yes
checking for CRYPTO_malloc() in -lcrypto... yes
checking for SSL_new() in -lssl... yes
checking for LIBRESSL_VERSION_NUMBER in openssl/opensslv.h... no
checking for OpenSSL version >= 1.0.1 and < 3.0.0... no
*** 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-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 or LibreSSL >= 2.5.0 is
required (RuntimeError)

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

  /home/archie/gems/extensions/x86_64-linux/3.0.0/openssl-2.2.1/mkmf.log
extconf failed, exit code 1

Gem files will remain installed in /home/archie/gems/gems/openssl-2.2.1 for
inspection.
Results logged to
/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'

An error occurred while installing openssl (2.2.1), and Bundler cannot
continue.

In Gemfile:
  cose was resolved to 1.2.0, which depends on
    openssl-signature_algorithm was resolved to 1.1.1, which depends on
      openssl
3 „Gefällt mir“

Ich bin kürzlich auf ein ähnliches Problem wie @Sonosus gestoßen und habe festgestellt, dass es durch die neueste Version von Ubuntu (20.04) verursacht wurde, die mit OpenSSL 3.0.2 vorinstalliert ist. Diese Situation kann auch bei anderen Versionen von Ubuntu/Debian auftreten, die mit OpenSSL vorinstalliert sind. Wenn Sie auf dieses Problem stoßen, sollten Sie wahrscheinlich eine frühere Version von OpenSSL aus dem Quellcode kompilieren (ich habe OpenSSL-1.1.1n verwendet) und dann den Befehl bundle install erneut ausführen. Im Wesentlichen geht es bei dieser Fehlermeldung um OpenSSL >= 1.0.1, < 3.0.0, und es stellt sich heraus, dass 1.1 die einzige Alternative ist.

Sie sollten auch mit ruby --version überprüfen, welche Ruby-Version Sie verwenden. Discourse verwendet immer noch Ruby 2. Wenn Sie Ruby 3.x oder höher verwenden, müssen Sie eine frühere Version verwenden. Je nachdem, wie Sie Ruby installieren, werden Sie wahrscheinlich auf ein ähnliches OpenSSL-Problem stoßen, wenn Sie eine frühere Version installieren. Daher empfehle ich hier die Verwendung eines Versionsmanagers für Ruby, und ich habe festgestellt, dass Ruby 2.7.6 derzeit die beste Version für die Verwendung mit Discourse ist.

Nach der Installation einer frischen Instanz von Ubuntu 20.04 habe ich Folgendes getan, um bundle install korrekt auszuführen:

Discourse-Abhängigkeiten, asdf und Discourse klonen

<(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

Datenbank einrichten

Rolle mit demselben Namen wie Ihr Ubuntu-Systembenutzername erstellen:

sudo -u postgres createuser -s "$USER"

OpenSSL-1.1.1n aus dem Quellcode installieren

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

Ich habe dann die folgende Zeile zu meiner .bashrc-Datei hinzugefügt:

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

Während wir hier sind, habe ich auch die folgenden Zeilen für asdf hinzugefügt:

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

Speichern und beenden, und dann

source ~/.bashrc

Ruby 2.7.6 installieren

asdf plugin add ruby
asdf install ruby 2.7.6

Sie sind jetzt möglicherweise bereit, bundle install auszuführen. Ich bin jedoch während des Discourse-Installationsprozesses auf ein paar weitere Probleme gestoßen, die ich hier als Referenz erwähnen werde, falls diese jemandem passieren.

Ein Fehler ist beim Installieren von mini_racer aufgetreten

Während der Ausführung von bundle install stieß ich nach der Installation von OpenSSL-1.1.1n und Ruby 2.7.6 immer wieder auf Folgendes:

Ein Fehler ist beim Installieren von mini_racer (0.6.1) aufgetreten, und Bundler kann nicht fortfahren.

Dies kann durch Bearbeiten der folgenden Zeile in Ihrer lokalen Version von discourse/Gemfile behoben werden:

Und ersetzen Sie sie durch

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

Nach diesem Schritt konnte ich bundle install erfolgreich ausführen.

Dies ähnelt einem Problem unter MacOS, über das Sie hier mehr lesen können: https://meta.discourse.org/t/beginners-guide-to-install-discourse-on-macos-for-development/15772/302

Datei oder Verzeichnis nicht gefunden - convert

In späteren Schritten der Discourse-Installation stieß ich beim Ausführen von bundle exec rake autospec auf das folgende Problem:

Fehler:
  1. AboutController.index sollte die About-Seite für angemeldete Benutzer anzeigen, wenn login_required true ist
    Fehler/Fehler: expect(response.status).to eq(200)

    erwartet: 200
    erhalten: 500

      (verglichen mit ==)
    #./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)>'
    #---------------------
    #---Verursacht durch:---
    # Errno::ENOENT
    #  Datei oder Verzeichnis nicht gefunden - convert
    # ./lib/letter_avatar.rb:105:in ``'

Diese Fehlermeldung bedeutet, dass das Paket ImageMagick nicht installiert ist (es stellt die convert-Binärdatei bereit).

Angeblich sollte dieses Skript zu Beginn des Discourse-Installationsprozesses alle notwendigen Pakete enthalten, aber es sieht so aus, als ob dieses hier möglicherweise ausgeschlossen wurde.

Schließlich konnte ich nach der Installation von ImageMagick mit sudo apt install imagemagick meinen Discourse-Server erfolgreich zum Laufen bringen!

Ich hoffe, diese Informationen sind für alle hilfreich, die diesen Prozess durchlaufen und einige Schwierigkeiten haben. :lächelnd:

5 „Gefällt mir“

Danke dafür, ich werde es irgendwann ausprobieren und sehen, wie es läuft.

1 „Gefällt mir“