Un año de admin de gnusocial.net

Hace un año aproximadamente cuando se me encomendó está responsabilidad de mantener la máquina que sostiene nuestro nodo de gnusocial gnusocial.net. Y creo que un año da suficiente tiempo para conocer las funciones que más o menos tienes que realizar/automatizar/controlar, o por lo menos en mi caso, llevo a cabo o he llevado, para intentar que la máquina estuviese online el máximo tiempo posible.

Cronología:

  • 2014 la gente de @elbinario, monta el nodo gnusocial.net. Nos dan charlas sobre las redes libres descentralizadas y nos explican todo esto de las redes federadas, OStatus, etc…

  • 2015 Aunque muchos ya habíamos escuchado hablar en numerosas charlas y leído en post, lo que eran las redes libres e incluso teníamos nuestros perfiles creados en nuestro nodo https://gnusocial.net, la cosa no salto a la fama hasta lo de la Barbijaputa https://elbinario.net/2015/01/19/que-es-quitter-por-dios/, entonces los españoles como buenos borregos (no lo digo yo lo explica @ChemaAlonso aquí https://elbinario.net/2017/05/08/los-espanoles-y-las-llamadas-redes-sociales/) conocieron gnusocial. Eran principios del 2015!! Mira si ha pasado, la vida!!! Aunque la fiebre duró poco, saturó servidores y colapsó de imprecisos artículos sobre que era gnusocial, llamó la atención de algunos, que vieron una alternativa libre a esa cosa del pajarito que dice ser una red social, sin ser social, en mi opinión queda muy lejos de ser social https://elbinario.net/2016/04/05/twitter-la-red-antisocial/

  • 2016 Reset: Simplemente se nos “rompió” la máquina, los backups no ayudaban a solucionar los problemas y no había manera de actualizar el sistema operativo sin reinstalar, no somos de buscar culpables, ni acusadores, recuerda, a veces, “Absolutely no warranty” también significa que cuando la cagas, disculparse y tratar de arreglar las cosas vale más, que esperar a juicio o a que las cosas se solucionen por si mismas. Finalmente, reinstalamos el sistema y el nodo, por el camino dejamos un tutorial. https://elbinario.net/2016/05/27/instalar-un-nodo-publico-de-gnusocial-en-debian-jessie/. Al poco tiempo y aunque hemos tenido problema de federación que en algunos casos ya se han resuelto, la gente se volvió a registrar y comprendieron que sus vidas continuaban en la vida real a pesar de que sus quitts se habían borrado. Para algunos incluso querían disponer de esa opción, pero de momento aseguraros que no desarrollamos Gnusocial.

  • 2017 Mastodonte aplasta Twitter y los patrones que se repiten. El público y la prensa vuelven a presentar otra vez un cliente para el protocolo de OStatus como una “alternativa a twitter”, de nuevo @JuanSantiago te lo explica https://elbinario.net/2017/04/15/disparates-tecnologicos-para-aumentar-escaparte-publicitario/. De nuevo se produce una “migración masiva de usuarios de twitter y blablablabla”, en casi ninguna noticia se habla de gnusocial o por lo menos OStatus.

  • ¿2018? La NSA compra Twitter y Whastapp para tener todo más “controlao”, la gente se ve la película de Snowden y los americanos se dan cuenta de que los espían a ellos más que al resto del mundo creando una polémica en EEUU entre la prensa y el gobierno. Trump se cansa de los medios “Porque están en su contra”. Desde su cuenta de quitter.se publica: “God bless Gnusocial”.

Volviendo a la máquina, algunas cosas que hemos automatizado en la administración de la misma son los backups diarios y la renovación del certificado https:

# sudo crontab -e
# hacer el backup de la base de datos a diario
0 0 * * * /home/foo/scripts/backup.sh
# renovar certificado letsencrypt  cada 6 meses
 10 21 12 */6 * /home/puppet/scripts/cerbot.sh
# upgradar social automaticamente
0 30 * * * /home/foo/scripts/social_update.sh

#backup.sh
mysqldump -u debian-sys-maint -pnuestraclave gnusocial |   gzip > /home/foo/gnusocial_backups/gnusocial.net_db_backup_$(date +%Y-%m-%d-%H.%M.%S).gz
#cerbot.sh
/usr/local/certbot-auto renew --quiet --standalone --pre-hook "service nginx stop" --post-hook "service nginx start"
#social update
cd /var/www/gnusocial
sudo -u www-data git pull
sudo php scripts/upgrade.php
#iptables-rules.sh, un firewall es la mínima protección exigible junto con fail2ban
#!/bin/sh
PATH='/sbin'
# Flush the tables to apply changes
iptables -F
iptables -P FORWARD DROP
iptables -P INPUT   DROP
iptables -P OUTPUT  ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT
#servicios
#mail
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
#http/s
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#icecast, tv y transmission
iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp --dport 51413 -j ACCEPT

A día de hoy rondamos los mil usuario en el nodo y subiendo. Si quieres ver una lista de nodos Gnusocial federados puedes visitar esta web https://www.fediverse.org/ y si la quieres ver de nodos Mastodon, tienes esta otra web https://instances.mastodon.xyz/.

¿Problema de federación, no consigues seguir a alguien desde tu nodo? Bueno como ya conté arriba, somos pioneros en muchas cosas, también en liarla, tras reinstalar el nodo evidentemente dejamos “húerfanos” enlaces de nodos federados que apuntaban a usuarios del nuestro. Así pues si @fanta@linuxthenight.com seguía a http://gnusocial.net/user/1 en su base de datos seguiría apuntando al user 1, que por aquel momento era @elbinairo@gnusocial, en la base de datos de su nodo y el otros tantos esto seguía o sigue siendo así, mientras no se corrija.

Para arreglar esto, podemos tirar de unos scripts que nos proporcionan desde el plugin de OStatus. Debería estar en /var/www/gnusocial/plugins/OStatus/scripts.

Y lanzamos este script, ojo porque llevan rato supongo que checkea los links remotos, en el mismo directorio encontrarás algunos otros scripts que pueden ser útiles para resolver problemas de federación y actualizar la información de los usuarios remotos en nuestra base de datos local:

#Rerun profile discovery for the given OStatus remote profile, and save the
#updated profile data (nickname, fullname, avatar, bio, etc).
#Doesn't touch feed state.
#Can be used to clean up after breakages.
sudo php update-profile-data.php --all

Creo que los admines deben lanzar este script de vez en cuando por aquello de que desaparezcan nodos, otros se refunden y todas aquellas ocasiones en que se pueda causar inconsistencias en la federación de nodos. Así que si no puedes seguir a alguien seguramente sea por esto mismo y aparentemente no se pude arreglar si no es en el propio nodo quien reconstruye sus enlaces.

También he dedicado tiempo a mostrar los clientes posibles:

Incluso algunos bots de fabricación propia, el primero me ha servido como un indicador de la salud del servidor (si el bot funciona el servidor está encendido por así decirlo):

Un plugin de wordpress que se pelea con la API(por terminar, no acaba de funcionar como queremos):

La versión de Dalme para la shell también tengo que mencionarla, (we love shells):

Otras cosas que hacemos en borrar las imágenes cada año por aquello de que subiendo subiendo, nos quedamos sin disco duro. Aparte de exportar las claves ssh para logearme rápido y al hacerlo se inicie el update de la maquina editando bash_profiles y creando un script de dos lineas:

#upgrade_sys.sh 
sudo apt-get update; apt-get upgrade

Previo a añadir esta línea a fichero /etc/sudoers:

foo ALL=(ALL) NOPASSWD: ALL

Así el proceso de upgrade se hace automático cuando me logeo, que es algo aunque este automatizado quiero saber si se ha realizado con éxito, ya que podría afectar a los servicios que sostiene. Vamos que me gusta estar presente en ese momento crítico. Por supuesto la máquina tiene instalado unattended-upgrades que instala parches de seguridad por su cuenta.

Una de las cosas que hemos cambiado es forzar siempre a https, redireccionando el tráfico del servidor nginx al puerto correspondiente. Fue una decisión en favor de la seguridad por lo de los móviles, roguers, sslstrips, bueno ya sabéis toda clase de ciberataques. Poco más se puede contar de como administrar la máquina y el servicio y la experiencia. Tras un año las tareas se han reducido básicamente a logearme de vez en cuando en la máquina y aceptar actualizaciones. Con la inestimable ayuda de @Puppetmaster, que tengo que reconocer, siempre ha estado ahí desde la instalación hasta hoy, “vigilando el Nagios”. El resto se hace “solo”. Si tienes problemas con tu nodo siempre puedes preguntarnos uniéndote a la lista de correo http://listas.elbinario.net/listinfo/gnusocial, quizás podamos ayudarte.

Que el próximo que venga no se convierta en Bofh

foo bar Written by:

echo "$foo" > bar

7 Comments

  1. Mayo 11
    Reply

    plas, plas, plas!
    Aplaudo con las orejas!! :þ

    • foo bar
      foo bar
      Mayo 11
      Reply

      Editado, cierto, Fe de erratas, el artículo es de @JuanSantiago.

  2. uzanto
    Mayo 11
    Reply

    Gran trabajo durante este tiempo, yo sufrí por desgracia el problema con la base de datos, pero tampoco es que haya perdido algo demasiado importante.

    Parece que mastodon viene fuerte, a ver como se desarrolla el tema y no es otro barbie boom.

  3. Yosu
    Mayo 15
    Reply

    Gracias por ese trabajo invisible que hace que todo funcione

  4. Mauricio Baeza
    Mayo 17
    Reply

    ¿y las donaciones para mantener esto andando?, ¿por donde?

    Un abrazo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax