In trying to upgrade a Raspberry Pi 4 from Debian 10 Buster to Debian 11 Bullseye, I made some mistakes, and basically shot my installation to pieces.
It ran, but I had absolutely no faith in it surviving a reboot.
Now that I have a working image for the Debian 11 Bullseye- based 64 bit "lite" Raspberry Pi OS, I was keen to move mastodon across to the new machine.
I've migrated mastodon before, and it was pretty painless: a new installation, a database dump and restore, and moving some system files.
The official mastodon migration instructions are reasonably good, if a bit confusing in their layout - you need to jump from basic to detailed, and then remember to go back to the basic instructions again. (I've made a pull request to the docs about this; let's see.) But they do work.
Well, they did.
This time, they did not.
Fixing the segmentation fault
When I ran:
RAILS_ENV=production bundle exec rails assets:precompile
it resulted in several thousand lines of error message, with the crucial bit being:
/home/mastodon/live/vendor/bundle/ruby/2.7.0/gems/ffi-1.15.0/lib/ffi/library.rb:112: [BUG] Segmentation fault at 0x000000000005c6b0
Fortunately, I found that someone else had had a similar problem on Debian 11 and, even better, they had a solution.
systemd service definitions was fine, but the command it suggests you run:
LD_PRELOAD=libjemalloc.so RAILS_ENV=production bundle exec rake mastodon:setup
is for a new installation. Not a migration.
For a migration, you would normally run:
RAILS_ENV=production bundle exec rails assets:precompile RAILS_ENV=production ./bin/tootctl feeds build
so I modified them using the same approach:
LD_PRELOAD=libjemalloc.so RAILS_ENV=production bundle exec rails assets:precompile LD_PRELOAD=libjemalloc.so RAILS_ENV=production ./bin/tootctl feeds build
and that did the trick. The revised commands ran successfully, without segfaulting.