El sistema operatiu de la meva Raspberry és Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-1021-raspi aarch64). Aquests passos funcionen perfectament en totes les Raspberry que corrin el mateix sistema operatiu però haurien de servir també per a les que utilitzin Raspbian.
Si el teu sistema operatiu no és Ubuntu el pots instal·lar seguint les instruccions oficials adients.
Cal comentar abans de començar que per a poder instal·lar Mastodon ens calen, com a mínim, 4GB de RAM. El motiu és que amb menys RAM no podrem compilar els assets de Mastodon. Ho sé perquè vaig voler provar-ho en la 3B+ que només té 1GB de RAM…
Servei DDNS
Per a que el servidor Mastodon que volem instal·lar federi amb el #fedivers ens cal crear un compte en un servei DDNS. Un dels molts que hi ha que té certa fama i permet actualitzar la IP pública via la seva API és Dynu {d}DNS. Creem un compte en l’enllaç anterior i en la secció Dynamic DNS Service premem el botó + Add
. En el camp Host
de Option 1: Use Our Domain Name
hi escribim el subdomini que vulguem, en el meu cas he posat mamut
, i després triem el domini dels que hi ha disponibles a Top Level
, en el meu cas freeddns.org
. Acabem prement el botó Add
de sota.
Ja tenim un nom de domini per el nostre Mastodon! Per tot aquest tutorial serà mamut.freeddns.org
.
IP dinàmica, IP pública
El més segur és que a casa tinguem IP dinàmica. Per a que la resta de servidors del fedivers ens puguin trobar hem de actualitzar el servei DDNS amb la IP pública (la IP dinàmica que ens assigna el nostre proveidor d’Internet).
Dynu {d}DNS permet fer-ho mitjançant la seva #API, Genial, m’agrada molt #Python i programar el meu propi codi. Dit i fet, si seguim els pasos del meu repositori dynuapi tindrem la Raspberry enviant cada 30 minuts la seva IP pública al servei DDNS.
Abans de fer-ho, ens cal saber quina és la API-Key del nostre compte a Dynu {d}DNS. La tenim en la secció API Credentials del panel de control. Ens cal perquè dynuapi
ens la demanarà.
Port forwarding
Cal redirigir els ports 80 i 443 del router principal de casa cap a la IP local de la Raspberry. En la secció Port forwarding del tutorial de Akkoma explico com es fa.
Requisits de Mastodon
Aquest tutorial està basat en la documentació oficial.
Com a root instal·lem els següents paquets del sistema operatiu:
apt install -y curl wget gnupg apt-transport-https lsb-release ca-certificates
També ens cal Node.js:
curl -sL https://deb.nodesource.com/setup_16.x | bash -
apt-get install -y nodejs
I els paquets següents:
apt install -y \
imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git-core \ g++ libprotobuf-dev protobuf-compiler pkg-config nodejs gcc autoconf \
bison build-essential libssl-dev libyaml-dev libreadline6-dev \
zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev \
nginx redis-server redis-tools postgresql postgresql-contrib \
certbot python3-certbot-nginx libidn11-dev libicu-dev libjemalloc-dev
Yarn
Executem aquestes dues línies:
corepack enable
yarn set version classic
Ruby
Primer afegim l’usuari mastodon:
adduser --disabled-login mastodon
I canviem a ell:
su - mastodon
Mastodon necessita Ruby, executem aquestes sis línies una a una:
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
cd ~/.rbenv && src/configure && make -C src
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec bash
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
Ara ja podem instal.lar la versió de Ruby correcte:
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.0.4
I fem que sigui global:
rbenv global 3.0.4
Necessitem el primer ‘gem’ bundler
:
gem install bundler --no-document
Tornem al usuari root:
exit
Postgresql
Hem de crear l’usuari/rol mastodon
a Postgresql:
sudo -u postgres psql
I en el prompt creem l’usuari:
CREATE USER mastodon CREATEDB;
Ja podem sortir:
\q
I tornem al usuari mastodon:
su - mastodon
Clonar Mastodon
Instal·lem (clonem) Mastodon des d’el repositori oficial al directori local live
i hi entrem:
git clone https://github.com/mastodon/mastodon.git live && cd live
La darrera versió estable:
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
Les darreres dependències de Ruby i JavaScript, línia a línia:
bundle config deployment 'true'
bundle config without 'development test'
bundle install -j$(getconf _NPROCESSORS_ONLN)
yarn install --pure-lockfile
Configurarem Mastodon en la segona part.