Srnd: различия между версиями

Материал из I2P-ilita вики
Перейти к навигацииПерейти к поиску
(Новая страница: «{{Зрада}}'''srnd''' - свободное ПО, реализующее распределённую систему имиджборд, форумов и paste…»)
 
Строка 1: Строка 1:
{{Зрада}}'''srnd''' - свободное ПО, реализующее распределённую систему имиджборд, форумов и pastebin-ов на базе обмена по протоколу NNTP.
{{Зрада}}
 
'''srnd''' - свободное ПО, реализующее распределённую систему имиджборд, форумов и pastebin-ов на базе обмена по протоколу NNTP.
 
Печально известно тем, что именно на нём [[Скрытозой]] пробовал перепилить [[Хиддач]] и потерял всяческое желание [[Тянуть это нет желания|тянуть это]].


== Установка на ubuntu ==
== Установка на ubuntu ==

Версия 12:56, 16 мая 2017

Zrada.png ЗРАДА!

Информация была грубо перекатана со свидомой википедии.
Требуется дополнить её фактами, разбавить картинками, переписать или хотя бы почистить от мусора.

srnd - свободное ПО, реализующее распределённую систему имиджборд, форумов и pastebin-ов на базе обмена по протоколу NNTP.

Печально известно тем, что именно на нём Скрытозой пробовал перепилить Хиддач и потерял всяческое желание тянуть это.

Установка на ubuntu

apt-get install python-pip python-cffi python-imaging python-pygments python-dev libffi-dev libsodium-dev sqlite3
pip install pynacl
pip install pysodium
rm -rf /usr/local/lib/python2.7/dist-packages/nacl/_lib/__pycache__

Исходный код модифицированного srnd (версия для hiddenchan): http://git.repo.i2p/w/srnd/srndh.git

Первоначальная настройка конфигов

Внимание, после установки и первоначальной настройке при отсутствии nntp-сообщений у вас будет полностью пустая борда без разделов и без возможности постинга. Чтобы что-либо начало появляться, необходимо либо настроить peering, либо вручную положить nntp-статью в incoming, либо сохранить к себе с другого фронтенда html-страницу с формой постинга, поправить её и отправить т.о. первое сообщение на свой /incoming.

Так же обратите внимание, что в конфигах srnd применяется нестандартная система комментариев. Если строка начинается со #start_param, то это не комментарий, а именно конфигурационная переменная, не закомментированная! Т.е. убирать "#" не нужно.

Настройка плагина overchan

Плагин overchan отвечает за обработку сообщений в группах overchan.* и генерацию html-страниц имиджборды. Т.е. по сути это парсер сообщений + генератор статики. Конфиг - install_files/config/hooks/plugins/overchan Для начальной конфигурации поправьте параметр

#start_param title=ИМЯ_БОРДЫ

Это название вашей борды, которое будет отображаться в Title и на других видных местах.

Настройка плагина postman

Плагин postman отвечает за приём сообщений от пользователей фронтенда по http. Разбор POST-параметров, капча, и т.п. Его конфиг install_files/config/hooks/plugins/postman особой настройки не требует. Однако помимо этого конфига у postman-а есть отдельные конфиги по работе с каждым фронтендом. Настройте конфиг install_files/plugins/postman/frontends/overchan. Здесь вам нужно поправить несколько параметров:

uid_host=web.overchan.ИМЯ_БОРДЫ

(allowed_boards)
overchan.имя_раздела_куда_доступен_постинг_1
overchan.имя_раздела_куда_доступен_постинг_2

Настройка плагина censor

Плагин censor отвечает за модерирование. install_files/config/hooks/plugins/censor:

#start_param uid_host=web.censor.ИМЯ_БОРДЫ
#start_param add_admin=ПУБЛИЧНЫЙ_КЛЮЧ

ПУБЛИЧНЫЙ_КЛЮЧ - это публичный ключ админа, который может заходить в интерфейс модератора. Чтобы получить связку ключей, зайдите на /moderate?getkey, когда запустите srnd. Для захода в админку надо будет использовать приватный ключ. Он же используется для трипкода.

Настройка плагина paste

Данный плагин реализует функциональность распределённого pastebin. Для настройки достаточно поправить title (install_files/config/hooks/plugins/paste):

#start_param title=paste.ИМЯ_БОРДЫ

Так же в дефолтном конфиге имеется запись

ano.paste

это означает, что плагин обрабатывает именно сообщения из этой nntp-группы.

Первый запуск и настройка главного конфига демона

Запустите ./main.pyx, подождите некоторое время и нажмите Ctrl-C. После этого создастся директория data/. Учтите, что при каждом запуске srnd копирует конфиги и плагины из install_files в data/, поэтому в data/ править ничего не нужно (кроме outfeed-ов, об этом позже).

После первого запуска демон создаст конфиг data/config/SRNd.conf, там настраивается bind_ip и port для NNTP-демона, а так же выставляется уровень дебага. Обратите внимание, что уровни дебага сделаны слегка по-дурацки - с увеличением цифры уровень дебага МЕНЬШЕ, а не больше, как все мы привыкли. Это может быть запатчено в скором времени. 2 - info, 1 - debug, 0 - verbose (самый детальный вывод). Для начала рекомендуется использовать уровни дебага 2-1.

Настройка конфига nginx

Предполагается, что srnd установлен в /opt/srnd/.

# log desthashes
log_format i2p '$remote_addr $http_x_i2p_desthash - $remote_user [$time_local] '
        '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';

# disable server id
server_tokens off;

# i2p does gzip itself
gzip  off;

server {
        listen 80;
        server_name foo.i2p;
        root /opt/srnd/data/plugins/overchan/out/;
        client_max_body_size 10M;
        access_log /var/log/nginx/access.log i2p;

        if ( $http_x_forwarded_server ) {
                rewrite ^.*$ /inproxy.html break;
        }

        location /incoming {
                # proxy new messages to postman
                proxy_pass http://127.0.0.1:53751;
        }

        location /moderate {
                # proxy new messages to censor
                proxy_pass http://127.0.0.1:53753;
        }

        location ~* ^.+\.html$ {
                # force clients to always request the latest version
                try_files $uri =404;
                expires 1s;
        }
        location ~* ^.+\.css$ {
                # let clients cache css files for 6 hours
                try_files  $uri =404;
                expires    6h;
        }
        location = / {
                # redirect / to index.html
                try_files  /index.html =404;
                expires    1s;
        }
        location / {
                # allow clients to cache everything not .html
                try_files  $uri =404;
                expires    max;
        }
        location ^~ /paste/ {
                alias /opt/srnd/data/plugins/paste/out/;
                index /index.html;
                expires    1s;
        }
}

Инит-скрипт для upstart

description "srnd service"
start on runlevel [2345]
stop on runlevel [06]

chdir /opt/srnd
exec /opt/srnd/main.pyx

Настройка туннелей i2p

Вам нужно настроить 3 туннеля:

  • для http-сервера, тип туннеля - HTTP server
  • для nntp-сервера (приём фидов с других серверов), тип туннеля - Standard server. Target туннеля - хост с srnd, порт 119
  • socks-прокси (для отправки исходящих сообщений) - тип туннеля - SOCKS 4/4a/5 proxy (клиентский туннель)

Число туннелей для nntp-сервера и socks-прокси не имеет смысла выставлять больше количества nntp-пиров, т.к. одно соединение не может использовать более одного туннеля.

Настройка пиринга

Для связи с другими фронтендами вам нужно настроить пиринг. Настройка заключается в том, что вы у себя настраиваете outfeed для отправки сообщений на другой сервер, и админ другого сервера делает то же самое для отправки сообщений к вам.

Настоятельно рекомендуется использовать whitelisting на уровне i2p для контроля доступа к NNTP. А именно, в конфиге серврного туннеля nntp нужно включить "Restricted Access List(s):", а в список "Access List:" добавить xxxx.b32.i2p адрес того socks-прокси туннеля, который использует другая сторона для связи с вашим сервером. Аналогично, админ другого сервера делает то же самое у себя, т.е. вайтлистит адрес вашего socks-прокси туннеля. Чтобы этот адрес всегда был постоянным, при создании socks-прокси туннеля необходимо поставить radiobutton "Persistent private key(k):" в Enable. Потом запустить туннель и зайти в его конфиг опять, там появится строка "Local Base 32:", который вы и сообщите удалённой стороне.

Настройка outfeed-а

Для настройки outfeed-а нужно создать файл в data/config/hooks/outfeeds/. Имя файла должно быть строго такого формата: "xxxxx.b32.i2p:119", т.е. hostname:port. Без двоеточия и порта работать не будет! Внутрь конфига пишется что-то вроде:

#start_param sync_on_startup=True
#start_param proxy_type=socks5
#start_param proxy_ip=127.0.0.1
#start_param proxy_port=10020
#start_param debug=1

ctl
overchan.*
!ano.paste

Незакомментированные строки указывают, какие группы нужно синхронизировать на удалённый сервер. Восклицательный знак означает "blacklist rule", т.е. исключение. такое правило всегда имеет приоритет перед разрешающими правилами.

FAQ

Как писать новости на главной?

Для этого в конфиге overchan имеется параметр #start_param news_uid= В него надо записать message-id (без кавычек!) поста, в котором написана новость. Чтобы узнать message-id, нужно сперва запостить сообщение, а потом открыть в просмотрщике текстовых файлов это сообщение, оно будет располагаться в `ls -1t data/groups/groupname/ |head -1`

Как переименовать группу?

sqlite3 dropper.db3
sqlite> update groups set group_name='overchan.hiddenchan' where group_id='12';
sqlite3 ./plugins/overchan/overchan.db3
sqlite> update groups set group_name='overchan.hiddenchan' where group_id='11';
groups# mv overchan.hiddenchan.random overchan.hiddenchan
find . -type l -print0 |xargs -0 sed -i --follow-symlinks -e "s,Newsgroups: overchan.hiddenchan.random,Newsgroups: overchan.hiddenchan,g" --

Как заставить overchan заново распарсить все сообщения?

sqlite3 ./plugins/overchan/overchan.db3
sqlite> drop table articles;
restart

Как всё удалить?

find data/articles/ -type f -delete
find data/ -type f -name "*.db3" -delete
rm -rf data/groups/*

Как вручную заблокировать группу?

sqlite3 plugins/overchan/overchan.db3
sqlite> update groups set blocked='1' where group_id='23';

Известные баги

  • После запуска первая статья в data/incoming/ может не обработаться сразу после появления там. Чтобы "пнуть" dropper, можно сделать touch data/incoming/f.
  • При обработке большого кол-ва сообщений (импорт, синхронизация с другим фронтендом) тред overchan может застрять и не генерировать html-ки. Лечится перезапуском демона.

Ссылки и контакты