Ololord.js: различия между версиями

Материал из Колчевики
Перейти к навигации Перейти к поиску
м
м
Строка 1: Строка 1:
'''[https://github.com/ololoepepe/ololord.js Ololord.js]''' — Кривой движок для параши запиленный [[Андрюшка|Андрюшкой]], на котором работали [[Тумбач]] и [[Оллчан#Оллчан времен андрюшки|Allchan.su]], преемник [[Ololord (C++)|Ololord]]'а. Под завязку нафарширован тонной ненужных функций, большая часть из которых работала на половину, а некоторые из этой половины и не работали вовсе. Заброшен после продажи [[Оллчан]]а Аллкалику. Несмотря на это у движка почти нулевой отклик, а то что работало, работало как надо и даже лучше.
+
'''[https://github.com/ololoepepe/ololord.js Ololord.js]''' — Кривой движок для параши запиленный [[Андрюшка|Андрюшкой]], преемник [[Ololord (C++)|Ololord]]'а, на котором работали [[Тумбач]] и [[Оллчан#Оллчан времен андрюшки|Allchan.su]]. Под завязку нафарширован тонной ненужных функций, большая часть из которых работала на половину, а некоторые из этой половины и не работали вовсе. Заброшен после продажи [[Оллчан]]а Аллкалику. Несмотря на это у движка почти нулевой отклик, а то что работало, работало как надо и даже лучше.
  
 
==История==
 
==История==

Версия 14:53, 14 июня 2025

Ololord.js — Кривой движок для параши запиленный Андрюшкой, преемник Ololord'а, на котором работали Тумбач и Allchan.su. Под завязку нафарширован тонной ненужных функций, большая часть из которых работала на половину, а некоторые из этой половины и не работали вовсе. Заброшен после продажи Оллчана Аллкалику. Несмотря на это у движка почти нулевой отклик, а то что работало, работало как надо и даже лучше.

История

В самом начале (начало 2016 г.) движок вполне исправно работал, но уже спустя год начал разваливаться, однако Андрюшка не спешил исправлять это и, по некоторым данным, залазил в код Ололорда дай бог раз в неделю. К моменту продажи Оллчана в 2022 г., ситуация стала немного лучше, однако глобально не сильно изменилась: Андрюша раз в неделю фиксил баги заменял одни баги на другие, добавлял новые фичи нагромождал код не рабочим мусором и обновлял библиотеки. В репозитории гитхаба находится очень старая и устаревшая версия от 17 сентября 2016 года, которая уже начинала разваливаться. Более свежих версий нет, Андрюшка не публиковал исходники своих параш.

Особенности

На момент создания движок был не иначе как чудом инженерной мысли. Да, кривой, да стремненький, но в нем было столько революционных фич, которые том же Vichan появились далеко не сразу: Теневые баны, багтреккер-разделы, интернациональные доски, версия под мобилки, карта ответов, уведомления о новых ответах (один из первых движков где это появилось), работа сайта без перезагрузки страниц, адекватный API из коробки. Ололорд в свое время был как ёбаный швейцарский нож, к которому прикрутили шуруповерт и табуретку. В противовес тому, что большинство из этого работала очень не очень, можно сказать что в то время большинство движков обо всем этом только мечтали.

Плюсы

  • Быстрый бэкэнд (все кэшируется, скорость зависит только от производительности вашего SSD);
  • Многофункциональный пользовательский интерфейс (автоматическое скрытие постов на основе правил, встроенный проигрыватель, инструменты JS-only drawing и многое другое);
  • Удобный и современный UI, легко настраиваемый с помощью настроек и пользовательского CSS/JS;
  • Мобильная версия пользовательского интерфейса (автоматическое определение мобильных устройств);
  • Удобное управление контентом и пользователями через веб-интерфейс;
  • Идеальная масштабируемость (чем лучше процессор, тем выше нагрузки, которые он может обрабатывать);
  • Встроенная базовая защита от DDoS (настраиваемая);
  • Полный Web API для пользовательских клиентских приложений;
  • Удобство в локализации;
  • Подробная документация.

Минусы

  • Большинство новых функций работает через задницу;
  • Проблема с нововведениями (Сложно что-то добавить чтобы что-то не поломать);
  • Из-за большого функционала жрет слишком много ресурсов;
  • Сильно транжирит трафик.

Установка

Инструкция взята из андрюшкиного репозитория движка и переведена на русский:

Чтобы начать использовать движок ololord.js, скачайте копию из репозитория, распакуйте ее и следуйте инструкциям, перечисленным в следующих разделах:

1. Требования

Аппаратное обеспечение

  • Рекомендуется процессор 2 ГГц. Хотя фактических ограничений нет, обработка файлов может быть раздражающе медленной, если у вас медленный процессор.
  • 1-1,5 ГБ свободной оперативной памяти. Технически, 200-300 МБ должно быть достаточно, но из-за странного бага Node.js или Express потребление памяти иногда увеличивается до 700-800 МБ на 0,5-1 секунду, а затем снижается до нормального значения.

ОС

  • Linux x32/x64. Любая UNIX-подобная система подойдет (теоретически). Протестировано на Centos 7.1 x64.

Node.js

  • Node.js 5.0.0+. 4.2.x может подойти, но это не проверялось. Настоятельно рекомендуется загрузить Node.js с сайта Node.js, поскольку версия в репозитории вашей ОС, скорее всего, устарела (или что-то в этом роде).0.x

Важно: убедитесь, что Node.js находится в вашем PATH (в UNIX-подобной системе введите: , в Windows запустите ).which nodenode.exe

Библиотеки и инструменты

  • Redis Сервер. Конфигурация по умолчанию должна быть ОК. Официальный сайт.
  • Elasticsearch Сервер. Конфигурация по умолчанию должна быть ОК. Официальный сайт. Загрузки доступны здесь. Примечание: вам также нужно будет установить JRE/JDK. Вот официальное руководство по установке и запуску Elasticsearch в Linux.
  • sqlite3 (включая библиотеки dev). Официальный сайт.
  • Cairo (для пакета). Пожалуйста, обратитесь к npmjs. canvas
  • ImageMagick (для создания миниатюр). Официальный сайт.
  • CImg и (для генерации хэша изображения с помощью пакета). Пожалуйста, обратитесь к npmjs. Подробности см. в разделах CImg и pHash. pHash ImageMagick phash-image
  • file (должен поддерживать MIME-тип). Исходный код можно получить [здесь https://github.com/file/file]. Могут быть некоторые проблемы с файлами, пожалуйста, обратитесь к II.5. 3rdparty related issues.video/webm mp3
  • ffmpeg (с поддержкой , , и ). Пожалуйста, обратитесь к этой статье, чтобы узнать, как собрать ffmpeg со всеми необходимыми форматами. Еще одна.mp3 ogg webm png

Важно: убедитесь, что все библиотеки и инструменты находятся в PATH.

Возможные проблемы

  • CImg
Пакет CImg обычно называется . Он может отсутствовать в некоторых дистрибутивах. В этом случае загрузите его с официального сайта (нажмите кнопку «Стандартный пакет») и установите вручную. Вам следует поместить файл и каталог в ваш dir.cimg-devCImg.hplugins/usr/include
Распакуйте загруженный архив и введите:
sudo cp /path/to/unzipped-cimg/CImg.h /usr/include
sudo cp -r /path/to/unzipped-cimg/plugins /usr/include
  • pHash
Пакет pHash обычно называется . Он может отсутствовать в некоторых дистрибутивах. В этом случае загрузите его из официального сайта (нажмите ссылку "pHash 0.9.6 - Linux") и соберите его вручную.libphash0-dev
Распакуйте загруженный архив и введите:
./configure --prefix=/usr --enable-video-hash=no --enable-audio-hash=no
make
sudo make install

Примечание: если сборка не удалась (это происходит в некоторых дистрибутивах), откройте файл, найдите строку ./Makefile

SUBDIRS = src bindings examples

и замените ее на

SUBDIRS = src bindings

(удалите цель). Затем запустите снова. examples make

2. Пакеты NPM

Вам необходимо установить следующие пакеты:

  • big-integer ^1.6.7
  • canvas ^1.3.1
  • commander ^2.9.0
  • cookie-parser ^1.4.0
  • cute-localize ^0.1.8
  • ddos-express ^0.1.1
  • deep-equal ^1.0.1
  • dot ^1.0.3
  • du ^0.1.0
  • elasticsearch ^11.0.1
  • escape-html ^1.0.3
  • express ^4.13.3
  • express-cluster 0.0.4
  • fast-csv ^0.6.0
  • fluent-ffmpeg ^2.0.1
  • highlight.js ^8.9.1
  • html-to-text ^2.0.0
  • imagemagick ^0.1.3
  • ioredis ^1.15.1
  • ip-address ^5.0.2
  • jdenticon ^1.3.2
  • log4js ^0.6.29
  • mathjax-node ^0.5.1
  • merge ^1.2.0
  • mkpath ^1.0.0
  • moment ^2.10.6
  • multiparty ^4.1.2
  • musicmetadata ^2.0.2
  • node-captcha ^0.2.2
  • phash-image ^3.5.0
  • promisify-node ^0.2.1
  • q-io ^1.13.1
  • random-js ^1.0.8
  • read ^1.0.7
  • sockjs ^0.3.17
  • sqlite3 ^3.1.1
  • uuid ^2.0.1
  • xml2js ^0.4.15
  • xregexp ^3.0.0

Чтобы установить необходимые пакеты NPM, введите следующее:

npm install

Примечание: не забудьте сначала установить все зависимости.

Примечание 2: см. актуальный список пакетов в файле package.json.

3. Геолокация

ololord.js использует базу данных IPInfoDB для геолокации. Вам необходимо самостоятельно загрузить соответствующий файл DB (в формате CSV) и преобразовать его в базу данных SQLite 3 с помощью скрипта tools/geolocation.js. Файл .csv можно загрузить здесь (требуется регистрация). Если вы используете IPv6, вам следует загрузить версию IPv6 базы данных IPInfoDB, в противном случае следует использовать версию IPv4.

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

./tools/geolocation.js <path/to/file.csv>

Примечание: операция может занять некоторое время (до 10–20 минут в зависимости от вашего оборудования).

Примечание 2: геолокация выполняется очень быстро (~5 миллисекунд на запрос).

4. Базовая Конфигурация

Для корректной работы приложения необходимо добавить некоторые базовые настройки. Для начала создайте файл конфигурации: config.json. Затем вставьте следующее содержимое:

{
    "server": {
        "port": 80,
        "youtubeApiKey": "Your YouTube API key here"
    },
    "site": {
        "protocol": "http",
        "domain": "localhost:80"
    },
    "board": {
        "captchaEnabled": true,
        "launchDate": "2015-02-12T21:00:00",
        "int": {
            "showWhois": true
        }
    },
    "captcha": {
        "google-recaptcha": {
            "privateKey": "Your Google reCAPTCHA private key here",
            "publicKey": "Your Google reCAPTCHA public key here"
        },
        "google-recaptcha-v1": {
            "privateKey": "Your Google reCAPTCHA v1 private key here",
            "publicKey": "Your Google reCAPTCHA v1 public key here"
        },
        "codecha": {
            "privateKey": "Your Codecha private key here",
            "publicKey": "Your Codecha public key here"
        }
    }
}

Примечание: Это лишь малая часть параметров конфигурации, необходимых для корректной работы приложения. Другие параметры конфигурации описаны здесь: II.1. Configuration.

Параметры конфигурации

  • server.port
Порт, на котором сервер будет прослушивать соединения. Обычно 80, но значение может отличаться, если трафик проходит через какой-либо HTTP-сервер, например nginx.
  • server.youtubeApiKey

Ключ API YouTube, используемый для извлечения информации о видео YouTube в сообщениях и для правильной разметки соответствующих ссылок (добавление всплывающей подсказки с названием видео и миниатюрой, а также создание расширяемого встроенного проигрывателя YouTube). Документация API YouTube.

  • site.protocol
Предпочтительный протокол (http или https). Используется для ссылок в сгенерированном канале RSS и для предоставления ссылок на файлы внешним поисковым системам изображений (например, TinEye).
  • site.domain
Используется для той же цели, что и site.protocol.
  • board.captchaEnabled
Включает или отключает капчу.
  • board.launchDate

Дата запуска вашей imageboard. Используется для расчета скорости публикации. Необходимо указать в формате ISO: YYYY-MM-DDThh:mm:ss. Пример: 2015-02-12T21:00:00.

  • board.int.showWhois
Показать страну (с соответствующим флагом страны) и город пользователя на доске /int/ (международная). Вы можете включить эту опцию на любой доске (но обычно не следует).
Примечание: информация о геолокации сохраняется для каждого сообщения, независимо от того, включена ли опция showWhois, но она не отображается на страницах, если эта опция не включена.
  • Закрытые и открытые ключи капчи
Вы должны указать закрытые и открытые ключи капчи для каждой службы капчи. Закрытые ключи используются только на сервере, а открытые ключи отображаются на страницах сайта.
Links:
Примечание: По умолчанию Codecha — единственная доступная капча для доски /pr/ (Программирование). Вам следует предоставить ключи сервиса Codecha или включить другие движки капчи для этой доски (см. II.1. Конфигурация).

Запуск

Запуск и выход

Запуск ololord.js довольно прост:

./app.js

Обычно при запуске будет выводиться некоторый текст, а также будет отображаться командная строка:

[17662] Using config file: "/home/username/dev/js/projects/ololord.js/config.json"...
Generating JSON cache, please, wait...
Generating HTML cache, please, wait...
Generating RSS, please, wait...
Spawning workers, please, wait...
[17677] Using config file: "/home/username/dev/js/projects/ololord.js/config.json"...
[17677] Initializing...
[17677] Listening on port 8080...
Type 'help' for commands
ololord.js>

Чтобы выйти из приложения, вы можете либо ввести:

quit

либо:

q

или нажать Ctrl+C (последнее не рекомендуется).

Генерация кэша

При первом запуске ololord.js вам нужно будет передать параметр --regenerate для генерации кэша HTML/JSON.

./app.js --regenerate

или

./app.js -r

Указание файла конфигурации

По умолчанию используется файл конфигурации ./config.json. Вы можете указать любой другой файл конфигурации с помощью параметров командной строки -c или --config-file. Путь может быть относительным:

./app.js -c ./custom-config.json

или абсолютным:

./app.js --config-file /etc/config/ololord.js/custom-config.json

Если указанный файл не существует, будет использована конфигурация по умолчанию (в этом случае приложение может быть даже недоступно в браузере).

См. также: 4. Базовая конфигурация и II.1. Configuration.

Аккаунт суперпользователя

Чтобы иметь возможность управлять уровнями доступа пользователей, запретами и выполнять другие административные действия (редактировать/удалять сообщения и т. д.), вам сначала нужно создать учетную запись суперпользователя. Запустите ololord.js и введите:

add-superuser

Вам будет предложено ввести пароль или хэш пароля SHA-1 (распознается автоматически), а затем список IP-адресов. Эти адреса используются для предотвращения удаления ваших сообщений администратором или модератором (случайно или намеренно).

Например:

ololord.js> add-superuser
Enter password: 
 *************

Enter superuser IP list (separate by spaces): 127.0.0.1 192.168.0.1
OK

Когда учетная запись суперпользователя создана, вы можете зайти на любую страницу с помощью браузера, нажать кнопку «Войти» Кнопка входа (расположена в левом верхнем углу страницы) и ввести свой пароль. После этого вы сможете удалять/редактировать сообщения, закрывать темы, видеть IP-адреса пользователей и т. д.

Примечание: пароли хранятся в базе данных в виде хешей SHA-1.

Чтобы удалить суперпользователя, введите:

remove-superuser

и введите пароль или хеш SHA-1 пароля (распознается автоматически).

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

Это пример nginx конфигурации.

user root;                            # Вы можете изменить это на «www-data» или на какого-либо другого пользователя.
worker_processes 1;                   # Количество рабочих процессов. 1 должно быть достаточно.
access_log /var/log/nginx/access.log; # Расположение журнала доступа.
error_log /var/log/nginx/error.log;   # Расположение журнала ошибок.

events {
    worker_connections 2048;          # Максимальное количество соединений, которые может обслуживать рабочий процесс.
}

http {
    include      /etc/nginx/mime.types;    # Стандартные типы MIME. НЕ изменять.
    default_type application/octet-stream; # MIME-тип по умолчанию. НЕ изменять.

    # Раскомментируйте следующие строки, чтобы включить SSL (HTTPS).
    # ssl_session_cache   shared:SSL:10m; # Это
    # ssl_session_timeout 5m;             # оптимальные настройки.
    # ssl_prefer_server_ciphers on;       # Вы можете их погуглить
    # ssl_stapling on;                    # если хотите
    # resolver 8.8.8.8;                   # их изменить.

    # Раскомментируйте следующие строки, чтобы включить кэширование в памяти. Вам также придется создать RAMDisk.
    # proxy_cache_path /path/to/ramdisk levels=1:2 keys_zone=ram:10m max_size=1g inactive=3d use_temp_path=off; # Объявление местоположения кэша
    # map $request_uri $nocache { # Отключение кэширования часто изменяемого контента и вызовов API.
    #     default 0;
    #     ~*\.(html|json|rss) 1;
    #     ~*/[a-z0-9_]+/src/.* 1;
    #     ~*/[a-z0-9_]+/? 1;
    #     ~*/[a-z0-9_]+/index\.html 1;
    #     ~*/[a-z0-9_]+/[0-9]+\.(html|json) 1;
    #     /api/* 1;
    #     /misc/* 1;
    #     /action* 1;
    # }

    limit_req_zone $binary_remote_addr zone=req_perip:10m rate=10r/s;       # Не более 10 запросов в секунду для 1 IP.
    limit_req_zone $binary_remote_addr zone=req_perserver:10m rate=1000r/s; # Не более 1000 запросов в секунду для всего сервера.

    limit_conn_zone $binary_remote_addr zone=conn_perip:10m;
    limit_conn_zone $binary_remote_addr zone=conn_perserver:10m;

    upstream backend {                # Использование «балансировки нагрузки» для обеспечения резервного сервера в случае сбоя приложения ololord.js.
        server 127.0.0.1:8080;        # Приложение ololord.js должно прослушивать этот порт.
        server 127.0.0.1:8200 backup; # Если приложение ololord.js недоступно, используется резервный сервер (см. ниже).

        keepalive 1024;               # Поддерживайте до 1024 открытых подключений к ololord.js.
    }

    server {                            # Главный сервер
        listen       80 default_server; # Прослушивайте соединения на стандартном HTTP-порту 80.
        # listen       443 ssl;         # Раскомментируйте эту строку, чтобы включить SSL (HTTPS).
        server_name  yoursite.com www.yoursite.com;

        # Раскомментируйте следующие строки, чтобы включить SSL (HTTPS).
        # ssl_certificate     /etc/nginx/cert/yoursite.crt;             # Укажите путь к вашему SSL-сертификату.
        # ssl_certificate_key /etc/nginx/cert/yoursite.unencrypted.key; # Укажите путь к незашифрованному ключу вашего SSL-сертификата.
        # ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;                    # SSLv2 и SSLv3 не являются безопасными. Вы можете добавлять их на свой страх и риск.
        # ssl_ciphers         "HIGH:!RC4:!aNULL:!MD5:!kEDH";            # Ну, если хотите, можете поискать это в Google.

        limit_req zone=req_perip burst=20;       # Применяем указанные выше ограничения по IP-адресам.
        limit_req zone=req_perserver burst=2000; # Применение глобальных ограничений сервера, заявленных выше.

        limit_conn conn_perip 10;       # Не более 10 одновременных подключений на один IP.
        limit_conn conn_perserver 1000; # Не более 1000 одновременных подключений на весь сервер.No more than 1000 simultaneous connections for the whole server.

        client_max_body_size 50m; # Ограничение размера тела запроса.
        client_body_timeout 2m;   # Ограничение времени передачи тела запроса.
        client_header_timeout 5s; # Ограничение времени передачи заголовков запроса.

        keepalive_timeout 360s;   # Ограничение времени «keep-alive» соединения до 6 минут.

        # Раскомментируйте следующие строки только в том случае, если соответствующие файлы существуют.
        # include /etc/nginx/blocked_ips.conf;
        # include /etc/nginx/block_tor.conf;
        # include /etc/nginx/maintainance.conf;

        location /ws/ {              # Запросы, связанные с WebSocket, передаются непосредственно на бэкэнд.
            if ($maintainanceMode) { # Если установлен флаг обслуживания сервера,
                return 503;          # то вернуть страницу ошибки 503.
            }

            proxy_pass http://backend;                 # Передача запросов на бэкэнд.
            proxy_http_version 1.1;                    # Установка версии HTTP на 1.1 для использования «keep-alive» соединений.
            proxy_set_header Upgrade $http_upgrade;    # Заголовок, связанный с WebSocket.
            proxy_set_header Connection "upgrade";     # Заголовок, связанный с WebSocket.
            proxy_set_header X-Client-IP $remote_addr; # Если этот заголовок не установлен, IP-адреса всегда будут 127.0.0.1.
        }

        location / {                 # Основное место.
            if ($maintainanceMode) { # Если установлен флаг обслуживания сервера,
                 return 503;         # то вернуть страницу ошибки 503.
            }

            proxy_set_header X-Client-IP $remote_addr; # Если этот заголовок не установлен, IP-адреса всегда будут 127.0.0.1.

            # Uncomment the following lines to enable in-memory caching.
            # proxy_cache ram;
            # proxy_cache_valid 200 1h;
            # proxy_no_cache $nocache;
            # proxy_pass http://127.0.0.1:80;

            # Закомментируйте следующие строки, чтобы включить кэширование в памяти.
            root /path/to/ololord.js/public;           # Вам необходимо изменить путь к каталогу «ololord.js/public».
            try_files $uri $uri/index.html @ololord;   # Попытка обслужить статические файлы. Если не найдено, то запрос передается в специальное местоположение.
        }

        location @ololord {                            # Это местоположение передает запрос непосредственно на бэкэнд.
            proxy_http_version 1.1;                    # Установка версии HTTP на 1.1 для использования «keep-alive» соединений.
            proxy_set_header Connection "";
            proxy_set_header X-Client-IP $remote_addr; # Если этот заголовок не установлен, IP-адреса всегда будут 127.0.0.1.
            proxy_pass http://backend;                 # Передаю запрос.
        }

        error_page 503 /503.html;                  # Пользовательская страница ошибки 503. Создайте каталог "ololord.js/public/error" и поместите туда файл "503.html".

        location = /503.html {                     # Специальное место для обслуживания пользовательской страницы ошибки 503.
            root /path/to/ololord.js/public/error; # Вам необходимо изменить путь к каталогу «ololord.js/public/error».
        }
    }

    server {                   # Резервный сервер.
        listen 127.0.0.1:8200; # Локальное прослушивание порта 8200.

        location / {           # Всегда возвращает пользовательскую страницу ошибки 503, если основной сервер не работает.
            return 503;
        }

        error_page 503 /503.html; # См. описание объявления пользовательской страницы ошибок выше.

        location = /503.html {
            root /ololord.js/public/error;
        }
    }

    # Раскомментируйте следующие строки, чтобы включить кэширование в памяти.
    # server {                 # Специальный прокси-сервер для включения кэширования в памяти.
    #     listen 127.0.0.1:80; # Локальное прослушивание порта 8200.

    #     location / {                                 # Основное местоположение кэширующего прокси-сервера.
    #         internal;                                # Местоположение доступно только внутри компании.
    #         root /path/to/ololord.js/public;         # Вам необходимо изменить путь к каталогу «ololord.js/public».
    #         try_files $uri $uri/index.html @ololord; # Попытка обслужить статические файлы. Если не найдено, то запрос передается в специальное местоположение.
    #     }

    #      location @ololord {                           # Это местоположение передает запрос непосредственно на бэкэнд.
    #         proxy_http_version 1.1;                    # Установка версии HTTP на 1.1 для использования «keep-alive» соединений.
    #         proxy_set_header Connection "";
    #         proxy_set_header X-Client-IP $remote_addr; # Если этот заголовок не установлен, IP-адреса всегда будут 127.0.0.1.
    #         proxy_pass http://backend;                 # Передаю запрос.
    #      }
    # }
}

Включение SSL (HTTPS)

Вы можете перейти на https://www.startssl.com/, чтобы получить бесплатный сертификат SSL. Вам нужно будет подтвердить свой сайт, а затем запросить сертификат. Не забудьте раскомментировать соответствующие строки в файле конфигурации.
Незашифрованный ключ сертификата можно создать из зашифрованного с помощью следующей команды:
openssl rsa -in /path/to/encrypted/key -out /path/to/new/unencrypted/key
Подробнее о настройке nginx можно прачитать здесь — I.7. nginx configuration

См. также

Тумбач
Оллчан
Ololord (C++)




Wakaba mark1x1.png
Тир движков
SSS
Instant 0chanМишаба
SS
MakabaVichan
S
TinyIBChieftainDoushioKotoba
A
FoolFuuka
B
1chan engineBakabaTinyboardNorthboardХанабира
C
Ololord.jsOlolordErlachFrikichanMonabaNeboardOrphereus
D
ExabaKusaba XLinabaOchoba
E
WakabaPhalcabaFutabaFutallabyДвижок freeport7Зептоборда
F
KusabaАтта