Gemini was created as a response to what the modern web had become. Bloated pages, opaque scripts, constant tracking and interfaces that demanded more attention than the content itself. Instead of trying to fix the web Gemini stepped sideways and asked a simpler question. What if documents were just documents again.

The protocol strips things down to text first browsing with optional links simple formatting and strong encryption by default. There is no JavaScript no ads no behavioral tracking baked into the design. What you request is what you get and nothing else. Servers are lightweight clients are simple and the experience feels closer to reading than consuming.

Gemini never tried to replace the web and that is part of its strength. It exists as a parallel space for people who value clarity authorship and intentional publishing. In a world optimized for engagement metrics Gemini feels almost subversive. Slow readable human scale computing as a conscious choice.

#GeminiProtocol #SmallWeb #AltNet #OpenInternet #TechCulture

Перевод на русский с интеграцией хэштегов прямо в текст.

---

# Настройка Fedi-сервера Snac для сети Yggdrasil | DevZone

#Fediverse #Yggdrasil #SelfHosting #P2P #Linux

Время чтения: 15 минут
11 мая

Вскоре после моих [размышлений о p2p](https://devzone.org.ua/post/hrabli-p2p) я решил попробовать развернуть собственный экспериментальный инстанс #Fediverse. Причём сделать это средствами оверлейной сети #Yggdrasil, так как я не планирую покупать выделенный IP или VPS для этой игрушки; вместо этого сервер будет хоститься за модемом — на одноплатнике или даже на ПК, когда я в сети, с динамическим адресом за NAT.

Эта заметка в первую очередь написана для себя, но может быть полезна тем, кто, как и я, только начинает эксперименты с администрированием собственного узла Fediverse и интересуется альтернативными сетями в контексте #Linux.

## Что такое Snac

#Snac #ActivityPub #Minimalism

[Snac](https://codeberg.org/grunfink/snac2) — это минималистичная альтернатива серверу #Mastodon, написанная на C, без JavaScript и без необходимости установки PostgreSQL. Все данные профилей хранятся в JSON-файлах. Недавно в сервер была добавлена [поддержка IPv6](https://codeberg.org/grunfink/snac2/pulls/256), поэтому он корректно работает и с диапазоном Yggdrasil `0200::/7`.

Поскольку Yggdrasil позволяет бесплатно генерировать неограниченное количество статических IP (на основе приватного ключа #Ed25519), в DNS здесь обычно нет необходимости. Опционально можно прикрутить #Alfis, но лично я этого не делаю (в том числе из-за до сих пор нерешённой проблемы #364), поэтому и не навязываю его в рамках протокола ActivityPub — формат будет просто `username@IPv6`, без необходимости что-то обновлять или «майнить» позже.

## Установка

#BuildFromSource #LinuxAdmin

1. Точный список пакетов для Debian я не знаю — система не новая и многое уже установлено. Согласно [README](https://codeberg.org/grunfink/snac2#building-and-installation), мне понадобились только `libssl-dev` и `libcurl4-openssl-dev` (в Fedora — примерно то же самое, но с суффиксом `-devel`).
2. Создаём отдельного системного пользователя для изоляции от потенциальных уязвимостей:

```
useradd -m snac
```
3. Для удобства меняем shell на bash в `/etc/passwd`.
4. Логинимся `su snac` и переходим в домашний каталог: `cd`.
5. Качаем исходники:
`git clone https://codeberg.org/grunfink/snac2.git`
6. Переходим в каталог проекта: `cd snac2`.
7. Компилируем и устанавливаем:
`make && sudo make install`.
8. Инициализируем хранилище сервера:
`snac init /home/snac/storage`.
9. Добавляем первого пользователя:
`snac adduser /home/snac/storage`.
10. Выходим обратно под root: `exit`.

## Конфигурация

#Networking #Yggdrasil

У меня уже установлен и настроен узел Yggdrasil. Если интересно — см. [предыдущую публикацию](https://devzone.org.ua/post/yggdrasil-mereza-z-detsentralizovanym-routynhom) или [официальную документацию](https://yggdrasil-network.github.io/documentation.html).

### Адрес подсети Yggdrasil

#IPv6

Этот шаг можно пропустить и использовать основной адрес `2*`, если порты `80` или `8001` свободны. Но важно понимать: в API ActivityPub сервер Snac сообщает свой адрес другим узлам, и те кэшируют его как часть ID. Поскольку адрес хранится в файлах, а не в БД, заменить его потом будет сложно. Поэтому лучше сразу выделить отдельный адрес, особенно для продакшена.

1. `yggdrasilctl getself` — узнаём свой IP и диапазон IPv6.
2. `ifconfig lo inet6 add IP` — вместо IP указываем произвольный адрес из полученного диапазона, например `3xx:xxxx:xxxx:xxxx::fed/64`.

⚠️ Данные, добавленные через `ifconfig`, не сохраняются после перезагрузки. Команду нужно прописать, например, в `/etc/netplan/01-ygglo.yaml`, `/etc/network/interfaces` или в `systemd`-сервис `yggdrasil.service` (через `ExecStartPost=`).

### Nginx-прокси

#Nginx #ReverseProxy

На сервере уже установлен Nginx, занимающий порт `80`. Менять это я не хочу, как и светить Snac на стандартном порту `8001`. Поэтому, имея выделенный IPv6-адрес, просто проксирую API на `80`, используя пример из [оригинальной конфигурации](https://codeberg.org/grunfink/snac2/src/branch/master/examples/nginx-alpine-ssl/default.conf):

```nginx
server {
listen [3xx:xxxx:xxxx:xxxx::fed]:80;
server_name 3xx:xxxx:xxxx:xxxx::fed;

location @proxy {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_pass http://[3xx:xxxx:xxxx:xxxx::fed]:8001;
}

location /.well-known/webfinger { try_files $uri @proxy; }
location /.well-known/nodeinfo { try_files $uri @proxy; }
location / { try_files $uri @proxy; }
location /fedi/ { try_files $uri @proxy; }
}
```

SSL здесь намеренно отсутствует: #Yggdrasil уже обеспечивает защищённый канал, и дополнительный слой не нужен.

Административный API (`admin` и `oauth`) я ограничил по IP, поскольку у клиентов Yggdrasil адреса тоже статические:

```nginx
location ~ /([^\/]+/admin|oauth) {
allow ADMIN_IP;
deny all;
try_files $uri @proxy;
}
```

### Конфигурация Snac

#JSON #Config

Редактируем `/home/snac/storage/server.json`, созданный командой `snac init`:

```json
{
"host": "[3xx:xxxx:xxxx:xxxx::fed]",
"address": "3xx:xxxx:xxxx:xxxx::fed",
"port": 8001,
"protocol": "http"
}
```

В моём случае протокол намеренно `http`.

### Доступ через iptables / ufw

#Firewall

Открываю порт только для диапазона Yggdrasil:

```
ufw allow from 0200::/7 to any port 80
```

Если не используете Nginx — указывайте реальный порт, например `8001`.

### systemd

#Systemd

На основе [официального примера](https://codeberg.org/grunfink/snac2/src/branch/master/examples/snac.service):

```ini
[Unit]
After=network-online.target
Wants=network-online.target

[Service]
User=snac
ExecStart=/usr/local/bin/snac httpd /home/snac/storage

[Install]
WantedBy=multi-user.target
```

## Бэкапы

#Backup #Rsync

Так как база — это файлы, резервное копирование тривиально. Использую `rsync` через `crontab -e`:

```
@daily rsync -av --delete /home/snac/storage /path/to/snac/daily
@weekly rsync -av --delete /home/snac/storage /path/to/snac/weekly
@monthly rsync -av --delete /home/snac/storage /path/to/snac/monthly
```

## Использование

#FediverseAdmin

После запуска (`snac httpd /home/snac/storage` или через systemd) можно открыть
`http://[3xx:xxxx:xxxx:xxxx::fed]` в браузере.

### Тест взаимодействия

#ActivityPub

Для проверки федерации разверните второй узел в Yggdrasil и попробуйте подписку или переписку через Web UI или клиент.

### Настройка браузера

#Firefox #IPv6

При первом использовании Yggdrasil-сайтов в Firefox может понадобиться изменить параметры в `about:config`:

* `browser.fixup.fallback-to-https = false`
* `browser.fixup.alternate.enabled = false`

---

#Fediverse #YggdrasilNetwork #Decentralization #AltNet #SelfHosted

Fediverse - the social network of the future
https://fediverse-decentralize.blogspot.com/2026/01/blog-post_10.html

If you'd like to join / help organize v18 of WBM (Wireless BattleMesh) this year - let's meet online : fill in this poll for choosing the date&time :

https://nuudel.digitalcourage.de/hnkKItWtg6jlU4yP

#Wireless #BattleMesh #meshNet #LikaNet #LikaLodge #AltNet

@battlemesh @eoinho

WBM_v18 January Jitsi + LikaNet - nuudel

Let's meet online to continue organising v18 of WBM / LikaNet All times in CET. Jitsi: https://meet.jit.si/WirelessBattleMesh More info: https://wiki.techinc.nl/User:Becha/Lika/2026/WBM

**Библиография:**
Reticulum Network Stack — Официальная документация и техническое описание.
Mark Qvist. *Reticulum: A Resilient Communication Stack for Building Local and Wide-Area Networks*.
GitHub — Репозиторий Reticulum Network Stack и аппаратных интеграций.
LoRa SX127x/SX128x — Документация Semtech по радиомодулям малой мощности.
Raspberry Pi Foundation — Материалы по построению сетей на базе SBC.
AX.25 Specification — Пакетный радиопротокол, используемый в любительских радиосетях.
KISS TNC — Техническое описание протокола для терминальных узлов.
**Хэштеги:**
#Reticulum #RNS #MeshNetwork #LoRa #OffGridComms #DecentralizedNetworking #RadioMesh #AltNet #DistributedComms #CryptoRouting #SecureNetworking #AutonomousNetworks #LoRaWAN #SBC #RaspberryPi #ESP32 #RP2040 #OpenHardware #SurvivalComms #EmergencyComms
**Библиография:**
Reticulum Network Stack — Официальная документация и техническое описание.
Mark Qvist. *Reticulum: A Resilient Communication Stack for Building Local and Wide-Area Networks*.
GitHub — Репозиторий Reticulum Network Stack и аппаратных интеграций.
LoRa SX127x/SX128x — Документация Semtech по радиомодулям малой мощности.
Raspberry Pi Foundation — Материалы по построению сетей на базе SBC.
AX.25 Specification — Пакетный радиопротокол, используемый в любительских радиосетях.
KISS TNC — Техническое описание протокола для терминальных узлов.
**Хэштеги:**
#Reticulum #RNS #MeshNetwork #LoRa #OffGridComms #DecentralizedNetworking #RadioMesh #AltNet #DistributedComms #CryptoRouting #SecureNetworking #AutonomousNetworks #LoRaWAN #SBC #RaspberryPi #ESP32 #RP2040 #OpenHardware #SurvivalComms #EmergencyComms

144 fibres spliced so there are usable connectors on the end :)

That was my Sunday (with generous help from my friend too, pretty much halves the time needed if you have help!).

#Altnet #Altnets #RuralBroadband #Fibre #Splicing #Fiber

#silentsunday late night network equipment in the middle of nowhere.
Only the sound of the fans in the cabinet, acorns dropping in the ground all around me and the occasional owl hoot.

#RuralBroadband #Altnet #Altnets #fibre

Another lovely day in the #Altnet #Altnets office. Somehow avoided the rain.
#RuralBroadband #FTTP #UK #Sunshine #JFDI
Maybe the algorithm isn’t broken — maybe we are.
Here's to making things slower, kinder, and a little more human.
#Fediverse #AltNet #JustThinking