|
|
(2 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
− | I'm trying to use [[Mastodon Social|Mastodon]] with [[Apache web server|Apache]] and [[MySQL]], for reasons I can go into, rather than the apparently-assumed defaults of [[nginx]] and [[Postgres]]. (It's never explicitly stated "no, Mastodon will not work with anything else", but this may turn out to be the case.) | + | I was originally trying to use [[Mastodon Social|Mastodon]] with [[Apache web server|Apache]] and [[MySQL]] (for reasons I can go into), rather than the apparently-assumed defaults of [[nginx]] and [[Postgres]]. It's never explicitly stated "no, Mastodon will not work with anything else", but this pretty much turned out to be the case -- so for my second attempt, I started over with a completely fresh server... and got stuck again anyway. |
| | | |
| I'm using [https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md these instructions] as a guide. | | I'm using [https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md these instructions] as a guide. |
− | ==Take 1==
| + | * [[/take 1]] was where I foolishly tried to use MySQL instead of postgres |
− | ===Environment===
| + | * [[/take 2]] was where I tried to do it by the book, approximately May-July of 2017 |
− | * Created a virtual server for Mastodon (icmstdn.com) using [[Virtualmin]]. | + | * [[/take 3]] is trying to do it by the book again on 2017-12-31, but after installing Redmine from a package |
− | * Used [[Git]] to clone Mastodon ([https://github.com/tootsuite/mastodon repository] [https://github.com/tootsuite/mastodon.git clone URL]) into a subfolder of public_html
| |
− | ** Mastodon's files are now in /home/icmstdn/public_html/mastodon
| |
− | * Created file .env.production (it didn't already exist) and then took a look at .env.production.sample to see what needs to be set.
| |
− | ===DB Engine===
| |
− | There doesn't seem to be any way to tell it which db engine to use -- but this looks like it ''could'' be a standard Ruby or [[Ruby on Rails]] config file -- so let's check my [[Redmine]] installation (which uses MySQL) to see if there are any clues...
| |
− | | |
− | Nope, no joy there.
| |
− | | |
− | Tentatively, Mastodon appears to be too tightly intertwined with Postgres to even attempt to use another dbe without a substantial rewrite (see [https://toot.cat/@browneyedgirl/332331 this] and the accompanying thread).
| |
− | | |
− | So I've set up a completely fresh virtual server with 2GB of RAM, and am following the instructions almost to the letter ("almost" because I prefer to do everything as root rather than having to type "sudo" over and over again... and also using "apt" instead of "apt-get" because the former is slightly more friendly).
| |
− | ==Take 2==
| |
− | ===part 1===
| |
− | * Is there a better way to install "yarn"? I got a message saying "npm WARN deprecated yarn@0.22.0: It is recommended to install Yarn using the native installation method for your environment. See https://yarnpkg.com/en/docs/install" -- but then it seemed to work anyway... From the link, it looks like I'd be advised to set up the repository. Will do that at some point.
| |
− | * The postgres (v9.5 (9.5.6-0ubuntu0.16.04)) installation generated about a dozen copies of this message: "Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/(?<!\\)\${ <-- HERE ([^}]+)}/ at /usr/sbin/pam_getenv line 78."
| |
− | * Tentatively, when it says "Under Ubuntu 16.04, you will need to explicitly enable ident authentication so that local users can connect to the database without a password", the "local users" are ''not'' users of the Mastodon app but the user(s) setting up and administering Mastodon who might need to do various operations in Postgres. The previous line seems to create a single Postgres user named "mastodon", heavily implying that yes, the app itself only needs the one db user. Possibly the whole business with identd could, theoretically, be skipped by setting up a password... | |
− | * Another message which doesn't seem to have prevented anything from working:
| |
− | pidentd.service is not a native service, redirecting to systemd-sysv-install
| |
− | Executing /lib/systemd/systemd-sysv-install enable pidentd</pre>
| |
− | * When I got to the step about installing [[rbenv]], I had to break off and install [[Webmin]] because that's the easiest way for me to manage users, and I needed to create a "mastodon" user:
| |
− | ** <bash>dpkg -i webmin_1.831_all.deb</bash>
| |
− | ** This generates dependency errors. To fix them:
| |
− | ** <bash>apt -f install</bash>
| |
− | ** ...and then I had to look up how to add a user from the command line so I could log in, and ended up just creating the mastodon user (and group) manually:
| |
− | ** <bash>adduser --system --group mastodon</bash>
| |
− | ** That command needs a little tweaking, because it defaults to disallowing login (shell is /bin/false). I had to change it to /bin/bash via Webmin.
| |
− | * Apparently the standard setup expects you to clone rbenv into ~/.rbenv rather than ~/rbenv. I don't know why it needs to be hidden; I used ~/rbenv which required minor tweaking of subsequent command(s). (Later note: apparently some stuff is hardwired to use .rbenv; this might explain problems I had with it after this.)
| |
− | * Turns out [[gcc]] is not installed by default; backed out to root, installed it, su mastodon, resume... | |
− | * ...and again for [[make]]...
| |
− | * Note that the "[[export]]" command doesn't take effect until the next login -- so you have to log out to root and then log back into mastodon again...
| |
− | | |
− | I keep getting this message when I try to run bin/rbenv init:
| |
− | # Load rbenv automatically by appending
| |
− | # the following to ~/.bashrc:
| |
− |
| |
− | eval "$(rbenv init -)"
| |
− | | |
− | I think I have to assume that this is advisory and not an actual error; I've done exactly as it asks, and still get the message.
| |
− | | |
− | ...but ultimately, "rbenv isntall --list" said I didn't have rbenv installed, and suggested I install it from apt. (Why didn't you ''say'' so??)
| |
− | | |
− | ...which ultimately led me to the question: why install Ruby via rbenv when I can just install it via apt? So I tried that... and found that it was already installed (presumably happened earlier in the instructions). So maybe rbenv just gives you better control over which version of Ruby is in use? Since I have as yet no reason to prefer anything but the most recent stable version, this control is not yet of any use.
| |
− | | |
− | ...but wait: the instructions say the correct version for Mastodon is 2.4.1. What I have is 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]. We'll see if that's a problem...
| |
− | | |
− | And then this happens, and I think I need to take a break:<pre>
| |
− | mastodon@cloud5:~/live$ gem install bundler
| |
− | Fetching: bundler-1.14.6.gem (100%)
| |
− | ERROR: While executing gem ... (Gem::FilePermissionError)
| |
− | You don't have write permissions for the /var/lib/gems/2.3.0 directory.
| |
− | mastodon@cloud5:~/live$ exit
| |
− | exit
| |
− | root@cloud5:~# gem install bundler
| |
− | Fetching: bundler-1.14.6.gem (100%)
| |
− | Successfully installed bundler-1.14.6
| |
− | Parsing documentation for bundler-1.14.6
| |
− | Installing ri documentation for bundler-1.14.6
| |
− | Done installing documentation for bundler after 6 seconds
| |
− | 1 gem installed
| |
− | root@cloud5:~# bundle install --deployment --without development test
| |
− | 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.
| |
− | Could not locate Gemfile
| |
− | root@cloud5:~# su mastodon
| |
− | mastodon@cloud5:/root$ bundle install --deployment --without development test
| |
− | Could not locate Gemfile
| |
− | mastodon@cloud5:/root$ cd ~
| |
− | mastodon@cloud5:~$ bundle install --deployment --without development test
| |
− | Could not locate Gemfile
| |
− | mastodon@cloud5:~$
| |
− | </pre>
| |
− | So I'm not supposed to run bundler as root, but when logged in as "mastodon", it can't find the gemfile. (Presumably it's somewhere outside of userland, where "mastodon" can't see it -- but who knows where. Running the "bundle install" command from /var/lib/gems/2.3.0/gems/bundler-1.14.6, /var/lib/gems/2.3.0/gems, /var/lib/gems/2.3.0, and /var/lib/gems produces the same result.)
| |
− | | |
− | Maybe it was expecting me to install the gem as "mastodon", but I couldn't. Maybe this is why you have to manually install Ruby using rbenv as user "mastodon"? Do I want to spend the time trying to find out?
| |
− | | |
− | Well, okay...<pre>
| |
− | mastodon@cloud5:~$ rbenv install 2.4.1
| |
− | Downloading ruby-2.4.1.tar.bz2...
| |
− | -> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.bz2
| |
− | Installing ruby-2.4.1...
| |
− | </pre>
| |
− | ...and there it sits, and all I can do is wait and see if it does anything before the connection times out.
| |
− | ===part 2===
| |
− | It finally did complete:<pre>
| |
− | Downloading ruby-2.4.1.tar.bz2...
| |
− | -> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.bz2
| |
− | Installing ruby-2.4.1...
| |
− | | |
− | BUILD FAILED (Ubuntu 16.04 using ruby-build 20170405)
| |
− | | |
− | Inspect or clean up the working tree at /tmp/ruby-build.20170423203550.27878
| |
− | Results logged to /tmp/ruby-build.20170423203550.27878.log
| |
− | | |
− | Last 10 log lines:
| |
− | installing rdoc: /home/mastodon/.rbenv/versions/2.4.1/share/ri/2.4.0/system
| |
− | installing capi-docs: /home/mastodon/.rbenv/versions/2.4.1/share/doc/ruby
| |
− | The Ruby readline extension was not compiled.
| |
− | ERROR: Ruby install aborted due to missing extensions
| |
− | Try running `apt-get install -y libreadline-dev` to fetch missing dependencies.
| |
− | | |
− | Configure options used:
| |
− | --prefix=/home/mastodon/.rbenv/versions/2.4.1
| |
− | LDFLAGS=-L/home/mastodon/.rbenv/versions/2.4.1/lib
| |
− | CPPFLAGS=-I/home/mastodon/.rbenv/versions/2.4.1/include
| |
− | </pre>
| |
− | I then installed libreadline-dev (as root) and tried to re-run "rbenv install 2.4.1" as "mastodon", but got "/usr/bin/rbenv: line 20: cd: /root: Permission denied". So then I ran rbenv as root, and that appears to have succeeded.
| |
− | | |
− | So, now we're re-trying "gem install bundler"... doesn't work as "mastodon", but does work as root:<pre>
| |
− | mastodon@cloud5:~/live$ gem install bundler
| |
− | ERROR: While executing gem ... (Gem::FilePermissionError)
| |
− | You don't have write permissions for the /var/lib/gems/2.3.0 directory.
| |
− | mastodon@cloud5:~/live$ exit
| |
− | exit
| |
− | root@cloud5:~# gem install bundler
| |
− | Successfully installed bundler-1.14.6
| |
− | Parsing documentation for bundler-1.14.6
| |
− | Done installing documentation for bundler after 5 seconds
| |
− | 1 gem installed
| |
− | </pre>
| |
− | And now "Fill in the important data, like host/port of the redis database, host/port/username/password of the postgres database..." -- Did I even install redis? Where do I find the port? Where do I find port/username/password for postgres? I'll have to come back to this.
| |
− | ===part 3===
| |
− | Finally noticed the earlier section for Ubuntu 16.04 where it tells you how to create the Postgres db. Apparently it was already created, and pidentd is configured to let local users use it without a password. Why this is a good idea, I don't know... but apparently there's no password.
| |
− | | |
− | Then we get to the bit in .env.production where it says to generate secrets using "rake secret":
| |
− | | |
− | '''root@cloud5:/home/mastodon/live#''' rake secret
| |
− | Could not find activesupport-5.0.2 in any of the sources
| |
− | Run `bundle install` to install missing gems.
| |
− | '''root@cloud5:/home/mastodon/live#''' 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.
| |
− | | |
− | ...does a bunch of stuff...
| |
− | | |
− | Using rack-protection 1.5.3
| |
− | Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
| |
− |
| |
− | current directory: /var/lib/gems/2.3.0/gems/nio4r-2.0.0/ext/nio4r
| |
− | /usr/bin/ruby2.3 -r ./siteconf20170522-3453-l5lu92.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.3.0/gems/nio4r-2.0.0 for inspection.
| |
− | Results logged to /var/lib/gems/2.3.0/extensions/x86_64-linux/2.3.0/nio4r-2.0.0/gem_make.out
| |
− |
| |
− | An error occurred while installing nio4r (2.0.0), and Bundler cannot continue.
| |
− | Make sure that `gem install nio4r -v '2.0.0'` succeeds before bundling.
| |
− | '''root@cloud5:/home/mastodon/live#''' su woozle
| |
− | '''woozle@cloud5:/root$''' cd /home/mastodon/live
| |
− | '''woozle@cloud5:/home/mastodon/live$''' rake secret
| |
− | Could not find activesupport-5.0.2 in any of the sources
| |
− | Run `bundle install` to install missing gems.
| |
− | '''woozle@cloud5:/home/mastodon/live$''' bundle install
| |
− | | |
− | ...asks for my password twice, does a bunch of stuff...
| |
− | Using rack-protection 1.5.3
| |
− | Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
| |
− |
| |
− | current directory: /tmp/bundler20170522-3646-1tm2wbtnio4r-2.0.0/gems/nio4r-2.0.0/ext/nio4r
| |
− | /usr/bin/ruby2.3 -r ./siteconf20170522-3646-1vnz3ib.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 /tmp/bundler20170522-3646-1tm2wbtnio4r-2.0.0/gems/nio4r-2.0.0 for inspection.
| |
− | Results logged to /tmp/bundler20170522-3646-1tm2wbtnio4r-2.0.0/extensions/x86_64-linux/2.3.0/nio4r-2.0.0/gem_make.out
| |
− |
| |
− | An error occurred while installing nio4r (2.0.0), and Bundler cannot continue.
| |
− | Make sure that `gem install nio4r -v '2.0.0'` succeeds before bundling.
| |
− | '''woozle@cloud5:/home/mastodon/live$''' gem install nio4r -v '2.0.0'
| |
− | ERROR: While executing gem ... (Gem::FilePermissionError)
| |
− | You don't have write permissions for the /var/lib/gems/2.3.0 directory.
| |
− | '''woozle@cloud5:/home/mastodon/live$''' sudo gem install nio4r -v '2.0.0'
| |
− | Building native extensions. This could take a while...
| |
− | ERROR: Error installing nio4r:
| |
− | ERROR: Failed to build gem native extension.
| |
− |
| |
− | current directory: /var/lib/gems/2.3.0/gems/nio4r-2.0.0/ext/nio4r
| |
− | /usr/bin/ruby2.3 -r ./siteconf20170522-3790-48r61c.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.3.0/gems/nio4r-2.0.0 for inspection.
| |
− | Results logged to /var/lib/gems/2.3.0/extensions/x86_64-linux/2.3.0/nio4r-2.0.0/gem_make.out
| |
− | '''woozle@cloud5:/home/mastodon/live$'''
| |
− | | |
− | At this point, I have no effing idea.
| |
− | ===part 4===
| |
− | Running "apt install ruby-dev" broke the logjam... but then I ran into a new error:
| |
− | Make sure that `gem install unf_ext -v '0.0.7.3'` succeeds before bundling.
| |
− | | |
− | Okay...
| |
− | woozle@cloud5:/home/mastodon/live$ gem install unf_ext -v '0.0.7.3'
| |
− | Fetching: unf_ext-0.0.7.3.gem (100%)
| |
− | ERROR: While executing gem ... (Gem::FilePermissionError)
| |
− | You don't have write permissions for the /var/lib/gems/2.3.0 directory.
| |
− | woozle@cloud5:/home/mastodon/live$ sudo gem install unf_ext -v '0.0.7.3'
| |
− | Building native extensions. This could take a while...
| |
− | ERROR: Error installing unf_ext:
| |
− | ERROR: Failed to build gem native extension.
| |
− |
| |
− | current directory: /var/lib/gems/2.3.0/gems/unf_ext-0.0.7.3/ext/unf_ext
| |
− | /usr/bin/ruby2.3 -r ./siteconf20170522-25866-9iissq.rb extconf.rb
| |
− | checking for main() in -lstdc++... yes
| |
− | creating Makefile
| |
− |
| |
− | To see why this extension failed to compile, please check the mkmf.log which can be found here:
| |
− |
| |
− | /var/lib/gems/2.3.0/extensions/x86_64-linux/2.3.0/unf_ext-0.0.7.3/mkmf.log
| |
− |
| |
− | current directory: /var/lib/gems/2.3.0/gems/unf_ext-0.0.7.3/ext/unf_ext
| |
− | make "DESTDIR=" clean
| |
− |
| |
− | current directory: /var/lib/gems/2.3.0/gems/unf_ext-0.0.7.3/ext/unf_ext
| |
− | make "DESTDIR="
| |
− | compiling unf.cc
| |
− | make: g++: Command not found
| |
− | Makefile:207: recipe for target 'unf.o' failed
| |
− | make: *** [unf.o] Error 127
| |
− |
| |
− | make failed, exit code 2
| |
− |
| |
− | Gem files will remain installed in /var/lib/gems/2.3.0/gems/unf_ext-0.0.7.3 for inspection.
| |
− | Results logged to /var/lib/gems/2.3.0/extensions/x86_64-linux/2.3.0/unf_ext-0.0.7.3/gem_make.out
| |
− | | |
− | Contents of {{l/sub|mkmf.log}} are unenlightening. "make: g++: Command not found" suggests that maybe gcc isn't installed, but it is, so I've no idea which command is not found.
| |
− | ==part 5==
| |
− | Apparently gcc is not g++. There is a separate g++ command, which is in the "g++" package. "apt install g++" fixes this.
| |
− | | |
− | The next sticking point is this:
| |
− | <blockquote><poem>
| |
− | Couldn't create database for {"adapter"=>"postgresql", "pool"=>5, "timeout"=>5000, "encoding"=>"unicode", "database"=>"icmstdn", "username"=>"mastodon", "password"=>''(redacted)'', "host"=>"localhost", "port"=>5432, "prepared_statements"=>true}
| |
− | rails aborted!
| |
− | PG::ConnectionBad: FATAL: Ident authentication failed for user "mastodon"
| |
− | </poem></blockquote>
| |
− | | |
− | I tried it first without a password, as in the instructions, but that had the same problem.
| |
− | | |
− | For reference: [http://stackoverflow.com/questions/2942485/psql-fatal-ident-authentication-failed-for-user-postgres Stack Overflow] [https://help.ubuntu.com/stable/serverguide/postgresql.html Ubuntu]
| |