Установка Tiny Tiny RSS на роутер Zyxel Keenetic

Совсем недавно «корпорация добра» закрыла Google Reader. Тысячи пользователей встали перед выбором читалки RSS лент. Кто то сразу нашел то, что ему по душе, а кто то до сих пор находится в поиске. Но у всех онлайн читалок есть один существенный недостаток — они так же, как и Google Reader могут закрыться в любой момент. Выходом из сложившейся ситуации является установка одной из самых популярных self-hosted читалок — Tiny Tiny RSS (далее tt-rss). Её можно установить на VDS сервер, или домашний компьютер. Но за сервер нужно платить, хоть и небольшие, но деньги, а держать всегда включенный ПК (дабы иметь доступ к читалке отовсюду) проблематично. Однако, если у вас трудится роутер Zyxel Keenetic, то 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 сервер. В файле /media/DISK_A1/system/etc/lighttpd/lighttpd.conf активируем fastcgi модуль, для этого раскомментируем строки:

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 скриптов, для этого редактируем /media/DISK_A1/system/etc/php.ini Меняем параметр max_execution_time, выставив значение 0.

Настроим автозагрузку http, mysql серверов, и cron-а, который понадобится для автоматического обновления фидов. Это реализуется переименованием скриптов в папке /media/disk_a1/system/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

Скачиваем тарбол с официального сайта. Загружаем его в папку /media/DISK_A1/system/www/. Это можно сделать например с помощью той же WinSCP. Для распаковки выполняем:

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 сервера /media/DISK_A1/system/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 

Открываем в браузере адрес 192.168.1.1:81/tt-rss/ где открывается установщик tt-rss:



Заполняем поля как на скриншоте. Жмем test confiduration. Если всё в порядке появятся такие сообщения:



Смело жмем Initialize database. И затем Save configuration.

Поробуем открыть адрес 192.168.1.1:81/tt-rss/. Ругается что нельзя запускать от рута. Других пользователей в роутере нет, поэтому отключим эту проверку, и разрешим запуск от имени root. Для этого отредактируем /media/DISK_A1/system/www/tt-rss/include/sanity_check.php. В строке if (function_exists('posix_getuid') && posix_getuid() == 0) { устанавливаем posix_getuid() == -1.

Обновляем страничку в браузере, вводим логин admin, пароль password. Всё, можно пользоваться!

Для обновления фидов добавляем в cron задание, открываем файл /media/DISK_A1/system/etc/crontabs/root и добавляем

*/30  * * * * /media/DISK_A1/system/usr/bin/php-cgi /media/DISK_A1/system/www/tt-rss/update.php --feeds --quiet

Это команда обновляет фиды каждые 30 минут.

Для доступа к читалке извне необходимо раскомментировать правило iptables в скрипте автозапуска http сервера /media/DISK_A1/system/etc/init.d/S50lighttpd:

iptables -A INPUT -p tcp --dport $PORT_F -j ACCEPT

В работе tt-rss на роутере обнаружился досадный баг, который заключается в том, что фиды в кодировке win-1251 не хотят обрабатываться. Для решения этой проблемы можно использовать следующие костыли. В файле /media/DISK_A1/system/www/tt-rss/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 читалку, которая в один прекрасный момент не окажется закрытой по той или иной причине. Кроме того эта читалка работает в многопользовательском режиме, ей можно поделится со своими друзьями.
Не забудьте сменить дефолтный пароль в читалке! Приятного чтения.
  • +21
  • 18,7k
  • 8
Поделиться публикацией

Комментарии 8

    0
    Пробовал ставить на свой Giga, тормозит заметно… В итоге решил vps купить — 100р/месяц не деньги, да и все остальные скрипты туда перенес, только OpenVPN оставил на кинетике.
      0
      На втором поколении кинетиков работает достаточно хорошо т.к. железо у них помощнее. Например проц./оператика у Giga II — 700 МГц/256 Мб, против 384 МГц/64 Мб у Giga.
      0
      А для V2 есть что нибудь подобное? Имею в виду установку пакетов вообще.
        0
        К сожалению, в настоящее время в V2 прошивках установить сторонние пакеты невозможно и вряд ли станет возможным в ближайшем будущем…
        +1
        Боюсь что мой Zyxel Keenetic загнётся от таких нагрузок… А какой заманчивый был заголовок…
          0
          увы… тоже не стану пробовать — не буду железу мешать работать.
          0
          Мой DIR-620 перешитый в Zyxel Keenetic, с прошивкой версии V1.00(BFW.3)D0 21-Июн-2011 22:11 — во время установки opkg ругнулся на дату прошивки сопоставив её с датой скрипта, т.е. я понял это как — факир был пьян и опыт не удался: This script is for firmware later then 10 Nov 2011.
            0
            Насколько я знаю, прошивки Keenetic до 10.11.2011 собраны с другими параметрами gcc, и пакеты из актуального репозитория на них не работают.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.