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

в 16:14, , рубрики: diy или сделай сам, keenetic, rss, zyxel, ридер, роутер, Сетевые технологии, читалка, метки: , , , , ,

Совсем недавно «корпорация добра» закрыла 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 

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

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

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

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

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

Поробуем открыть адрес http://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 читалку, которая в один прекрасный момент не окажется закрытой по той или иной причине. Кроме того эта читалка работает в многопользовательском режиме, ей можно поделится со своими друзьями.
Не забудьте сменить дефолтный логин в читалке! Приятного чтения.

Автор: RIG

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js