User:Woozle/Redmine/2

from HTYP, the free directory anyone can edit if they can prove to me that they're not a spambot
Jump to navigation Jump to search

2020-02-09

Redmine: download

The download/install instructions suggest strongly that using subversion is the best way to upgrade --

svn co https://svn.redmine.org/redmine/branches/4.0-stable redmine-4.0

...and then cd to the redmine-4.0 folder which that creates, and:

svn update

I think this assumes I'm working with an already-configured instance, though, so I should look at the installation guide before trying the svn update.

On further reflection, I realized that I should probably be installing v4.1, in spite of the example:

svn co http://svn.redmine.org/redmine/branches/4.1-stable/ redmine-4.1

That seemed to work too.

Ruby

It looked like the packaged version of Ruby (2.5.1p57 (2018-03-29 revision 63029)) would be ok -- Redmine 4.1 wants Ruby 2.3, 2.4, 2.5, or 2.6 and Rails 5.2 -- so I did that.

Rails

I was never able to find actual instructions for installing Rails (unless you're serving from Windows or Mac for some reason), but a hint somewhere suggested that it could be installed with gem:

root@cloud1:~# gem install rails
Fetching: concurrent-ruby-1.1.5.gem (100%)
Successfully installed concurrent-ruby-1.1.5
Fetching: i18n-1.8.2.gem (100%)

HEADS UP! i18n 1.1 changed fallbacks to exclude default locale.
But that may break your application.

If you are upgrading your Rails application from an older version of Rails:

Please check your Rails app for 'config.i18n.fallbacks = true'.
If you're using I18n (>= 1.1.0) and Rails (< 5.2.2), this should be
'config.i18n.fallbacks = [I18n.default_locale]'.
If not, fallbacks will be broken in your app by I18n 1.1.x.

If you are starting a NEW Rails application, you can ignore this notice.

For more info see:
https://github.com/svenfuchs/i18n/releases/tag/v1.1.0

Successfully installed i18n-1.8.2
Fetching: thread_safe-0.3.6.gem (100%)
Successfully installed thread_safe-0.3.6
Fetching: tzinfo-1.2.6.gem (100%)
Successfully installed tzinfo-1.2.6
Fetching: zeitwerk-2.2.2.gem (100%)
Successfully installed zeitwerk-2.2.2
Fetching: activesupport-6.0.2.1.gem (100%)
Successfully installed activesupport-6.0.2.1
Fetching: rack-2.2.1.gem (100%)
Successfully installed rack-2.2.1
Fetching: rack-test-1.1.0.gem (100%)
Successfully installed rack-test-1.1.0
Fetching: mini_portile2-2.4.0.gem (100%)
Successfully installed mini_portile2-2.4.0
Fetching: nokogiri-1.10.7.gem (100%)
Building native extensions. This could take a while...
ERROR:  Error installing rails:
        ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/2.5.0/gems/nokogiri-1.10.7/ext/nokogiri
/usr/bin/ruby2.5 -r ./siteconf20200209-18711-ifi5p4.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in /var/lib/gems/2.5.0/gems/nokogiri-1.10.7 for inspection.
Results logged to /var/lib/gems/2.5.0/extensions/x86_64-linux/2.5.0/nokogiri-1.10.7/gem_make.out

It took some puzzling to work out that the key part of that message was:

can't find header files for ruby at /usr/lib/ruby/include/ruby.h

...suggesting that the Ruby header files (presumably in the ruby-dev package) need to be installed.

Having installed them, we will try again...

root@cloud1:~# gem install rails
Building native extensions. This could take a while...
ERROR:  Error installing rails:
        ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/2.5.0/gems/nokogiri-1.10.7/ext/nokogiri
/usr/bin/ruby2.5 -r ./siteconf20200209-10713-el6zi0.rb extconf.rb
checking if the C compiler accepts ... yes
Building nokogiri using packaged libraries.
Using mini_portile version 2.4.0
checking for gzdopen() in -lz... no
zlib is missing; necessary for building libxml2
*** 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)2.5
        --help
        --clean
        --use-system-libraries
        --enable-static
        --disable-static
        --with-zlib-dir
        --without-zlib-dir
        --with-zlib-include
        --without-zlib-include=${zlib-dir}/include
        --with-zlib-lib
        --without-zlib-lib=${zlib-dir}/lib
        --enable-cross-build
        --disable-cross-build

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

  /var/lib/gems/2.5.0/extensions/x86_64-linux/2.5.0/nokogiri-1.10.7/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /var/lib/gems/2.5.0/gems/nokogiri-1.10.7 for inspection.
Results logged to /var/lib/gems/2.5.0/extensions/x86_64-linux/2.5.0/nokogiri-1.10.7/gem_make.out

Presumably we just need to install zlib... but searching for "zlib" in apt came up with several packages:

zlib1g compression library - runtime
zlib1g-dbg compression library - development
zlib1g-dev compression library - development
zlibc An on-fly auto-uncompressing C library
zopfli zlib (gzip, deflate) compatible compressor

Our first guess was zlib1g, but that was already installed. Searching for the error came up with a post by someone who had solved it with zlib1g-dev, so we tried that next... and it appears to have succeeded:

root@cloud1:~# gem install rails 
Building native extensions. This could take a while...
Successfully installed nokogiri-1.10.7
Fetching: crass-1.0.6.gem (100%)
Successfully installed crass-1.0.6
Fetching: loofah-2.4.0.gem (100%)
Successfully installed loofah-2.4.0
Fetching: rails-html-sanitizer-1.3.0.gem (100%)
Successfully installed rails-html-sanitizer-1.3.0
Fetching: rails-dom-testing-2.0.3.gem (100%)
Successfully installed rails-dom-testing-2.0.3
Fetching: builder-3.2.4.gem (100%)
Successfully installed builder-3.2.4
Fetching: erubi-1.9.0.gem (100%)
Successfully installed erubi-1.9.0
Fetching: actionview-6.0.2.1.gem (100%)
Successfully installed actionview-6.0.2.1
Fetching: actionpack-6.0.2.1.gem (100%)
Successfully installed actionpack-6.0.2.1
Fetching: activemodel-6.0.2.1.gem (100%)
Successfully installed activemodel-6.0.2.1
Fetching: activerecord-6.0.2.1.gem (100%)
Successfully installed activerecord-6.0.2.1
Fetching: globalid-0.4.2.gem (100%)
Successfully installed globalid-0.4.2
Fetching: activejob-6.0.2.1.gem (100%)
Successfully installed activejob-6.0.2.1
Fetching: mini_mime-1.0.2.gem (100%)
Successfully installed mini_mime-1.0.2
Fetching: mail-2.7.1.gem (100%)
Successfully installed mail-2.7.1
Fetching: actionmailer-6.0.2.1.gem (100%)
Successfully installed actionmailer-6.0.2.1
Fetching: nio4r-2.5.2.gem (100%)
Building native extensions. This could take a while...
Successfully installed nio4r-2.5.2
Fetching: websocket-extensions-0.1.4.gem (100%)
Successfully installed websocket-extensions-0.1.4
Fetching: websocket-driver-0.7.1.gem (100%)
Building native extensions. This could take a while...
Successfully installed websocket-driver-0.7.1
Fetching: actioncable-6.0.2.1.gem (100%)
Successfully installed actioncable-6.0.2.1
Fetching: mimemagic-0.3.4.gem (100%)
Successfully installed mimemagic-0.3.4
Fetching: marcel-0.3.3.gem (100%)
Successfully installed marcel-0.3.3
Fetching: activestorage-6.0.2.1.gem (100%)
Successfully installed activestorage-6.0.2.1
Fetching: actionmailbox-6.0.2.1.gem (100%)
Successfully installed actionmailbox-6.0.2.1
Fetching: actiontext-6.0.2.1.gem (100%)
Successfully installed actiontext-6.0.2.1
Fetching: thor-1.0.1.gem (100%)
Successfully installed thor-1.0.1
Fetching: method_source-0.9.2.gem (100%)
Successfully installed method_source-0.9.2
Fetching: railties-6.0.2.1.gem (100%)
Successfully installed railties-6.0.2.1
Fetching: bundler-2.1.4.gem (100%)
Successfully installed bundler-2.1.4
Fetching: sprockets-4.0.0.gem (100%)
Successfully installed sprockets-4.0.0
Fetching: sprockets-rails-3.2.1.gem (100%)
Successfully installed sprockets-rails-3.2.1
Fetching: rails-6.0.2.1.gem (100%)
Successfully installed rails-6.0.2.1
Parsing documentation for nokogiri-1.10.7
Installing ri documentation for nokogiri-1.10.7
Parsing documentation for crass-1.0.6
Installing ri documentation for crass-1.0.6
Parsing documentation for loofah-2.4.0
Installing ri documentation for loofah-2.4.0
Parsing documentation for rails-html-sanitizer-1.3.0
Installing ri documentation for rails-html-sanitizer-1.3.0
Parsing documentation for rails-dom-testing-2.0.3
Installing ri documentation for rails-dom-testing-2.0.3
Parsing documentation for builder-3.2.4
Installing ri documentation for builder-3.2.4
Parsing documentation for erubi-1.9.0
Installing ri documentation for erubi-1.9.0
Parsing documentation for actionview-6.0.2.1
Installing ri documentation for actionview-6.0.2.1
Parsing documentation for actionpack-6.0.2.1
Installing ri documentation for actionpack-6.0.2.1
Parsing documentation for activemodel-6.0.2.1
Installing ri documentation for activemodel-6.0.2.1
Parsing documentation for activerecord-6.0.2.1
Installing ri documentation for activerecord-6.0.2.1
Parsing documentation for globalid-0.4.2
Installing ri documentation for globalid-0.4.2
Parsing documentation for activejob-6.0.2.1
Installing ri documentation for activejob-6.0.2.1
Parsing documentation for mini_mime-1.0.2
Installing ri documentation for mini_mime-1.0.2
Parsing documentation for mail-2.7.1
Installing ri documentation for mail-2.7.1
Parsing documentation for actionmailer-6.0.2.1
Installing ri documentation for actionmailer-6.0.2.1
Parsing documentation for nio4r-2.5.2
Installing ri documentation for nio4r-2.5.2
Parsing documentation for websocket-extensions-0.1.4
Installing ri documentation for websocket-extensions-0.1.4
Parsing documentation for websocket-driver-0.7.1
Installing ri documentation for websocket-driver-0.7.1
Parsing documentation for actioncable-6.0.2.1
Installing ri documentation for actioncable-6.0.2.1
Parsing documentation for mimemagic-0.3.4
Installing ri documentation for mimemagic-0.3.4
Parsing documentation for marcel-0.3.3
Installing ri documentation for marcel-0.3.3
Parsing documentation for activestorage-6.0.2.1
Installing ri documentation for activestorage-6.0.2.1
Parsing documentation for actionmailbox-6.0.2.1
Installing ri documentation for actionmailbox-6.0.2.1
Parsing documentation for actiontext-6.0.2.1
Installing ri documentation for actiontext-6.0.2.1
Parsing documentation for thor-1.0.1
Installing ri documentation for thor-1.0.1
Parsing documentation for method_source-0.9.2
Installing ri documentation for method_source-0.9.2
Parsing documentation for railties-6.0.2.1
Installing ri documentation for railties-6.0.2.1
Parsing documentation for bundler-2.1.4
Installing ri documentation for bundler-2.1.4
Parsing documentation for sprockets-4.0.0
Installing ri documentation for sprockets-4.0.0
Parsing documentation for sprockets-rails-3.2.1
Installing ri documentation for sprockets-rails-3.2.1
Parsing documentation for rails-6.0.2.1
Installing ri documentation for rails-6.0.2.1
Done installing documentation for nokogiri, crass, loofah, rails-html-sanitizer, rails-dom-testing, builder, erubi, actionview, actionpack, activemodel, activerecord, globalid, activejob, mini_mime, mail, actionmailer, nio4r, websocket-extensions, websocket-driver, actioncable, mimemagic, marcel, activestorage, actionmailbox, actiontext, thor, method_source, railties, bundler, sprockets, sprockets-rails, rails after 38 seconds
32 gems installed

2020-02-10

Redmine config

Looking through my main Redmine documentation, I saw mention of Redmine/rake, and the rake about command which reports on what Rails frameworks are available. I figured that if nothing else, Rails needs to be available.

root@cloud1:~# rake about
rake aborted!
No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb)

(See full trace by running task with --trace)

Okay, so maybe we need to be in Redmine's project folder...

root@cloud1:~# cd /home/vbzo/domains/rm.vbz.ovh/site/svn/redmine-4.1
root@cloud1:/home/vbzo/domains/rm.vbz.ovh/site/svn/redmine-4.1# rake about
Please configure your config/database.yml first
Could not find gem 'rails (= 5.2.4.1)' in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.

This feels a bit like skipping around arbitrarily, but maybe I should run bundle install at this point?

Part of the problem may be that I installed Rails 6, but Redmine is apparently configured to demand 5.2.4.1 and nothing else...

root@cloud1:/home/vbzo/domains/rm.vbz.ovh/site/svn/redmine-4.1# 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.
Please configure your config/database.yml first
Please configure your config/database.yml first
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x64-mingw32, x86-mswin32. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x64-mingw32 x86-mswin32`.                                                                                      
The dependency ffi (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x64-mingw32, x86-mswin32. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x64-mingw32 x86-mswin32`.                                                                                              
Fetching gem metadata from https://rubygems.org/..........
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Fetching rake 13.0.1
Installing rake 13.0.1
Using concurrent-ruby 1.1.5
Fetching i18n 1.6.0
Installing i18n 1.6.0
Fetching minitest 5.14.0
Installing minitest 5.14.0
Using thread_safe 0.3.6
Using tzinfo 1.2.6
Fetching activesupport 5.2.4.1
Installing activesupport 5.2.4.1
Using builder 3.2.4
Using erubi 1.9.0
Using mini_portile2 2.4.0
Using nokogiri 1.10.7
Using rails-dom-testing 2.0.3
Using crass 1.0.6
Using loofah 2.4.0
Using rails-html-sanitizer 1.3.0
Fetching actionview 5.2.4.1
Installing actionview 5.2.4.1
Using rack 2.2.1
Using rack-test 1.1.0
Fetching actionpack 5.2.4.1
Installing actionpack 5.2.4.1
Using nio4r 2.5.2
Using websocket-extensions 0.1.4
Using websocket-driver 0.7.1
Fetching actioncable 5.2.4.1
Installing actioncable 5.2.4.1
Using globalid 0.4.2
Fetching activejob 5.2.4.1
Installing activejob 5.2.4.1
Using mini_mime 1.0.2
Using mail 2.7.1
Fetching actionmailer 5.2.4.1
Installing actionmailer 5.2.4.1
Using method_source 0.9.2
Using thor 1.0.1
Fetching railties 5.2.4.1
Installing railties 5.2.4.1
Fetching actionpack-xml_parser 2.0.1
Installing actionpack-xml_parser 2.0.1
Fetching activemodel 5.2.4.1
Installing activemodel 5.2.4.1
Fetching arel 9.0.0
Installing arel 9.0.0
Fetching activerecord 5.2.4.1
Installing activerecord 5.2.4.1
Using mimemagic 0.3.4
Using marcel 0.3.3
Fetching activestorage 5.2.4.1
Installing activestorage 5.2.4.1
Fetching public_suffix 4.0.3
Installing public_suffix 4.0.3
Fetching addressable 2.7.0
Installing addressable 2.7.0
Fetching ast 2.4.0
Installing ast 2.4.0
Using bundler 2.1.4
Fetching regexp_parser 1.6.0
Installing regexp_parser 1.6.0
Fetching xpath 3.2.0
Installing xpath 3.2.0
Fetching capybara 3.25.0
Installing capybara 3.25.0
Fetching childprocess 3.0.0
Installing childprocess 3.0.0
Fetching css_parser 1.7.1
Installing css_parser 1.7.1
Fetching csv 3.1.2
Installing csv 3.1.2
Fetching docile 1.3.2
Installing docile 1.3.2
Fetching htmlentities 4.3.4
Installing htmlentities 4.3.4
Fetching jaro_winkler 1.5.4
Installing jaro_winkler 1.5.4 with native extensions
Fetching json 2.3.0
Installing json 2.3.0 with native extensions
Fetching mini_magick 4.9.5
Installing mini_magick 4.9.5
Fetching mocha 1.11.2
Installing mocha 1.11.2
Fetching net-ldap 0.16.2
Installing net-ldap 0.16.2
Fetching parallel 1.19.1
Installing parallel 1.19.1
Fetching parser 2.7.0.2
Installing parser 2.7.0.2
Fetching puma 3.12.2
Installing puma 3.12.2 with native extensions
Fetching ruby-openid 2.9.2
Installing ruby-openid 2.9.2
Fetching rack-openid 1.4.2
Installing rack-openid 1.4.2
Using sprockets 4.0.0
Using sprockets-rails 3.2.1
Fetching rails 5.2.4.1
Installing rails 5.2.4.1
Fetching rainbow 3.0.0
Installing rainbow 3.0.0
Fetching rbpdf-font 1.19.1
Installing rbpdf-font 1.19.1
Fetching rbpdf 1.20.1
Installing rbpdf 1.20.1
Fetching redcarpet 3.5.0
Installing redcarpet 3.5.0 with native extensions
Fetching request_store 1.4.1
Installing request_store 1.4.1
Fetching roadie 4.0.0
Installing roadie 4.0.0
Fetching roadie-rails 2.1.1
Installing roadie-rails 2.1.1
Fetching rouge 3.12.0
Installing rouge 3.12.0
Fetching ruby-progressbar 1.10.1
Installing ruby-progressbar 1.10.1
Fetching unicode-display_width 1.6.1
Installing unicode-display_width 1.6.1
Fetching rubocop 0.76.0
Installing rubocop 0.76.0
Fetching rubocop-performance 1.5.2
Installing rubocop-performance 1.5.2
Fetching rubocop-rails 2.3.2
Installing rubocop-rails 2.3.2
Fetching rubyzip 2.2.0
Installing rubyzip 2.2.0
Fetching selenium-webdriver 3.142.7
Installing selenium-webdriver 3.142.7
Fetching simplecov-html 0.10.2
Installing simplecov-html 0.10.2
Fetching simplecov 0.17.1
Installing simplecov 0.17.1
Fetching yard 0.9.24
Installing yard 0.9.24
Bundle complete! 30 Gemfile dependencies, 81 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
Post-install message from i18n:

HEADS UP! i18n 1.1 changed fallbacks to exclude default locale.
But that may break your application.

Please check your Rails app for 'config.i18n.fallbacks = true'.
If you're using I18n (>= 1.1.0) and Rails (< 5.2.2), this should be
'config.i18n.fallbacks = [I18n.default_locale]'.
If not, fallbacks will be broken in your app by I18n 1.1.x.

For more info see:
https://github.com/svenfuchs/i18n/releases/tag/v1.1.0

I don't get why "installing your bundle as root will break this application for all non-root users on this machine", since as far as I can tell they're always installed as root-owned. The old install on cloud4, which was done with apt, has /var/lib/gems and all its contents owned by root, so I think that's the way it's supposed to be. Maybe the Gemfile gets root-owned? That'll get taken care of later when I re-chown the Redmine project folder (before trying to run it).

root@cloud1:~# cd /home/vbzo/domains/rm.vbz.ovh/site/svn/
root@cloud1:/home/vbzo/domains/rm.vbz.ovh/site/svn# ls -al
total 12
drwxr-xr-x  3 vbzo vbzo 4096 Feb 10 15:50 .
drwxr-xr-x  4 vbzo vbzo 4096 Feb  9 12:38 ..
drwxr-xr-x 18 root root 4096 Feb 10 15:36 redmine-4.1
root@cloud1:/home/vbzo/domains/rm.vbz.ovh/site/svn# chown -R vbzo:vbzo redmine-4.1

Redmine folder setup

Removing the original public_html folder because it's empty and I want to use Redmine's public folder for that. I could point Apache directly at <redmine folder>/public, but when given a choice I'll do things where reconfiguration does not require restarting anything.

root@cloud1:/home/vbzo/domains/rm.vbz.ovh/site/svn# cd redmine-4.1/
root@cloud1:/home/vbzo/domains/rm.vbz.ovh/site/svn/redmine-4.1# rmdir ../../../public_html/
root@cloud1:/home/vbzo/domains/rm.vbz.ovh/site/svn/redmine-4.1# ln -rs public ../../../public_html

2020-02-12

It remains unclear where Redmine (especially the new one) expects config files to be.

On cloud4 (old installation), configuration files are in /etc/redmine/default, which is linked from the main project folder:

/usr/share/redmine/instances/default/config

is a link to

/etc/redmine/default

-- but where is it set that Redmine expects to see instance-configuration folders in <redmine-folder>/instances? New Redmine doesn't have an instances folder.

Looking through the new install for anything that might be pointing at configuration files/folders, I found appveyor.yml, but that seems to be part of something called AppVeyor which is some kind of continuous-integration service (i.e. part of Redmine's development process) and not part of installing or running an instance.

Skipping around a bit -- when I try to access the instance, I get this error:

2020-02-12.screen.Forbidden error.png

This looked like an Apache error, so I checked Apache's error log and it seems to support this:

[Wed Feb 12 20:18:22.406987 2020] [autoindex:error] [pid 28388] [client 107.15.53.219:5345] AH01276: Cannot serve directory /home/vbzo/domains/rm.vbz.ovh/public_html/: No matching DirectoryIndex (index.html,index.htm,index.php) found, and server-generated directory index forbidden by Options directive

I had changed the DirectoryIndex (in Apache's config for this domain) to dispatch.fcgi, which evidence suggests is what Redmine uses for an index file, but the error suggests that Apache is still looking for index.* files.

I thought I had restarted Apache after making that change but apparently I hadn't, because restarting it resulted in a different error:

2020-02-12.screen.Internal Server Error.png

Looking for evidence of how Apache is supposed to be configured for .fcgi files... The new Redmine comes with a file called htaccess.fcgi.example which one presumes is supposed to be renamed .htaccess (or maybe htaccess.fcgi? and how would that get invoked?) but there are no instructions.

In any case, that file contains the code:

<IfModule mod_fastcgi.c>
    AddHandler fastcgi-script .fcgi
</IfModule>
<IfModule mod_fcgid.c>
    AddHandler fcgid-script .fcgi
</IfModule>

Meanwhile, the site-config on cloud4 (old server) has this:

       Options +ExecCGI
       AddHandler cgi-script .fcgi
       DirectoryIndex dispatch.fcgi
       # RAILS-SPECIFIC STUFF
       
       RailsBaseURI /
       PassengerUser vbz-net

I copied those lines into the site-config on cloud1 (new server), but Apache didn't like them. Investigation revealed that RailsBaseURI is the first problem -- presumably Rails directives aren't being recognized because Apache needs a Rails module enabled.

Disabling those two lines for now leaves us with this in the Apache error log:

[Thu Feb 13 01:03:23.890549 2020] [cgi:error] [pid 5631] [client 107.15.53.219:55937] AH01215: Please configure your config/database.yml first: /home/vbzo/domains/rm.vbz.ovh/public_html/dispatch.fcgi

This is at least a clue towards the "where should the config files go" question.

At that point I copied the two .example files to new names:

  • configuration.yml.exampleconfiguration.yml
  • database.yml.exampledatabase.yml

I still don't know where they are supposed to go, but now maybe I have a test to see if they're in the right place? I've put the renamed copies in the same folder as the original example files.

2020-02-13

part 1

I'd imported the Redmine database earlier but not created a user for it; did that now, and configured database.yml with the appropriate credentials. I now get this error in Apache's log:

[Thu Feb 13 14:37:21.489459 2020] [cgi:error] [pid 1539] [client 107.15.53.219:29345] AH01215: /var/lib/gems/2.5.0/gems/bundler-2.1.4/lib/bundler/resolver.rb:290:in `block in verify_gemfile_dependencies_are_found!': /home/vbzo/domains/rm.vbz.ovh/public_html/dispatch.fcgi [Thu Feb 13 14:37:21.489940 2020] [cgi:error] [pid 1539] [client 107.15.53.219:29345] AH01215: : Could not find gem 'mysql2 (~> 0.5.0)' in any of the gem sources listed in your Gemfile. (Bundler::GemNotFound): /home/vbzo/domains/rm.vbz.ovh/public_html/dispatch.fcgi

followed by what looks like an execution-stack trace.

I think this means I need to install the mysql2 gem, which I think I might know how to do.

part 2

I'm testing a theory about why gem sometimes complains about being run as root, so I ran it as root:

root@cloud1:/home/vbzo/domains/rm.vbz.ovh/site/svn/redmine-4.1# gem install mysql2
Fetching: mysql2-0.5.3.gem (100%)
Building native extensions. This could take a while...
ERROR:  Error installing mysql2:
        ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/2.5.0/gems/mysql2-0.5.3/ext/mysql2
/usr/bin/ruby2.5 -r ./siteconf20200213-8027-8ztdkh.rb extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for rb_wait_for_single_fd()... yes
checking for -lmysqlclient... no
-----
mysql client is missing. You may need to 'sudo apt-get install libmariadb-dev', 'sudo apt-get install libmysqlclient-dev' or 'sudo yum install mysql-devel', and try again.
-----
*** 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)2.5
        --with-mysql-dir
        --without-mysql-dir
        --with-mysql-include
        --without-mysql-include=${mysql-dir}/include
        --with-mysql-lib
        --without-mysql-lib=${mysql-dir}/lib
        --with-mysql-config
        --without-mysql-config
        --with-mysql-dir
        --without-mysql-dir
        --with-mysql-include
        --without-mysql-include=${mysql-dir}/include
        --with-mysql-lib
        --without-mysql-lib=${mysql-dir}/lib
        --with-mysqlclientlib
        --without-mysqlclientlib

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

  /var/lib/gems/2.5.0/extensions/x86_64-linux/2.5.0/mysql2-0.5.3/mkmf.log

extconf failed, exit code 1

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

Looking at mkmf.log, the key seems to be lines ending in "-------------------- <yes/no>", where the first and only "no" line is:

find_library: checking for -lmysqlclient... -------------------- no

So presumably I need to install lmysqlclient. (From apt, I hope?)

part 3

This article suggested that the package might be called libmysqlclient-dev, so I searched apt for "libmysql" and found default-libmysqlclient-dev, which I installed.

I then tried gem install again:

root@cloud1:/home/vbzo/domains/rm.vbz.ovh/site/svn/redmine-4.1# gem install mysql2
Building native extensions. This could take a while...
Successfully installed mysql2-0.5.3
Parsing documentation for mysql2-0.5.3
Installing ri documentation for mysql2-0.5.3
Done installing documentation for mysql2 after 0 seconds
1 gem installed

...and all appears right with the world.

part 4a

Now what error do we get?

[Thu Feb 13 19:19:58.871510 2020] [cgi:error] [pid 28015] [client 107.15.53.219:7649] AH01215: /var/lib/gems/2.5.0/gems/yard-0.9.24/lib/yard/config.rb:95:in `expand_path': couldn't find login name -- expanding `~' (ArgumentError): /home/vbzo/domains/rm.vbz.ovh/public_html/dispatch.fcgi

part 4b

Experimentation determined that Apache was not setting the $HOME environment variable, which was probably causing this failure. After some futzing around it finally dawned on me that this is probably what those two Rails-specific Apache directives --

        # RAILS-SPECIFIC STUFF
        RailsBaseURI /
        PassengerUser vbzo

-- which I had commented out -- were intended to remedy. It therefore was necessary to install whatever thing made it possible for Apache to recognize them, which turns out to be Phusion Passenger.

False start: I initially tried installing them from apt, but this led to an error about bundler being too old (despite the bundler gem being of the needed version, 2.14, where the requirement was at least version 2.

After some further dead-end futzing around, I realized that installing Passenger from apt had probably brought in a bunch of outdated stuff including bundler, so all that needed to go away and Passenger needed to be installed from a current source:

  • dirmngr is already the newest version (2.2.4-1ubuntu1.2).
  • gnupg is already the newest version (2.2.4-1ubuntu1.2).
root@cloud1:/home/vbzo/domains/rm.vbz.ovh/site/svn/redmine-4.1# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
Executing: /tmp/apt-key-gpghome.XfUnaZCAKM/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
gpg: key 561F9B9CAC40B2F7: 2 signatures not checked due to missing keys
gpg: key 561F9B9CAC40B2F7: public key "Phusion Automated Software Signing (Used by automated tools to sign software packages) <auto-software-signing@phusion.nl>" imported
gpg: Total number processed: 1
gpg:               imported: 1
root@cloud1:/home/vbzo/domains/rm.vbz.ovh/site/svn/redmine-4.1# apt-get install -y apt-transport-https ca-certificates
  • Setting up apt-transport-https (1.6.12) ...

Then...

...and then...

root@cloud1:/home/vbzo/domains/rm.vbz.ovh/site/svn/redmine-4.1# apt update
Hit:1 http://mirrors.digitalocean.com/ubuntu bionic InRelease
Get:2 http://mirrors.digitalocean.com/ubuntu bionic-updates InRelease [88.7 kB]                                                                                                                     
Hit:3 https://deb.nodesource.com/node_11.x bionic InRelease                                                                                                                                         
Hit:4 http://software.virtualmin.com/vm/6/gpl/apt virtualmin-bionic InRelease                                                                                                                       
Hit:5 http://software.virtualmin.com/vm/6/gpl/apt virtualmin-universal InRelease                                                                                                                  
Get:6 http://mirrors.digitalocean.com/ubuntu bionic-backports InRelease [74.6 kB]                                                                              
Get:7 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]                                                                                                
Hit:8 http://archive.ubuntu.com/ubuntu bionic InRelease                                                                                                                    
Ign:9 https://oss-binaries.phusionpassenger.com/apt/passenger bionic InRelease                                                                                             
Get:10 https://oss-binaries.phusionpassenger.com/apt/passenger bionic Release [22.8 kB]
Get:11 https://oss-binaries.phusionpassenger.com/apt/passenger bionic Release.gpg [819 B]
Get:12 https://oss-binaries.phusionpassenger.com/apt/passenger bionic/main amd64 Packages [14.5 kB]
Fetched 290 kB in 1s (219 kB/s)
Reading package lists... Done
Building dependency tree       
Reading state information... Done
2 packages can be upgraded. Run 'apt list --upgradable' to see them.
root@cloud1:/home/vbzo/domains/rm.vbz.ovh/site/svn/redmine-4.1# apt upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required:
  gyp libc-ares2 libhttp-parser2.7.1 libjs-async libjs-coffeescript libjs-inherits libjs-node-uuid libjs-source-map libjs-uglify libjs-underscore libuv1-dev node-abbrev node-ansi
  node-ansi-color-table node-archy node-async node-balanced-match node-block-stream node-brace-expansion node-builtin-modules node-combined-stream node-concat-map node-cookie-jar
  node-delayed-stream node-forever-agent node-form-data node-fs.realpath node-fstream node-fstream-ignore node-github-url-from-git node-glob node-graceful-fs node-gyp node-hosted-git-info
  node-inflight node-inherits node-ini node-is-builtin-module node-isexe node-json-stringify-safe node-lockfile node-lru-cache node-mime node-minimatch node-mkdirp node-mute-stream node-node-uuid
  node-nopt node-normalize-package-data node-npmlog node-once node-osenv node-path-is-absolute node-pseudomap node-qs node-read node-read-package-json node-request node-retry node-rimraf
  node-semver node-sha node-slide node-spdx-correct node-spdx-expression-parse node-spdx-license-ids node-tar node-tunnel-agent node-underscore node-validate-npm-package-license node-which
  node-wrappy node-yallist nodejs-doc python-pkg-resources ruby-actionmailer ruby-actionpack ruby-actionview ruby-activejob ruby-activemodel ruby-activerecord ruby-activesupport ruby-arel
  ruby-atomic ruby-binding-of-caller ruby-blankslate ruby-builder ruby-byebug ruby-coffee-rails ruby-coffee-script ruby-coffee-script-source ruby-columnize ruby-concurrent ruby-crass
  ruby-debug-inspector ruby-erubis ruby-execjs ruby-ffi ruby-globalid ruby-hike ruby-i18n ruby-jbuilder ruby-jquery-rails ruby-json ruby-listen ruby-loofah ruby-mail ruby-mime-types
  ruby-mime-types-data ruby-molinillo ruby-multi-json ruby-net-http-persistent ruby-nokogiri ruby-oj ruby-pkg-config ruby-polyglot ruby-rack-test ruby-rails-deprecated-sanitizer
  ruby-rails-dom-testing ruby-rails-html-sanitizer ruby-railties ruby-rb-inotify ruby-sass ruby-sass-rails ruby-sdoc ruby-spring ruby-sprockets ruby-sprockets-rails ruby-sqlite3 ruby-thor
  ruby-thread-safe ruby-tilt ruby-treetop ruby-turbolinks ruby-tzinfo ruby-uglifier ruby-web-console
Use 'apt autoremove' to remove them.
The following NEW packages will be installed:
  passenger-dev passenger-doc
The following packages will be upgraded:
  libapache2-mod-passenger passenger
2 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 7283 kB of archives.
After this operation, 50.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 https://oss-binaries.phusionpassenger.com/apt/passenger bionic/main amd64 libapache2-mod-passenger amd64 1:6.0.4-1~bionic1 [418 kB]
Get:2 https://oss-binaries.phusionpassenger.com/apt/passenger bionic/main amd64 passenger amd64 1:6.0.4-1~bionic1 [2322 kB]
Get:3 https://oss-binaries.phusionpassenger.com/apt/passenger bionic/main amd64 passenger-dev amd64 1:6.0.4-1~bionic1 [4506 kB]
Get:4 https://oss-binaries.phusionpassenger.com/apt/passenger bionic/main amd64 passenger-doc all 1:6.0.4-1~bionic1 [36.6 kB]
Fetched 7283 kB in 2s (3386 kB/s)       
(Reading database ... 208400 files and directories currently installed.)
Preparing to unpack .../libapache2-mod-passenger_1%3a6.0.4-1~bionic1_amd64.deb ...
Unpacking libapache2-mod-passenger (1:6.0.4-1~bionic1) over (5.0.30-1+deb9u1build0.18.04.1) ...
Preparing to unpack .../passenger_1%3a6.0.4-1~bionic1_amd64.deb ...
Unpacking passenger (1:6.0.4-1~bionic1) over (5.0.30-1+deb9u1build0.18.04.1) ...
Selecting previously unselected package passenger-dev.
Preparing to unpack .../passenger-dev_1%3a6.0.4-1~bionic1_amd64.deb ...
Unpacking passenger-dev (1:6.0.4-1~bionic1) ...
Selecting previously unselected package passenger-doc.
Preparing to unpack .../passenger-doc_1%3a6.0.4-1~bionic1_all.deb ...
Unpacking passenger-doc (1:6.0.4-1~bionic1) ...
Setting up passenger (1:6.0.4-1~bionic1) ...
Setting up passenger-doc (1:6.0.4-1~bionic1) ...
Setting up passenger-dev (1:6.0.4-1~bionic1) ...
Setting up libapache2-mod-passenger (1:6.0.4-1~bionic1) ...
Installing new version of config file /etc/apache2/mods-available/passenger.conf ...
Installing new version of config file /etc/apache2/mods-available/passenger.load ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...

So passenger-dev and passenger-doc were already there but upgraded. Running apt install passenger just confirmed that everything we want was already installed and upgraded. But, aha, there's a validation program included! (I had to manually select "Apache", else it defaulted to just checking Passenger.)

root@cloud1:/home/vbzo/domains/rm.vbz.ovh/site/svn/redmine-4.1# /usr/bin/passenger-config validate-install
What would you like to validate?
Use <space> to select.
If the menu doesn't display correctly, press '!'

   ⬢  Passenger itself
 ‣ ⬢  Apache

-------------------------------------------------------------------------

 * Checking whether this Passenger install is in PATH... ✓
 * Checking whether there are no other Passenger installations... ✓
 * Checking whether Apache is installed... ✗

   Unable to validate your Apache installation: more software required
   
   This program requires the apxs2 tool in order to be able to validate your
   Apache installation. This tool is currently not installed. You can solve this
   as follows:
   
   Please install it with apt-get install apache2-dev
   
   When done, please re-run this program.


Detected 1 error(s), 0 warning(s).

Okay, so hopefully the apache2-dev package from apt doesn't bring in any unwanted old versions...

root@cloud1:/home/vbzo/domains/rm.vbz.ovh/site/svn/redmine-4.1# apt install apache2-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  autoconf automake autopoint autotools-dev debhelper dh-autoreconf dh-strip-nondeterminism gettext intltool-debian libapr1-dev libaprutil1-dev libarchive-cpio-perl libarchive-zip-perl libcroco3
  libexpat1-dev libfile-stripnondeterminism-perl libldap2-dev libltdl-dev libsctp-dev libsctp1 libtool m4 po-debconf uuid-dev
Suggested packages:
  autoconf-archive gnu-standards autoconf-doc dh-make dwz gettext-doc libasprintf-dev libgettextpo-dev libtool-doc lksctp-tools gfortran | fortran95-compiler gcj-jdk m4-doc libmail-box-perl
The following NEW packages will be installed:
  apache2-dev autoconf automake autopoint autotools-dev debhelper dh-autoreconf dh-strip-nondeterminism gettext intltool-debian libapr1-dev libaprutil1-dev libarchive-cpio-perl
  libarchive-zip-perl libcroco3 libexpat1-dev libfile-stripnondeterminism-perl libldap2-dev libltdl-dev libsctp-dev libsctp1 libtool m4 po-debconf uuid-dev
0 upgraded, 25 newly installed, 0 to remove and 0 not upgraded.
Need to get 6257 kB of archives.
After this operation, 33.8 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://mirrors.digitalocean.com/ubuntu bionic-updates/main amd64 uuid-dev amd64 2.31.1-0.4ubuntu3.5 [33.2 kB]
Get:2 http://mirrors.digitalocean.com/ubuntu bionic/main amd64 libsctp1 amd64 1.0.17+dfsg-2 [8008 B]
Get:3 http://mirrors.digitalocean.com/ubuntu bionic/main amd64 libsctp-dev amd64 1.0.17+dfsg-2 [61.9 kB]
Get:4 http://mirrors.digitalocean.com/ubuntu bionic/main amd64 libapr1-dev amd64 1.6.3-2 [690 kB]
Get:5 http://mirrors.digitalocean.com/ubuntu bionic-updates/main amd64 libldap2-dev amd64 2.4.45+dfsg-1ubuntu1.4 [262 kB]
Get:6 http://mirrors.digitalocean.com/ubuntu bionic-updates/main amd64 libexpat1-dev amd64 2.2.5-3ubuntu0.2 [122 kB]
Get:7 http://mirrors.digitalocean.com/ubuntu bionic/main amd64 libaprutil1-dev amd64 1.6.1-2 [391 kB]
Get:8 http://mirrors.digitalocean.com/ubuntu bionic/main amd64 autotools-dev all 20180224.1 [39.6 kB]
Get:9 http://mirrors.digitalocean.com/ubuntu bionic/main amd64 m4 amd64 1.4.18-1 [197 kB]
Get:10 http://mirrors.digitalocean.com/ubuntu bionic/main amd64 autoconf all 2.69-11 [322 kB]
Get:11 http://mirrors.digitalocean.com/ubuntu bionic/main amd64 automake all 1:1.15.1-3ubuntu2 [509 kB]
Get:12 http://mirrors.digitalocean.com/ubuntu bionic-updates/main amd64 autopoint all 0.19.8.1-6ubuntu0.3 [426 kB]
Get:13 http://mirrors.digitalocean.com/ubuntu bionic/main amd64 libtool all 2.4.6-2 [194 kB]
Get:14 http://mirrors.digitalocean.com/ubuntu bionic/main amd64 dh-autoreconf all 17 [15.8 kB]
Get:15 http://mirrors.digitalocean.com/ubuntu bionic-updates/main amd64 libarchive-zip-perl all 1.60-1ubuntu0.1 [84.6 kB]
Get:16 http://mirrors.digitalocean.com/ubuntu bionic/main amd64 libfile-stripnondeterminism-perl all 0.040-1.1~build1 [13.8 kB]
Get:17 http://mirrors.digitalocean.com/ubuntu bionic/main amd64 dh-strip-nondeterminism all 0.040-1.1~build1 [5208 B]
Get:18 http://mirrors.digitalocean.com/ubuntu bionic/main amd64 libcroco3 amd64 0.6.12-2 [81.3 kB]
Get:19 http://mirrors.digitalocean.com/ubuntu bionic-updates/main amd64 gettext amd64 0.19.8.1-6ubuntu0.3 [1293 kB]
Get:20 http://mirrors.digitalocean.com/ubuntu bionic/main amd64 intltool-debian all 0.35.0+20060710.4 [24.9 kB]
Get:21 http://mirrors.digitalocean.com/ubuntu bionic/main amd64 po-debconf all 1.0.20 [232 kB]
Get:22 http://mirrors.digitalocean.com/ubuntu bionic-updates/main amd64 debhelper all 11.1.6ubuntu2 [902 kB]
Get:23 http://mirrors.digitalocean.com/ubuntu bionic-updates/main amd64 apache2-dev amd64 2.4.29-1ubuntu4.11 [177 kB]
Get:24 http://mirrors.digitalocean.com/ubuntu bionic/main amd64 libarchive-cpio-perl all 0.10-1 [9644 B]
Get:25 http://mirrors.digitalocean.com/ubuntu bionic/main amd64 libltdl-dev amd64 2.4.6-2 [162 kB]
Fetched 6257 kB in 2s (3281 kB/s)     
Selecting previously unselected package uuid-dev:amd64.
(Reading database ... 204093 files and directories currently installed.)
Preparing to unpack .../00-uuid-dev_2.31.1-0.4ubuntu3.5_amd64.deb ...
Unpacking uuid-dev:amd64 (2.31.1-0.4ubuntu3.5) ...
Selecting previously unselected package libsctp1:amd64.
Preparing to unpack .../01-libsctp1_1.0.17+dfsg-2_amd64.deb ...
Unpacking libsctp1:amd64 (1.0.17+dfsg-2) ...
Selecting previously unselected package libsctp-dev:amd64.
Preparing to unpack .../02-libsctp-dev_1.0.17+dfsg-2_amd64.deb ...
Unpacking libsctp-dev:amd64 (1.0.17+dfsg-2) ...
Selecting previously unselected package libapr1-dev.
Preparing to unpack .../03-libapr1-dev_1.6.3-2_amd64.deb ...
Unpacking libapr1-dev (1.6.3-2) ...
Selecting previously unselected package libldap2-dev:amd64.
Preparing to unpack .../04-libldap2-dev_2.4.45+dfsg-1ubuntu1.4_amd64.deb ...
Unpacking libldap2-dev:amd64 (2.4.45+dfsg-1ubuntu1.4) ...
Selecting previously unselected package libexpat1-dev:amd64.
Preparing to unpack .../05-libexpat1-dev_2.2.5-3ubuntu0.2_amd64.deb ...
Unpacking libexpat1-dev:amd64 (2.2.5-3ubuntu0.2) ...
Selecting previously unselected package libaprutil1-dev.
Preparing to unpack .../06-libaprutil1-dev_1.6.1-2_amd64.deb ...
Unpacking libaprutil1-dev (1.6.1-2) ...
Selecting previously unselected package autotools-dev.
Preparing to unpack .../07-autotools-dev_20180224.1_all.deb ...
Unpacking autotools-dev (20180224.1) ...
Selecting previously unselected package m4.
Preparing to unpack .../08-m4_1.4.18-1_amd64.deb ...
Unpacking m4 (1.4.18-1) ...
Selecting previously unselected package autoconf.
Preparing to unpack .../09-autoconf_2.69-11_all.deb ...
Unpacking autoconf (2.69-11) ...
Selecting previously unselected package automake.
Preparing to unpack .../10-automake_1%3a1.15.1-3ubuntu2_all.deb ...
Unpacking automake (1:1.15.1-3ubuntu2) ...
Selecting previously unselected package autopoint.
Preparing to unpack .../11-autopoint_0.19.8.1-6ubuntu0.3_all.deb ...
Unpacking autopoint (0.19.8.1-6ubuntu0.3) ...
Selecting previously unselected package libtool.
Preparing to unpack .../12-libtool_2.4.6-2_all.deb ...
Unpacking libtool (2.4.6-2) ...
Selecting previously unselected package dh-autoreconf.
Preparing to unpack .../13-dh-autoreconf_17_all.deb ...
Unpacking dh-autoreconf (17) ...
Selecting previously unselected package libarchive-zip-perl.
Preparing to unpack .../14-libarchive-zip-perl_1.60-1ubuntu0.1_all.deb ...
Unpacking libarchive-zip-perl (1.60-1ubuntu0.1) ...
Selecting previously unselected package libfile-stripnondeterminism-perl.
Preparing to unpack .../15-libfile-stripnondeterminism-perl_0.040-1.1~build1_all.deb ...
Unpacking libfile-stripnondeterminism-perl (0.040-1.1~build1) ...
Selecting previously unselected package dh-strip-nondeterminism.
Preparing to unpack .../16-dh-strip-nondeterminism_0.040-1.1~build1_all.deb ...
Unpacking dh-strip-nondeterminism (0.040-1.1~build1) ...
Selecting previously unselected package libcroco3:amd64.
Preparing to unpack .../17-libcroco3_0.6.12-2_amd64.deb ...
Unpacking libcroco3:amd64 (0.6.12-2) ...
Selecting previously unselected package gettext.
Preparing to unpack .../18-gettext_0.19.8.1-6ubuntu0.3_amd64.deb ...
Unpacking gettext (0.19.8.1-6ubuntu0.3) ...
Selecting previously unselected package intltool-debian.
Preparing to unpack .../19-intltool-debian_0.35.0+20060710.4_all.deb ...
Unpacking intltool-debian (0.35.0+20060710.4) ...
Selecting previously unselected package po-debconf.
Preparing to unpack .../20-po-debconf_1.0.20_all.deb ...
Unpacking po-debconf (1.0.20) ...
Selecting previously unselected package debhelper.
Preparing to unpack .../21-debhelper_11.1.6ubuntu2_all.deb ...
Unpacking debhelper (11.1.6ubuntu2) ...
Selecting previously unselected package apache2-dev.
Preparing to unpack .../22-apache2-dev_2.4.29-1ubuntu4.11_amd64.deb ...
Unpacking apache2-dev (2.4.29-1ubuntu4.11) ...
Selecting previously unselected package libarchive-cpio-perl.
Preparing to unpack .../23-libarchive-cpio-perl_0.10-1_all.deb ...
Unpacking libarchive-cpio-perl (0.10-1) ...
Selecting previously unselected package libltdl-dev:amd64.
Preparing to unpack .../24-libltdl-dev_2.4.6-2_amd64.deb ...
Unpacking libltdl-dev:amd64 (2.4.6-2) ...
Setting up libldap2-dev:amd64 (2.4.45+dfsg-1ubuntu1.4) ...
Setting up libarchive-zip-perl (1.60-1ubuntu0.1) ...
Setting up libltdl-dev:amd64 (2.4.6-2) ...
Setting up libsctp1:amd64 (1.0.17+dfsg-2) ...
Setting up libarchive-cpio-perl (0.10-1) ...
Setting up uuid-dev:amd64 (2.31.1-0.4ubuntu3.5) ...
Setting up m4 (1.4.18-1) ...
Setting up libcroco3:amd64 (0.6.12-2) ...
Setting up autotools-dev (20180224.1) ...
Setting up libexpat1-dev:amd64 (2.2.5-3ubuntu0.2) ...
Setting up autopoint (0.19.8.1-6ubuntu0.3) ...
Setting up libfile-stripnondeterminism-perl (0.040-1.1~build1) ...
Setting up libtool (2.4.6-2) ...
Setting up libsctp-dev:amd64 (1.0.17+dfsg-2) ...
Setting up libapr1-dev (1.6.3-2) ...
Setting up gettext (0.19.8.1-6ubuntu0.3) ...
Setting up libaprutil1-dev (1.6.1-2) ...
Setting up autoconf (2.69-11) ...
Setting up intltool-debian (0.35.0+20060710.4) ...
Setting up automake (1:1.15.1-3ubuntu2) ...
update-alternatives: using /usr/bin/automake-1.15 to provide /usr/bin/automake (automake) in auto mode
Setting up po-debconf (1.0.20) ...
Setting up dh-autoreconf (17) ...
Setting up dh-strip-nondeterminism (0.040-1.1~build1) ...
Setting up debhelper (11.1.6ubuntu2) ...
Setting up apache2-dev (2.4.29-1ubuntu4.11) ...
Processing triggers for install-info (6.5.0.dfsg.1-2) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...

None of that looks like anything I was running afoul of before. So.

root@cloud1:/home/vbzo/domains/rm.vbz.ovh/site/svn/redmine-4.1# /usr/bin/passenger-config validate-install
What would you like to validate?
Use <space> to select.
If the menu doesn't display correctly, press '!'

   ⬢  Passenger itself
 ‣ ⬢  Apache

-------------------------------------------------------------------------

Checking whether there are multiple Apache installations...
Only a single installation detected. This is good.

-------------------------------------------------------------------------

 * Checking whether this Passenger install is in PATH... ✓
 * Checking whether there are no other Passenger installations... ✓
 * Checking whether Apache is installed... ✓
 * Checking whether the Passenger module is correctly configured in Apache... ✓

Everything looks good. :-)

I restarted Apache, but it didn't seem to make any difference; still getting the same error, although the form has changed slightly:

[Thu Feb 13 21:53:57.611810 2020] [cgi:error] [pid 3113] [client 107.15.53.219:31393] AH01215: /var/lib/gems/2.5.0/gems/yard-0.9.24/lib/yard/config.rb:95:in `expand_path': /home/vbzo/domains/rm.vbz.ovh/public_html/dispatch.fcgi
[Thu Feb 13 21:53:57.611875 2020] [cgi:error] [pid 3113] [client 107.15.53.219:31393] AH01215: : : /home/vbzo/domains/rm.vbz.ovh/public_html/dispatch.fcgi
[Thu Feb 13 21:53:57.611911 2020] [cgi:error] [pid 3113] [client 107.15.53.219:31393] AH01215: couldn't find login name -- expanding `~': /home/vbzo/domains/rm.vbz.ovh/public_html/dispatch.fcgi

I confirmed that the error means what I think it means by putting this line right before config.rb line 95:

system("echo HOME IS [$HOME]")

This returns malformed header from script 'dispatch.fcgi': Bad header: HOME IS [] as expected.

Googling the current version of the error message, I found that someone had fixed the problem like this (forgot to save the link, but there's a more compact version here) - inserted before the debug line:

# The HOME environment variable is important when invoking Bolt. If HOME is not
# already set, set it.
if ENV['HOME'].nil?
  require 'etc'
  ENV['HOME'] = Etc.getpwuid.dir
end

("require 'etc' apparently refers to the Ruby Etc module.) The debug line now outputs HOME IS [/home/vbzo], so that seems like it's working and I commented out the debug line.

Next error:

[Thu Feb 13 22:09:03.093211 2020] [cgi:error] [pid 8348] [client 107.15.53.219:61505] AH01215: /var/lib/gems/2.5.0/gems/activerecord-5.2.4.1/lib/active_record/connection_adapters/connection_specification.rb:260:in `resolve_symbol_connection': 'development' database is not configured. Available: ["production"] (ActiveRecord::AdapterNotSpecified): /home/vbzo/domains/rm.vbz.ovh/public_html/dispatch.fcgi

I don't know why it insists on having a development database when I'm not doing development (the above debugging and patching aside); I copied the production db specs to the development db section.

Next error:

[Thu Feb 13 22:12:21.144585 2020] [cgi:error] [pid 3108] [client 107.15.53.219:3585] AH01215: /var/lib/gems/2.5.0/gems/activesupport-5.2.4.1/lib/active_support/dependencies.rb:291:in `require': cannot load such file -- fcgi (LoadError): /home/vbzo/domains/rm.vbz.ovh/public_html/dispatch.fcgi

part 5

Following instructions here, I created a Gemfile.local with the contents given, and now the error is:

[Thu Feb 13 22:39:30.995554 2020] [cgi:error] [pid 12890] [client 107.15.53.219:48801] AH01215: /var/lib/gems/2.5.0/gems/bundler-2.1.4/lib/bundler/resolver.rb:290:in `block in verify_gemfile_dependencies_are_found!': Could not find gem 'fcgi' in any of the gem sources listed in your Gemfile. (Bundler::GemNotFound): /home/vbzo/domains/rm.vbz.ovh/public_html/dispatch.fcgi
[Thu Feb 13 22:39:30.995813 2020] [cgi:error] [pid 12890] [client 107.15.53.219:48801] AH01215: \tfrom /var/lib/gems/2.5.0/gems/bundler-2.1.4/lib/bundler/resolver.rb:258:in `each': /home/vbzo/domains/rm.vbz.ovh/public_html/dispatch.fcgi

Could it be this simple?

root@cloud1:/home/vbzo/domains/rm.vbz.ovh/site/svn/redmine-4.1# gem install fcgi
Fetching: fcgi-0.9.2.1.gem (100%)
Building native extensions. This could take a while...
Successfully installed fcgi-0.9.2.1
Parsing documentation for fcgi-0.9.2.1
Installing ri documentation for fcgi-0.9.2.1
Done installing documentation for fcgi after 0 seconds
1 gem installed

At first I thought the error message was unchanged, but then I realized the timestamp I was looking at was the same as before. Apparently these are now the most recent messages:

[Thu Feb 13 22:39:31.000685 2020] [cgi:error] [pid 12890] [client 107.15.53.219:48801] End of script output before headers: dispatch.fcgi
[Thu Feb 13 22:46:09.129183 2020] [cgi:error] [pid 14546] [client 107.15.53.219:62561] End of script output before headers: dispatch.fcgi

...and, like, what is actually the problem there? This is not helpful.

part 6

vbzo@cloud1:~/domains/rm.vbz.ovh/site/svn/redmine-4.1$ rake db:migrate
== 20160404080304 ForcePasswordResetDuringSetup: migrating ====================
== 20160404080304 ForcePasswordResetDuringSetup: migrated (0.0490s) ===========

== 20160416072926 RemovePositionDefaults: migrating ===========================
-- change_column("boards", :position, :integer, {:default=>nil})
   -> 0.0054s
-- change_column("custom_fields", :position, :integer, {:default=>nil})
   -> 0.0056s
-- change_column("enumerations", :position, :integer, {:default=>nil})
   -> 0.0210s
-- change_column("issue_statuses", :position, :integer, {:default=>nil})
   -> 0.0052s
-- change_column("roles", :position, :integer, {:default=>nil})
   -> 0.0052s
-- change_column("trackers", :position, :integer, {:default=>nil})
   -> 0.0045s
== 20160416072926 RemovePositionDefaults: migrated (0.0826s) ==================

== 20160529063352 AddRolesSettings: migrating =================================
-- add_column(:roles, :settings, :text, {})
   -> 0.0550s
== 20160529063352 AddRolesSettings: migrated (0.0552s) ========================

== 20161001122012 AddTrackerIdIndexToWorkflows: migrating =====================
-- add_index(:workflows, :tracker_id)
   -> 0.0183s
== 20161001122012 AddTrackerIdIndexToWorkflows: migrated (0.0185s) ============

== 20161002133421 AddIndexOnMemberRolesInheritedFrom: migrating ===============
-- add_index(:member_roles, :inherited_from)
   -> 0.0203s
== 20161002133421 AddIndexOnMemberRolesInheritedFrom: migrated (0.0205s) ======

== 20161010081301 ChangeIssuesDescriptionLimit: migrating =====================
-- change_column(:issues, :description, :text, {:limit=>16777216})
   -> 0.0829s
== 20161010081301 ChangeIssuesDescriptionLimit: migrated (0.0830s) ============

== 20161010081528 ChangeJournalDetailsValueLimit: migrating ===================
-- change_column(:journal_details, :value, :text, {:limit=>16777216})
   -> 0.0388s
-- change_column(:journal_details, :old_value, :text, {:limit=>16777216})
   -> 0.0443s
== 20161010081528 ChangeJournalDetailsValueLimit: migrated (0.0833s) ==========

== 20161010081600 ChangeJournalsNotesLimit: migrating =========================
-- change_column(:journals, :notes, :text, {:limit=>16777216})
   -> 0.0548s
== 20161010081600 ChangeJournalsNotesLimit: migrated (0.0553s) ================

== 20161126094932 AddIndexOnChangesetsIssuesIssueId: migrating ================
-- add_index(:changesets_issues, :issue_id)
   -> 0.0108s
== 20161126094932 AddIndexOnChangesetsIssuesIssueId: migrated (0.0113s) =======

== 20161220091118 AddIndexOnIssuesParentId: migrating =========================
-- add_index(:issues, :parent_id)
   -> 0.0188s
== 20161220091118 AddIndexOnIssuesParentId: migrated (0.0192s) ================

== 20170207050700 AddIndexOnDiskFilenameToAttachments: migrating ==============
-- add_index(:attachments, :disk_filename)
   -> 0.0156s
== 20170207050700 AddIndexOnDiskFilenameToAttachments: migrated (0.0161s) =====

== 20170302015225 ChangeAttachmentsDigestLimitTo64: migrating =================
-- change_column(:attachments, :digest, :string, {:limit=>64})
   -> 0.0063s
== 20170302015225 ChangeAttachmentsDigestLimitTo64: migrated (0.0066s) ========

== 20170309214320 AddProjectDefaultAssignedToId: migrating ====================
-- add_column(:projects, :default_assigned_to_id, :integer, {:default=>nil})
   -> 0.0541s
-- column_exists?(:projects, :default_assignee_id, :integer)
   -> 0.0015s
== 20170309214320 AddProjectDefaultAssignedToId: migrated (0.0566s) ===========

== 20170320051650 ChangeRepositoriesExtraInfoLimit: migrating =================
-- change_column(:repositories, :extra_info, :text, {:limit=>16777216})
   -> 0.0313s
== 20170320051650 ChangeRepositoriesExtraInfoLimit: migrated (0.0321s) ========

== 20170418090031 AddViewNewsToAllExistingRoles: migrating ====================
== 20170418090031 AddViewNewsToAllExistingRoles: migrated (0.8994s) ===========

== 20170419144536 AddViewMessagesToAllExistingRoles: migrating ================
== 20170419144536 AddViewMessagesToAllExistingRoles: migrated (0.0220s) =======

== 20170723112801 RenameCommentsToContent: migrating ==========================
-- rename_column(:comments, :comments, :content)
   -> 0.0081s
== 20170723112801 RenameCommentsToContent: migrated (0.0084s) =================

== 20180501132547 AddAuthorIdToTimeEntries: migrating =========================
-- add_column(:time_entries, :author_id, :integer, {:default=>nil, :after=>:project_id})
   -> 0.0553s
== 20180501132547 AddAuthorIdToTimeEntries: migrated (0.0675s) ================

== 20180913072918 AddVerifyPeerToAuthSources: migrating =======================
-- change_table(:auth_sources)
   -> 0.0196s
== 20180913072918 AddVerifyPeerToAuthSources: migrated (0.0199s) ==============

== 20180923082945 ChangeSqliteBooleansTo0And1: migrating ======================
== 20180923082945 ChangeSqliteBooleansTo0And1: migrated (0.0000s) =============

== 20180923091603 ChangeSqliteBooleansDefault: migrating ======================
== 20180923091603 ChangeSqliteBooleansDefault: migrated (0.0000s) =============

== 20190315094151 ChangeCustomValuesValueLimit: migrating =====================
-- change_column(:custom_values, :value, :text, {:limit=>16777216})
   -> 0.0267s
== 20190315094151 ChangeCustomValuesValueLimit: migrated (0.0271s) ============

== 20190315102101 AddTrackersDescription: migrating ===========================
-- add_column(:trackers, :description, :string, {:after=>:name})
   -> 0.0509s
== 20190315102101 AddTrackersDescription: migrated (0.0515s) ==================

== 20190510070108 AddUniqueIdToImportItems: migrating =========================
-- change_table(:import_items)
   -> 0.0289s
== 20190510070108 AddUniqueIdToImportItems: migrated (0.0295s) ================

== 20190620135549 ChangeRolesNameLimit: migrating =============================
-- change_column(:roles, :name, :string, {:limit=>255, :default=>""})
   -> 0.0249s
== 20190620135549 ChangeRolesNameLimit: migrated (0.0254s) ====================

So, something is working... but still getting the 500 error and End of script output before headers: dispatch.fcgi.