Hay instancias que estan censuradas en https://search.joinpeertube.org (https://sepiasearch.org) por mas que esten agregadas en https://instances.joinpeertube.org no aparecen en los resultados.

Aparentemente la solucion de ese problema es esto:

Tutorial: PeerTube-autoDiscover en Arch Linux

¿Qué hace este programa?
Descubre instancias PeerTube rastreando la red de federación real, sin depender del índice oficial de Framasoft. Parte de nodos conocidos, les pregunta a quién siguen y quién los sigue, y así expande la lista en forma de grafo hasta encontrar todas las instancias accesibles — incluyendo las que están bloqueadas del índice oficial.


Cómo funciona (el mecanismo real)

Cada instancia PeerTube expone dos endpoints públicos en su API REST:

  • GET /api/v1/server/following → lista de instancias que sigue
  • GET /api/v1/server/followers → lista de instancias que la siguen

El programa arranca con una semilla (el índice oficial u otras instancias que vos le des), consulta esos dos endpoints en cada nodo, y por cada nodo nuevo que encuentra repite el proceso. Usa hasta 256 goroutines en paralelo. Al final imprime cuántos nodos encontró y cuántos son “nuevos” (no estaban en el índice oficial).

Importante: el código en Go también intenta postear los nodos nuevos al índice de Framasoft (instances.joinpeertube.org). Para tu caso (descubrir instancias censuradas) vas a querer filtrar la salida en lugar de dejar que haga el POST automático. Más adelante se explica cómo.


Requisitos

  • Arch Linux con acceso a internet
  • go (Go >= 1.18)
  • git
  • Opcional: jq para filtrar el output JSON

Paso 1: Instalar Go y Git

sudo pacman -S go git

Verificar que Go está bien instalado:

go version
# Debería mostrar: go version go1.2x.x linux/amd64

Paso 2: Clonar el repositorio

git clone https://github.com/Jorropo/PeerTube-autoDiscover.git
cd PeerTube-autoDiscover

Revisar los archivos:

ls -la
# main.go   go.mod   README.md   LICENSE   .gitignore

Nota: el README menciona Python pero el código real está en Go. Ignorá las instrucciones de Python del README.


Paso 3: Compilar

go build -o autodiscover main.go

Si todo sale bien, aparece el binario autodiscover en el directorio actual:

ls -lh autodiscover
# -rwxr-xr-x 1 tu_usuario tu_usuario 6.2M ...  autodiscover

Paso 4: Usar el programa

Modo básico: semilla desde el índice oficial

Esto usa instances.joinpeertube.org como punto de partida y rastrear toda la red que pueda alcanzar:

./autodiscover 2>errores.log | tee instancias_descubiertas.txt
  • stdout → lista de hostnames de instancias descubiertas
  • stderr → logs del progreso y errores SSL (redirigidos a errores.log)
  • tee → muestra en pantalla y guarda al mismo tiempo

Modo con semilla personalizada

Pasás uno o más nodos de arranque. Útil para explorar redes que no están en el índice oficial:

./autodiscover videos.icum.to 2>errores.log | tee instancias_descubiertas.txt

Múltiples semillas:

./autodiscover videos.icum.to otra-instancia.ejemplo.com 2>errores.log | tee instancias_descubiertas.txt

Ver progreso en tiempo real

Abrí una segunda terminal y seguí los logs:

tail -f errores.log

Vas a ver líneas como:

2024/01/15 12:34:56 found nueva-instancia.com from videos.icum.to
2024/01/15 12:34:57 found otra-mas.net from nueva-instancia.com
...
2024/01/15 12:45:00 found 847 nodes, 612 good nodes and 235 new good nodes

Paso 5: Desactivar el POST automático al índice de Framasoft

Por defecto el programa intenta registrar los nodos nuevos en instances.joinpeertube.org. Si solo querés descubrir sin reportar nada, hay dos opciones:

Opción A: Bloquear el dominio con el firewall (simple)

# Bloquear salida hacia el servidor de Framasoft
sudo iptables -A OUTPUT -d instances.joinpeertube.org -j DROP

# Ejecutar el programa
./autodiscover videos.icum.to 2>errores.log | tee instancias.txt

# Después de terminar, quitar la regla
sudo iptables -D OUTPUT -d instances.joinpeertube.org -j DROP

Opción B: Editar el código fuente (más limpio)

Abrí main.go con tu editor y encontrá la función addToInstancesList. Reemplazá su contenido para que no haga nada:

func addToInstancesList(node string) {
    defer wg.Done()
    // POST desactivado - solo descubrimiento
    fmt.Println(node)
}

Luego recompilá:

go build -o autodiscover main.go

Con este cambio, el programa imprime cada nodo descubierto en stdout a medida que los encuentra, en lugar de intentar registrarlos.


Paso 6: Procesar los resultados

Ver cuántas instancias encontró

wc -l instancias.txt

Verificar si videos.icum.to aparece en los resultados

grep "videos.icum.to" instancias.txt

Buscar todas las instancias federadas CON videos.icum.to

Esto lo hacés directamente contra la API de esa instancia, sin necesitar el programa:

# Instancias que sigue videos.icum.to
curl -s "https://videos.icum.to/api/v1/server/following?count=100" | python3 -m json.tool

# Instancias que siguen a videos.icum.to
curl -s "https://videos.icum.to/api/v1/server/followers?count=100" | python3 -m json.tool

Si tenés jq instalado (sudo pacman -S jq), podés extraer solo los hostnames:

curl -s "https://videos.icum.to/api/v1/server/following?count=100" \
  | jq -r '.data[].following.host'

Guardar lista limpia de hostnames (una por línea)

sort -u instancias.txt > instancias_unicas.txt

Paso 7: Opcional — Script automatizado completo

Guardá este script como descubrir.sh:

#!/bin/bash
# descubrir.sh - Descubre instancias PeerTube desde una semilla

SEMILLA="${1:-}"  # primer argumento, vacío = usa índice oficial
OUTFILE="instancias_$(date +%Y%m%d_%H%M%S).txt"
LOGFILE="errores_$(date +%Y%m%d_%H%M%S).log"

echo "=== PeerTube autoDiscover ==="
echo "Semilla: ${SEMILLA:-índice oficial}"
echo "Salida:  $OUTFILE"
echo "Logs:    $LOGFILE"
echo ""

if [ -n "$SEMILLA" ]; then
    ./autodiscover "$SEMILLA" 2>"$LOGFILE" | tee "$OUTFILE"
else
    ./autodiscover 2>"$LOGFILE" | tee "$OUTFILE"
fi

echo ""
echo "=== Resumen ==="
echo "Instancias encontradas: $(wc -l < "$OUTFILE")"
echo "Errores SSL (inofensivos): $(grep -c "ssl" "$LOGFILE" 2>/dev/null || echo 0)"

Darle permisos y ejecutar:

chmod +x descubrir.sh

# Con semilla específica
./descubrir.sh videos.icum.to

# Con el índice oficial como semilla
./descubrir.sh

Errores comunes y soluciones

Error: go: command not found

sudo pacman -S go

Muchos errores SSL en el log Son normales e inofensivos — son instancias con certificados mal configurados. El programa los cacha y sigue adelante.

El programa termina muy rápido sin resultados Probá con una semilla diferente:

./autodiscover framatube.org 2>errores.log

videos.icum.to no aparece en la red Es posible que esa instancia no tenga follows/followers públicos o que haya deshabilitado esos endpoints. Verificá directamente:

curl -s "https://videos.icum.to/api/v1/server/following?count=1"

Si responde con {"total":0,"data":[]} o da error, esa instancia no está federada con nadie y el autodiscover no puede alcanzarla desde afuera.


¿Cuándo termina el programa?

El programa termina solo cuando agota todos los nodos alcanzables. Puede tardar varios minutos dependiendo de cuántas instancias haya en la red. El mensaje final en stderr dice cuántos encontró:

found 1247 nodes, 983 good nodes and 264 new good nodes
  • nodes = total de instancias descubiertas (incluyendo inaccesibles)
  • good nodes = instancias que respondieron correctamente
  • new good nodes = instancias que no estaban en el índice oficial de Framasoft

Resumen rápido

# 1. Instalar dependencias
sudo pacman -S go git

# 2. Clonar y compilar
git clone https://github.com/Jorropo/PeerTube-autoDiscover.git
cd PeerTube-autoDiscover
go build -o autodiscover main.go

# 3. Descubrir desde una instancia específica
./autodiscover videos.icum.to 2>errores.log | tee resultados.txt

# 4. Ver si la encontró
tail errores.log          # progreso
grep "icum" resultados.txt # buscar en resultados