Совсем недавно «корпорация добра» закрыла Google Reader. Тысячи пользователей встали перед выбором читалки RSS лент. Кто то сразу нашел то, что ему по душе, а кто то до сих пор находится в поиске. Но у всех онлайн читалок есть один существенный недостаток — они так же, как и Google Reader могут закрыться в любой момент. Выходом из сложившейся ситуации является установка одной из самых популярных self-hosted читалок — Tiny Tiny RSS (далее tt-rss). Её можно установить на
Для установки необходимо:
- Любой роутер из семейства Zyxel Keenetic с прошивкой V1
- USB флешка, или жесткий диск с интерфейсом USB (предпочтительнее)
Подробнее о прошивках. У роутеров Keeneticесть две серии прошивок V1 и V2 соответственно. Прошивки первой серии примечательны тем, что они позволяет устанавливать пакеты на внешний usb диск/флешку. И реализуется это без прошивки самого роутера! Однако, для второго поколения роутеров Keenetic (Keenetic II/Keenetic Giga II/Keenetic Ultra) прошивка V1 является неофициальной (по ним не осуществляется техническая поддержка). В моем случае имелся роутер Keenetic Giga II, который был прошит прошивкой V1. Прошивку V1 для второго поколения роутеров можно взять тут (ориентироваться по последней дате). Процесс прошивки достаточно прост, для этого в системных настройках роутера нужно зайти в «управление системными файлами» и заменить файл firmware
, скачанным файлом прошивки.
Перейдем к следующему этапу — установке необходимых пакетов. Первоначально необходимо установить пакетный менеджер opkg. Я не буду рассматривать этот процесс, т.к. он достаточно подробно описан на сайте автора, который занимается сборкой этих пакетов, за что ему отдельное спасибо.
Итак, после того как установлен opkg, непосредственно переходим к установке необходимых пакетов. Подключаемся к роутеру по ssh и выполняем следующую команду:
opkg install libiconv-full libmysqlclient libncurses libncursesw libopenssl libpcre libreadline libxml2 lighttpd lighttpd-mod-fastcgi mysql-server php5 php5-cgi php5-mod-ctype php5-mod-dom php5-mod-hash php5-mod-iconv php5-mod-json php5-mod-mbstring php5-mod-mysql php5-mod-session uclibcxx mysql-server php5-mod-json php5-mod-mysql php5-mod-mbstring php5-mod-hash php5-mod-ctype php5-mod-iconv php5-mod-dom
Теперь настроим их. Для настройки необходимо редактировать конфигурационные файлы на USB флешке/диске. Это удобно делать с помощью программы WinSCP (в настройках подключения выбрать SCP протокол).
Настроим lighttpd сервер. В файле
активируем fastcgi модуль, для этого раскомментируем строки: DISK_A1 etc lighttpd.conf
server.modules = (
"mod_fastcgi"
)
Добавляем index.php к списку имен индексных файлов:
index-file.names = ( "index.html", "default.html", "index.htm", "default.htm", "index.php" )
И добавляем mime тип svg для корректного отображения иконок в интерфейсе tt-rss:
mimetype.assign = (
...
".xml" => "text/xml",
".svg" => "image/svg+xml"
)
Раскомментируем следующие строки:
fastcgi.server = (
".php" => (
"localhost" => (
"min-procs" => 1,
"max-procs" => 1,
"max-load-per-proc" => 4,
"socket" => "/media/DISK_A1/system/tmp/php-fastcgi.socket",
"bin-path" => "/media/DISK_A1/system/usr/bin/php-fcgi"
)
)
)
Убираем ограничение на время исполнения php скриптов, для этого редактируем Меняем параметр DISK_A1 etc/php.ini
max_execution_time
, выставив значение 0
.
Настроим автозагрузку http, mysql серверов, и cron-а, который понадобится для автоматического обновления фидов. Это реализуется переименованием скриптов в папке . Для этого выполняем следующие команды: disk_a1 etc/init.d/
mv /media/DISK_A1/system/etc/init.d/K02cron /media/DISK_A1/system/etc/init.d/S02cron
mv /media/DISK_A1/system/etc/init.d/K27mysqld /media/DISK_A1/system/etc/init.d/S27mysqld
mv /media/DISK_A1/system/etc/init.d/K50lighttpd /media/DISK_A1/system/etc/init.d/S50lighttpd
Скачиваем тарбол с официального сайта. Загружаем его в папку
. Это можно сделать например с помощью той же WinSCP. Для распаковки выполняем: DISK_A1 www/
cd /media/DISK_A1/system/www/
tar -xvzf ./Tiny-Tiny-RSS-1.8.tar.gz
rm ./Tiny-Tiny-RSS-1.8.tar.gz
mv /media/DISK_A1/system/www/Tiny-Tiny-RSS-1.8/ /media/DISK_A1/system/www/tt-rss
Перезагружаем роутер для старта всех сервисов. Снова подключаемся к роутеру по ssh. Создадим базу данных с именем mysql
(для пользователя с именем root
). Выполняем команды:
mysql_install_db --datadir=/media/DISK_A1/system/var/mysql --basedir=/media/DISK_A1/system/usr --force
/media/DISK_A1/system/etc/init.d/S27mysqld restart
Меняем пароль доступа к базе:
/media/DISK_A1/system/usr/bin/mysqladmin -u root password "new-password"
Далее вводим:
mysql -u root -p
По запросу вводим пароль, который установили и вводим следующие команды:
create database ttrss;
use ttrss;
source /media/DISK_A1/system/www/tt-rss/schema/ttrss_schema_mysql.sql;
quit;
Для доступа к mysql базе необходимо добавить правило iptables для разрешения lo интерфейса: iptables -I INPUT -i lo -j ACCEPT
. Для автоматического выполнения этой команды при перезагрузке можно добавить эту команду в скрипт автозапуска mysql сервера : DISK_A1 etc/init.d/S27mysqld
case "" in
start)
start
iptables -I INPUT -i lo -j ACCEPT
;;
Перезапускаем mysql сервер:
/media/DISK_A1/system/etc/init.d/S27mysqld restart
Открываем в браузере адрес http://192.168.1.1:81/tt-rss/
где открывается установщик tt-rss:
Заполняем поля как на скриншоте. Жмем test confiduration. Если всё в порядке появятся такие сообщения:
Смело жмем Initialize database. И затем Save configuration.
Поробуем открыть адрес http://192.168.1.1:81/tt-rss/
. Ругается что нельзя запускать от рута. Других пользователей в роутере нет, поэтому отключим эту проверку, и разрешим запуск от имени root. Для этого отредактируем
. В строке DISK_A1 www include/sanity_check.php if (function_exists('posix_getuid') && posix_getuid() == 0) {
устанавливаем posix_getuid() == -1
.
Обновляем страничку в браузере, вводим логин admin, пароль password. Всё, можно пользоваться!
Для обновления фидов добавляем в cron задание, открываем файл и добавляем DISK_A1 etc root
*/30 * * * * /media/DISK_A1/system/usr/bin/php-cgi /media/DISK_A1/system/www/tt-rss/update.php --feeds --quiet
Это команда обновляет фиды каждые 30 минут.
Для доступа к читалке извне необходимо раскомментировать правило iptables в скрипте автозапуска http сервера
: DISK_A1 etc/init.d/S50lighttpd
iptables -A INPUT -p tcp --dport $PORT_F -j ACCEPT
В работе tt-rss на роутере обнаружился досадный баг, который заключается в том, что фиды в кодировке win-1251 не хотят обрабатываться. Для решения этой проблемы можно использовать следующие костыли. В файле
перед DISK_A1 www include/rssfuncs.php
if (!$rss) {
$rss = new FeedParser($feed_data);
$rss->init();
}
добавить (спасибо за совет Star Per с форума):
if (stripos($feed_data, 'encoding="windows-1251"'))
{
$feed_data = str_ireplace(
'encoding="windows-1251"',
'encoding="utf-8"',
iconv(
'CP1251',
'UTF-8',
$feed_data
)
);
}
Таким образом мы получили rss читалку, которая в один прекрасный момент не окажется закрытой по той или иной причине. Кроме того эта читалка работает в многопользовательском режиме, ей можно поделится со своими друзьями.
Не забудьте сменить дефолтный логин в читалке! Приятного чтения.
Автор: RIG