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

Материал из I2P-ilita вики
Перейти к навигацииПерейти к поиску
м (Косметические изменения опечаток.)
 
(не показаны 3 промежуточные версии 2 участников)
Строка 53: Строка 53:
</pre>
</pre>


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


=== Настройка плагина paste ===
=== Настройка плагина paste ===
Строка 159: Строка 159:
=== Настройка пиринга ===
=== Настройка пиринга ===


Для связи с другими фронтендами вам нужно настроить пиринг. Настройка заключается в том, что вы у себя настраиваете outfeed для отправки сообщений на другой сервер, и админ другого сервера делает то же самое для отправки сообщений к вам.
Для связи с другими фронтендами, вам нужно настроить пиринг. Настройка заключается в том, что вы у себя настраиваете 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:", который вы и сообщите удалённой стороне.
Настоятельно рекомендуется использовать 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:", который вы и сообщите удалённой стороне.

Текущая версия на 10:48, 21 сентября 2020

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-ки. Лечится перезапуском демона.

Ссылки и контакты[править]