Freenet - instalare și depanare

Aceasta e o versiune anterioară a paginii.


Freenet - instalare și depanare pe Linux

Acest tutorial acoperă instalarea Freenet-ului pe un sistem Linux, pornirea ca serviciu de sistem și rezolvarea celor mai frecvente probleme de conectare la rețea.

Notă importantă: ghidul se referă la Freenet-ul actual (freenet.org, rescris în Rust, cunoscut și ca „Freenet 2023“), nu la vechiul Freenet dinainte de 2023, care acum se numește Hyphanet (hyphanet.org).

Ce este Freenet

Freenet e o platformă peer-to-peer pentru aplicații descentralizate: chat, publicare de situri, email, colaborare Git, fără server central. Nodurile formează o rețea organizată sub forma unui inel („ring“), iar mesajele ajung la destinație în câțiva pași, indiferent câte noduri sunt în rețea.

Spre deosebire de vechiul Freenet, cel nou nu oferă anonimitate din construcție - scopul e descentralizarea, nu ascunderea identității.

Instalare pe Linux

Instalarea e o singură comandă:

curl -fsSL https://freenet.org/install.sh | sh

Scriptul descarcă binarul în ~/.local/bin/freenet, îl instalează și pornește un serviciu de fundal pentru utilizatorul curent.

Sursă: freenet.org/quickstart

Containere și servere fără interfață grafică

Dacă instalarea automată a serviciului eșuează (frecvent pe LXC sau Docker), instalează serviciul la nivel de sistem manual:

sudo /calea/completă/către/freenet service install --system
sudo systemctl daemon-reload
sudo systemctl enable --now freenet

Important: folosește calea completă la binar cu sudo (de exemplu /home/utilizator/.local/bin/freenet), nu doar freenet. Binarul ajunge de obicei în ~/.local/bin, care e în PATH-ul utilizatorului obișnuit, dar nu neapărat și în cel al lui root.

Verificarea stării serviciului

freenet service status

sau, echivalent, prin systemd:

systemctl status freenet

Ar trebui să arate Active: active (running) și enabled. Pentru loguri live, fără să ții un terminal dedicat:

journalctl -u freenet -f

Depanare: comanda "freenet" nu e găsită

Dacă which freenet nu întoarce nimic, dar binarul există (verifică cu find ~ -iname „freenet“ -type f), problema e că directorul ~/.local/bin nu e în PATH.

Soluție permanentă, adăugată în ~/.bashrc:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

Depanare: nodul nu se conectează la rețea (zero conexiuni în ring)

Simptome tipice în journalctl -u freenet -f:

WARN freenet::ring: Zero ring connections detected — starting isolation timer
WARN freenet::ring: acquire_new: no routing candidates found
ERROR freenet::transport::connection_handler: Failed NAT traversal, error: max connection attempts reached

Freenet folosește UDP hole punching pentru conexiuni directe între noduri. Câteva cauze posibile, în ordinea probabilității:

  1. Interfețe de rețea multiple active simultan (de exemplu Ethernet și WiFi pe același sistem, ambele cu rută implicită). Kernelul poate alege inconsistent interfața de ieșire pentru pachetele UDP, ceea ce bulversează hole punching-ul. Verifică cu:
ip route | grep default

Dacă apar două rute implicite, dezactivează interfața redundantă (vezi secțiunea următoare).

  1. Firewall local care blochează UDP. Verifică:
sudo ufw status
  1. Router fără suport UPnP sau cu NAT restrictiv (simetric). Majoritatea routerelor de-acasă merg fără configurare suplimentară; echipamentele de rețea mai avansate, din medii de tip homelab, pot avea UPnP dezactivat implicit.
  2. Instanțe multiple ale procesului concurând pe același port. Verifică:
pgrep -af "freenet network"

Ar trebui un singur proces.

Reținere: eșecul individual la conectarea cu un anumit peer (log cu max connection attempts reached) e normal și așteptat - Freenet reîncearcă automat cu alți peers prin mecanismul de gateway bootstrap. Problema reală e doar dacă rămâne la zero conexiuni în ring mai mult de câteva minute.

Dezactivarea permanentă a unei interfețe de rețea redundante (netplan)

Dacă sistemul folosește netplan și configurația de bază e generată de cloud-init (de obicei /etc/netplan/50-cloud-init.yaml, needitabilă direct fără riscul de a fi suprascrisă), creează un fișier separat cu prioritate mai mare:

sudo nano /etc/netplan/60-disable-wifi.yaml
network:
  version: 2
  wifis:
    NUME_INTERFATA:
      dhcp4: false
      access-points: {}
sudo chmod 600 /etc/netplan/60-disable-wifi.yaml
sudo netplan generate
sudo netplan apply

Verifică rezultatul:

ip addr show NUME_INTERFATA
ip route | grep default

Interfața nu ar trebui să mai aibă adresă IPv4 alocată, iar ip route ar trebui să arate o singură rută implicită.

Resurse de sistem

Freenet e scris în Rust și rulează ca un singur proces ușor, spre deosebire de vechiul Freenet/Hyphanet (Java). Consum tipic observat în practică, în stare de repaus, după conectare stabilă la rețea:

Resursă Valoare tipică
RAM 6-25 MB
CPU sub 1%
Task-uri systemd 5-10

Diferența e nesemnificativă chiar și pe hardware modest (Celeron, NUC-uri de generație mai veche). Singurul lucru de urmărit pe termen lung nu e CPU sau RAM, ci spațiul pe disc și traficul de rețea, pentru că nodul relayează trafic pentru alți participanți din rețea, nu doar consumă.

Manualul oficial

Documentația completă e la freenet.org/build/manual, organizată pe: introducere, componente (contracte, delegați, interfețe), arhitectură (rețea peer-to-peer, rutare, transport), ghid pentru dezvoltatori și glosar.

Utile fără nicio linie de cod:

Aplicații existente

Sursă: freenet.org/apps

Aplicație Descriere
River Chat de grup descentralizat, camere criptate
Delta Constructor de situri descentralizate
Mail Email descentralizat, rutat peer-to-peer
freenet-git Găzduire și colaborare Git peste Freenet

În dezvoltare: Harvest (piață descentralizată), Atlas (strat de descoperire/căutare), Raven (flux social).

Comenzi de referință rapidă

# instalare
curl -fsSL https://freenet.org/install.sh | sh
 
# instalare manuală ca serviciu de sistem (containere/servere)
sudo /calea/completă/freenet service install --system
sudo systemctl daemon-reload
sudo systemctl enable --now freenet
 
# verificare stare
freenet service status
systemctl status freenet
 
# loguri live
journalctl -u freenet -f
 
# repornire
sudo systemctl restart freenet
 
# verificare instanțe duplicate
pgrep -af "freenet network"
 
# verificare port ascultat
sudo ss -ulnp | grep freenet