spla

de vegades escric

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.

En la primera entrada deia com van anar les proves en un servidor dedicat i disc dur convencional, amb una conclusió clara: no es pot renderitzar tessel·les amb disc dur mecànic. Doncs el primer intent d'importació del mapa del planeta sencer en un servidor VPS i disc dur SSD no ha funcionat. M'he trobat el procés parat amb un “killed”. Mirant el log syslog del sistema trobo el motiu, un “Out of memory”:

kernel: [392548.151678] Out of memory: Killed process 968 (osm2pgsql) total-vm:35032344kB, anon-rss:33595356kB, file-rss:0kB, shmem-rss:0kB, UID:109 pgtables:66244kB oomscoreadj:0

Cercant informació, en aquesta pàgina diuen clarament que la millor manera d'evitar quedar-te sense memòria és importar el mapa fent servir el paràmetre “—flat-nodes”.
Provem-ho. He esborrat la base de dades gis i la he creat de nou per a iniciar l'importació fent servir “—flat-nodes”. Veurem si tindré per fí èxit però per ara va molt més ràpid, amb un ritme deu vegades millor:

Reading in file: /home/osm/planet-latest.osm.pbf Using PBF parser. Processing: Node(4667810k 915.4k/s) Way(0k 0.00k/s) Relation(0 0.00/s)

Veurem...

Altre cop el mateix error, un “killed” degut a “Out of memory”. Ho torno a provar, ara sense el paràmetre “-C 32000”, o sigui, no li defineixo la memòria cau per a que agafi la que necessiti.

Veurem...

Èxit!

Osm2pgsql took 188133s overall Mid: removing persistent node cache at /home/osm/nodes.cache node cache: stored: 100039713(1.31%), storage efficiency: 95.40% (dense blocks: 11631, sparse nodes: 4790528), hit rate: 1.32%

Sense definir la memòria cau ha funcionat! 52 hores, 15 minuts i 32 segons és el temps total necessari, en un disc dur SSD i amb '—flat-nodes'. Següent pas.

Un cop tot muntat segueixo patint errors de renderd quan faig zoom. Torno a començar de zero però seguint les instruccions d'un altre pàgina. Veurem...

L'importació planetària a la base de dades #gis ha acabat. La vaig iniciar amb aquest paràmetres:

osm2pgsql -d gis —create —slim -G —hstore —tag-transform-script ~/src/openstreetmap-carto/openstreetmap-carto.lua —number-processes 10 -S ~/src/openstreetmap-carto/openstreetmap-carto.style ~/data/planet-latest.osm.pbf.

Ha acabat aquesta matinada amb aquests resultats, ocupant 1,7 dels 2TB de disc dur SSD disponibles:

node cache: stored: 100039713(1.31%), storage efficiency: 95.40% (dense blocks: 11631, sparse nodes: 4790528), hit rate: 1.32%. osm2pgsql took 886292s (246h 11m 32s) overall.

#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

Després de temps pensant que havia de fer-ho, el passat 19 de març del 2019 vaig començar el procés. La màquina escollida corre Ubuntu 20.04 i les instruccions a seguir les d'aquesta pàgina. La idea és tenir una replica del servidor de OpenStreetMap, pàgina que inclou un servidor de tessel·les i un servidor Nominatim que permet fer cerques de ciutats, pobles etc per el seu nom. La part més feixuga del procés és el de l'importació de les dades del planeta sencer a la base de dades Gis. En un disc dur convencional (és l'autèntic coll d'ampolla d'aquest projecte, més avall dic perquè) ha trigat 3.611.989 segons, o sigui, 41 dies, 19 minuts i 19 segons, i la base de dades Gis ocupa (alerta) més de 1,5 Terabytes dels 2TB que té. Seguint els passos següents arribo al punt de màxima excitació, el de veure el mapa global i fer-hi zoom. Primer problema i insalvable, el dimoni renderd dona errors... D'acord, lliçó apresa. No es poden renderitzar tessel·les en temps real si la base de dades #gis del planeta sencer la tens en un disc dur convencional, és massa lent i només fa que donar errors:

renderd process Failed to send render cmd on fd x renderd send error: Inappropriate ioctl for device

Aquí he entés perquè recomanen un SSD en la pàgina d'instruccions. Cal, sí o sí, un disc dur SSD de 2TB com a mínim. El meu projecte de tenir un servidor de tessel·les de #OpenStreetMap queda en suspens degut aquest problema tècnic. Però sóc tossut, ho torno a provar des de zero, esborro la base de dades (més de 41 dies de feina esborrats en pocs segons) i començo l'importació però “només” de Europa, pensant que amb menys tessel·les sí que podré fer zoom sense errors de renderd.

osm2pgsql took 831506s (230h 58m 26s) overall

9 dies, 14 hores, 58m i 26 segons ha trigat en importar les dades del mapa d'Europa a la base de dades gis. I em dona els mateixos errors de renderd. Ja toca deixar-ho estar. No havia après la lliçó? Torno a començar de zero, aquest cop amb un disc dur SSD de 2TB! A veure quan trigarà però en un dia ja ha acabat d'importar els “nodes” i ja està important els “Way”. Seguiré en una propera entrada...

He instal·lat Writefreely seguint les instruccions d'aquest enllaç. La impressió inicial és millor que la de Plume (per exemple, té mode fosc) i he confirmat que federa a la primera. Qualsevol programari que no federi avui en dia no és res. He configurat el registre inicialment tancat però si veig que la seva funcionalitat és bona l'obriré. En el fedivers hi ha ja 426 servidors i més de 59.000 usuaris en nodes Writefreely, cosa que demostra que té bona acceptació. No he vist que es pugui configurar en català, no sé si és possible, he d'investigar.