ملاحظات حول تثبيت Discourse على Ubuntu 20.04

أواجه مشكلة في خطوة 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() في -lnsl... لا
التحقق من socket() في -lsocket... لا
التحقق من openssl/ssl.h... نعم
التحقق من CRYPTO_malloc() في -lcrypto... نعم
التحقق من SSL_new() في -lssl... نعم
التحقق من LIBRESSL_VERSION_NUMBER في 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 or LibreSSL >= 2.5.0 is
required (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. قد يكون هذا الوضع موجودًا أيضًا مع إصدارات أخرى من Ubuntu/Debian التي تأتي مثبتة مسبقًا مع OpenSSL. إذا كنت تواجه هذه المشكلة، فمن المحتمل أن ترغب في تجميع إصدار سابق من OpenSSL من المصدر (استخدمت OpenSSL-1.1.1n)، ثم إعادة تشغيل الأمر bundle install. في الأساس، رسالة الخطأ هذه تتعلق بـ OpenSSL >= 1.0.1، < 3.0.0، واتضح أن 1.1 هو البديل الوحيد.

ستحتاج أيضًا إلى التحقق من إصدار Ruby الذي تستخدمه باستخدام ruby --version. لا يزال Discourse يستخدم Ruby 2، لذلك إذا كنت تستخدم Ruby 3.x أو أحدث، فستحتاج إلى استخدام إصدار سابق. اعتمادًا على كيفية تثبيت Ruby، من المحتمل أن تواجه مشكلة OpenSSL مماثلة عند تثبيت إصدار سابق، لذلك أوصي باستخدام مدير إصدارات لـ Ruby هنا، وقد وجدت أن Ruby 2.7.6 هو أفضل إصدار حاليًا للاستخدام مع Discourse.

بعد تثبيت نسخة جديدة من Ubuntu 20.04، إليك ما فعلته لجعل bundle install يعمل بشكل صحيح:

تثبيت تبعيات Discourse، asdf، واستنساخ Discourse

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

أثناء تشغيل bundle install كنت أواجه باستمرار بعد تثبيت OpenSSL-1.1.1n و Ruby 2.7.6

حدث خطأ أثناء تثبيت mini_racer (0.6.1)، ولا يمكن لـ Bundler المتابعة.

والتي يمكن حلها عن طريق تعديل السطر التالي في نسختك المحلية من discourse/Gemfile:

واستبداله بـ

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

بعد هذه الخطوة تمكنت من تشغيل bundle install بنجاح.

هذا مشابه لمشكلة تحدث على MacOS يمكنك قراءتها أكثر هنا

لا يوجد مثل هذا الملف أو الدليل - convert

في الخطوات اللاحقة لتثبيت Discourse، واجهت أيضًا المشكلة التالية عند تشغيل bundle exec rake autospec

فشل:
  1. AboutController.index يجب أن يعرض صفحة المعلومات للمستخدم المسجل دخوله عندما يكون login_required صحيحًا
    فشل/خطأ: expect(response.status).to eq(200)

    متوقع: 200
    حصلت على: 500

      (تمت المقارنة باستخدام ==)
    #./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)>'
    #---------------------
    #---سببه:---
    # Errno::ENOENT
    #  لا يوجد مثل هذا الملف أو الدليل - convert
    # ./lib/letter_avatar.rb:105:in ``'

هذا الخطأ يعني أن حزمة ImageMagick غير مثبتة (فهي توفر الثنائي convert)

يفترض أن هذا النص البرمجي في بداية عملية تثبيت Discourse يجب أن يحتوي على جميع الحزم الضرورية، ولكن يبدو أن هذه الحزمة قد تم استبعادها.

أخيرًا، بعد تثبيت ImageMagick باستخدام sudo apt install imagemagick تمكنت من تشغيل خادم Discourse بنجاح!

آمل أن تكون هذه المعلومات مفيدة لأي شخص يمر بهذه العملية ويواجه بعض المشاكل. :smile:

5 إعجابات

شكرًا على هذا، سأجربه في وقت ما وأرى كيف يسير.

إعجاب واحد (1)