Installation von Tiny Tiny RSS: Unterschied zwischen den Versionen

Aus
(→‎PHP konfigurieren: open_basedir, sanity_check)
Zeile 10: Zeile 10:


=== PHP konfigurieren ===
=== PHP konfigurieren ===
Die Software verlangt, daß ''[http://php.net/manual/en/ini.core.php#ini.open-basedir open_basedir]'' leer ist. Sollte das nicht möglich sein, ist es theoretisch machbar, ''open_basedir'' pro Pfad zu setzen. (Wer mehr weiß, [http://www.synology-forum.de/showthread.html?36308-PHP-open_basedir&p=296692&viewfull=1#post296692 sagt Bescheid]).
Die Software verlangt, daß ''[http://php.net/manual/en/ini.core.php#ini.open-basedir open_basedir]'' auf ''none'' gesetzt ist. Sollte das nicht möglich sein, ist es theoretisch machbar, ''open_basedir'' pro Pfad zu setzen. (Wer mehr weiß, [http://www.synology-forum.de/showthread.html?36308-PHP-open_basedir&p=296692&viewfull=1#post296692 sagt Bescheid]).<br />
Auf der anderen Seite ist das ein etwas obskures Verlangen, da nicht völlig klar ist, was genau bei einem nichtleeren ''open_basedir'' bricht, vgl. [http://tt-rss.org/forum/viewtopic.php?f=1&t=1297 hier]. Es ist daher auch möglich, die Zeilen
<pre>
if (ini_get("open_basedir")) {
  array_push($errors, "PHP configuration option open_basedir is not supported. Please disable this in PHP settings file (php.ini).");
}
</pre>
in der Datei ''include/sanity_check.php'' zu löschen bzw. auszukommentieren. Eventuell lehnt der Programmierer dann aber Support-Anfragen ab.


Soll der [[#daemon|''Update daemon'' ausgeführt]] werden, muß die PHP-Konfiguration geändert werden. Eine Lösung ist, die Option ''PHP safe_mode_exec_dir-Zugriffsbeschränkung'' abzuwählen. Das sollte keine Sicherheitslücken öffnen (vgl. [http://stackoverflow.com/questions/9763531/where-is-the-security-in-php-5-4-by-removing-safe-mode] und [http://stackoverflow.com/questions/4886912/when-or-for-what-reasons-should-folks-turn-php-safemode-on-off]), und der [http://www.php.net/manual/en/ini.sect.safe-mode.php Safe Mode] ist in der PHP 5.4 sowieso nicht mehr vorhanden (Wer mehr weiß, [http://www.synology-forum.de/showthread.html?36308-PHP-open_basedir&p=296695&viewfull=1#post296695 sagt Bescheid]).
Soll der [[#daemon|''Update daemon'' ausgeführt]] werden, muß die PHP-Konfiguration geändert werden. Eine Lösung ist, die Option ''PHP safe_mode_exec_dir-Zugriffsbeschränkung'' abzuwählen. Das sollte keine Sicherheitslücken öffnen (vgl. [http://stackoverflow.com/questions/9763531/where-is-the-security-in-php-5-4-by-removing-safe-mode] und [http://stackoverflow.com/questions/4886912/when-or-for-what-reasons-should-folks-turn-php-safemode-on-off]), und der [http://www.php.net/manual/en/ini.sect.safe-mode.php Safe Mode] ist in der PHP 5.4 sowieso nicht mehr vorhanden (Wer mehr weiß, [http://www.synology-forum.de/showthread.html?36308-PHP-open_basedir&p=296695&viewfull=1#post296695 sagt Bescheid]).

Version vom 17. März 2013, 19:21 Uhr

Tiny Tiny RSS ist ein server-basierter Feedreader, vergleichbar mit dem (bald eingestellten) Google Reader, aber die Daten bleiben daheim. Neben einer AJAX-Weboberfläche (hier in Aktion zu sehen), die auch auf mobile Geräte angepasst werden kann (es gibt dafür auch einen Android Client) gibt auch ein API, mit dem Informationen über die abonnierten Feeds auch externen Anwendungen zur Verfügung stehen (wird vom Linux-Feedreader Liferea zum Synchronisieren der Datenbestände genutzt).

Dieser Artikel beschreibt, wie es auf einer DiskStation installiert und (basis-)konfiguriert werden kann. Es muß ein root-Zugang zur Kommandozeile bestehen. Die Anleitung bezieht sich auf die Version 1.6.2 von Tiny Tiny RSS, und DSM Version 4.1 mit PHP 5.3.x.

Vorarbeiten auf der DS

Webserver und Datenbank aktivieren

Sowohl die Web Station als auch MySQL müssen aktiviert werden. Tiny Tiny RSS akzeptiert auch PostgreSQL als Datenbank, worauf hier aber nicht eingegangen wird.

PHP konfigurieren

Die Software verlangt, daß open_basedir auf none gesetzt ist. Sollte das nicht möglich sein, ist es theoretisch machbar, open_basedir pro Pfad zu setzen. (Wer mehr weiß, sagt Bescheid).
Auf der anderen Seite ist das ein etwas obskures Verlangen, da nicht völlig klar ist, was genau bei einem nichtleeren open_basedir bricht, vgl. hier. Es ist daher auch möglich, die Zeilen

if (ini_get("open_basedir")) {
   array_push($errors, "PHP configuration option open_basedir is not supported. Please disable this in PHP settings file (php.ini).");
}

in der Datei include/sanity_check.php zu löschen bzw. auszukommentieren. Eventuell lehnt der Programmierer dann aber Support-Anfragen ab.

Soll der Update daemon ausgeführt werden, muß die PHP-Konfiguration geändert werden. Eine Lösung ist, die Option PHP safe_mode_exec_dir-Zugriffsbeschränkung abzuwählen. Das sollte keine Sicherheitslücken öffnen (vgl. [1] und [2]), und der Safe Mode ist in der PHP 5.4 sowieso nicht mehr vorhanden (Wer mehr weiß, sagt Bescheid).

Sollte Abwählen nicht möglich sein, muß auf der Kommandozeile mit root-Rechten folgendes ausgeführt werden:

$ ln -s /usr/bin/php /usr/syno/bin/php

Hintergrund ist, das /usr/syno/bin das voreingestellte safe_mode_exec_dir ist, vgl. auch die Ausgabe der PHP-Funktion phpinfo().

Beispielhafte PHP Konfiguration in der Weboberfläche

Tiny Tiny RSS konfigurieren

Im folgenden wird davon ausgegangen, das Tiny Tiny RSS in den Ordner /var/services/web/ttrss entpackt worden ist. Das geht zum Beispiel mit

$ cd /tmp
$ wget http://tt-rss.org/download/tt-rss-1.6.2.tar.gz
$ tar -xf tt-rss-1.6.2.tar.gz -C /var/services/web
$ mv /var/services/web/tt-rss-1.6.2 /var/services/web/ttrss

Für den folgenden Teil steht auch ein Installationsskript zur Verfügung.

Datenbank erstellen

Es muß eine Datenbank angelegt und das sich im Unterverzeichnis schema/ttrss_schema_mysql.sql befindende Schema installiert werden. Wie das geht, beschreibt dieser Artikel.

Die weitere Konfiguration erfordert, daß ein MySQL-Nutzer und dessen Passwort in die Datei config.php gespeichert werden. Alle Benutzer der DiskStation müssen diese Datei lesen können. Daher empfiehlt es sich, zum Zugriff auf die angelegte Datenbank nicht den root-Account von MySQL zu benutzen, sondern einen eigenen MySQL-Nutzer anzulegen, der die nötigsten Privilegien hat. Details dazu ebenfalls hier.

Schreibrechte

Der Nutzer nobody (auf der DiskStation/Linux, nicht in MySQL) braucht Schreibrechte auf die Verzeichnisse lock/, cache/, feed-icons/, cache/export/, cache/images/, cache/magpie/, cache/simplepie/. Dazu einfach auf der Shell

for dir in "lock" "cache" "feed-icons" "cache/export" "cache/images" "cache/magpie" "cache/simplepie"; do
	chown nobody:nobody "$dir";
done

ausführen.

Erstellen von config.php

Die Datei config.php-dist muß in config.php umbenannt werden. Bei den darin definierten PHP-Konstanten 'DB_TYPE', 'DB_USER', 'DB_NAME', 'DB_PASS' und 'SELF_URL_PATH' müssen mit einem Texteditor die richtigen Werte eingetragen werden. Ist die angelegte Datenbank db und der darauf zugreifende MySQL-Nutzer user mit dem Passwort pass, muß in der Datei folgendes eingetragen sein:

	define('DB_TYPE', "mysql");
	define('DB_HOST', "localhost");
	define('DB_USER', "user");
	define('DB_NAME', "db");
	define('DB_PASS', "pass");

('DB_HOST' bleibt unverändert). Bei 'SELF_URL_PATH' muß die URL eingetragen werden, unter der Tiny Tiny RSS aufgerufen wird. Das sind z.B. http://192.168.178.56/ttrss (hier hat die DiskStation die Adresse 192.168.178.56) oder http://subdomain.dnsdyn.co.uk/ttrss. Für Erreichbarkeit von außerhalb des eigenen Netzwerks siehe hier.

Updating Feeds

Tiny Tiny RSS sollte jetzt per Browser erreichbar sein. Damit es installierte Feeds abfragen kann, muß entweder ein mitgelieferter Update daemon gestartet oder ein cronjob eingetragen werden. Empfohlen (und auch machbar) ist die Methode mit dem daemon.

daemon

Wichtig: Damit es funktioniert, muß PHP konfiguriert sein, denn der daemon muß php ausführen. Der daemon wird so gestartet:

$ su -m nobody -c "(trap '' SIGHUP SIGINT SIGQUIT && /usr/bin/php /var/services/web/ttrss/update.php -daemon > /dev/null 2>&1) &"

Da dieser Befehl nach jedem Neustart der DS ausgeführt werden muß, bietet sich ein Start-Stop-Skript an. Hierbei gibt es die kleine Schwierigkeit, daß der Nutzer nobody beim Booten keine Befehle ausführen kann, weshalb ein kleiner Umweg nötig ist (wer mehr weiß, sagt Bescheid). Das Skript sollte in /usr/local/etc/rc.d/ gespeichert und mit chmod 755 ausführbar gemacht werden.

#!/bin/sh
#
# starts "Tiny Tiny Rss"ses update daemon
# put it into /usr/local/etc/rc.d/
# chmod 755 on it

getPID ()
{
	ps|grep "/usr/bin/php /var/services/web/ttrss/update.php -daemon"|grep -v grep|awk '{print $1}'
	return $?
}

start_daemon () {
	su -m nobody -c "(trap '' SIGHUP SIGINT SIGQUIT && /usr/bin/php /var/services/web/ttrss/update.php -daemon >> /dev/null 2>&1) &"
	return $?
} 

cronLine="*	*	*	*	*	root	"`realpath $0`" cron"

case $1 in
start)
	start_daemon
	stat=`getPID`
	if [ -z "$stat" ]; then
		echo "$cronLine" >> /etc/crontab
		/usr/syno/etc/rc.d/S04crond.sh stop
		/usr/syno/etc/rc.d/S04crond.sh start
	fi
	;;
stop)
	kill `getPID`
	;;
cron)
	stat=`getPID`
	if [ -z "$stat" ]; then
		start_daemon
	fi
	sed -i -e "\\%$cronLine% d" /etc/crontab
	/usr/syno/etc/rc.d/S04crond.sh stop
	/usr/syno/etc/rc.d/S04crond.sh start
	;;
*)
	echo "Wrong argument. Usage: $0 start|stop"
	;;
esac

cron

Im cronjob muß der Befehl

su -m nobody -c "cd /var/services/web/ttrss && /usr/bin/php /var/services/web/ttrss/update.php -feeds >/dev/null 2>&1"

ausgeführt werden. Für eine Periode von 20 Minuten wäre das Cron-Präfix

*/20	*	*	*	*

einzutragen. Details über Cron sind hier beschrieben.

Fertig!

Tiny Tiny RSS sollte jetzt ausführbar sein. Die Oberfläche ist dann unter http://AdresseOderIPderDiskStation/ttrss erreichbar und zeigt ein Login-Fenster. Der angelegte default-user heißt admin mit Passwort password (was möglichst bald geändert werden sollte).

Weitere Optionen

Tiny Tiny RSS kann noch weiter erweitert werden, z.B. mit einer Indizierungssoftware, der Unterstützung des push-Protokolls PubSubHubbub oder einer Komprimierung der übertragenen Daten. Details dazu sind in der Datei config.php zu finden (und zu ändern).