spla

fedivers

Què és Akkoma? és un “fork” de #Pleroma però més “cool”, tal com diuen els seus desenvolupadors:

“a smallish microblogging platform, aka the cooler pleroma”

Akkoma és, per tant, el programari que s'executa en el servidor i que permet ser una part de la xarxa social plena de servidors que s'entenen entre sí gràcies al protocol #ActivityPub i que formen l'Univers d'instàncies Federades, el famós #fedivers. Akkoma és un dels programaris dels molts que emplenen aquest fedivers.

Quines funcionalitats fan que el programari #Akkoma sigui tant interessant i pràctic?

Publicar només per a usuaris locals

Sense mencionar a ningú, només els usuaris locals ho veuen. Qualsevol tema que es vulgui comentar o compartir només amb els usuaris locals o que l'administrador o moderadors del servidor vulguin anunciar-lis pot utilitzar aquesta funcionalitat. És tant fàcil com prémer l'icona “Local” abans de publicar.

línia de temps Local

Línia de temps Bombolla

En aquesta línia de temps es veuen tots els apunts dels servidors amics configurats per l'administrador del servidor. De molta utilitat per als usuaris nous, ja que hi poden trobar ràpidament a qui seguir sense haver d'abocar-se a la línia de temps federada que acostuma a ser una riada de publicacions escrites amb llengües diferents i que passa molt ràpida.

Línia de temps Bombolla FE Línia de temps Bombolla BE

Suport markdown

S'explica sol. Podem configurar el nostre compte per a que publiqui els apunts amb suport Markdown per defecte.

Reaccions emoji

Estem acostumats a prémer l'icona de l'estrella quan volem afavorir una publicació. També podem reaccionar a la mateixa amb emojis, tants com vulguem, i altres usuaris poden reaccionar amb emojis diferents al nostre o amb el mateix simplement clicant-hi al damunt (hi ha un comptador al costat de cada emoji).

reaccions emoji

Cites

No, no van del que potser estàs pensant. Aquesta funcionalitat permet respondre tot citant l'apunt original, fins i tot els nostres. Mostra gràficament l'apunt citat i al damunt el que li hem respòs.

citar un apunt

Converses amb vista d'arbre

Genial! amb altres programaris és difícil per no dir impossible entendre o veure qui està responen a qui en una conversa. Això s'ha acabat! a Akkoma tenim la vista d'arbre.

vista d'arbre interfície web vista d'arbre configuració

Mostrar el favicon del servidor al costat del usuari

Va bé per a saber quin programari és el servidor del usuari en qüestió, sense haver d'obrir el seu perfil públic.

favicon

Saber si un usuari és un bot

De vegades ens passa que responem a una publicació esperant alguna interacció i al veure que no n'hi ha mirem el perfil del usuari, adonant-nos que és un bot. A Akkoma es veu directament si un usuari és un bot perquè el programari afegeix un petit robot damunt del seu avatar, no cal obrir cap perfil.

Robot en avatar

El repositori de Akkoma és en un servidor #Gitea

Tenir el repositori oficial en un servidor Gitea és un punt més a favor.

I fins aquí les més destacades però en té moltes més que fan que Akkoma sigui un ferm candidat a destronar a Mastodon.

Instal·lar #Mastodon en una #Raspberry Pi 4B amb 4 o 8 GB de RAM, primera part

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.

Instal·lar #Akkoma en una #Raspberry Pi 3B+ (o superior), primera part

El sistema operatiu de la meva Raspberry és Ubuntu 20.04 LTS (GNU/Linux 5.4.0-1065-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.

Els passos resumits son aquests:

  • instal·lar les dependències necessàries
  • configurar un hostname en un servei DDNS
  • instal·lar el programa DUC en la Raspberry per a informar al servei DDNS de la seva IP pública
  • Fer un “Port Forwarding” en el router de casa dels ports 80 i 443, per a que apuntin a la IP local de la Raspberry
  • Instal·lar nginx
  • Obtenir certificat SSL per el hostname obtingut del servei DDNS
  • Instal·lar Akkoma

Instal·lar les dependències

Actualitzem el sistema operatiu:

sudo apt update
sudo apt full-upgrade

Instal·lem els paquets mínims necessaris:

sudo apt install git build-essential postgresql postgresql-contrib cmake libmagic-dev automake libncurses5-dev

I els paquets opcionals:

sudo apt install imagemagick ffmpeg libimage-exiftool-perl

Configurar un hostname en el servei DDNS

Abans de tot ens cal un servei #DDNS (Dynamic DNS) on crear el hostname del nostre servidor Akkoma. Ho necessitem perquè volem que la nostra instància Akkoma sigui accessible des d'internet. Configurarem un hostname en el nostre servei DDNS, per exemple a noip però n'hi ha d'altres, i aquest servei DDNS serà qui resoldrà aquest hostname a la IP pública de la Raspberry.
noip ens permet obtenir gratuïtament un sol hostname (suficient!), on només podem escriure el nom de subdomini per a un dels quatre dominis disponibles. En el meu cas vaig escollir el domini “ddns.net” amb el subdomini, escrit per mi, “akkoma”: akkoma.ddns.net

Instal·lar el Dynamic Update Client (DUC) en la Raspi.

Com que el més segur és que a casa tinguem IP dinàmica, la Raspberry haurà de informar al servei DDNS de quina IP pública té. Per a fer tal cosa haurem de seguir les instruccions necessàries per a instal·lar el programa DUC.
Descarreguem el client DUC a la nostre PI, en el directori /usr/local/src/

Com a root:

cd /usr/local/src/

descarreguem DUC:

wget http://www.noip.com/client/linux/noip-duc-linux.tar.gz

el descomprimim:

tar xf noip-duc-linux.tar.gz

entrem en el directori creat al descomprimir:

cd noip-2.1.9-1/

i executem:

make install

Ens demanarà iniciar sessió en el nostre compte de noip, doncs li donem usuari i contrasenya. Seguint com a usuari root, crearem la configuració per defecte de DUC:

/usr/local/bin/noip2 -C

Ens demanarà altre cop l'usuari i contrasenya del compte a noip. Si ara executem

/usr/local/bin/noip2

ja hauria d'enviar la IP pública al servei DDNS de noip. Evidentment no és bona idea haver d'executar-ho manualment per tant ens anirà d'allò més bé un servei systemd que ho executi automàticament al engegar la Raspberry o desprès d'un reinici pel motiu que sigui.
Creem el servei noip2.service:

vim /etc/systemd/system/noip2.service

amb el següent contingut:

[Unit] Description=noip2 service

[Service] Type=forking ExecStart=/usr/local/bin/noip2 Restart=always

[Install] WantedBy=default.target

Desem els canvis. Com que volem que s'activi al engegar o reiniciar-se la Raspberry, activem el servei:

systemctl enable noip2.service

i l'iniciem ara mateix:

systemctl start noip2.service.

Podem saber si tot va bé consultant l'estat:

systemctl status noip2.service

Port Forwarding

Per a que Akkoma funcioni perfectament ens cal que totes les peticions d'altres servidors del #fedivers que vagin cap el nostre node es dirigeixin a la Raspberry. Aquestes peticions es fan a dos ports TCP, el 80 (http) i el 443 (https). La sol·lució a això es diu Port Forwarding. Hauriem de poder accedir al router principal de casa (el que ens dona o lloga el nostre proveïdor d'internet). Normalment la IP del router és 192.168.1.1, des d'el navegador visitem aquesta IP. Si ens demana usuari i contrasenya el més probable és que les tinguem escrites en una etiqueta enganxada en la part inferior del router. Un cop dins del router cerquem l'opció “Port Forwarding” o “Redireccionar puertos”. I afegim dues redireccions, una per el port 80 i la segona per el port 443. Tots els routers son pràcticament iguals, per a fer un “Port Forwarding” acostumen a demanar-nos:

Service name < hi posem http Port Range < 80 Local IP < la IP local de la Raspberry (ha de ser IP fixa, no serveix que la obtingui via DHCP des d'el router), per exemple 192.168.1.3 Local Port < 80 Protocol < TCP

Apliquem/desem la primera redirecció i afegim la segona:

Service name < hi posem https Port Range < 443 Local IP < la IP local de la Raspberry (ha de ser IP fixa, no serveix que la obtingui via DHCP des d'el router), per exemple 192.168.1.3 Local Port < 443 Protocol < TCP

Apliquem/desem el canvis i ja podem tancar sessió del router. Ja tenim preparats tant la Raspberry com el nostre router. En la segona part veurem com instal·lar nginx, obtenir un certificat SSL per el nostre flamant nom de domini que apuntarà a la nostra instància #Akkoma i, a la fi, instal·lar Akkoma.

El sistema operatiu de la meva Raspberry és Ubuntu 20.04 LTS (GNU/Linux 5.4.0-1065-raspi aarch64). Aquests passos funcionen perfectament en totes les Raspberrys que corrin el mateix sistema operatiu però haurien de servir també per a les que utilitzin Raspbian.

Els passos resumits son aquests:

  • configurar un hostname en un servei DDNS
  • instal·lar el programa DUC en la Raspberry per a informar al servei DDNS de la seva IP pública
  • Fer un “Port Forwarding” en el router de casa dels ports 80 i 443, per a que apuntin a la IP local de la Raspberry
  • Instal·lar nginx
  • Obtenir certificat SSL per el hostname obtingut del servei DDNS
  • Instal·lar Pleroma

Configurar un hostname en el servei DDNS.

Abans de tot ens cal un servei #DDNS (Dynamic DNS) per a crear el hostname del nostre servidor Pleroma. Ho necessitem perquè volem que la nostra instància Pleroma sigui accessible des d'internet. Configurarem un hostname en el nostre servei DDNS, per exemple a noip però n'hi ha d'altres, i aquest servei DDNS serà qui resoldrà aquest hostname a la IP pública de la Raspberry.
noip ens permet obtenir gratuïtament un sol hostname (suficient!), on només podem escriure el nom de subdomini per a un dels quatre dominis disponibles. En el meu cas vaig escollir el domini “ddns.net” amb el subdomini, escrit per mi, “aarch”: aarch.ddns.net

Instal·lar el Dynamic Update Client (DUC) en la Raspi.

Com que el més segur és que a casa tinguem IP dinàmica, la Raspberry haurà de informar al servei DDNS de quina IP pública té. Per a fer tal cosa haurem de seguir les instruccions necessàries per a instal·lar el programa DUC.
Descarreguem el client DUC a la nostre PI, en el directori /usr/local/src/

Com a root:

cd /usr/local/src/

descarreguem DUC:

wget http://www.noip.com/client/linux/noip-duc-linux.tar.gz

el descomprimim:

tar xf noip-duc-linux.tar.gz

entrem en el directori creat al descomprimir:

cd noip-2.1.9-1/

i executem:

make install

Ens demanarà iniciar sessió en el nostre compte de noip, doncs li donem usuari i contrasenya. Seguint com a usuari root, crearem la configuració per defecte de DUC:

/usr/local/bin/noip2 -C

Ens demanarà altre cop l'usuari i contrasenya del compte a noip. Si ara executem

/usr/local/bin/noip2

ja hauria d'enviar la IP pública al servei DDNS de noip. Evidentment no és bona idea haver d'executar-ho manualment per tant ens anirà d'allò més bé un servei systemd que ho executi automàticament al engegar la Raspberry o desprès d'un reinici pel motiu que sigui.
Creem el servei noip2.service:

vim /etc/systemd/system/noip2.service

amb el següent contingut:

[Unit] Description=noip2 service

[Service] Type=forking ExecStart=/usr/local/bin/noip2 Restart=always

[Install] WantedBy=default.target

Desem els canvis. Com que volem que s'activi al engegar o reiniciar-se la Raspberry, activem el servei:

systemctl enable noip2.service

i l'iniciem ara mateix:

systemctl start noip2.service.

Podem saber si tot va bé consultant l'estat:

systemctl status noip2.service

Port Forwarding

Per a que Pleroma funcioni perfectament ens cal que totes les peticions d'altres servidors del #fedivers que vagin cap el nostre node es dirigeixin a la Raspberry. Aquestes peticions es fan a dos ports TCP, el 80 (http) i el 443 (https). La sol·lució a això es diu Port Forwarding. Hauriem de poder accedir al router principal de casa (el que ens dona o lloga el nostre proveïdor d'internet). Normalment la IP del router és 192.168.1.1, des d'el navegador visitem aquesta IP. Si ens demana usuari i contrasenya el més probable és que les tinguem escrites en una etiqueta enganxada en la part inferior del router. Un cop dins del router cerquem l'opció “Port Forwarding” o “Redireccionar puertos”. I afegim dues redireccions, una per el port 80 i la segona per el port 443. Tots els routers son pràcticament iguals, per a fer un “Port Forwarding” acostumen a demanar-nos:

Service name < hi posem http Port Range < 80 Local IP < la IP local de la Raspberry (ha de ser IP fixa, no serveix que la obtingui via DHCP des d'el router), per exemple 192.168.1.3 Local Port < 80 Protocol < TCP

Apliquem/desem la primera redirecció i afegim la segona:

Service name < hi posem https Port Range < 443 Local IP < la IP local de la Raspberry (ha de ser IP fixa, no serveix que la obtingui via DHCP des d'el router), per exemple 192.168.1.3 Local Port < 443 Protocol < TCP

Apliquem/desem el canvis i ja podem tancar sessió del router. Ja tenim preparats tant la Raspberry com el nostre router. En la segona part veurem com instal·lar nginx, obtenir un certificat SSL per el nostre flamant nom de domini que apuntarà a la nostra instància #Pleroma i, a la fi, instal·lar Pleroma.

#WriteFreely és un programari que permet crear i publicar blogs amb #Markdown. No es queda aquí, si es configura per a permetre la federació, totes les entrades que hi publiquem seran enviades a tots els comptes del #fedivers que segueixin el nostre compte WriteFreely. I encara més, es poden esmentar usuaris del fedivers de la mateixa manera que ho fem a Mastodon o Pleroma.
Per a instal·lar aquest programari que, com veiem, promet molt, descarreguem la darrera versió, en el meu cas la v0.13.1:

export WFVER=0.13.1 wget https://github.com/writeas/writefreely/releases/download/v$WFVER/writefreely_${WFVER}_linux_amd64.tar.gz

Ara descomprimim el fitxer tar.gz en el directori writefreely del usuari local que vulguem, habitualment l'usuari és 'writefreely', si és el nostre cas, substituïm $USER per writefreely:

adduser $USER

tar -C /home/$USER/ -xzf writefreely${WFVER}linux_amd64.tar.gz

Abans de canviar al usuari writefreely i configurar el programari cal crear la base de dades necessària:

mysql -u root

CREATE DATABASE writefreely CHARACTER SET latin1 COLLATE latin1swedishci;

Si no hem creat ja l'usuari de mysql ara és el moment:

MariaDB [(none)]> create user 'writefreely'@'localhost' identified by 'contrasenya';
MariaDB [(none)]> grant all privileges on writefreely.* to 'writefreely'@'localhost';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit;

Canviem al usuari 'writefreely' amb 'su – writefreely' i entrem al directori on hem descomprimit abans el fitxer.:

cd writefreely

Configurem la nostra flamant instància WriteFreely, donant-li les dades que ens demana:

~/writefreely$ ./writefreely config start ~/writefreely$ ./writefreely keys generate

Si executem writefreely ja hauria de funcionar:

~/writefreely$ ./writefreely

El ideal és servir el nostre blog darrera d'un proxy com #nginx. En la pàgina oficial tenim un exemple de com configurar-lo. També ens cal afegir el servei systemd per a que l'engegui. En la mateix pàgina amb l'exemple de la configuració de nginx tenim un exemple del writefreely.service per a systemd.

A escriure!

En teoria es poden esmentar usuaris del #fedivers des de #WriteFreely. @spla@mastodont.cat